JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0 v3.0
authorJason Woofenden <jason@jasonwoof.com>
Thu, 4 Nov 2010 05:29:12 +0000 (01:29 -0400)
committerJason Woofenden <jason@jasonwoof.com>
Thu, 4 Nov 2010 05:29:12 +0000 (01:29 -0400)
664 files changed:
.htaccess [new file with mode: 0644]
CHANGES.html [new file with mode: 0644]
INSTALL.html [new file with mode: 0644]
LICENSE.html [new file with mode: 0644]
_samples/ajax.html [new file with mode: 0644]
_samples/api_dialog.html [new file with mode: 0644]
_samples/api_dialog/my_dialog.js [new file with mode: 0644]
_samples/divreplace.html [new file with mode: 0644]
_samples/enterkey.html [new file with mode: 0644]
_samples/index.html [new file with mode: 0644]
_samples/replacebyclass.html [new file with mode: 0644]
_samples/replacebycode.html [new file with mode: 0644]
_samples/sample.css [new file with mode: 0644]
_samples/sample.js [new file with mode: 0644]
_samples/sample_posteddata.php [new file with mode: 0644]
_samples/skins.html [new file with mode: 0644]
_samples/ui_color.html [new file with mode: 0644]
_samples/ui_languages.html [new file with mode: 0644]
_source/core/_bootstrap.js [new file with mode: 0644]
_source/core/ajax.js [new file with mode: 0644]
_source/core/ckeditor.js [new file with mode: 0644]
_source/core/ckeditor_base.js [new file with mode: 0644]
_source/core/ckeditor_basic.js [new file with mode: 0644]
_source/core/command.js [new file with mode: 0644]
_source/core/commanddefinition.js [new file with mode: 0644]
_source/core/config.js [new file with mode: 0644]
_source/core/dom.js [new file with mode: 0644]
_source/core/dom/document.js [new file with mode: 0644]
_source/core/dom/documentfragment.js [new file with mode: 0644]
_source/core/dom/domobject.js [new file with mode: 0644]
_source/core/dom/element.js [new file with mode: 0644]
_source/core/dom/elementpath.js [new file with mode: 0644]
_source/core/dom/event.js [new file with mode: 0644]
_source/core/dom/node.js [new file with mode: 0644]
_source/core/dom/nodelist.js [new file with mode: 0644]
_source/core/dom/range.js [new file with mode: 0644]
_source/core/dom/text.js [new file with mode: 0644]
_source/core/dom/walker.js [new file with mode: 0644]
_source/core/dom/window.js [new file with mode: 0644]
_source/core/dtd.js [new file with mode: 0644]
_source/core/editor.js [new file with mode: 0644]
_source/core/editor_basic.js [new file with mode: 0644]
_source/core/env.js [new file with mode: 0644]
_source/core/event.js [new file with mode: 0644]
_source/core/eventInfo.js [new file with mode: 0644]
_source/core/focusmanager.js [new file with mode: 0644]
_source/core/htmlparser.js [new file with mode: 0644]
_source/core/htmlparser/basicwriter.js [new file with mode: 0644]
_source/core/htmlparser/cdata.js [new file with mode: 0644]
_source/core/htmlparser/comment.js [new file with mode: 0644]
_source/core/htmlparser/element.js [new file with mode: 0644]
_source/core/htmlparser/filter.js [new file with mode: 0644]
_source/core/htmlparser/fragment.js [new file with mode: 0644]
_source/core/htmlparser/text.js [new file with mode: 0644]
_source/core/imagecacher.js [new file with mode: 0644]
_source/core/lang.js [new file with mode: 0644]
_source/core/loader.js [new file with mode: 0644]
_source/core/plugindefinition.js [new file with mode: 0644]
_source/core/plugins.js [new file with mode: 0644]
_source/core/resourcemanager.js [new file with mode: 0644]
_source/core/scriptloader.js [new file with mode: 0644]
_source/core/skins.js [new file with mode: 0644]
_source/core/test.js [new file with mode: 0644]
_source/core/themes.js [new file with mode: 0644]
_source/core/tools.js [new file with mode: 0644]
_source/core/ui.js [new file with mode: 0644]
_source/core/xml.js [new file with mode: 0644]
_source/lang/_languages.js [new file with mode: 0644]
_source/lang/_translationstatus.txt [new file with mode: 0644]
_source/lang/af.js [new file with mode: 0644]
_source/lang/ar.js [new file with mode: 0644]
_source/lang/bg.js [new file with mode: 0644]
_source/lang/bn.js [new file with mode: 0644]
_source/lang/bs.js [new file with mode: 0644]
_source/lang/ca.js [new file with mode: 0644]
_source/lang/cs.js [new file with mode: 0644]
_source/lang/da.js [new file with mode: 0644]
_source/lang/de.js [new file with mode: 0644]
_source/lang/el.js [new file with mode: 0644]
_source/lang/en-au.js [new file with mode: 0644]
_source/lang/en-ca.js [new file with mode: 0644]
_source/lang/en-uk.js [new file with mode: 0644]
_source/lang/en.js [new file with mode: 0644]
_source/lang/eo.js [new file with mode: 0644]
_source/lang/es.js [new file with mode: 0644]
_source/lang/et.js [new file with mode: 0644]
_source/lang/eu.js [new file with mode: 0644]
_source/lang/fa.js [new file with mode: 0644]
_source/lang/fi.js [new file with mode: 0644]
_source/lang/fo.js [new file with mode: 0644]
_source/lang/fr-ca.js [new file with mode: 0644]
_source/lang/fr.js [new file with mode: 0644]
_source/lang/gl.js [new file with mode: 0644]
_source/lang/gu.js [new file with mode: 0644]
_source/lang/he.js [new file with mode: 0644]
_source/lang/hi.js [new file with mode: 0644]
_source/lang/hr.js [new file with mode: 0644]
_source/lang/hu.js [new file with mode: 0644]
_source/lang/is.js [new file with mode: 0644]
_source/lang/it.js [new file with mode: 0644]
_source/lang/ja.js [new file with mode: 0644]
_source/lang/km.js [new file with mode: 0644]
_source/lang/ko.js [new file with mode: 0644]
_source/lang/lt.js [new file with mode: 0644]
_source/lang/lv.js [new file with mode: 0644]
_source/lang/mn.js [new file with mode: 0644]
_source/lang/ms.js [new file with mode: 0644]
_source/lang/nb.js [new file with mode: 0644]
_source/lang/nl.js [new file with mode: 0644]
_source/lang/no.js [new file with mode: 0644]
_source/lang/pl.js [new file with mode: 0644]
_source/lang/pt-br.js [new file with mode: 0644]
_source/lang/pt.js [new file with mode: 0644]
_source/lang/ro.js [new file with mode: 0644]
_source/lang/ru.js [new file with mode: 0644]
_source/lang/sk.js [new file with mode: 0644]
_source/lang/sl.js [new file with mode: 0644]
_source/lang/sr-latn.js [new file with mode: 0644]
_source/lang/sr.js [new file with mode: 0644]
_source/lang/sv.js [new file with mode: 0644]
_source/lang/th.js [new file with mode: 0644]
_source/lang/tr.js [new file with mode: 0644]
_source/lang/uk.js [new file with mode: 0644]
_source/lang/vi.js [new file with mode: 0644]
_source/lang/zh-cn.js [new file with mode: 0644]
_source/lang/zh.js [new file with mode: 0644]
_source/plugins/about/dialogs/about.js [new file with mode: 0644]
_source/plugins/about/dialogs/logo_ckeditor.png [new file with mode: 0644]
_source/plugins/about/plugin.js [new file with mode: 0644]
_source/plugins/basicstyles/plugin.js [new file with mode: 0644]
_source/plugins/blockquote/plugin.js [new file with mode: 0644]
_source/plugins/button/plugin.js [new file with mode: 0644]
_source/plugins/clipboard/dialogs/paste.js [new file with mode: 0644]
_source/plugins/clipboard/plugin.js [new file with mode: 0644]
_source/plugins/colorbutton/plugin.js [new file with mode: 0644]
_source/plugins/contextmenu/plugin.js [new file with mode: 0644]
_source/plugins/dialog/dialogDefinition.js [new file with mode: 0644]
_source/plugins/dialog/plugin.js [new file with mode: 0644]
_source/plugins/dialogui/plugin.js [new file with mode: 0644]
_source/plugins/domiterator/plugin.js [new file with mode: 0644]
_source/plugins/editingblock/plugin.js [new file with mode: 0644]
_source/plugins/elementspath/plugin.js [new file with mode: 0644]
_source/plugins/enterkey/plugin.js [new file with mode: 0644]
_source/plugins/entities/plugin.js [new file with mode: 0644]
_source/plugins/fakeobjects/plugin.js [new file with mode: 0644]
_source/plugins/filebrowser/plugin.js [new file with mode: 0644]
_source/plugins/find/dialogs/find.js [new file with mode: 0644]
_source/plugins/find/plugin.js [new file with mode: 0644]
_source/plugins/flash/dialogs/flash.js [new file with mode: 0644]
_source/plugins/flash/images/placeholder.png [new file with mode: 0644]
_source/plugins/flash/plugin.js [new file with mode: 0644]
_source/plugins/floatpanel/plugin.js [new file with mode: 0644]
_source/plugins/font/plugin.js [new file with mode: 0644]
_source/plugins/format/plugin.js [new file with mode: 0644]
_source/plugins/forms/dialogs/button.js [new file with mode: 0644]
_source/plugins/forms/dialogs/checkbox.js [new file with mode: 0644]
_source/plugins/forms/dialogs/form.js [new file with mode: 0644]
_source/plugins/forms/dialogs/hiddenfield.js [new file with mode: 0644]
_source/plugins/forms/dialogs/radio.js [new file with mode: 0644]
_source/plugins/forms/dialogs/select.js [new file with mode: 0644]
_source/plugins/forms/dialogs/textarea.js [new file with mode: 0644]
_source/plugins/forms/dialogs/textfield.js [new file with mode: 0644]
_source/plugins/forms/plugin.js [new file with mode: 0644]
_source/plugins/horizontalrule/plugin.js [new file with mode: 0644]
_source/plugins/htmldataprocessor/plugin.js [new file with mode: 0644]
_source/plugins/htmlwriter/plugin.js [new file with mode: 0644]
_source/plugins/iframedialog/plugin.js [new file with mode: 0644]
_source/plugins/image/dialogs/image.js [new file with mode: 0644]
_source/plugins/image/plugin.js [new file with mode: 0644]
_source/plugins/indent/plugin.js [new file with mode: 0644]
_source/plugins/justify/plugin.js [new file with mode: 0644]
_source/plugins/keystrokes/plugin.js [new file with mode: 0644]
_source/plugins/link/dialogs/anchor.js [new file with mode: 0644]
_source/plugins/link/dialogs/link.js [new file with mode: 0644]
_source/plugins/link/images/anchor.gif [new file with mode: 0644]
_source/plugins/link/plugin.js [new file with mode: 0644]
_source/plugins/list/plugin.js [new file with mode: 0644]
_source/plugins/listblock/plugin.js [new file with mode: 0644]
_source/plugins/maximize/plugin.js [new file with mode: 0644]
_source/plugins/menu/plugin.js [new file with mode: 0644]
_source/plugins/menubutton/plugin.js [new file with mode: 0644]
_source/plugins/newpage/plugin.js [new file with mode: 0644]
_source/plugins/pagebreak/images/pagebreak.gif [new file with mode: 0644]
_source/plugins/pagebreak/plugin.js [new file with mode: 0644]
_source/plugins/panel/plugin.js [new file with mode: 0644]
_source/plugins/panelbutton/plugin.js [new file with mode: 0644]
_source/plugins/pastefromword/dialogs/pastefromword.js [new file with mode: 0644]
_source/plugins/pastefromword/plugin.js [new file with mode: 0644]
_source/plugins/pastetext/dialogs/pastetext.js [new file with mode: 0644]
_source/plugins/pastetext/plugin.js [new file with mode: 0644]
_source/plugins/popup/plugin.js [new file with mode: 0644]
_source/plugins/preview/plugin.js [new file with mode: 0644]
_source/plugins/print/plugin.js [new file with mode: 0644]
_source/plugins/removeformat/plugin.js [new file with mode: 0644]
_source/plugins/resize/plugin.js [new file with mode: 0644]
_source/plugins/richcombo/plugin.js [new file with mode: 0644]
_source/plugins/save/plugin.js [new file with mode: 0644]
_source/plugins/scayt/dialogs/options.js [new file with mode: 0644]
_source/plugins/scayt/dialogs/toolbar.css [new file with mode: 0644]
_source/plugins/scayt/plugin.js [new file with mode: 0644]
_source/plugins/selection/plugin.js [new file with mode: 0644]
_source/plugins/showblocks/images/block_address.png [new file with mode: 0644]
_source/plugins/showblocks/images/block_blockquote.png [new file with mode: 0644]
_source/plugins/showblocks/images/block_div.png [new file with mode: 0644]
_source/plugins/showblocks/images/block_h1.png [new file with mode: 0644]
_source/plugins/showblocks/images/block_h2.png [new file with mode: 0644]
_source/plugins/showblocks/images/block_h3.png [new file with mode: 0644]
_source/plugins/showblocks/images/block_h4.png [new file with mode: 0644]
_source/plugins/showblocks/images/block_h5.png [new file with mode: 0644]
_source/plugins/showblocks/images/block_h6.png [new file with mode: 0644]
_source/plugins/showblocks/images/block_p.png [new file with mode: 0644]
_source/plugins/showblocks/images/block_pre.png [new file with mode: 0644]
_source/plugins/showblocks/plugin.js [new file with mode: 0644]
_source/plugins/smiley/dialogs/smiley.js [new file with mode: 0644]
_source/plugins/smiley/images/angel_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/angry_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/broken_heart.gif [new file with mode: 0644]
_source/plugins/smiley/images/confused_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/cry_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/devil_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/embaressed_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/envelope.gif [new file with mode: 0644]
_source/plugins/smiley/images/heart.gif [new file with mode: 0644]
_source/plugins/smiley/images/kiss.gif [new file with mode: 0644]
_source/plugins/smiley/images/lightbulb.gif [new file with mode: 0644]
_source/plugins/smiley/images/omg_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/regular_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/sad_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/shades_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/teeth_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/thumbs_down.gif [new file with mode: 0644]
_source/plugins/smiley/images/thumbs_up.gif [new file with mode: 0644]
_source/plugins/smiley/images/tounge_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/whatchutalkingabout_smile.gif [new file with mode: 0644]
_source/plugins/smiley/images/wink_smile.gif [new file with mode: 0644]
_source/plugins/smiley/plugin.js [new file with mode: 0644]
_source/plugins/sourcearea/plugin.js [new file with mode: 0644]
_source/plugins/specialchar/dialogs/specialchar.js [new file with mode: 0644]
_source/plugins/specialchar/plugin.js [new file with mode: 0644]
_source/plugins/styles/plugin.js [new file with mode: 0644]
_source/plugins/stylescombo/plugin.js [new file with mode: 0644]
_source/plugins/stylescombo/styles/default.js [new file with mode: 0644]
_source/plugins/tab/plugin.js [new file with mode: 0644]
_source/plugins/table/dialogs/table.js [new file with mode: 0644]
_source/plugins/table/plugin.js [new file with mode: 0644]
_source/plugins/tabletools/dialogs/tableCell.js [new file with mode: 0644]
_source/plugins/tabletools/plugin.js [new file with mode: 0644]
_source/plugins/templates/dialogs/templates.js [new file with mode: 0644]
_source/plugins/templates/plugin.js [new file with mode: 0644]
_source/plugins/templates/templates/default.js [new file with mode: 0644]
_source/plugins/templates/templates/images/template1.gif [new file with mode: 0644]
_source/plugins/templates/templates/images/template2.gif [new file with mode: 0644]
_source/plugins/templates/templates/images/template3.gif [new file with mode: 0644]
_source/plugins/toolbar/plugin.js [new file with mode: 0644]
_source/plugins/uicolor/dialogs/uicolor.js [new file with mode: 0644]
_source/plugins/uicolor/lang/en.js [new file with mode: 0644]
_source/plugins/uicolor/plugin.js [new file with mode: 0644]
_source/plugins/uicolor/uicolor.gif [new file with mode: 0644]
_source/plugins/uicolor/yui/assets/hue_bg.png [new file with mode: 0644]
_source/plugins/uicolor/yui/assets/hue_thumb.png [new file with mode: 0644]
_source/plugins/uicolor/yui/assets/picker_mask.png [new file with mode: 0644]
_source/plugins/uicolor/yui/assets/picker_thumb.png [new file with mode: 0644]
_source/plugins/uicolor/yui/assets/yui.css [new file with mode: 0644]
_source/plugins/uicolor/yui/yui.js [new file with mode: 0644]
_source/plugins/undo/plugin.js [new file with mode: 0644]
_source/plugins/wsc/dialogs/ciframe.html [new file with mode: 0644]
_source/plugins/wsc/dialogs/tmpFrameset.html [new file with mode: 0644]
_source/plugins/wsc/dialogs/wsc.css [new file with mode: 0644]
_source/plugins/wsc/dialogs/wsc.js [new file with mode: 0644]
_source/plugins/wsc/plugin.js [new file with mode: 0644]
_source/plugins/wysiwygarea/plugin.js [new file with mode: 0644]
_source/skins/kama/dialog.css [new file with mode: 0644]
_source/skins/kama/editor.css [new file with mode: 0644]
_source/skins/kama/elementspath.css [new file with mode: 0644]
_source/skins/kama/icons.css [new file with mode: 0644]
_source/skins/kama/icons.png [new file with mode: 0644]
_source/skins/kama/images/dialog_sides.gif [new file with mode: 0644]
_source/skins/kama/images/dialog_sides.png [new file with mode: 0644]
_source/skins/kama/images/dialog_sides_rtl.png [new file with mode: 0644]
_source/skins/kama/images/mini.gif [new file with mode: 0644]
_source/skins/kama/images/noimage.png [new file with mode: 0644]
_source/skins/kama/images/sprites.png [new file with mode: 0644]
_source/skins/kama/images/sprites_ie6.png [new file with mode: 0644]
_source/skins/kama/images/toolbar_start.gif [new file with mode: 0644]
_source/skins/kama/mainui.css [new file with mode: 0644]
_source/skins/kama/menu.css [new file with mode: 0644]
_source/skins/kama/panel.css [new file with mode: 0644]
_source/skins/kama/presets.css [new file with mode: 0644]
_source/skins/kama/reset.css [new file with mode: 0644]
_source/skins/kama/richcombo.css [new file with mode: 0644]
_source/skins/kama/skin.js [new file with mode: 0644]
_source/skins/kama/templates.css [new file with mode: 0644]
_source/skins/kama/toolbar.css [new file with mode: 0644]
_source/skins/office2003/dialog.css [new file with mode: 0644]
_source/skins/office2003/editor.css [new file with mode: 0644]
_source/skins/office2003/elementspath.css [new file with mode: 0644]
_source/skins/office2003/icons.css [new file with mode: 0644]
_source/skins/office2003/icons.png [new file with mode: 0644]
_source/skins/office2003/images/dialog_sides.gif [new file with mode: 0644]
_source/skins/office2003/images/dialog_sides.png [new file with mode: 0644]
_source/skins/office2003/images/dialog_sides_rtl.png [new file with mode: 0644]
_source/skins/office2003/images/mini.gif [new file with mode: 0644]
_source/skins/office2003/images/noimage.png [new file with mode: 0644]
_source/skins/office2003/images/sprites.png [new file with mode: 0644]
_source/skins/office2003/images/sprites_ie6.png [new file with mode: 0644]
_source/skins/office2003/mainui.css [new file with mode: 0644]
_source/skins/office2003/menu.css [new file with mode: 0644]
_source/skins/office2003/panel.css [new file with mode: 0644]
_source/skins/office2003/presets.css [new file with mode: 0644]
_source/skins/office2003/reset.css [new file with mode: 0644]
_source/skins/office2003/richcombo.css [new file with mode: 0644]
_source/skins/office2003/skin.js [new file with mode: 0644]
_source/skins/office2003/templates.css [new file with mode: 0644]
_source/skins/office2003/toolbar.css [new file with mode: 0644]
_source/skins/v2/dialog.css [new file with mode: 0644]
_source/skins/v2/editor.css [new file with mode: 0644]
_source/skins/v2/elementspath.css [new file with mode: 0644]
_source/skins/v2/icons.css [new file with mode: 0644]
_source/skins/v2/icons.png [new file with mode: 0644]
_source/skins/v2/images/dialog_sides.gif [new file with mode: 0644]
_source/skins/v2/images/dialog_sides.png [new file with mode: 0644]
_source/skins/v2/images/dialog_sides_rtl.png [new file with mode: 0644]
_source/skins/v2/images/mini.gif [new file with mode: 0644]
_source/skins/v2/images/noimage.png [new file with mode: 0644]
_source/skins/v2/images/sprites.png [new file with mode: 0644]
_source/skins/v2/images/sprites_ie6.png [new file with mode: 0644]
_source/skins/v2/images/toolbar_start.gif [new file with mode: 0644]
_source/skins/v2/mainui.css [new file with mode: 0644]
_source/skins/v2/menu.css [new file with mode: 0644]
_source/skins/v2/panel.css [new file with mode: 0644]
_source/skins/v2/presets.css [new file with mode: 0644]
_source/skins/v2/reset.css [new file with mode: 0644]
_source/skins/v2/richcombo.css [new file with mode: 0644]
_source/skins/v2/skin.js [new file with mode: 0644]
_source/skins/v2/templates.css [new file with mode: 0644]
_source/skins/v2/toolbar.css [new file with mode: 0644]
_source/tests/_assets/sample.css [new file with mode: 0644]
_source/tests/_assets/sample.js [new file with mode: 0644]
_source/tests/_assets/sample.txt [new file with mode: 0644]
_source/tests/_assets/sample.xml [new file with mode: 0644]
_source/tests/_assets/sample_xml.txt [new file with mode: 0644]
_source/tests/core/_editor/custom_config_1.js [new file with mode: 0644]
_source/tests/core/_editor/custom_config_2.js [new file with mode: 0644]
_source/tests/core/ajax.html [new file with mode: 0644]
_source/tests/core/bootstrap.html [new file with mode: 0644]
_source/tests/core/ckeditor.html [new file with mode: 0644]
_source/tests/core/dom/document.html [new file with mode: 0644]
_source/tests/core/dom/documentfragment.html [new file with mode: 0644]
_source/tests/core/dom/element.html [new file with mode: 0644]
_source/tests/core/dom/node.html [new file with mode: 0644]
_source/tests/core/dom/range.html [new file with mode: 0644]
_source/tests/core/dom/text.html [new file with mode: 0644]
_source/tests/core/dom/walker.html [new file with mode: 0644]
_source/tests/core/dom/window.html [new file with mode: 0644]
_source/tests/core/editor.html [new file with mode: 0644]
_source/tests/core/env.html [new file with mode: 0644]
_source/tests/core/event.html [new file with mode: 0644]
_source/tests/core/htmlparser/fragment.html [new file with mode: 0644]
_source/tests/core/htmlparser/htmlparser.html [new file with mode: 0644]
_source/tests/core/plugins.html [new file with mode: 0644]
_source/tests/core/plugins/myplugins/sample/my_plugin.js [new file with mode: 0644]
_source/tests/core/scriptloader.html [new file with mode: 0644]
_source/tests/core/tools.html [new file with mode: 0644]
_source/tests/core/xml.html [new file with mode: 0644]
_source/tests/plugins/domiterator/domiterator.html [new file with mode: 0644]
_source/tests/plugins/htmldataprocessor/htmldataprocessor.html [new file with mode: 0644]
_source/tests/plugins/link/link.html [new file with mode: 0644]
_source/tests/plugins/list/list.html [new file with mode: 0644]
_source/tests/plugins/selection/selection.html [new file with mode: 0644]
_source/tests/plugins/styles/styles.html [new file with mode: 0644]
_source/tests/test.css [new file with mode: 0644]
_source/tests/test.js [new file with mode: 0644]
_source/tests/testall.html [new file with mode: 0644]
_source/tests/yuitest.js [new file with mode: 0644]
_source/themes/default/theme.js [new file with mode: 0644]
_tests/_assets/sample.css [new file with mode: 0644]
_tests/_assets/sample.js [new file with mode: 0644]
_tests/_assets/sample.txt [new file with mode: 0644]
_tests/_assets/sample.xml [new file with mode: 0644]
_tests/_assets/sample_xml.txt [new file with mode: 0644]
_tests/core/_editor/custom_config_1.js [new file with mode: 0644]
_tests/core/_editor/custom_config_2.js [new file with mode: 0644]
_tests/core/ajax.html [new file with mode: 0644]
_tests/core/bootstrap.html [new file with mode: 0644]
_tests/core/ckeditor.html [new file with mode: 0644]
_tests/core/dom/document.html [new file with mode: 0644]
_tests/core/dom/documentfragment.html [new file with mode: 0644]
_tests/core/dom/element.html [new file with mode: 0644]
_tests/core/dom/node.html [new file with mode: 0644]
_tests/core/dom/range.html [new file with mode: 0644]
_tests/core/dom/text.html [new file with mode: 0644]
_tests/core/dom/walker.html [new file with mode: 0644]
_tests/core/dom/window.html [new file with mode: 0644]
_tests/core/editor.html [new file with mode: 0644]
_tests/core/env.html [new file with mode: 0644]
_tests/core/event.html [new file with mode: 0644]
_tests/core/htmlparser/fragment.html [new file with mode: 0644]
_tests/core/htmlparser/htmlparser.html [new file with mode: 0644]
_tests/core/plugins.html [new file with mode: 0644]
_tests/core/plugins/myplugins/sample/my_plugin.js [new file with mode: 0644]
_tests/core/scriptloader.html [new file with mode: 0644]
_tests/core/tools.html [new file with mode: 0644]
_tests/core/xml.html [new file with mode: 0644]
_tests/plugins/domiterator/domiterator.html [new file with mode: 0644]
_tests/plugins/htmldataprocessor/htmldataprocessor.html [new file with mode: 0644]
_tests/plugins/link/link.html [new file with mode: 0644]
_tests/plugins/list/list.html [new file with mode: 0644]
_tests/plugins/selection/selection.html [new file with mode: 0644]
_tests/plugins/styles/styles.html [new file with mode: 0644]
_tests/test.css [new file with mode: 0644]
_tests/test.js [new file with mode: 0644]
_tests/testall.html [new file with mode: 0644]
_tests/yuitest.js [new file with mode: 0644]
ckeditor.js [new file with mode: 0644]
ckeditor.pack [new file with mode: 0644]
ckeditor_basic.js [new file with mode: 0644]
ckeditor_basic_source.js [new file with mode: 0644]
ckeditor_source.js [new file with mode: 0644]
config.js [new file with mode: 0644]
contents.css [new file with mode: 0644]
images/spacer.gif [new file with mode: 0644]
lang/_languages.js [new file with mode: 0644]
lang/_translationstatus.txt [new file with mode: 0644]
lang/af.js [new file with mode: 0644]
lang/ar.js [new file with mode: 0644]
lang/bg.js [new file with mode: 0644]
lang/bn.js [new file with mode: 0644]
lang/bs.js [new file with mode: 0644]
lang/ca.js [new file with mode: 0644]
lang/cs.js [new file with mode: 0644]
lang/da.js [new file with mode: 0644]
lang/de.js [new file with mode: 0644]
lang/el.js [new file with mode: 0644]
lang/en-au.js [new file with mode: 0644]
lang/en-ca.js [new file with mode: 0644]
lang/en-uk.js [new file with mode: 0644]
lang/en.js [new file with mode: 0644]
lang/eo.js [new file with mode: 0644]
lang/es.js [new file with mode: 0644]
lang/et.js [new file with mode: 0644]
lang/eu.js [new file with mode: 0644]
lang/fa.js [new file with mode: 0644]
lang/fi.js [new file with mode: 0644]
lang/fo.js [new file with mode: 0644]
lang/fr-ca.js [new file with mode: 0644]
lang/fr.js [new file with mode: 0644]
lang/gl.js [new file with mode: 0644]
lang/gu.js [new file with mode: 0644]
lang/he.js [new file with mode: 0644]
lang/hi.js [new file with mode: 0644]
lang/hr.js [new file with mode: 0644]
lang/hu.js [new file with mode: 0644]
lang/is.js [new file with mode: 0644]
lang/it.js [new file with mode: 0644]
lang/ja.js [new file with mode: 0644]
lang/km.js [new file with mode: 0644]
lang/ko.js [new file with mode: 0644]
lang/lt.js [new file with mode: 0644]
lang/lv.js [new file with mode: 0644]
lang/mn.js [new file with mode: 0644]
lang/ms.js [new file with mode: 0644]
lang/nb.js [new file with mode: 0644]
lang/nl.js [new file with mode: 0644]
lang/no.js [new file with mode: 0644]
lang/pl.js [new file with mode: 0644]
lang/pt-br.js [new file with mode: 0644]
lang/pt.js [new file with mode: 0644]
lang/ro.js [new file with mode: 0644]
lang/ru.js [new file with mode: 0644]
lang/sk.js [new file with mode: 0644]
lang/sl.js [new file with mode: 0644]
lang/sr-latn.js [new file with mode: 0644]
lang/sr.js [new file with mode: 0644]
lang/sv.js [new file with mode: 0644]
lang/th.js [new file with mode: 0644]
lang/tr.js [new file with mode: 0644]
lang/uk.js [new file with mode: 0644]
lang/vi.js [new file with mode: 0644]
lang/zh-cn.js [new file with mode: 0644]
lang/zh.js [new file with mode: 0644]
plugins/about/dialogs/about.js [new file with mode: 0644]
plugins/about/dialogs/logo_ckeditor.png [new file with mode: 0644]
plugins/about/plugin.js [new file with mode: 0644]
plugins/basicstyles/plugin.js [new file with mode: 0644]
plugins/blockquote/plugin.js [new file with mode: 0644]
plugins/button/plugin.js [new file with mode: 0644]
plugins/clipboard/dialogs/paste.js [new file with mode: 0644]
plugins/clipboard/plugin.js [new file with mode: 0644]
plugins/colorbutton/plugin.js [new file with mode: 0644]
plugins/contextmenu/plugin.js [new file with mode: 0644]
plugins/dialog/dialogDefinition.js [new file with mode: 0644]
plugins/dialog/plugin.js [new file with mode: 0644]
plugins/dialogui/plugin.js [new file with mode: 0644]
plugins/domiterator/plugin.js [new file with mode: 0644]
plugins/editingblock/plugin.js [new file with mode: 0644]
plugins/elementspath/plugin.js [new file with mode: 0644]
plugins/enterkey/plugin.js [new file with mode: 0644]
plugins/entities/plugin.js [new file with mode: 0644]
plugins/fakeobjects/plugin.js [new file with mode: 0644]
plugins/filebrowser/plugin.js [new file with mode: 0644]
plugins/find/dialogs/find.js [new file with mode: 0644]
plugins/find/plugin.js [new file with mode: 0644]
plugins/flash/dialogs/flash.js [new file with mode: 0644]
plugins/flash/images/placeholder.png [new file with mode: 0644]
plugins/flash/plugin.js [new file with mode: 0644]
plugins/floatpanel/plugin.js [new file with mode: 0644]
plugins/font/plugin.js [new file with mode: 0644]
plugins/format/plugin.js [new file with mode: 0644]
plugins/forms/dialogs/button.js [new file with mode: 0644]
plugins/forms/dialogs/checkbox.js [new file with mode: 0644]
plugins/forms/dialogs/form.js [new file with mode: 0644]
plugins/forms/dialogs/hiddenfield.js [new file with mode: 0644]
plugins/forms/dialogs/radio.js [new file with mode: 0644]
plugins/forms/dialogs/select.js [new file with mode: 0644]
plugins/forms/dialogs/textarea.js [new file with mode: 0644]
plugins/forms/dialogs/textfield.js [new file with mode: 0644]
plugins/forms/plugin.js [new file with mode: 0644]
plugins/horizontalrule/plugin.js [new file with mode: 0644]
plugins/htmldataprocessor/plugin.js [new file with mode: 0644]
plugins/htmlwriter/plugin.js [new file with mode: 0644]
plugins/iframedialog/plugin.js [new file with mode: 0644]
plugins/image/dialogs/image.js [new file with mode: 0644]
plugins/image/plugin.js [new file with mode: 0644]
plugins/indent/plugin.js [new file with mode: 0644]
plugins/justify/plugin.js [new file with mode: 0644]
plugins/keystrokes/plugin.js [new file with mode: 0644]
plugins/link/dialogs/anchor.js [new file with mode: 0644]
plugins/link/dialogs/link.js [new file with mode: 0644]
plugins/link/images/anchor.gif [new file with mode: 0644]
plugins/link/plugin.js [new file with mode: 0644]
plugins/list/plugin.js [new file with mode: 0644]
plugins/listblock/plugin.js [new file with mode: 0644]
plugins/maximize/plugin.js [new file with mode: 0644]
plugins/menu/plugin.js [new file with mode: 0644]
plugins/menubutton/plugin.js [new file with mode: 0644]
plugins/newpage/plugin.js [new file with mode: 0644]
plugins/pagebreak/images/pagebreak.gif [new file with mode: 0644]
plugins/pagebreak/plugin.js [new file with mode: 0644]
plugins/panel/plugin.js [new file with mode: 0644]
plugins/panelbutton/plugin.js [new file with mode: 0644]
plugins/pastefromword/dialogs/pastefromword.js [new file with mode: 0644]
plugins/pastefromword/plugin.js [new file with mode: 0644]
plugins/pastetext/dialogs/pastetext.js [new file with mode: 0644]
plugins/pastetext/plugin.js [new file with mode: 0644]
plugins/popup/plugin.js [new file with mode: 0644]
plugins/preview/plugin.js [new file with mode: 0644]
plugins/print/plugin.js [new file with mode: 0644]
plugins/removeformat/plugin.js [new file with mode: 0644]
plugins/resize/plugin.js [new file with mode: 0644]
plugins/richcombo/plugin.js [new file with mode: 0644]
plugins/save/plugin.js [new file with mode: 0644]
plugins/scayt/dialogs/options.js [new file with mode: 0644]
plugins/scayt/dialogs/toolbar.css [new file with mode: 0644]
plugins/scayt/plugin.js [new file with mode: 0644]
plugins/selection/plugin.js [new file with mode: 0644]
plugins/showblocks/images/block_address.png [new file with mode: 0644]
plugins/showblocks/images/block_blockquote.png [new file with mode: 0644]
plugins/showblocks/images/block_div.png [new file with mode: 0644]
plugins/showblocks/images/block_h1.png [new file with mode: 0644]
plugins/showblocks/images/block_h2.png [new file with mode: 0644]
plugins/showblocks/images/block_h3.png [new file with mode: 0644]
plugins/showblocks/images/block_h4.png [new file with mode: 0644]
plugins/showblocks/images/block_h5.png [new file with mode: 0644]
plugins/showblocks/images/block_h6.png [new file with mode: 0644]
plugins/showblocks/images/block_p.png [new file with mode: 0644]
plugins/showblocks/images/block_pre.png [new file with mode: 0644]
plugins/showblocks/plugin.js [new file with mode: 0644]
plugins/smiley/dialogs/smiley.js [new file with mode: 0644]
plugins/smiley/images/angel_smile.gif [new file with mode: 0644]
plugins/smiley/images/angry_smile.gif [new file with mode: 0644]
plugins/smiley/images/broken_heart.gif [new file with mode: 0644]
plugins/smiley/images/confused_smile.gif [new file with mode: 0644]
plugins/smiley/images/cry_smile.gif [new file with mode: 0644]
plugins/smiley/images/devil_smile.gif [new file with mode: 0644]
plugins/smiley/images/embaressed_smile.gif [new file with mode: 0644]
plugins/smiley/images/envelope.gif [new file with mode: 0644]
plugins/smiley/images/heart.gif [new file with mode: 0644]
plugins/smiley/images/kiss.gif [new file with mode: 0644]
plugins/smiley/images/lightbulb.gif [new file with mode: 0644]
plugins/smiley/images/omg_smile.gif [new file with mode: 0644]
plugins/smiley/images/regular_smile.gif [new file with mode: 0644]
plugins/smiley/images/sad_smile.gif [new file with mode: 0644]
plugins/smiley/images/shades_smile.gif [new file with mode: 0644]
plugins/smiley/images/teeth_smile.gif [new file with mode: 0644]
plugins/smiley/images/thumbs_down.gif [new file with mode: 0644]
plugins/smiley/images/thumbs_up.gif [new file with mode: 0644]
plugins/smiley/images/tounge_smile.gif [new file with mode: 0644]
plugins/smiley/images/whatchutalkingabout_smile.gif [new file with mode: 0644]
plugins/smiley/images/wink_smile.gif [new file with mode: 0644]
plugins/smiley/plugin.js [new file with mode: 0644]
plugins/sourcearea/plugin.js [new file with mode: 0644]
plugins/specialchar/dialogs/specialchar.js [new file with mode: 0644]
plugins/specialchar/plugin.js [new file with mode: 0644]
plugins/styles/plugin.js [new file with mode: 0644]
plugins/stylescombo/plugin.js [new file with mode: 0644]
plugins/stylescombo/styles/default.js [new file with mode: 0644]
plugins/tab/plugin.js [new file with mode: 0644]
plugins/table/dialogs/table.js [new file with mode: 0644]
plugins/table/plugin.js [new file with mode: 0644]
plugins/tabletools/dialogs/tableCell.js [new file with mode: 0644]
plugins/tabletools/plugin.js [new file with mode: 0644]
plugins/templates/dialogs/templates.js [new file with mode: 0644]
plugins/templates/plugin.js [new file with mode: 0644]
plugins/templates/templates/default.js [new file with mode: 0644]
plugins/templates/templates/images/template1.gif [new file with mode: 0644]
plugins/templates/templates/images/template2.gif [new file with mode: 0644]
plugins/templates/templates/images/template3.gif [new file with mode: 0644]
plugins/toolbar/plugin.js [new file with mode: 0644]
plugins/uicolor/dialogs/uicolor.js [new file with mode: 0644]
plugins/uicolor/lang/en.js [new file with mode: 0644]
plugins/uicolor/plugin.js [new file with mode: 0644]
plugins/uicolor/uicolor.gif [new file with mode: 0644]
plugins/uicolor/yui/assets/hue_bg.png [new file with mode: 0644]
plugins/uicolor/yui/assets/hue_thumb.png [new file with mode: 0644]
plugins/uicolor/yui/assets/picker_mask.png [new file with mode: 0644]
plugins/uicolor/yui/assets/picker_thumb.png [new file with mode: 0644]
plugins/uicolor/yui/assets/yui.css [new file with mode: 0644]
plugins/uicolor/yui/yui.js [new file with mode: 0644]
plugins/undo/plugin.js [new file with mode: 0644]
plugins/wsc/dialogs/ciframe.html [new file with mode: 0644]
plugins/wsc/dialogs/tmpFrameset.html [new file with mode: 0644]
plugins/wsc/dialogs/wsc.css [new file with mode: 0644]
plugins/wsc/dialogs/wsc.js [new file with mode: 0644]
plugins/wsc/plugin.js [new file with mode: 0644]
plugins/wysiwygarea/plugin.js [new file with mode: 0644]
skins/kama/dialog.css [new file with mode: 0644]
skins/kama/editor.css [new file with mode: 0644]
skins/kama/icons.png [new file with mode: 0644]
skins/kama/images/dialog_sides.gif [new file with mode: 0644]
skins/kama/images/dialog_sides.png [new file with mode: 0644]
skins/kama/images/dialog_sides_rtl.png [new file with mode: 0644]
skins/kama/images/mini.gif [new file with mode: 0644]
skins/kama/images/noimage.png [new file with mode: 0644]
skins/kama/images/sprites.png [new file with mode: 0644]
skins/kama/images/sprites_ie6.png [new file with mode: 0644]
skins/kama/images/toolbar_start.gif [new file with mode: 0644]
skins/kama/skin.js [new file with mode: 0644]
skins/kama/templates.css [new file with mode: 0644]
skins/office2003/dialog.css [new file with mode: 0644]
skins/office2003/editor.css [new file with mode: 0644]
skins/office2003/icons.png [new file with mode: 0644]
skins/office2003/images/dialog_sides.gif [new file with mode: 0644]
skins/office2003/images/dialog_sides.png [new file with mode: 0644]
skins/office2003/images/dialog_sides_rtl.png [new file with mode: 0644]
skins/office2003/images/mini.gif [new file with mode: 0644]
skins/office2003/images/noimage.png [new file with mode: 0644]
skins/office2003/images/sprites.png [new file with mode: 0644]
skins/office2003/images/sprites_ie6.png [new file with mode: 0644]
skins/office2003/skin.js [new file with mode: 0644]
skins/office2003/templates.css [new file with mode: 0644]
skins/v2/dialog.css [new file with mode: 0644]
skins/v2/editor.css [new file with mode: 0644]
skins/v2/icons.png [new file with mode: 0644]
skins/v2/images/dialog_sides.gif [new file with mode: 0644]
skins/v2/images/dialog_sides.png [new file with mode: 0644]
skins/v2/images/dialog_sides_rtl.png [new file with mode: 0644]
skins/v2/images/mini.gif [new file with mode: 0644]
skins/v2/images/noimage.png [new file with mode: 0644]
skins/v2/images/sprites.png [new file with mode: 0644]
skins/v2/images/sprites_ie6.png [new file with mode: 0644]
skins/v2/images/toolbar_start.gif [new file with mode: 0644]
skins/v2/skin.js [new file with mode: 0644]
skins/v2/templates.css [new file with mode: 0644]
themes/default/theme.js [new file with mode: 0644]

diff --git a/.htaccess b/.htaccess
new file mode 100644 (file)
index 0000000..7644c32
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,24 @@
+#\r
+# Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+# For licensing, see LICENSE.html or http://ckeditor.com/license\r
+#\r
+\r
+#\r
+# On some specific Linux installations you could face problems with Firefox.\r
+# It could give you errors when loading the editor saying that some illegal\r
+# characters were found (three strange chars in the beginning of the file).\r
+# This could happen if you map the .js or .css files to PHP, for example.\r
+#\r
+# Those characters are the Byte Order Mask (BOM) of the Unicode encoded files.\r
+# All FCKeditor files are Unicode encoded.\r
+#\r
+\r
+AddType application/x-javascript .js\r
+AddType text/css .css\r
+\r
+#\r
+# If PHP is mapped to handle XML files, you could have some issues. The\r
+# following will disable it.\r
+#\r
+\r
+AddType text/xml .xml\r
diff --git a/CHANGES.html b/CHANGES.html
new file mode 100644 (file)
index 0000000..859c2cb
--- /dev/null
@@ -0,0 +1,254 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Changelog - CKEditor</title>\r
+       <meta http-equiv="content-type" content="text/html; charset=utf-8" />\r
+       <style type="text/css">\r
+\r
+#footer hr\r
+{\r
+       margin: 10px 0 15px 0;\r
+       height: 1px;\r
+       border: solid 1px gray;\r
+       border-bottom: none;\r
+}\r
+\r
+#footer p\r
+{\r
+       margin: 0 10px 10px 10px;\r
+       float: left;\r
+}\r
+\r
+#footer #copy\r
+{\r
+       float: right;\r
+}\r
+\r
+       </style>\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Changelog\r
+       </h1>\r
+       <h3>\r
+               CKEditor 3.0</h3>\r
+       <p>\r
+               New features:</p>\r
+       <ul>\r
+       <li><a href="http://dev.fckeditor.net/ticket/3188">#3188</a> : Introduce\r
+               &lt;pre&gt; formatting feature when converting from other blocks.</li>\r
+       </ul>\r
+       <p>\r
+               Fixed issues:</p>\r
+       <ul>\r
+               <li><a href="http://dev.fckeditor.net/ticket/2856">#2856</a> : Fixed problem with inches in Paste From Word plugin.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3929">#3929</a> : Using Paste dialog,\r
+                       the text is pasted into current selection</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3920">#3920</a> : Mouse cursor over characters in\r
+                       Special Character dialog now is correct</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3882">#3882</a> : Fixed an issue\r
+                       with PasteFromWord dialog in which default values was ignored</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3859">#3859</a> : Fixed Flash dialog layout in Webkit</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3852">#3852</a> : Disabled textarea resizing in dialogs</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3831">#3831</a> : The attempt to remove the contextmenu plugin\r
+                       will not anymore break the editor</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3781">#3781</a> : Colorbutton is now disabled in 'source' mode</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3848">#3848</a> : Fixed an issue with Webkit in witch\r
+                       elements in the Image and Link dialogs had wrong dimensions.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3808">#3808</a> : Fixed UI Color Picker dialog size in example page.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3658">#3658</a> : Editor had horizontal scrollbar in IE6.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3819">#3819</a> : The cursor was not visible\r
+                       when applying style to collapsed selections in Firefox 2.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3809">#3809</a> : Fixed beam cursor\r
+                       when mouse cursor is over text-only buttons in IE.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3815">#3815</a> : Fixed an issue\r
+                       with the form dialog in which the "enctype" attribute is outputted as "encoding".</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3785">#3785</a> : Fixed an issue\r
+                       in CKEDITOR.tools.htmlEncode() which incorrectly outputs &amp;nbsp; in IE8.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3820">#3820</a> : Fixed an issue in\r
+                       bullet list command in which a list created at the bottom of another gets merged to the top.\r
+                       </li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3830">#3830</a> : Table cell properties dialog\r
+                       doesn't apply to all selected cells.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3835">#3835</a> : Element path is not refreshed\r
+                       after click on 'newpage'; and safari is not putting focus on document also.\r
+                       </li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3821">#3821</a> : Fixed an issue with JAWS in which\r
+                       toolbar items are read inconsistently between virtual cursor modes.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3789">#3789</a> : The &quot;src&quot; attribute\r
+                       was getting duplicated in some situations.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3591">#3591</a> : Protecting flash related elements\r
+                       including '&lt;object&gt;', '&lt;embed&gt;' and '&lt;param&gt;'.\r
+                       </li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3759">#3759</a> : Fixed CKEDITOR.dom.element::scrollIntoView\r
+                       logic bug which scroll even element is inside viewport.\r
+                       </li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3773">#3773</a> : Fixed remove list will merge lines.\r
+                       </li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3829">#3829</a> : Fixed remove empty link on output data.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3730">#3730</a> : Indent is performing on the whole\r
+                       block instead of selected lines in enterMode = BR.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3844">#3844</a> : Fixed UndoManager register keydown on obsoleted document</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3805">#3805</a> : Enabled SCAYT plugin for IE.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3834">#3834</a> : Context menu on table caption was incorrect.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3812">#3812</a> : Fixed an issue in which the editor\r
+                       may show up empty or uneditable in IE7, 8 and Firefox 3.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3825">#3825</a> : Fixed JS error when opening spellingcheck.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3862">#3862</a> : Fixed html parser infinite loop on certain malformed\r
+                       source code.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3639">#3639</a> : Button size was inconsistent.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3874">#3874</a> : Paste as plain text in Safari loosing lines.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3849">#3849</a> : Fixed IE8 crashes when applying lists and indenting.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3876">#3876</a> : Changed dialog checkbox and radio labels to explicit labels.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3843">#3843</a> : Fixed context submenu position in IE 6 & 7 RTL.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3864">#3864</a> : [FF]Document is not editable after inserting element on a fresh page.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3883">#3883</a> : Fixed removing inline style logic incorrect on Firefox2.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3884">#3884</a> : Empty "href" attribute was duplicated on output data.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3858">#3858</a> : Fixed the issue where toolbars\r
+                       break up in IE6 and IE7 after the browser is resized.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3868">#3868</a> : [chrome] SCAYT toolbar options was in reversed order.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3875">#3875</a> : Fixed an issue in Safari where\r
+                       table row/column/cell menus are not useable when table cells are selected.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3896">#3896</a> : The editing area was\r
+                       flashing when switching forth and back to source view.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3894">#3894</a> : Fixed an issue where editor failed to initialize when using the on-demand loading way.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3903">#3903</a> : Color button plugin doesn't read config entry from editor instance correctly.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3801">#3801</a> : Comments at the start of the document was lost in IE.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3871">#3871</a> : Unable to redo when undos to the front of snapshots stack.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3909">#3909</a> : Move focus from editor into a text input control is broken.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3870">#3870</a> : The empty paragraph\r
+                       desappears when hitting ENTER after &quot;New Page&quot;.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3887">#3887</a> : Fixed an issue in which the create\r
+                       list command may leak outside of a selected table cell and into the rest of document.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3916">#3916</a> : Fixed maximize does not enlarge editor width when width is set.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3879">#3879</a> : [webkit] Color button panel had incorrect size on first open.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3839">#3839</a> : Update Scayt plugin to reflect the latest change from SpellChecker.net.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3742">#3742</a> : Fixed wrong dialog layout for dialogs without tab bar in IE RTL mode .</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3671">#3671</a> : Fixed body fixing should be applied to the real type under fake elements.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3836">#3836</a> : Fixed remove list in enterMode=BR will merge sibling text to one line.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3949">#3949</a> : Fixed enterKey within pre-formatted text introduce wrong line-break.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3878">#3878</a> : Whenever possible,\r
+               dialogs will not present scrollbars if the content is too big for its standard\r
+               size.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3782">#3782</a> : Remove empty list in table cell result in collapsed cell.</li>\r
+               <li>Updated the following language files:<ul>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4183">#4183</a> : Basque;</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/3837">#3837</a> : Brazilian Portuguese;</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4171">#4171</a> : Catalan;</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4115">#4115</a> : Chinese (Simplified);</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4179">#4179</a> : Chinese (Traditional);</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4102">#4102</a> : Croatian;</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4105">#4105</a> : French;</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4104">#4104</a> : German;</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4116">#4116</a> : Italian;</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4091">#4091</a> : Japanese;</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4120">#4120</a> : Polish;</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/3987">#3987</a> : Spanish;</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4089">#4089</a> : Ukrainian;</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4166">#4166</a> : Vietnamese.</li>\r
+               </ul></li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3984">#3984</a> : [IE]The pre-formatted style is generating error.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3946">#3946</a> : Fixed unable to hide contextmenu.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3956">#3956</a> : Fixed About dialog in Source Mode for IE.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3953">#3953</a> : Fixed keystroke for close Paste dialog.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3951">#3951</a> : Reset size and lock ratio options were not accessible in Image dialog.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3921">#3921</a> : Fixed Container scroll issue on IE7.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3940">#3940</a> : Fixed list operation doesn't stop at table.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3891">#3891</a> : [IE] Fixed 'automatic' font color doesn't work.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3972">#3972</a> : Fixed unable to remove a single empty list in document in Firefox with enterMode=BR.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3973">#3973</a> : Fixed list creation error at the end of document.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3959">#3959</a> : Pasting styled text from word result in content lost.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3793">#3793</a> : Combined images into sprites.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3783">#3783</a> : Fixed indenting command in table cells create collapsed paragraph.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3968">#3968</a> : About dialog layout was broken with IE+Standards+RTL.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3991">#3991</a> : In IE quirks, text was not visible in v2 and office2003 skins.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3983">#3983</a> : In IE, we&#39;ll now\r
+                       silently ignore wrong toolbar definition settings which have extra commas being\r
+                       left around.</li>\r
+               <li>Fixed the following test cases:<ul>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/3992">#3992</a> : core/ckeditor2.html</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4138">#4138</a> : core/plugins.html</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/3801">#3801</a> : plugins/htmldataprocessor/htmldataprocessor.html</li>\r
+               </ul></li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3989">#3989</a> : Host page horizontal scrolling a lot when on having righ-to-left direction.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4001">#4001</a> : Create link around existing image result incorrect.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3988">#3988</a> : Destroy editor on form submit event cause error.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3994">#3994</a> : Insert horizontal line at end of document cause error.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4074">#4074</a> : Indent error with 'indentClasses' config specified.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4057">#4057</a> : Fixed anchor is lost after switch between editing modes.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3644">#3644</a> : Image dialog was missin radio lock.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4014">#4014</a> : Firefox2 had no dialog button backgrounds.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4018">#4018</a> : Firefox2 had no richcombo text visible.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4035">#4035</a> : [IE6] Paste dialog size was too small.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4049">#4049</a> : Kama skin was too wide with config.width.</li>\r
+               <li>The following released files now doesn't require the _source folder<ul>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4086">#4086</a> : _samples/ui_languages.html</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4093">#4093</a> : _tests/core/dom/document.html</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4094">#4094</a> : Smiley plugin file</li>\r
+                       <li><a href="http://dev.fckeditor.net/ticket/4097">#4097</a> : No undo/redo support for fontColor and backgroundColor buttons.</li>\r
+               </ul></li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4085">#4085</a> : Paste and Paste from Word dialogs were not well styled in IE+RTL.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3982">#3982</a> : Fixed enterKey on empty list item result in weird dom structure.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4101">#4101</a> : Now it is possible to close dialog before gets focus.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4075">#4075</a> : [IE6/7]Fixed apply custom inline style with "class" attribute failed.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4087">#4087</a> : [Firefox]Fixed extra blocks created on create list when full document selected.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4097">#4097</a> : No undo/redo support for fontColor and backgroundColor buttons.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4111">#4111</a> : Fixed apply block style after inline style applied on full document error.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3622">#3622</a> : Fixed shift enter with selection not deleting highlighted text.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4092">#4092</a> : [IE6] Close button was missing for dialog without multiple tabs.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4003">#4003</a> : Markup on the image dialog was disrupted when removing the border input.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4096">#4096</a> : Editor content area was pushed down in IE RTL quirks.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4112">#4112</a> : [FF] Paste dialog had scrollbars in quirks.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4118">#4118</a> : Dialog dragging was\r
+                       occasionally behaving strangely .</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4077">#4077</a> : The toolbar combos\r
+                       were rendering incorrectly in some languages, like Chinese.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/3622">#3622</a> : The toolbar in the v2\r
+                       skin was wrapping improperly in some languages.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4119">#4119</a> : Unable to edit image link with image dialog.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4117">#4117</a> : Fixed dialog error when transforming image into button.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4058">#4058</a> : [FF] wysiwyg mode is sometimes not been activated.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4114">#4114</a> : [IE] RTE + IE6/IE7 Quirks = dialog mispositoned.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4123">#4123</a> : Some dialog buttons were broken in IE7 quirks.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4122">#4122</a> : [IE] The image dialog\r
+                       was being rendered improperly when loading an image with long URL.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4144">#4144</a> : Fixed the white-spaces at the end of &lt;pre&gt; is incorrectly removed.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4143">#4143</a> : Fixed element id is lost when extracting contents from the range.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4007">#4007</a> : [IE] Source area overflow from editor chrome.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4145">#4145</a> : Fixed the on demand\r
+                       (&quot;basic&quot;) loading model of the editor.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4139">#4139</a> : Fixed list plugin regression of [3903].</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4147">#4147</a> : Unify style text normalization logic when comparing styles.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4150">#4150</a> : Fixed enlarge list result incorrect at the inner boundary of block.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4164">#4164</a> : Now it is possible to paste text\r
+                       in Source mode even if forcePasteAsPlainText = true.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4129">#4129</a> : [FF]Unable to remove list with Ctrl-A.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4172">#4172</a> : [Safari] The trailing\r
+                       &lt;br&gt; was not been always added to blank lines ending with &amp;nbsp;.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4178">#4178</a> : It&#39;s now possible to\r
+                       copy and paste Flash content among different editor instances.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4193">#4193</a> : Automatic font color produced empty span on Firefox 3.5.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4186">#4186</a> : [FF] Fixed First open float panel cause host page scrollbar blinking.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4227">#4227</a> : Fixed destroy editor instance created on textarea which is not within form cause error.</li>\r
+               <li><a href="http://dev.fckeditor.net/ticket/4240">#4240</a> : Fixed editor name containing hyphen break editor completely.</li>\r
+       </ul>\r
+       <h3>\r
+               CKEditor 3.0 RC</h3>\r
+       <p>\r
+               Changelog starts at this release.</p>\r
+       <div id="footer">\r
+               <hr />\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright &copy; 2003-2009, <a href="http://cksource.com/">CKSource</a> - Frederico\r
+                       Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/INSTALL.html b/INSTALL.html
new file mode 100644 (file)
index 0000000..65e12e3
--- /dev/null
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Installation Guide - CKEditor</title>\r
+       <meta http-equiv="content-type" content="text/html; charset=utf-8" />\r
+       <style type="text/css">\r
+               h3\r
+               {\r
+                       border-bottom: 1px solid #AAAAAA;\r
+               }\r
+               pre\r
+               {\r
+                       background-color: #F9F9F9;\r
+                       border: 1px dashed #2F6FAB;\r
+                       padding: 1em;\r
+                       line-height: 1.1em;\r
+               }\r
+               #footer hr\r
+               {\r
+                       margin: 10px 0 15px 0;\r
+                       height: 1px;\r
+                       border: solid 1px gray;\r
+                       border-bottom: none;\r
+               }\r
+               #footer p\r
+               {\r
+                       margin: 0 10px 10px 10px;\r
+                       float: left;\r
+               }\r
+               #footer #copy\r
+               {\r
+                       float: right;\r
+               }\r
+       </style>\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Installation Guide</h1>\r
+       <h3>\r
+               What&#39;s CKEditor?</h3>\r
+       <p>\r
+               CKEditor is a text editor to be used inside web pages. It&#39;s not a replacement\r
+               for desktop text editors like Word or OpenOffice, but a component to be used as\r
+               part of web applications and web sites.</p>\r
+       <h3>\r
+               Installation</h3>\r
+       <p>\r
+               Installing CKEditor is an easy task. Just follow these simple steps:</p>\r
+       <ol>\r
+               <li><strong>Download</strong> the latest version of the editor from our web site: <a\r
+                       href="http://ckeditor.com">http://ckeditor.com</a>. You should have already completed\r
+                       this step, but be sure you have the very latest version.</li>\r
+               <li><strong>Extract</strong> (decompress) the downloaded file into the root of your\r
+                       web site.</li>\r
+       </ol>\r
+       <p>\r
+               <strong>Note:</strong> CKEditor is by default installed in the &quot;ckeditor&quot;\r
+               folder. You can place the files in whichever you want though.</p>\r
+       <h3>\r
+               Checking Your Installation\r
+       </h3>\r
+       <p>\r
+               The editor comes with a few sample pages that can be used to verify that installation\r
+               proceeded properly. Take a look at the <a href="_samples">_samples</a> directory.</p>\r
+       <p>\r
+               To test your installation, just call the following page at your web site:</p>\r
+       <pre>\r
+http://&lt;your site&gt;/&lt;CKEditor installation path&gt;/_samples/index.html\r
+\r
+For example:\r
+http://www.example.com/ckeditor/_samples/index.html</pre>\r
+       <h3>\r
+               Documentation</h3>\r
+       <p>\r
+               The full editor documentation is available online at the following address:<br />\r
+               <a href="http://docs.cksource.com/ckeditor">http://docs.cksource.com/ckeditor</a></p>\r
+       <div id="footer">\r
+               <hr />\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright &copy; 2003-2009, <a href="http://cksource.com/">CKSource</a> - Frederico\r
+                       Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/LICENSE.html b/LICENSE.html
new file mode 100644 (file)
index 0000000..7d53df4
--- /dev/null
@@ -0,0 +1,1334 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+== BEGIN TEXT ONLY VERSION ==\r
+\r
+Software License Agreement\r
+==========================\r
+\r
+CKEditor - The text editor for Internet - http://ckeditor.com\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+\r
+Licensed under the terms of any of the following licenses at your\r
+choice:\r
+\r
+ - GNU General Public License Version 2 or later (the "GPL")\r
+   http://www.gnu.org/licenses/gpl.html\r
+   (See Appendix A)\r
+\r
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")\r
+   http://www.gnu.org/licenses/lgpl.html\r
+   (See Appendix B)\r
+\r
+ - Mozilla Public License Version 1.1 or later (the "MPL")\r
+   http://www.mozilla.org/MPL/MPL-1.1.html\r
+   (See Appendix C)\r
+\r
+You are not required to, but if you want to explicitly declare the\r
+license you have chosen to be bound to when using, reproducing,\r
+modifying and distributing this software, just include a text file\r
+titled "legal.txt" in your version of this software, indicating your\r
+license choice. In any case, your choice will not restrict any\r
+recipient of your version of this software to use, reproduce, modify\r
+and distribute this software under any of the above licenses.\r
+\r
+Sources of Intellectual Property Included in CKEditor\r
+=====================================================\r
+\r
+Where not otherwise indicated, all CKEditor content is authored by\r
+CKSource engineers and consists of CKSource-owned intellectual\r
+property. In some specific instances, CKEditor will incorporate work\r
+done by developers outside of CKSource with their express permission.\r
+\r
+YUI Test: At _source/tests/yuitest.js can be found part of the source\r
+code of YUI, which is licensed under the terms of the BSD License\r
+(http://developer.yahoo.com/yui/license.txt). YUI is Copyright (C)\r
+2008, Yahoo! Inc.\r
+\r
+Trademarks\r
+==========\r
+\r
+CKEditor is a trademark of CKSource - Frederico Knabben. All other brand\r
+and product names are trademarks, registered trademarks or service\r
+marks of their respective holders.\r
+\r
+Appendix A: The GPL License\r
+===========================\r
+\r
+                   GNU GENERAL PUBLIC LICENSE\r
+                      Version 2, June 1991\r
+\r
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\r
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\r
+ Everyone is permitted to copy and distribute verbatim copies\r
+ of this license document, but changing it is not allowed.\r
+\r
+                           Preamble\r
+\r
+  The licenses for most software are designed to take away your\r
+freedom to share and change it.  By contrast, the GNU General Public\r
+License is intended to guarantee your freedom to share and change free\r
+software-to make sure the software is free for all its users.  This\r
+General Public License applies to most of the Free Software\r
+Foundation's software and to any other program whose authors commit to\r
+using it.  (Some other Free Software Foundation software is covered by\r
+the GNU Lesser General Public License instead.)  You can apply it to\r
+your programs, too.\r
+\r
+  When we speak of free software, we are referring to freedom, not\r
+price.  Our General Public Licenses are designed to make sure that you\r
+have the freedom to distribute copies of free software (and charge for\r
+this service if you wish), that you receive source code or can get it\r
+if you want it, that you can change the software or use pieces of it\r
+in new free programs; and that you know you can do these things.\r
+\r
+  To protect your rights, we need to make restrictions that forbid\r
+anyone to deny you these rights or to ask you to surrender the rights.\r
+These restrictions translate to certain responsibilities for you if you\r
+distribute copies of the software, or if you modify it.\r
+\r
+  For example, if you distribute copies of such a program, whether\r
+gratis or for a fee, you must give the recipients all the rights that\r
+you have.  You must make sure that they, too, receive or can get the\r
+source code.  And you must show them these terms so they know their\r
+rights.\r
+\r
+  We protect your rights with two steps: (1) copyright the software, and\r
+(2) offer you this license which gives you legal permission to copy,\r
+distribute and/or modify the software.\r
+\r
+  Also, for each author's protection and ours, we want to make certain\r
+that everyone understands that there is no warranty for this free\r
+software.  If the software is modified by someone else and passed on, we\r
+want its recipients to know that what they have is not the original, so\r
+that any problems introduced by others will not reflect on the original\r
+authors' reputations.\r
+\r
+  Finally, any free program is threatened constantly by software\r
+patents.  We wish to avoid the danger that redistributors of a free\r
+program will individually obtain patent licenses, in effect making the\r
+program proprietary.  To prevent this, we have made it clear that any\r
+patent must be licensed for everyone's free use or not licensed at all.\r
+\r
+  The precise terms and conditions for copying, distribution and\r
+modification follow.\r
+\r
+                   GNU GENERAL PUBLIC LICENSE\r
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
+\r
+  0. This License applies to any program or other work which contains\r
+a notice placed by the copyright holder saying it may be distributed\r
+under the terms of this General Public License.  The "Program", below,\r
+refers to any such program or work, and a "work based on the Program"\r
+means either the Program or any derivative work under copyright law:\r
+that is to say, a work containing the Program or a portion of it,\r
+either verbatim or with modifications and/or translated into another\r
+language.  (Hereinafter, translation is included without limitation in\r
+the term "modification".)  Each licensee is addressed as "you".\r
+\r
+Activities other than copying, distribution and modification are not\r
+covered by this License; they are outside its scope.  The act of\r
+running the Program is not restricted, and the output from the Program\r
+is covered only if its contents constitute a work based on the\r
+Program (independent of having been made by running the Program).\r
+Whether that is true depends on what the Program does.\r
+\r
+  1. You may copy and distribute verbatim copies of the Program's\r
+source code as you receive it, in any medium, provided that you\r
+conspicuously and appropriately publish on each copy an appropriate\r
+copyright notice and disclaimer of warranty; keep intact all the\r
+notices that refer to this License and to the absence of any warranty;\r
+and give any other recipients of the Program a copy of this License\r
+along with the Program.\r
+\r
+You may charge a fee for the physical act of transferring a copy, and\r
+you may at your option offer warranty protection in exchange for a fee.\r
+\r
+  2. You may modify your copy or copies of the Program or any portion\r
+of it, thus forming a work based on the Program, and copy and\r
+distribute such modifications or work under the terms of Section 1\r
+above, provided that you also meet all of these conditions:\r
+\r
+    a) You must cause the modified files to carry prominent notices\r
+    stating that you changed the files and the date of any change.\r
+\r
+    b) You must cause any work that you distribute or publish, that in\r
+    whole or in part contains or is derived from the Program or any\r
+    part thereof, to be licensed as a whole at no charge to all third\r
+    parties under the terms of this License.\r
+\r
+    c) If the modified program normally reads commands interactively\r
+    when run, you must cause it, when started running for such\r
+    interactive use in the most ordinary way, to print or display an\r
+    announcement including an appropriate copyright notice and a\r
+    notice that there is no warranty (or else, saying that you provide\r
+    a warranty) and that users may redistribute the program under\r
+    these conditions, and telling the user how to view a copy of this\r
+    License.  (Exception: if the Program itself is interactive but\r
+    does not normally print such an announcement, your work based on\r
+    the Program is not required to print an announcement.)\r
+\r
+These requirements apply to the modified work as a whole.  If\r
+identifiable sections of that work are not derived from the Program,\r
+and can be reasonably considered independent and separate works in\r
+themselves, then this License, and its terms, do not apply to those\r
+sections when you distribute them as separate works.  But when you\r
+distribute the same sections as part of a whole which is a work based\r
+on the Program, the distribution of the whole must be on the terms of\r
+this License, whose permissions for other licensees extend to the\r
+entire whole, and thus to each and every part regardless of who wrote it.\r
+\r
+Thus, it is not the intent of this section to claim rights or contest\r
+your rights to work written entirely by you; rather, the intent is to\r
+exercise the right to control the distribution of derivative or\r
+collective works based on the Program.\r
+\r
+In addition, mere aggregation of another work not based on the Program\r
+with the Program (or with a work based on the Program) on a volume of\r
+a storage or distribution medium does not bring the other work under\r
+the scope of this License.\r
+\r
+  3. You may copy and distribute the Program (or a work based on it,\r
+under Section 2) in object code or executable form under the terms of\r
+Sections 1 and 2 above provided that you also do one of the following:\r
+\r
+    a) Accompany it with the complete corresponding machine-readable\r
+    source code, which must be distributed under the terms of Sections\r
+    1 and 2 above on a medium customarily used for software interchange; or,\r
+\r
+    b) Accompany it with a written offer, valid for at least three\r
+    years, to give any third party, for a charge no more than your\r
+    cost of physically performing source distribution, a complete\r
+    machine-readable copy of the corresponding source code, to be\r
+    distributed under the terms of Sections 1 and 2 above on a medium\r
+    customarily used for software interchange; or,\r
+\r
+    c) Accompany it with the information you received as to the offer\r
+    to distribute corresponding source code.  (This alternative is\r
+    allowed only for noncommercial distribution and only if you\r
+    received the program in object code or executable form with such\r
+    an offer, in accord with Subsection b above.)\r
+\r
+The source code for a work means the preferred form of the work for\r
+making modifications to it.  For an executable work, complete source\r
+code means all the source code for all modules it contains, plus any\r
+associated interface definition files, plus the scripts used to\r
+control compilation and installation of the executable.  However, as a\r
+special exception, the source code distributed need not include\r
+anything that is normally distributed (in either source or binary\r
+form) with the major components (compiler, kernel, and so on) of the\r
+operating system on which the executable runs, unless that component\r
+itself accompanies the executable.\r
+\r
+If distribution of executable or object code is made by offering\r
+access to copy from a designated place, then offering equivalent\r
+access to copy the source code from the same place counts as\r
+distribution of the source code, even though third parties are not\r
+compelled to copy the source along with the object code.\r
+\r
+  4. You may not copy, modify, sublicense, or distribute the Program\r
+except as expressly provided under this License.  Any attempt\r
+otherwise to copy, modify, sublicense or distribute the Program is\r
+void, and will automatically terminate your rights under this License.\r
+However, parties who have received copies, or rights, from you under\r
+this License will not have their licenses terminated so long as such\r
+parties remain in full compliance.\r
+\r
+  5. You are not required to accept this License, since you have not\r
+signed it.  However, nothing else grants you permission to modify or\r
+distribute the Program or its derivative works.  These actions are\r
+prohibited by law if you do not accept this License.  Therefore, by\r
+modifying or distributing the Program (or any work based on the\r
+Program), you indicate your acceptance of this License to do so, and\r
+all its terms and conditions for copying, distributing or modifying\r
+the Program or works based on it.\r
+\r
+  6. Each time you redistribute the Program (or any work based on the\r
+Program), the recipient automatically receives a license from the\r
+original licensor to copy, distribute or modify the Program subject to\r
+these terms and conditions.  You may not impose any further\r
+restrictions on the recipients' exercise of the rights granted herein.\r
+You are not responsible for enforcing compliance by third parties to\r
+this License.\r
+\r
+  7. If, as a consequence of a court judgment or allegation of patent\r
+infringement or for any other reason (not limited to patent issues),\r
+conditions are imposed on you (whether by court order, agreement or\r
+otherwise) that contradict the conditions of this License, they do not\r
+excuse you from the conditions of this License.  If you cannot\r
+distribute so as to satisfy simultaneously your obligations under this\r
+License and any other pertinent obligations, then as a consequence you\r
+may not distribute the Program at all.  For example, if a patent\r
+license would not permit royalty-free redistribution of the Program by\r
+all those who receive copies directly or indirectly through you, then\r
+the only way you could satisfy both it and this License would be to\r
+refrain entirely from distribution of the Program.\r
+\r
+If any portion of this section is held invalid or unenforceable under\r
+any particular circumstance, the balance of the section is intended to\r
+apply and the section as a whole is intended to apply in other\r
+circumstances.\r
+\r
+It is not the purpose of this section to induce you to infringe any\r
+patents or other property right claims or to contest validity of any\r
+such claims; this section has the sole purpose of protecting the\r
+integrity of the free software distribution system, which is\r
+implemented by public license practices.  Many people have made\r
+generous contributions to the wide range of software distributed\r
+through that system in reliance on consistent application of that\r
+system; it is up to the author/donor to decide if he or she is willing\r
+to distribute software through any other system and a licensee cannot\r
+impose that choice.\r
+\r
+This section is intended to make thoroughly clear what is believed to\r
+be a consequence of the rest of this License.\r
+\r
+  8. If the distribution and/or use of the Program is restricted in\r
+certain countries either by patents or by copyrighted interfaces, the\r
+original copyright holder who places the Program under this License\r
+may add an explicit geographical distribution limitation excluding\r
+those countries, so that distribution is permitted only in or among\r
+countries not thus excluded.  In such case, this License incorporates\r
+the limitation as if written in the body of this License.\r
+\r
+  9. The Free Software Foundation may publish revised and/or new versions\r
+of the General Public License from time to time.  Such new versions will\r
+be similar in spirit to the present version, but may differ in detail to\r
+address new problems or concerns.\r
+\r
+Each version is given a distinguishing version number.  If the Program\r
+specifies a version number of this License which applies to it and "any\r
+later version", you have the option of following the terms and conditions\r
+either of that version or of any later version published by the Free\r
+Software Foundation.  If the Program does not specify a version number of\r
+this License, you may choose any version ever published by the Free Software\r
+Foundation.\r
+\r
+  10. If you wish to incorporate parts of the Program into other free\r
+programs whose distribution conditions are different, write to the author\r
+to ask for permission.  For software which is copyrighted by the Free\r
+Software Foundation, write to the Free Software Foundation; we sometimes\r
+make exceptions for this.  Our decision will be guided by the two goals\r
+of preserving the free status of all derivatives of our free software and\r
+of promoting the sharing and reuse of software generally.\r
+\r
+                           NO WARRANTY\r
+\r
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\r
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\r
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\r
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\r
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\r
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\r
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\r
+REPAIR OR CORRECTION.\r
+\r
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\r
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\r
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\r
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\r
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\r
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\r
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\r
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\r
+POSSIBILITY OF SUCH DAMAGES.\r
+\r
+                    END OF TERMS AND CONDITIONS\r
+\r
+\r
+Appendix B: The LGPL License\r
+============================\r
+\r
+                 GNU LESSER GENERAL PUBLIC LICENSE\r
+                      Version 2.1, February 1999\r
+\r
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.\r
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+ Everyone is permitted to copy and distribute verbatim copies\r
+ of this license document, but changing it is not allowed.\r
+\r
+[This is the first released version of the Lesser GPL.  It also counts\r
+ as the successor of the GNU Library Public License, version 2, hence\r
+ the version number 2.1.]\r
+\r
+                           Preamble\r
+\r
+  The licenses for most software are designed to take away your\r
+freedom to share and change it.  By contrast, the GNU General Public\r
+Licenses are intended to guarantee your freedom to share and change\r
+free software-to make sure the software is free for all its users.\r
+\r
+  This license, the Lesser General Public License, applies to some\r
+specially designated software packages-typically libraries-of the\r
+Free Software Foundation and other authors who decide to use it.  You\r
+can use it too, but we suggest you first think carefully about whether\r
+this license or the ordinary General Public License is the better\r
+strategy to use in any particular case, based on the explanations below.\r
+\r
+  When we speak of free software, we are referring to freedom of use,\r
+not price.  Our General Public Licenses are designed to make sure that\r
+you have the freedom to distribute copies of free software (and charge\r
+for this service if you wish); that you receive source code or can get\r
+it if you want it; that you can change the software and use pieces of\r
+it in new free programs; and that you are informed that you can do\r
+these things.\r
+\r
+  To protect your rights, we need to make restrictions that forbid\r
+distributors to deny you these rights or to ask you to surrender these\r
+rights.  These restrictions translate to certain responsibilities for\r
+you if you distribute copies of the library or if you modify it.\r
+\r
+  For example, if you distribute copies of the library, whether gratis\r
+or for a fee, you must give the recipients all the rights that we gave\r
+you.  You must make sure that they, too, receive or can get the source\r
+code.  If you link other code with the library, you must provide\r
+complete object files to the recipients, so that they can relink them\r
+with the library after making changes to the library and recompiling\r
+it.  And you must show them these terms so they know their rights.\r
+\r
+  We protect your rights with a two-step method: (1) we copyright the\r
+library, and (2) we offer you this license, which gives you legal\r
+permission to copy, distribute and/or modify the library.\r
+\r
+  To protect each distributor, we want to make it very clear that\r
+there is no warranty for the free library.  Also, if the library is\r
+modified by someone else and passed on, the recipients should know\r
+that what they have is not the original version, so that the original\r
+author's reputation will not be affected by problems that might be\r
+introduced by others.\r
+\r
+  Finally, software patents pose a constant threat to the existence of\r
+any free program.  We wish to make sure that a company cannot\r
+effectively restrict the users of a free program by obtaining a\r
+restrictive license from a patent holder.  Therefore, we insist that\r
+any patent license obtained for a version of the library must be\r
+consistent with the full freedom of use specified in this license.\r
+\r
+  Most GNU software, including some libraries, is covered by the\r
+ordinary GNU General Public License.  This license, the GNU Lesser\r
+General Public License, applies to certain designated libraries, and\r
+is quite different from the ordinary General Public License.  We use\r
+this license for certain libraries in order to permit linking those\r
+libraries into non-free programs.\r
+\r
+  When a program is linked with a library, whether statically or using\r
+a shared library, the combination of the two is legally speaking a\r
+combined work, a derivative of the original library.  The ordinary\r
+General Public License therefore permits such linking only if the\r
+entire combination fits its criteria of freedom.  The Lesser General\r
+Public License permits more lax criteria for linking other code with\r
+the library.\r
+\r
+  We call this license the "Lesser" General Public License because it\r
+does Less to protect the user's freedom than the ordinary General\r
+Public License.  It also provides other free software developers Less\r
+of an advantage over competing non-free programs.  These disadvantages\r
+are the reason we use the ordinary General Public License for many\r
+libraries.  However, the Lesser license provides advantages in certain\r
+special circumstances.\r
+\r
+  For example, on rare occasions, there may be a special need to\r
+encourage the widest possible use of a certain library, so that it becomes\r
+a de-facto standard.  To achieve this, non-free programs must be\r
+allowed to use the library.  A more frequent case is that a free\r
+library does the same job as widely used non-free libraries.  In this\r
+case, there is little to gain by limiting the free library to free\r
+software only, so we use the Lesser General Public License.\r
+\r
+  In other cases, permission to use a particular library in non-free\r
+programs enables a greater number of people to use a large body of\r
+free software.  For example, permission to use the GNU C Library in\r
+non-free programs enables many more people to use the whole GNU\r
+operating system, as well as its variant, the GNU/Linux operating\r
+system.\r
+\r
+  Although the Lesser General Public License is Less protective of the\r
+users' freedom, it does ensure that the user of a program that is\r
+linked with the Library has the freedom and the wherewithal to run\r
+that program using a modified version of the Library.\r
+\r
+  The precise terms and conditions for copying, distribution and\r
+modification follow.  Pay close attention to the difference between a\r
+"work based on the library" and a "work that uses the library".  The\r
+former contains code derived from the library, whereas the latter must\r
+be combined with the library in order to run.\r
+\r
+                 GNU LESSER GENERAL PUBLIC LICENSE\r
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
+\r
+  0. This License Agreement applies to any software library or other\r
+program which contains a notice placed by the copyright holder or\r
+other authorized party saying it may be distributed under the terms of\r
+this Lesser General Public License (also called "this License").\r
+Each licensee is addressed as "you".\r
+\r
+  A "library" means a collection of software functions and/or data\r
+prepared so as to be conveniently linked with application programs\r
+(which use some of those functions and data) to form executables.\r
+\r
+  The "Library", below, refers to any such software library or work\r
+which has been distributed under these terms.  A "work based on the\r
+Library" means either the Library or any derivative work under\r
+copyright law: that is to say, a work containing the Library or a\r
+portion of it, either verbatim or with modifications and/or translated\r
+straightforwardly into another language.  (Hereinafter, translation is\r
+included without limitation in the term "modification".)\r
+\r
+  "Source code" for a work means the preferred form of the work for\r
+making modifications to it.  For a library, complete source code means\r
+all the source code for all modules it contains, plus any associated\r
+interface definition files, plus the scripts used to control compilation\r
+and installation of the library.\r
+\r
+  Activities other than copying, distribution and modification are not\r
+covered by this License; they are outside its scope.  The act of\r
+running a program using the Library is not restricted, and output from\r
+such a program is covered only if its contents constitute a work based\r
+on the Library (independent of the use of the Library in a tool for\r
+writing it).  Whether that is true depends on what the Library does\r
+and what the program that uses the Library does.\r
+\r
+  1. You may copy and distribute verbatim copies of the Library's\r
+complete source code as you receive it, in any medium, provided that\r
+you conspicuously and appropriately publish on each copy an\r
+appropriate copyright notice and disclaimer of warranty; keep intact\r
+all the notices that refer to this License and to the absence of any\r
+warranty; and distribute a copy of this License along with the\r
+Library.\r
+\r
+  You may charge a fee for the physical act of transferring a copy,\r
+and you may at your option offer warranty protection in exchange for a\r
+fee.\r
+\r
+  2. You may modify your copy or copies of the Library or any portion\r
+of it, thus forming a work based on the Library, and copy and\r
+distribute such modifications or work under the terms of Section 1\r
+above, provided that you also meet all of these conditions:\r
+\r
+    a) The modified work must itself be a software library.\r
+\r
+    b) You must cause the files modified to carry prominent notices\r
+    stating that you changed the files and the date of any change.\r
+\r
+    c) You must cause the whole of the work to be licensed at no\r
+    charge to all third parties under the terms of this License.\r
+\r
+    d) If a facility in the modified Library refers to a function or a\r
+    table of data to be supplied by an application program that uses\r
+    the facility, other than as an argument passed when the facility\r
+    is invoked, then you must make a good faith effort to ensure that,\r
+    in the event an application does not supply such function or\r
+    table, the facility still operates, and performs whatever part of\r
+    its purpose remains meaningful.\r
+\r
+    (For example, a function in a library to compute square roots has\r
+    a purpose that is entirely well-defined independent of the\r
+    application.  Therefore, Subsection 2d requires that any\r
+    application-supplied function or table used by this function must\r
+    be optional: if the application does not supply it, the square\r
+    root function must still compute square roots.)\r
+\r
+These requirements apply to the modified work as a whole.  If\r
+identifiable sections of that work are not derived from the Library,\r
+and can be reasonably considered independent and separate works in\r
+themselves, then this License, and its terms, do not apply to those\r
+sections when you distribute them as separate works.  But when you\r
+distribute the same sections as part of a whole which is a work based\r
+on the Library, the distribution of the whole must be on the terms of\r
+this License, whose permissions for other licensees extend to the\r
+entire whole, and thus to each and every part regardless of who wrote\r
+it.\r
+\r
+Thus, it is not the intent of this section to claim rights or contest\r
+your rights to work written entirely by you; rather, the intent is to\r
+exercise the right to control the distribution of derivative or\r
+collective works based on the Library.\r
+\r
+In addition, mere aggregation of another work not based on the Library\r
+with the Library (or with a work based on the Library) on a volume of\r
+a storage or distribution medium does not bring the other work under\r
+the scope of this License.\r
+\r
+  3. You may opt to apply the terms of the ordinary GNU General Public\r
+License instead of this License to a given copy of the Library.  To do\r
+this, you must alter all the notices that refer to this License, so\r
+that they refer to the ordinary GNU General Public License, version 2,\r
+instead of to this License.  (If a newer version than version 2 of the\r
+ordinary GNU General Public License has appeared, then you can specify\r
+that version instead if you wish.)  Do not make any other change in\r
+these notices.\r
+\r
+  Once this change is made in a given copy, it is irreversible for\r
+that copy, so the ordinary GNU General Public License applies to all\r
+subsequent copies and derivative works made from that copy.\r
+\r
+  This option is useful when you wish to copy part of the code of\r
+the Library into a program that is not a library.\r
+\r
+  4. You may copy and distribute the Library (or a portion or\r
+derivative of it, under Section 2) in object code or executable form\r
+under the terms of Sections 1 and 2 above provided that you accompany\r
+it with the complete corresponding machine-readable source code, which\r
+must be distributed under the terms of Sections 1 and 2 above on a\r
+medium customarily used for software interchange.\r
+\r
+  If distribution of object code is made by offering access to copy\r
+from a designated place, then offering equivalent access to copy the\r
+source code from the same place satisfies the requirement to\r
+distribute the source code, even though third parties are not\r
+compelled to copy the source along with the object code.\r
+\r
+  5. A program that contains no derivative of any portion of the\r
+Library, but is designed to work with the Library by being compiled or\r
+linked with it, is called a "work that uses the Library".  Such a\r
+work, in isolation, is not a derivative work of the Library, and\r
+therefore falls outside the scope of this License.\r
+\r
+  However, linking a "work that uses the Library" with the Library\r
+creates an executable that is a derivative of the Library (because it\r
+contains portions of the Library), rather than a "work that uses the\r
+library".  The executable is therefore covered by this License.\r
+Section 6 states terms for distribution of such executables.\r
+\r
+  When a "work that uses the Library" uses material from a header file\r
+that is part of the Library, the object code for the work may be a\r
+derivative work of the Library even though the source code is not.\r
+Whether this is true is especially significant if the work can be\r
+linked without the Library, or if the work is itself a library.  The\r
+threshold for this to be true is not precisely defined by law.\r
+\r
+  If such an object file uses only numerical parameters, data\r
+structure layouts and accessors, and small macros and small inline\r
+functions (ten lines or less in length), then the use of the object\r
+file is unrestricted, regardless of whether it is legally a derivative\r
+work.  (Executables containing this object code plus portions of the\r
+Library will still fall under Section 6.)\r
+\r
+  Otherwise, if the work is a derivative of the Library, you may\r
+distribute the object code for the work under the terms of Section 6.\r
+Any executables containing that work also fall under Section 6,\r
+whether or not they are linked directly with the Library itself.\r
+\r
+  6. As an exception to the Sections above, you may also combine or\r
+link a "work that uses the Library" with the Library to produce a\r
+work containing portions of the Library, and distribute that work\r
+under terms of your choice, provided that the terms permit\r
+modification of the work for the customer's own use and reverse\r
+engineering for debugging such modifications.\r
+\r
+  You must give prominent notice with each copy of the work that the\r
+Library is used in it and that the Library and its use are covered by\r
+this License.  You must supply a copy of this License.  If the work\r
+during execution displays copyright notices, you must include the\r
+copyright notice for the Library among them, as well as a reference\r
+directing the user to the copy of this License.  Also, you must do one\r
+of these things:\r
+\r
+    a) Accompany the work with the complete corresponding\r
+    machine-readable source code for the Library including whatever\r
+    changes were used in the work (which must be distributed under\r
+    Sections 1 and 2 above); and, if the work is an executable linked\r
+    with the Library, with the complete machine-readable "work that\r
+    uses the Library", as object code and/or source code, so that the\r
+    user can modify the Library and then relink to produce a modified\r
+    executable containing the modified Library.  (It is understood\r
+    that the user who changes the contents of definitions files in the\r
+    Library will not necessarily be able to recompile the application\r
+    to use the modified definitions.)\r
+\r
+    b) Use a suitable shared library mechanism for linking with the\r
+    Library.  A suitable mechanism is one that (1) uses at run time a\r
+    copy of the library already present on the user's computer system,\r
+    rather than copying library functions into the executable, and (2)\r
+    will operate properly with a modified version of the library, if\r
+    the user installs one, as long as the modified version is\r
+    interface-compatible with the version that the work was made with.\r
+\r
+    c) Accompany the work with a written offer, valid for at\r
+    least three years, to give the same user the materials\r
+    specified in Subsection 6a, above, for a charge no more\r
+    than the cost of performing this distribution.\r
+\r
+    d) If distribution of the work is made by offering access to copy\r
+    from a designated place, offer equivalent access to copy the above\r
+    specified materials from the same place.\r
+\r
+    e) Verify that the user has already received a copy of these\r
+    materials or that you have already sent this user a copy.\r
+\r
+  For an executable, the required form of the "work that uses the\r
+Library" must include any data and utility programs needed for\r
+reproducing the executable from it.  However, as a special exception,\r
+the materials to be distributed need not include anything that is\r
+normally distributed (in either source or binary form) with the major\r
+components (compiler, kernel, and so on) of the operating system on\r
+which the executable runs, unless that component itself accompanies\r
+the executable.\r
+\r
+  It may happen that this requirement contradicts the license\r
+restrictions of other proprietary libraries that do not normally\r
+accompany the operating system.  Such a contradiction means you cannot\r
+use both them and the Library together in an executable that you\r
+distribute.\r
+\r
+  7. You may place library facilities that are a work based on the\r
+Library side-by-side in a single library together with other library\r
+facilities not covered by this License, and distribute such a combined\r
+library, provided that the separate distribution of the work based on\r
+the Library and of the other library facilities is otherwise\r
+permitted, and provided that you do these two things:\r
+\r
+    a) Accompany the combined library with a copy of the same work\r
+    based on the Library, uncombined with any other library\r
+    facilities.  This must be distributed under the terms of the\r
+    Sections above.\r
+\r
+    b) Give prominent notice with the combined library of the fact\r
+    that part of it is a work based on the Library, and explaining\r
+    where to find the accompanying uncombined form of the same work.\r
+\r
+  8. You may not copy, modify, sublicense, link with, or distribute\r
+the Library except as expressly provided under this License.  Any\r
+attempt otherwise to copy, modify, sublicense, link with, or\r
+distribute the Library is void, and will automatically terminate your\r
+rights under this License.  However, parties who have received copies,\r
+or rights, from you under this License will not have their licenses\r
+terminated so long as such parties remain in full compliance.\r
+\r
+  9. You are not required to accept this License, since you have not\r
+signed it.  However, nothing else grants you permission to modify or\r
+distribute the Library or its derivative works.  These actions are\r
+prohibited by law if you do not accept this License.  Therefore, by\r
+modifying or distributing the Library (or any work based on the\r
+Library), you indicate your acceptance of this License to do so, and\r
+all its terms and conditions for copying, distributing or modifying\r
+the Library or works based on it.\r
+\r
+  10. Each time you redistribute the Library (or any work based on the\r
+Library), the recipient automatically receives a license from the\r
+original licensor to copy, distribute, link with or modify the Library\r
+subject to these terms and conditions.  You may not impose any further\r
+restrictions on the recipients' exercise of the rights granted herein.\r
+You are not responsible for enforcing compliance by third parties with\r
+this License.\r
+\r
+  11. If, as a consequence of a court judgment or allegation of patent\r
+infringement or for any other reason (not limited to patent issues),\r
+conditions are imposed on you (whether by court order, agreement or\r
+otherwise) that contradict the conditions of this License, they do not\r
+excuse you from the conditions of this License.  If you cannot\r
+distribute so as to satisfy simultaneously your obligations under this\r
+License and any other pertinent obligations, then as a consequence you\r
+may not distribute the Library at all.  For example, if a patent\r
+license would not permit royalty-free redistribution of the Library by\r
+all those who receive copies directly or indirectly through you, then\r
+the only way you could satisfy both it and this License would be to\r
+refrain entirely from distribution of the Library.\r
+\r
+If any portion of this section is held invalid or unenforceable under any\r
+particular circumstance, the balance of the section is intended to apply,\r
+and the section as a whole is intended to apply in other circumstances.\r
+\r
+It is not the purpose of this section to induce you to infringe any\r
+patents or other property right claims or to contest validity of any\r
+such claims; this section has the sole purpose of protecting the\r
+integrity of the free software distribution system which is\r
+implemented by public license practices.  Many people have made\r
+generous contributions to the wide range of software distributed\r
+through that system in reliance on consistent application of that\r
+system; it is up to the author/donor to decide if he or she is willing\r
+to distribute software through any other system and a licensee cannot\r
+impose that choice.\r
+\r
+This section is intended to make thoroughly clear what is believed to\r
+be a consequence of the rest of this License.\r
+\r
+  12. If the distribution and/or use of the Library is restricted in\r
+certain countries either by patents or by copyrighted interfaces, the\r
+original copyright holder who places the Library under this License may add\r
+an explicit geographical distribution limitation excluding those countries,\r
+so that distribution is permitted only in or among countries not thus\r
+excluded.  In such case, this License incorporates the limitation as if\r
+written in the body of this License.\r
+\r
+  13. The Free Software Foundation may publish revised and/or new\r
+versions of the Lesser General Public License from time to time.\r
+Such new versions will be similar in spirit to the present version,\r
+but may differ in detail to address new problems or concerns.\r
+\r
+Each version is given a distinguishing version number.  If the Library\r
+specifies a version number of this License which applies to it and\r
+"any later version", you have the option of following the terms and\r
+conditions either of that version or of any later version published by\r
+the Free Software Foundation.  If the Library does not specify a\r
+license version number, you may choose any version ever published by\r
+the Free Software Foundation.\r
+\r
+  14. If you wish to incorporate parts of the Library into other free\r
+programs whose distribution conditions are incompatible with these,\r
+write to the author to ask for permission.  For software which is\r
+copyrighted by the Free Software Foundation, write to the Free\r
+Software Foundation; we sometimes make exceptions for this.  Our\r
+decision will be guided by the two goals of preserving the free status\r
+of all derivatives of our free software and of promoting the sharing\r
+and reuse of software generally.\r
+\r
+                           NO WARRANTY\r
+\r
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\r
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\r
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\r
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\r
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\r
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\r
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\r
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\r
+\r
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\r
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\r
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\r
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\r
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\r
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\r
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\r
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\r
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\r
+DAMAGES.\r
+\r
+                    END OF TERMS AND CONDITIONS\r
+\r
+\r
+Appendix C: The MPL License\r
+===========================\r
+\r
+                          MOZILLA PUBLIC LICENSE\r
+                                Version 1.1\r
+\r
+                              ===============\r
+\r
+1. Definitions.\r
+\r
+     1.0.1. "Commercial Use" means distribution or otherwise making the\r
+     Covered Code available to a third party.\r
+\r
+     1.1. "Contributor" means each entity that creates or contributes to\r
+     the creation of Modifications.\r
+\r
+     1.2. "Contributor Version" means the combination of the Original\r
+     Code, prior Modifications used by a Contributor, and the Modifications\r
+     made by that particular Contributor.\r
+\r
+     1.3. "Covered Code" means the Original Code or Modifications or the\r
+     combination of the Original Code and Modifications, in each case\r
+     including portions thereof.\r
+\r
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally\r
+     accepted in the software development community for the electronic\r
+     transfer of data.\r
+\r
+     1.5. "Executable" means Covered Code in any form other than Source\r
+     Code.\r
+\r
+     1.6. "Initial Developer" means the individual or entity identified\r
+     as the Initial Developer in the Source Code notice required by Exhibit\r
+     A.\r
+\r
+     1.7. "Larger Work" means a work which combines Covered Code or\r
+     portions thereof with code not governed by the terms of this License.\r
+\r
+     1.8. "License" means this document.\r
+\r
+     1.8.1. "Licensable" means having the right to grant, to the maximum\r
+     extent possible, whether at the time of the initial grant or\r
+     subsequently acquired, any and all of the rights conveyed herein.\r
+\r
+     1.9. "Modifications" means any addition to or deletion from the\r
+     substance or structure of either the Original Code or any previous\r
+     Modifications. When Covered Code is released as a series of files, a\r
+     Modification is:\r
+          A. Any addition to or deletion from the contents of a file\r
+          containing Original Code or previous Modifications.\r
+\r
+          B. Any new file that contains any part of the Original Code or\r
+          previous Modifications.\r
+\r
+     1.10. "Original Code" means Source Code of computer software code\r
+     which is described in the Source Code notice required by Exhibit A as\r
+     Original Code, and which, at the time of its release under this\r
+     License is not already Covered Code governed by this License.\r
+\r
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or\r
+     hereafter acquired, including without limitation,  method, process,\r
+     and apparatus claims, in any patent Licensable by grantor.\r
+\r
+     1.11. "Source Code" means the preferred form of the Covered Code for\r
+     making modifications to it, including all modules it contains, plus\r
+     any associated interface definition files, scripts used to control\r
+     compilation and installation of an Executable, or source code\r
+     differential comparisons against either the Original Code or another\r
+     well known, available Covered Code of the Contributor's choice. The\r
+     Source Code can be in a compressed or archival form, provided the\r
+     appropriate decompression or de-archiving software is widely available\r
+     for no charge.\r
+\r
+     1.12. "You" (or "Your")  means an individual or a legal entity\r
+     exercising rights under, and complying with all of the terms of, this\r
+     License or a future version of this License issued under Section 6.1.\r
+     For legal entities, "You" includes any entity which controls, is\r
+     controlled by, or is under common control with You. For purposes of\r
+     this definition, "control" means (a) the power, direct or indirect,\r
+     to cause the direction or management of such entity, whether by\r
+     contract or otherwise, or (b) ownership of more than fifty percent\r
+     (50%) of the outstanding shares or beneficial ownership of such\r
+     entity.\r
+\r
+2. Source Code License.\r
+\r
+     2.1. The Initial Developer Grant.\r
+     The Initial Developer hereby grants You a world-wide, royalty-free,\r
+     non-exclusive license, subject to third party intellectual property\r
+     claims:\r
+          (a)  under intellectual property rights (other than patent or\r
+          trademark) Licensable by Initial Developer to use, reproduce,\r
+          modify, display, perform, sublicense and distribute the Original\r
+          Code (or portions thereof) with or without Modifications, and/or\r
+          as part of a Larger Work; and\r
+\r
+          (b) under Patents Claims infringed by the making, using or\r
+          selling of Original Code, to make, have made, use, practice,\r
+          sell, and offer for sale, and/or otherwise dispose of the\r
+          Original Code (or portions thereof).\r
+\r
+          (c) the licenses granted in this Section 2.1(a) and (b) are\r
+          effective on the date Initial Developer first distributes\r
+          Original Code under the terms of this License.\r
+\r
+          (d) Notwithstanding Section 2.1(b) above, no patent license is\r
+          granted: 1) for code that You delete from the Original Code; 2)\r
+          separate from the Original Code;  or 3) for infringements caused\r
+          by: i) the modification of the Original Code or ii) the\r
+          combination of the Original Code with other software or devices.\r
+\r
+     2.2. Contributor Grant.\r
+     Subject to third party intellectual property claims, each Contributor\r
+     hereby grants You a world-wide, royalty-free, non-exclusive license\r
+\r
+          (a)  under intellectual property rights (other than patent or\r
+          trademark) Licensable by Contributor, to use, reproduce, modify,\r
+          display, perform, sublicense and distribute the Modifications\r
+          created by such Contributor (or portions thereof) either on an\r
+          unmodified basis, with other Modifications, as Covered Code\r
+          and/or as part of a Larger Work; and\r
+\r
+          (b) under Patent Claims infringed by the making, using, or\r
+          selling of  Modifications made by that Contributor either alone\r
+          and/or in combination with its Contributor Version (or portions\r
+          of such combination), to make, use, sell, offer for sale, have\r
+          made, and/or otherwise dispose of: 1) Modifications made by that\r
+          Contributor (or portions thereof); and 2) the combination of\r
+          Modifications made by that Contributor with its Contributor\r
+          Version (or portions of such combination).\r
+\r
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are\r
+          effective on the date Contributor first makes Commercial Use of\r
+          the Covered Code.\r
+\r
+          (d)    Notwithstanding Section 2.2(b) above, no patent license is\r
+          granted: 1) for any code that Contributor has deleted from the\r
+          Contributor Version; 2)  separate from the Contributor Version;\r
+          3)  for infringements caused by: i) third party modifications of\r
+          Contributor Version or ii)  the combination of Modifications made\r
+          by that Contributor with other software  (except as part of the\r
+          Contributor Version) or other devices; or 4) under Patent Claims\r
+          infringed by Covered Code in the absence of Modifications made by\r
+          that Contributor.\r
+\r
+3. Distribution Obligations.\r
+\r
+     3.1. Application of License.\r
+     The Modifications which You create or to which You contribute are\r
+     governed by the terms of this License, including without limitation\r
+     Section 2.2. The Source Code version of Covered Code may be\r
+     distributed only under the terms of this License or a future version\r
+     of this License released under Section 6.1, and You must include a\r
+     copy of this License with every copy of the Source Code You\r
+     distribute. You may not offer or impose any terms on any Source Code\r
+     version that alters or restricts the applicable version of this\r
+     License or the recipients' rights hereunder. However, You may include\r
+     an additional document offering the additional rights described in\r
+     Section 3.5.\r
+\r
+     3.2. Availability of Source Code.\r
+     Any Modification which You create or to which You contribute must be\r
+     made available in Source Code form under the terms of this License\r
+     either on the same media as an Executable version or via an accepted\r
+     Electronic Distribution Mechanism to anyone to whom you made an\r
+     Executable version available; and if made available via Electronic\r
+     Distribution Mechanism, must remain available for at least twelve (12)\r
+     months after the date it initially became available, or at least six\r
+     (6) months after a subsequent version of that particular Modification\r
+     has been made available to such recipients. You are responsible for\r
+     ensuring that the Source Code version remains available even if the\r
+     Electronic Distribution Mechanism is maintained by a third party.\r
+\r
+     3.3. Description of Modifications.\r
+     You must cause all Covered Code to which You contribute to contain a\r
+     file documenting the changes You made to create that Covered Code and\r
+     the date of any change. You must include a prominent statement that\r
+     the Modification is derived, directly or indirectly, from Original\r
+     Code provided by the Initial Developer and including the name of the\r
+     Initial Developer in (a) the Source Code, and (b) in any notice in an\r
+     Executable version or related documentation in which You describe the\r
+     origin or ownership of the Covered Code.\r
+\r
+     3.4. Intellectual Property Matters\r
+          (a) Third Party Claims.\r
+          If Contributor has knowledge that a license under a third party's\r
+          intellectual property rights is required to exercise the rights\r
+          granted by such Contributor under Sections 2.1 or 2.2,\r
+          Contributor must include a text file with the Source Code\r
+          distribution titled "LEGAL" which describes the claim and the\r
+          party making the claim in sufficient detail that a recipient will\r
+          know whom to contact. If Contributor obtains such knowledge after\r
+          the Modification is made available as described in Section 3.2,\r
+          Contributor shall promptly modify the LEGAL file in all copies\r
+          Contributor makes available thereafter and shall take other steps\r
+          (such as notifying appropriate mailing lists or newsgroups)\r
+          reasonably calculated to inform those who received the Covered\r
+          Code that new knowledge has been obtained.\r
+\r
+          (b) Contributor APIs.\r
+          If Contributor's Modifications include an application programming\r
+          interface and Contributor has knowledge of patent licenses which\r
+          are reasonably necessary to implement that API, Contributor must\r
+          also include this information in the LEGAL file.\r
+\r
+               (c)    Representations.\r
+          Contributor represents that, except as disclosed pursuant to\r
+          Section 3.4(a) above, Contributor believes that Contributor's\r
+          Modifications are Contributor's original creation(s) and/or\r
+          Contributor has sufficient rights to grant the rights conveyed by\r
+          this License.\r
+\r
+     3.5. Required Notices.\r
+     You must duplicate the notice in Exhibit A in each file of the Source\r
+     Code.  If it is not possible to put such notice in a particular Source\r
+     Code file due to its structure, then You must include such notice in a\r
+     location (such as a relevant directory) where a user would be likely\r
+     to look for such a notice.  If You created one or more Modification(s)\r
+     You may add your name as a Contributor to the notice described in\r
+     Exhibit A.  You must also duplicate this License in any documentation\r
+     for the Source Code where You describe recipients' rights or ownership\r
+     rights relating to Covered Code.  You may choose to offer, and to\r
+     charge a fee for, warranty, support, indemnity or liability\r
+     obligations to one or more recipients of Covered Code. However, You\r
+     may do so only on Your own behalf, and not on behalf of the Initial\r
+     Developer or any Contributor. You must make it absolutely clear than\r
+     any such warranty, support, indemnity or liability obligation is\r
+     offered by You alone, and You hereby agree to indemnify the Initial\r
+     Developer and every Contributor for any liability incurred by the\r
+     Initial Developer or such Contributor as a result of warranty,\r
+     support, indemnity or liability terms You offer.\r
+\r
+     3.6. Distribution of Executable Versions.\r
+     You may distribute Covered Code in Executable form only if the\r
+     requirements of Section 3.1-3.5 have been met for that Covered Code,\r
+     and if You include a notice stating that the Source Code version of\r
+     the Covered Code is available under the terms of this License,\r
+     including a description of how and where You have fulfilled the\r
+     obligations of Section 3.2. The notice must be conspicuously included\r
+     in any notice in an Executable version, related documentation or\r
+     collateral in which You describe recipients' rights relating to the\r
+     Covered Code. You may distribute the Executable version of Covered\r
+     Code or ownership rights under a license of Your choice, which may\r
+     contain terms different from this License, provided that You are in\r
+     compliance with the terms of this License and that the license for the\r
+     Executable version does not attempt to limit or alter the recipient's\r
+     rights in the Source Code version from the rights set forth in this\r
+     License. If You distribute the Executable version under a different\r
+     license You must make it absolutely clear that any terms which differ\r
+     from this License are offered by You alone, not by the Initial\r
+     Developer or any Contributor. You hereby agree to indemnify the\r
+     Initial Developer and every Contributor for any liability incurred by\r
+     the Initial Developer or such Contributor as a result of any such\r
+     terms You offer.\r
+\r
+     3.7. Larger Works.\r
+     You may create a Larger Work by combining Covered Code with other code\r
+     not governed by the terms of this License and distribute the Larger\r
+     Work as a single product. In such a case, You must make sure the\r
+     requirements of this License are fulfilled for the Covered Code.\r
+\r
+4. Inability to Comply Due to Statute or Regulation.\r
+\r
+     If it is impossible for You to comply with any of the terms of this\r
+     License with respect to some or all of the Covered Code due to\r
+     statute, judicial order, or regulation then You must: (a) comply with\r
+     the terms of this License to the maximum extent possible; and (b)\r
+     describe the limitations and the code they affect. Such description\r
+     must be included in the LEGAL file described in Section 3.4 and must\r
+     be included with all distributions of the Source Code. Except to the\r
+     extent prohibited by statute or regulation, such description must be\r
+     sufficiently detailed for a recipient of ordinary skill to be able to\r
+     understand it.\r
+\r
+5. Application of this License.\r
+\r
+     This License applies to code to which the Initial Developer has\r
+     attached the notice in Exhibit A and to related Covered Code.\r
+\r
+6. Versions of the License.\r
+\r
+     6.1. New Versions.\r
+     Netscape Communications Corporation ("Netscape") may publish revised\r
+     and/or new versions of the License from time to time. Each version\r
+     will be given a distinguishing version number.\r
+\r
+     6.2. Effect of New Versions.\r
+     Once Covered Code has been published under a particular version of the\r
+     License, You may always continue to use it under the terms of that\r
+     version. You may also choose to use such Covered Code under the terms\r
+     of any subsequent version of the License published by Netscape. No one\r
+     other than Netscape has the right to modify the terms applicable to\r
+     Covered Code created under this License.\r
+\r
+     6.3. Derivative Works.\r
+     If You create or use a modified version of this License (which you may\r
+     only do in order to apply it to code which is not already Covered Code\r
+     governed by this License), You must (a) rename Your license so that\r
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",\r
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your\r
+     license (except to note that your license differs from this License)\r
+     and (b) otherwise make it clear that Your version of the license\r
+     contains terms which differ from the Mozilla Public License and\r
+     Netscape Public License. (Filling in the name of the Initial\r
+     Developer, Original Code or Contributor in the notice described in\r
+     Exhibit A shall not of themselves be deemed to be modifications of\r
+     this License.)\r
+\r
+7. DISCLAIMER OF WARRANTY.\r
+\r
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,\r
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,\r
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF\r
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.\r
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE\r
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,\r
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE\r
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER\r
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF\r
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.\r
+\r
+8. TERMINATION.\r
+\r
+     8.1.  This License and the rights granted hereunder will terminate\r
+     automatically if You fail to comply with terms herein and fail to cure\r
+     such breach within 30 days of becoming aware of the breach. All\r
+     sublicenses to the Covered Code which are properly granted shall\r
+     survive any termination of this License. Provisions which, by their\r
+     nature, must remain in effect beyond the termination of this License\r
+     shall survive.\r
+\r
+     8.2.  If You initiate litigation by asserting a patent infringement\r
+     claim (excluding declatory judgment actions) against Initial Developer\r
+     or a Contributor (the Initial Developer or Contributor against whom\r
+     You file such action is referred to as "Participant")  alleging that:\r
+\r
+     (a)  such Participant's Contributor Version directly or indirectly\r
+     infringes any patent, then any and all rights granted by such\r
+     Participant to You under Sections 2.1 and/or 2.2 of this License\r
+     shall, upon 60 days notice from Participant terminate prospectively,\r
+     unless if within 60 days after receipt of notice You either: (i)\r
+     agree in writing to pay Participant a mutually agreeable reasonable\r
+     royalty for Your past and future use of Modifications made by such\r
+     Participant, or (ii) withdraw Your litigation claim with respect to\r
+     the Contributor Version against such Participant.  If within 60 days\r
+     of notice, a reasonable royalty and payment arrangement are not\r
+     mutually agreed upon in writing by the parties or the litigation claim\r
+     is not withdrawn, the rights granted by Participant to You under\r
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of\r
+     the 60 day notice period specified above.\r
+\r
+     (b)  any software, hardware, or device, other than such Participant's\r
+     Contributor Version, directly or indirectly infringes any patent, then\r
+     any rights granted to You by such Participant under Sections 2.1(b)\r
+     and 2.2(b) are revoked effective as of the date You first made, used,\r
+     sold, distributed, or had made, Modifications made by that\r
+     Participant.\r
+\r
+     8.3.  If You assert a patent infringement claim against Participant\r
+     alleging that such Participant's Contributor Version directly or\r
+     indirectly infringes any patent where such claim is resolved (such as\r
+     by license or settlement) prior to the initiation of patent\r
+     infringement litigation, then the reasonable value of the licenses\r
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken\r
+     into account in determining the amount or value of any payment or\r
+     license.\r
+\r
+     8.4.  In the event of termination under Sections 8.1 or 8.2 above,\r
+     all end user license agreements (excluding distributors and resellers)\r
+     which have been validly granted by You or any distributor hereunder\r
+     prior to termination shall survive termination.\r
+\r
+9. LIMITATION OF LIABILITY.\r
+\r
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT\r
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL\r
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,\r
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR\r
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY\r
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,\r
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER\r
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN\r
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF\r
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY\r
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW\r
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE\r
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO\r
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.\r
+\r
+10. U.S. GOVERNMENT END USERS.\r
+\r
+     The Covered Code is a "commercial item," as that term is defined in\r
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer\r
+     software" and "commercial computer software documentation," as such\r
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48\r
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),\r
+     all U.S. Government End Users acquire Covered Code with only those\r
+     rights set forth herein.\r
+\r
+11. MISCELLANEOUS.\r
+\r
+     This License represents the complete agreement concerning subject\r
+     matter hereof. If any provision of this License is held to be\r
+     unenforceable, such provision shall be reformed only to the extent\r
+     necessary to make it enforceable. This License shall be governed by\r
+     California law provisions (except to the extent applicable law, if\r
+     any, provides otherwise), excluding its conflict-of-law provisions.\r
+     With respect to disputes in which at least one party is a citizen of,\r
+     or an entity chartered or registered to do business in the United\r
+     States of America, any litigation relating to this License shall be\r
+     subject to the jurisdiction of the Federal Courts of the Northern\r
+     District of California, with venue lying in Santa Clara County,\r
+     California, with the losing party responsible for costs, including\r
+     without limitation, court costs and reasonable attorneys' fees and\r
+     expenses. The application of the United Nations Convention on\r
+     Contracts for the International Sale of Goods is expressly excluded.\r
+     Any law or regulation which provides that the language of a contract\r
+     shall be construed against the drafter shall not apply to this\r
+     License.\r
+\r
+12. RESPONSIBILITY FOR CLAIMS.\r
+\r
+     As between Initial Developer and the Contributors, each party is\r
+     responsible for claims and damages arising, directly or indirectly,\r
+     out of its utilization of rights under this License and You agree to\r
+     work with Initial Developer and Contributors to distribute such\r
+     responsibility on an equitable basis. Nothing herein is intended or\r
+     shall be deemed to constitute any admission of liability.\r
+\r
+13. MULTIPLE-LICENSED CODE.\r
+\r
+     Initial Developer may designate portions of the Covered Code as\r
+     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial\r
+     Developer permits you to utilize portions of the Covered Code under\r
+     Your choice of the NPL or the alternative licenses, if any, specified\r
+     by the Initial Developer in the file described in Exhibit A.\r
+\r
+EXHIBIT A -Mozilla Public License.\r
+\r
+     ``The contents of this file are subject to the Mozilla Public License\r
+     Version 1.1 (the "License"); you may not use this file except in\r
+     compliance with the License. You may obtain a copy of the License at\r
+     http://www.mozilla.org/MPL/\r
+\r
+     Software distributed under the License is distributed on an "AS IS"\r
+     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the\r
+     License for the specific language governing rights and limitations\r
+     under the License.\r
+\r
+     The Original Code is ______________________________________.\r
+\r
+     The Initial Developer of the Original Code is ________________________.\r
+     Portions created by ______________________ are Copyright (C) ______\r
+     _______________________. All Rights Reserved.\r
+\r
+     Contributor(s): ______________________________________.\r
+\r
+     Alternatively, the contents of this file may be used under the terms\r
+     of the _____ license (the  "[___] License"), in which case the\r
+     provisions of [______] License are applicable instead of those\r
+     above.  If you wish to allow use of your version of this file only\r
+     under the terms of the [____] License and not to allow others to use\r
+     your version of this file under the MPL, indicate your decision by\r
+     deleting  the provisions above and replace  them with the notice and\r
+     other provisions required by the [___] License.  If you do not delete\r
+     the provisions above, a recipient may use your version of this file\r
+     under either the MPL or the [___] License."\r
+\r
+     [NOTE: The text of this Exhibit A may differ slightly from the text of\r
+     the notices in the Source Code files of the Original Code. You should\r
+     use the text of this Exhibit A rather than the text found in the\r
+     Original Code Source Code for Your Modifications.]\r
+\r
+== END TEXT ONLY VERSION ==\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>License - CKEditor</title>\r
+</head>\r
+<body>\r
+       <h1>\r
+               Software License Agreement\r
+       </h1>\r
+       <p>\r
+               <strong>CKEditor&trade;</strong> - The text editor for Internet&trade; - <a href="http://ckeditor.com">\r
+                       http://ckeditor.com</a><br />\r
+               Copyright &copy; 2003-2009, <a href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved.\r
+       </p>\r
+       <p>\r
+               Licensed under the terms of any of the following licenses at your choice:\r
+       </p>\r
+       <ul>\r
+               <li><a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a> Version\r
+                       2 or later (the "GPL");</li>\r
+               <li><a href="http://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public License</a>\r
+                       Version 2.1 or later (the "LGPL");</li>\r
+               <li><a href="http://www.mozilla.org/MPL/MPL-1.1.html">Mozilla Public License</a> Version\r
+                       1.1 or later (the "MPL").</li>\r
+       </ul>\r
+       <p>\r
+               You are not required to, but if you want to explicitly declare the license you have\r
+               chosen to be bound to when using, reproducing, modifying and distributing this software,\r
+               just include a text file titled "LEGAL" in your version of this software, indicating\r
+               your license choice. In any case, your choice will not restrict any recipient of\r
+               your version of this software to use, reproduce, modify and distribute this software\r
+               under any of the above licenses.\r
+       </p>\r
+       <h2>\r
+               Sources of Intellectual Property Included in CKEditor\r
+       </h2>\r
+       <p>\r
+               Where not otherwise indicated, all CKEditor content is authored by CKSource engineers\r
+               and consists of CKSource-owned intellectual property. In some specific instances,\r
+               CKEditor will incorporate work done by developers outside of CKSource with their\r
+               express permission.\r
+       </p>\r
+       <p>\r
+               <a href="http://developer.yahoo.com/yui/yuitest/">YUI Test</a>: At _source/tests/yuitest.js\r
+               can be found part of the source code of YUI, which is licensed under the terms of\r
+               the <a href="http://developer.yahoo.com/yui/license.txt">BSD License</a>. YUI is\r
+               Copyright &copy; 2008, Yahoo! Inc.\r
+       </p>\r
+       <h2>\r
+               Trademarks\r
+       </h2>\r
+       <p>\r
+               CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product\r
+               names are trademarks, registered trademarks or service marks of their respective\r
+               holders.\r
+       </p>\r
+</body>\r
+</html>\r
diff --git a/_samples/ajax.html b/_samples/ajax.html
new file mode 100644 (file)
index 0000000..d2ce3bd
--- /dev/null
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Sample - CKEditor</title>\r
+       <meta content="text/html; charset=utf-8" http-equiv="content-type"/>\r
+       <script type="text/javascript" src="../ckeditor.js"></script>\r
+       <script src="sample.js" type="text/javascript"></script>\r
+       <link href="sample.css" rel="stylesheet" type="text/css"/>\r
+       <script id="headscript" type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var editor;\r
+\r
+function createEditor()\r
+{\r
+       if ( editor )\r
+               return;\r
+\r
+       var html = document.getElementById( 'editorcontents' ).innerHTML;\r
+\r
+       // Create a new editor inside the <div id="editor">\r
+       editor = CKEDITOR.appendTo( 'editor' );\r
+       editor.setData( html );\r
+\r
+       // This sample may break here if the ckeditor_basic.js is used. In such case, the following code should be used instead:\r
+       /*\r
+       if ( editor.setData )\r
+               editor.setData( html );\r
+       else\r
+               CKEDITOR.on( 'loaded', function()\r
+                       {\r
+                               editor.setData( html );\r
+                       });\r
+       */\r
+}\r
+\r
+function removeEditor()\r
+{\r
+       if ( !editor )\r
+               return;\r
+\r
+       // Retrieve the editor contents. In an Ajax application, this data would be\r
+       // sent to the server or used in any other way.\r
+       document.getElementById( 'editorcontents' ).innerHTML = editor.getData();\r
+       document.getElementById( 'contents' ).style.display = '';\r
+\r
+       // Destroy the editor.\r
+       editor.destroy();\r
+       editor = null;\r
+}\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Sample\r
+       </h1>\r
+       <!-- This <div> holds alert messages to be display in the sample page. -->\r
+       <div id="alerts">\r
+               <noscript>\r
+                       <p>\r
+                               <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript\r
+                               support, like yours, you should still see the contents (HTML data) and you should\r
+                               be able to edit it normally, without a rich editor interface.\r
+                       </p>\r
+               </noscript>\r
+       </div>\r
+       <!-- This <fieldset> holds the HTML that you will usually find in your\r
+            pages. -->\r
+       <p>\r
+                       <input onclick="createEditor();" type="button" value="Create Editor"/>\r
+                       <input onclick="removeEditor();" type="button" value="Remove Editor"/>\r
+               </p>\r
+               <div id="editor">\r
+               </div>\r
+               <div id="contents" style="display: none">\r
+                       <p>Edited Contents:</p>\r
+                       <div id="editorcontents"/>\r
+               </div>\r
+       <div id="footer">\r
+               <hr/>\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/" shape="rect">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright © 2003-2009, <a href="http://cksource.com/" shape="rect">CKSource</a> - Frederico Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/_samples/api_dialog.html b/_samples/api_dialog.html
new file mode 100644 (file)
index 0000000..652da55
--- /dev/null
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Sample - CKEditor</title>\r
+       <meta content="text/html; charset=utf-8" http-equiv="content-type"/>\r
+       <script type="text/javascript" src="../ckeditor.js"></script>\r
+       <script src="sample.js" type="text/javascript"></script>\r
+       <link href="sample.css" rel="stylesheet" type="text/css"/>\r
+       <style id="styles" type="text/css">\r
+\r
+.cke_button_myDialogCmd .cke_icon\r
+{\r
+       display : none !important;\r
+}\r
+\r
+.cke_button_myDialogCmd .cke_label\r
+{\r
+       display : inline !important;\r
+}\r
+\r
+       </style>\r
+       <script id="headscript" type="text/javascript">\r
+       //<![CDATA[\r
+\r
+// When opening a dialog, its "definition" is created for it, for\r
+// each editor instance. The "dialogDefinition" event is then\r
+// fired. We should use this event to make customizations to the\r
+// definition of existing dialogs.\r
+CKEDITOR.on( 'dialogDefinition', function( ev )\r
+       {\r
+               // Take the dialog name and its definition from the event\r
+               // data.\r
+               var dialogName = ev.data.name;\r
+               var dialogDefinition = ev.data.definition;\r
+\r
+               // Check if the definition is from the dialog we're\r
+               // interested on (the "Link" dialog).\r
+               if ( dialogName == 'link' )\r
+               {\r
+                       // Get a reference to the "Link Info" tab.\r
+                       var infoTab = dialogDefinition.getContents( 'info' );\r
+\r
+                       // Add a text field to the "info" tab.\r
+                       infoTab.add( {\r
+                                       type : 'text',\r
+                                       label : 'My Custom Field',\r
+                                       id : 'customField',\r
+                                       'default' : 'Sample!',\r
+                                       validate : function()\r
+                                       {\r
+                                               if ( /\d/.test( this.getValue() ) )\r
+                                                       return 'My Custom Field must not contain digits';\r
+                                       }\r
+                               });\r
+\r
+                       // Remove the "Link Type" combo and the "Browser\r
+                       // Server" button from the "info" tab.\r
+                       infoTab.remove( 'linkType' );\r
+                       infoTab.remove( 'browse' );\r
+\r
+                       // Set the default value for the URL field.\r
+                       var urlField = infoTab.get( 'url' );\r
+                       urlField['default'] = 'www.example.com';\r
+\r
+                       // Remove the "Target" tab from the "Link" dialog.\r
+                       dialogDefinition.removeContents( 'target' );\r
+\r
+                       // Add a new tab to the "Link" dialog.\r
+                       dialogDefinition.addContents({\r
+                               id : 'customTab',\r
+                               label : 'My Tab',\r
+                               accessKey : 'M',\r
+                               elements : [\r
+                                       {\r
+                                               id : 'myField1',\r
+                                               type : 'text',\r
+                                               label : 'My Text Field'\r
+                                       },\r
+                                       {\r
+                                               id : 'myField2',\r
+                                               type : 'text',\r
+                                               label : 'Another Text Field'\r
+                                       }\r
+                               ]\r
+                       });\r
+               }\r
+       });\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Sample\r
+       </h1>\r
+       <!-- This <div> holds alert messages to be display in the sample page. -->\r
+       <div id="alerts">\r
+               <noscript>\r
+                       <p>\r
+                               <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript\r
+                               support, like yours, you should still see the contents (HTML data) and you should\r
+                               be able to edit it normally, without a rich editor interface.\r
+                       </p>\r
+               </noscript>\r
+       </div>\r
+       <!-- This <fieldset> holds the HTML that you will usually find in your\r
+            pages. -->\r
+       <p>\r
+                       This sample shows how to use the dialog API to customize dialogs whithout changing\r
+                       the original editor code. The following customizations are being done::</p>\r
+               <ol>\r
+                       <li><strong>Add dialog pages</strong> ("My Tab" in the Link dialog).</li>\r
+                       <li><strong>Remove a dialog tab</strong> ("Target" tab from the Link dialog).</li>\r
+                       <li><strong>Add dialog fields</strong> ("My Custom Field" into the Link dialog).</li>\r
+                       <li><strong>Remove dialog fields</strong> ("Link Type" and "Browser Server" the Link dialog).</li>\r
+                       <li><strong>Set default values for dialog fields</strong> (for the "URL" field in the\r
+                               Link dialog). </li>\r
+                       <li><strong>Create a custom dialog</strong> ("My Dialog" button).</li>\r
+               </ol>\r
+               <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://www.fckeditor.net/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\r
+               <script type="text/javascript">\r
+               //<![CDATA[\r
+                       // Replace the <textarea id="editor1"> with an CKEditor instance.\r
+                       var editor = CKEDITOR.replace( 'editor1',\r
+                               {\r
+                                       // Defines a simpler toolbar to be used in this sample.\r
+                                       // Note that we have added out "MyButton" button here.\r
+                                       toolbar : [ [ 'Source', '-', 'Bold', 'Italic', 'Underline', 'Strike','-','Link', '-', 'MyButton' ] ]\r
+                               });\r
+\r
+                       // Listen for the "pluginsLoaded" event, so we are sure that the\r
+                       // "dialog" plugin has been loaded and we are able to do our\r
+                       // customizations.\r
+                       editor.on( 'pluginsLoaded', function( ev )\r
+                               {\r
+                                       // If our custom dialog has not been registered, do that now.\r
+                                       if ( !CKEDITOR.dialog.exists( 'myDialog' ) )\r
+                                       {\r
+                                               // We need to do the following trick to find out the dialog\r
+                                               // definition file URL path. In the real world, you would simply\r
+                                               // point to an absolute path directly, like "/mydir/mydialog.js".\r
+                                               var href = document.location.href.split( '/' );\r
+                                               href.pop();\r
+                                               href.push( 'api_dialog', 'my_dialog.js' );\r
+                                               href = href.join( '/' );\r
+\r
+                                               // Finally, register the dialog.\r
+                                               CKEDITOR.dialog.add( 'myDialog', href );\r
+                                       }\r
+\r
+                                       // Register the command used to open the dialog.\r
+                                       editor.addCommand( 'myDialogCmd', new CKEDITOR.dialogCommand( 'myDialog' ) );\r
+\r
+                                       // Add the a custom toolbar buttons, which fires the above\r
+                                       // command..\r
+                                       editor.ui.addButton( 'MyButton',\r
+                                               {\r
+                                                       label : 'My Dialog',\r
+                                                       command : 'myDialogCmd'\r
+                                               } );\r
+                               });\r
+               //]]>\r
+               </script>\r
+       <div id="footer">\r
+               <hr/>\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/" shape="rect">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright © 2003-2009, <a href="http://cksource.com/" shape="rect">CKSource</a> - Frederico Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/_samples/api_dialog/my_dialog.js b/_samples/api_dialog/my_dialog.js
new file mode 100644 (file)
index 0000000..b107232
--- /dev/null
@@ -0,0 +1,28 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'myDialog', function( editor )\r
+{\r
+       return {\r
+               title : 'My Dialog',\r
+               minWidth : 400,\r
+               minHeight : 200,\r
+               contents : [\r
+                       {\r
+                               id : 'tab1',\r
+                               label : 'First Tab',\r
+                               title : 'First Tab',\r
+                               elements :\r
+                               [\r
+                                       {\r
+                                               id : 'input1',\r
+                                               type : 'text',\r
+                                               label : 'Input 1'\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+} );\r
diff --git a/_samples/divreplace.html b/_samples/divreplace.html
new file mode 100644 (file)
index 0000000..34e0187
--- /dev/null
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Sample - CKEditor</title>\r
+       <meta content="text/html; charset=utf-8" http-equiv="content-type"/>\r
+       <script type="text/javascript" src="../ckeditor.js"></script>\r
+       <script src="sample.js" type="text/javascript"></script>\r
+       <link href="sample.css" rel="stylesheet" type="text/css"/>\r
+       <style id="styles" type="text/css">\r
+\r
+               div.editable\r
+               {\r
+                       border: solid 2px Transparent;\r
+                       padding-left: 15px;\r
+                       padding-right: 15px;\r
+               }\r
+\r
+               div.editable:hover\r
+               {\r
+                       border-color: black;\r
+               }\r
+\r
+       </style>\r
+       <script id="headscript" type="text/javascript">\r
+       //<![CDATA[\r
+\r
+// Uncomment the following code to test the "Timeout Loading Method".\r
+// CKEDITOR.loadFullCoreTimeout = 5;\r
+\r
+window.onload = function()\r
+{\r
+       // Listen to the double click event.\r
+       if ( window.addEventListener )\r
+               document.body.addEventListener( 'dblclick', onDoubleClick, false );\r
+       else if ( window.attachEvent )\r
+               document.body.attachEvent( 'ondblclick', onDoubleClick );\r
+\r
+};\r
+\r
+function onDoubleClick( ev )\r
+{\r
+       // Get the element which fired the event. This is not necessarily the\r
+       // element to which the event has been attached.\r
+       var element = ev.target || ev.srcElement;\r
+\r
+       // Find out the div that holds this element.\r
+       element = element.parentNode;\r
+\r
+       if ( element.nodeName.toLowerCase() == 'div' )\r
+               replaceDiv( element );\r
+}\r
+\r
+var editor;\r
+\r
+function replaceDiv( div )\r
+{\r
+       if ( editor )\r
+               editor.destroy();\r
+\r
+       editor = CKEDITOR.replace( div );\r
+}\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Sample\r
+       </h1>\r
+       <!-- This <div> holds alert messages to be display in the sample page. -->\r
+       <div id="alerts">\r
+               <noscript>\r
+                       <p>\r
+                               <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript\r
+                               support, like yours, you should still see the contents (HTML data) and you should\r
+                               be able to edit it normally, without a rich editor interface.\r
+                       </p>\r
+               </noscript>\r
+       </div>\r
+       <!-- This <fieldset> holds the HTML that you will usually find in your\r
+            pages. -->\r
+       <p>\r
+                       Double-click on any of the following DIVs to transform them into editor instances.</p>\r
+               <div class="editable">\r
+                       <h3>\r
+                               Part 1</h3>\r
+                       <p>\r
+                               Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi\r
+                               semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna\r
+                               rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla\r
+                               nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce\r
+                               eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.\r
+                       </p>\r
+               </div>\r
+               <div class="editable">\r
+                       <h3>\r
+                               Part 2</h3>\r
+                       <p>\r
+                               Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi\r
+                               semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna\r
+                               rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla\r
+                               nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce\r
+                               eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.\r
+                       </p>\r
+                       <p>\r
+                               Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus\r
+                               sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum\r
+                               vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate.\r
+                       </p>\r
+               </div>\r
+               <div class="editable">\r
+                       <h3>\r
+                               Part 3</h3>\r
+                       <p>\r
+                               Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi\r
+                               semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna\r
+                               rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla\r
+                               nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce\r
+                               eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.\r
+                       </p>\r
+               </div>\r
+       <div id="footer">\r
+               <hr/>\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/" shape="rect">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright © 2003-2009, <a href="http://cksource.com/" shape="rect">CKSource</a> - Frederico Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/_samples/enterkey.html b/_samples/enterkey.html
new file mode 100644 (file)
index 0000000..8fa9fc0
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Sample - CKEditor</title>\r
+       <meta content="text/html; charset=utf-8" http-equiv="content-type"/>\r
+       <script type="text/javascript" src="../ckeditor.js"></script>\r
+       <script src="sample.js" type="text/javascript"></script>\r
+       <link href="sample.css" rel="stylesheet" type="text/css"/>\r
+       <script id="headscript" type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var editor;\r
+\r
+function changeEnter()\r
+{\r
+       // If we already have an editor, let's destroy it first.\r
+       if ( editor )\r
+               editor.destroy( true );\r
+\r
+       // Create the editor again, with the appropriate settings.\r
+       editor = CKEDITOR.replace( 'editor1',\r
+               {\r
+                       enterMode               : Number( document.getElementById( 'xEnter' ).value ),\r
+                       shiftEnterMode  : Number( document.getElementById( 'xShiftEnter' ).value )\r
+               });\r
+}\r
+\r
+window.onload = changeEnter;\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Sample\r
+       </h1>\r
+       <!-- This <div> holds alert messages to be display in the sample page. -->\r
+       <div id="alerts">\r
+               <noscript>\r
+                       <p>\r
+                               <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript\r
+                               support, like yours, you should still see the contents (HTML data) and you should\r
+                               be able to edit it normally, without a rich editor interface.\r
+                       </p>\r
+               </noscript>\r
+       </div>\r
+       <!-- This <fieldset> holds the HTML that you will usually find in your\r
+            pages. -->\r
+       <div style="float: left; margin-right: 20px">\r
+                       When ENTER is pressed:<br/>\r
+                       <select id="xEnter" onchange="changeEnter();">\r
+                               <option selected="selected" value="1">Create new &lt;P&gt; (recommended)</option>\r
+                               <option value="3">Create new &lt;DIV&gt;</option>\r
+                               <option value="2">Break the line with a &lt;BR&gt;</option>\r
+                       </select>\r
+               </div>\r
+               <div style="float: left">\r
+                       When SHIFT + ENTER is pressed:<br/>\r
+                       <select id="xShiftEnter" onchange="changeEnter();">\r
+                               <option value="1">Create new &lt;P&gt;</option>\r
+                               <option value="3">Create new &lt;DIV&gt;</option>\r
+                               <option selected="selected" value="2">Break the line with a &lt;BR&gt; (recommended)</option>\r
+                       </select>\r
+               </div>\r
+               <br style="clear: both"/>\r
+\r
+               <form action="sample_posteddata.php" method="post">\r
+                       <p>\r
+                               <br/>\r
+                               <textarea cols="80" id="editor1" name="editor1" rows="10">This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://www.fckeditor.net/"&gt;CKEditor&lt;/a&gt;.</textarea>\r
+                       </p>\r
+                       <p>\r
+                               <input type="submit" value="Submit"/>\r
+                       </p>\r
+               </form>\r
+       <div id="footer">\r
+               <hr/>\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/" shape="rect">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright © 2003-2009, <a href="http://cksource.com/" shape="rect">CKSource</a> - Frederico Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/_samples/index.html b/_samples/index.html
new file mode 100644 (file)
index 0000000..27b869f
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Samples List - CKEditor</title>\r
+       <link type="text/css" rel="stylesheet" href="sample.css" />\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Samples List\r
+       </h1>\r
+       <h2>\r
+               Basic Samples\r
+       </h2>\r
+       <ul>\r
+               <li><a href="replacebyclass.html">Replace textareas by class name</a></li>\r
+               <li><a href="replacebycode.html">Replace textareas by code</a></li>\r
+       </ul>\r
+       <h2>\r
+               Basic Customization\r
+       </h2>\r
+       <ul>\r
+               <li><a href="skins.html">Skins</a></li>\r
+               <li><a href="ui_color.html">User Interface Color</a></li>\r
+               <li><a href="ui_languages.html">User Interface Languages</a></li>\r
+       </ul>\r
+       <h2>\r
+               Advanced Samples\r
+       </h2>\r
+       <ul>\r
+               <li><a href="divreplace.html">Replace DIV elements on the fly</a>&nbsp; </li>\r
+               <li><a href="ajax.html">Create and destroy editor instances for Ajax applications</a></li>\r
+               <li><a href="api_dialog.html">Using the JavaScript API to customize dialogs</a></li>\r
+               <li><a href="enterkey.html">Using the "Enter" key in CKEditor</a></li>\r
+       </ul>\r
+       <div id="footer">\r
+               <hr />\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright &copy; 2003-2009, <a href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/_samples/replacebyclass.html b/_samples/replacebyclass.html
new file mode 100644 (file)
index 0000000..0b58cf2
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Sample - CKEditor</title>\r
+       <meta content="text/html; charset=utf-8" http-equiv="content-type"/>\r
+       <script type="text/javascript" src="../ckeditor.js"></script>\r
+       <script src="sample.js" type="text/javascript"></script>\r
+       <link href="sample.css" rel="stylesheet" type="text/css"/>\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Sample\r
+       </h1>\r
+       <!-- This <div> holds alert messages to be display in the sample page. -->\r
+       <div id="alerts">\r
+               <noscript>\r
+                       <p>\r
+                               <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript\r
+                               support, like yours, you should still see the contents (HTML data) and you should\r
+                               be able to edit it normally, without a rich editor interface.\r
+                       </p>\r
+               </noscript>\r
+       </div>\r
+       <!-- This <fieldset> holds the HTML that you will usually find in your\r
+            pages. -->\r
+       <form action="sample_posteddata.php" method="post">\r
+                       <p>\r
+                               <label for="editor1">\r
+                                       Editor 1:</label><br/>\r
+                               <textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://www.fckeditor.net/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\r
+                       </p>\r
+                       <p>\r
+                               <input type="submit" value="Submit"/>\r
+                       </p>\r
+               </form>\r
+       <div id="footer">\r
+               <hr/>\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/" shape="rect">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright © 2003-2009, <a href="http://cksource.com/" shape="rect">CKSource</a> - Frederico Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/_samples/replacebycode.html b/_samples/replacebycode.html
new file mode 100644 (file)
index 0000000..60720e8
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Sample - CKEditor</title>\r
+       <meta content="text/html; charset=utf-8" http-equiv="content-type"/>\r
+       <script type="text/javascript" src="../ckeditor.js"></script>\r
+       <script src="sample.js" type="text/javascript"></script>\r
+       <link href="sample.css" rel="stylesheet" type="text/css"/>\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Sample\r
+       </h1>\r
+       <!-- This <div> holds alert messages to be display in the sample page. -->\r
+       <div id="alerts">\r
+               <noscript>\r
+                       <p>\r
+                               <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript\r
+                               support, like yours, you should still see the contents (HTML data) and you should\r
+                               be able to edit it normally, without a rich editor interface.\r
+                       </p>\r
+               </noscript>\r
+       </div>\r
+       <!-- This <fieldset> holds the HTML that you will usually find in your\r
+            pages. -->\r
+       <form action="sample_posteddata.php" method="post">\r
+                       <p>\r
+                               <label for="editor1">\r
+                                       Editor 1:</label><br/>\r
+                               <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://www.fckeditor.net/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\r
+                               <script type="text/javascript">\r
+                               //<![CDATA[\r
+\r
+                                       // This call can be placed at any point after the\r
+                                       // <textarea>, or inside a <head><script> in a\r
+                                       // window.onload event handler.\r
+\r
+                                       // Replace the <textarea id="editor"> with an CKEditor\r
+                                       // instance, using default configurations.\r
+                                       CKEDITOR.replace( 'editor1' );\r
+\r
+                               //]]>\r
+                               </script>\r
+                       </p>\r
+                       <p>\r
+                               <label for="editor2">\r
+                                       Editor 2:</label><br/>\r
+                               <textarea cols="80" id="editor2" 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://www.fckeditor.net/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\r
+                               <script type="text/javascript">\r
+                               //<![CDATA[\r
+\r
+                                       // This call can be placed at any point after the\r
+                                       // <textarea>, or inside a <head><script> in a\r
+                                       // window.onload event handler.\r
+\r
+                                       // Replace the <textarea id="editor"> with an CKEditor\r
+                                       // instance, using default configurations.\r
+                                       CKEDITOR.replace( 'editor2' );\r
+\r
+                               //]]>\r
+                               </script>\r
+                       </p>\r
+                       <p>\r
+                               <input type="submit" value="Submit"/>\r
+                       </p>\r
+               </form>\r
+       <div id="footer">\r
+               <hr/>\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/" shape="rect">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright © 2003-2009, <a href="http://cksource.com/" shape="rect">CKSource</a> - Frederico Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/_samples/sample.css b/_samples/sample.css
new file mode 100644 (file)
index 0000000..3796509
--- /dev/null
@@ -0,0 +1,81 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+fieldset\r
+{\r
+       margin: 0;\r
+       padding: 10px;\r
+}\r
+\r
+form\r
+{\r
+       margin: 0;\r
+       padding: 0;\r
+}\r
+\r
+pre\r
+{\r
+       background-color: #F7F7F7;\r
+       border: 1px solid #D7D7D7;\r
+       overflow: auto;\r
+       margin: 0;\r
+       padding: 0.25em;\r
+}\r
+\r
+#alerts\r
+{\r
+       color: Red;\r
+}\r
+\r
+#footer hr\r
+{\r
+       margin: 10px 0 15px 0;\r
+       height: 1px;\r
+       border: solid 1px gray;\r
+       border-bottom: none;\r
+}\r
+\r
+#footer p\r
+{\r
+       margin: 0 10px 10px 10px;\r
+       float: left;\r
+}\r
+\r
+#footer #copy\r
+{\r
+       float: right;\r
+}\r
+\r
+#outputSample\r
+{\r
+       width: 100%;\r
+       table-layout: fixed;\r
+}\r
+\r
+#outputSample thead th\r
+{\r
+       color: #dddddd;\r
+       background-color: #999999;\r
+       padding: 4px;\r
+       white-space: nowrap;\r
+}\r
+\r
+#outputSample tbody th\r
+{\r
+       vertical-align: top;\r
+       text-align: left;\r
+}\r
+\r
+#outputSample pre\r
+{\r
+       margin: 0;\r
+       padding: 0;\r
+       white-space: pre; /* CSS2 */\r
+       white-space: -moz-pre-wrap; /* Mozilla*/\r
+       white-space: -o-pre-wrap; /* Opera 7 */\r
+       white-space: pre-wrap; /* CSS 2.1 */\r
+       white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */\r
+       word-wrap: break-word; /* IE */\r
+}\r
diff --git a/_samples/sample.js b/_samples/sample.js
new file mode 100644 (file)
index 0000000..7c13452
--- /dev/null
@@ -0,0 +1,71 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+// This file is not required by CKEditor and may be safely ignored.\r
+// It is just a helper file that displays a red message about browser compatibility\r
+// at the top of the samples (if incompatible browser is detected).\r
+\r
+// Firebug has been presented some bugs with console. It must be "initialized"\r
+// before the page load to work.\r
+// FIXME: Remove the following in the future, if Firebug gets fixed.\r
+if ( typeof console != 'undefined' )\r
+       console.log();\r
+\r
+\r
+if ( window.CKEDITOR )\r
+{\r
+       (function()\r
+       {\r
+               var showCompatibilityMsg = function()\r
+               {\r
+                       var env = CKEDITOR.env;\r
+\r
+                       var html = '<p><strong>Your browser is not compatible with CKEditor.</strong>';\r
+\r
+                       var browsers =\r
+                       {\r
+                               gecko : 'Firefox 2.0',\r
+                               ie : 'Internet Explorer 6.0',\r
+                               opera : 'Opera 9.5',\r
+                               webkit : 'Safari 3.0'\r
+                       };\r
+\r
+                       var alsoBrowsers = '';\r
+\r
+                       for ( var key in env )\r
+                       {\r
+                               if ( browsers[ key ] )\r
+                               {\r
+                                       if ( env[key] )\r
+                                               html += ' CKEditor is compatible with ' + browsers[ key ] + ' or higher.';\r
+                                       else\r
+                                               alsoBrowsers += browsers[ key ] + '+, ';\r
+                               }\r
+                       }\r
+\r
+                       alsoBrowsers = alsoBrowsers.replace( /\+,([^,]+), $/, '+ and $1' );\r
+\r
+                       html += ' It is also compatible with ' + alsoBrowsers + '.';\r
+\r
+                       html += '</p><p>With non compatible browsers, you should still be able to see and edit the contents (HTML) in a plain text field.</p>';\r
+\r
+                       document.getElementById( 'alerts' ).innerHTML = html;\r
+               };\r
+\r
+               var onload = function()\r
+               {\r
+                       // Show a friendly compatibility message as soon as the page is loaded,\r
+                       // for those browsers that are not compatible with CKEditor.\r
+                       if ( !CKEDITOR.env.isCompatible )\r
+                               showCompatibilityMsg();\r
+               };\r
+\r
+               // Register the onload listener.\r
+               if ( window.addEventListener )\r
+                       window.addEventListener( 'load', onload, false );\r
+               else if ( window.attachEvent )\r
+                       window.attachEvent( 'onload', onload );\r
+       })();\r
+}\r
diff --git a/_samples/sample_posteddata.php b/_samples/sample_posteddata.php
new file mode 100644 (file)
index 0000000..0776001
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<?php\r
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+?>\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Sample - CKEditor</title>\r
+       <meta http-equiv="content-type" content="text/html; charset=utf-8" />\r
+       <link type="text/css" rel="stylesheet" href="sample.css" />\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor - Posted Data\r
+       </h1>\r
+       <table border="1" cellspacing="0" id="outputSample">\r
+               <colgroup><col width="100" /></colgroup>\r
+               <thead>\r
+                       <tr>\r
+                               <th>Field&nbsp;Name</th>\r
+                               <th>Value</th>\r
+                       </tr>\r
+               </thead>\r
+<?php\r
+\r
+if ( isset( $_POST ) )\r
+       $postArray = &$_POST ;                  // 4.1.0 or later, use $_POST\r
+else\r
+       $postArray = &$HTTP_POST_VARS ; // prior to 4.1.0, use HTTP_POST_VARS\r
+\r
+foreach ( $postArray as $sForm => $value )\r
+{\r
+       if ( get_magic_quotes_gpc() )\r
+               $postedValue = htmlspecialchars( stripslashes( $value ) ) ;\r
+       else\r
+               $postedValue = htmlspecialchars( $value ) ;\r
+\r
+?>\r
+               <tr>\r
+                       <th style="vertical-align: top"><?php echo $sForm?></th>\r
+                       <td><pre><?php echo $postedValue?></pre></td>\r
+               </tr>\r
+       <?php\r
+}\r
+?>\r
+       </table>\r
+       <div id="footer">\r
+               <hr />\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright &copy; 2003-2009, <a href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/_samples/skins.html b/_samples/skins.html
new file mode 100644 (file)
index 0000000..3f26d04
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Sample - CKEditor</title>\r
+       <meta content="text/html; charset=utf-8" http-equiv="content-type"/>\r
+       <script type="text/javascript" src="../ckeditor.js"></script>\r
+       <script src="sample.js" type="text/javascript"></script>\r
+       <link href="sample.css" rel="stylesheet" type="text/css"/>\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Sample\r
+       </h1>\r
+       <!-- This <div> holds alert messages to be display in the sample page. -->\r
+       <div id="alerts">\r
+               <noscript>\r
+                       <p>\r
+                               <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript\r
+                               support, like yours, you should still see the contents (HTML data) and you should\r
+                               be able to edit it normally, without a rich editor interface.\r
+                       </p>\r
+               </noscript>\r
+       </div>\r
+       <!-- This <fieldset> holds the HTML that you will usually find in your\r
+            pages. -->\r
+       <form action="sample_posteddata.php" method="post">\r
+                       <p>\r
+                               "Kama" skin:<br/>\r
+                               <textarea cols="80" id="editor_kama" name="editor_kama" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://www.fckeditor.net/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\r
+                               <script type="text/javascript">\r
+                               //<![CDATA[\r
+\r
+                                       CKEDITOR.replace( 'editor_kama',\r
+                                               {\r
+                                                       skin : 'kama'\r
+                                               });\r
+\r
+                               //]]>\r
+                               </script>\r
+                       </p>\r
+                       <p>\r
+                               "Office 2003" skin:<br/>\r
+                               <textarea cols="80" id="editor_office2003" name="editor_office2003" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://www.fckeditor.net/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\r
+                               <script type="text/javascript">\r
+                               //<![CDATA[\r
+\r
+                                       CKEDITOR.replace( 'editor_office2003',\r
+                                               {\r
+                                                       skin : 'office2003'\r
+                                               });\r
+\r
+                               //]]>\r
+                               </script>\r
+                       </p>\r
+                       <p>\r
+                               "V2" skin:<br/>\r
+                               <textarea cols="80" id="editor_v2" name="editor_v2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://www.fckeditor.net/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\r
+                               <script type="text/javascript">\r
+                               //<![CDATA[\r
+\r
+                                       CKEDITOR.replace( 'editor_v2',\r
+                                               {\r
+                                                       skin : 'v2'\r
+                                               });\r
+\r
+                               //]]>\r
+                               </script>\r
+                       </p>\r
+               </form>\r
+       <div id="footer">\r
+               <hr/>\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/" shape="rect">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright © 2003-2009, <a href="http://cksource.com/" shape="rect">CKSource</a> - Frederico Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/_samples/ui_color.html b/_samples/ui_color.html
new file mode 100644 (file)
index 0000000..98d3d76
--- /dev/null
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Sample - CKEditor</title>\r
+       <meta content="text/html; charset=utf-8" http-equiv="content-type"/>\r
+       <script type="text/javascript" src="../ckeditor.js"></script>\r
+       <script src="sample.js" type="text/javascript"></script>\r
+       <link href="sample.css" rel="stylesheet" type="text/css"/>\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Sample\r
+       </h1>\r
+       <!-- This <div> holds alert messages to be display in the sample page. -->\r
+       <div id="alerts">\r
+               <noscript>\r
+                       <p>\r
+                               <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript\r
+                               support, like yours, you should still see the contents (HTML data) and you should\r
+                               be able to edit it normally, without a rich editor interface.\r
+                       </p>\r
+               </noscript>\r
+       </div>\r
+       <!-- This <fieldset> holds the HTML that you will usually find in your\r
+            pages. -->\r
+       <p>Click the UI Color Picker button to test your color preferences at runtime.</p>\r
+               <form action="sample_posteddata.php" method="post">\r
+                       <p>\r
+                               <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://www.fckeditor.net/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\r
+                               <script type="text/javascript">\r
+                               //<![CDATA[\r
+\r
+                                       // Replace the <textarea id="editor"> with an CKEditor\r
+                                       // instance, using default configurations.\r
+                                       CKEDITOR.replace( 'editor1',\r
+                                               {\r
+                                                       extraPlugins : 'uicolor',\r
+                                                       toolbar :\r
+                                                       [\r
+                                                               [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ],\r
+                                                               [ 'UIColor' ]\r
+                                                       ]\r
+                                               });\r
+\r
+                               //]]>\r
+                               </script>\r
+                       </p>\r
+                       <p>\r
+                               <textarea cols="80" id="editor2" 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://www.fckeditor.net/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\r
+                               <script type="text/javascript">\r
+                               //<![CDATA[\r
+\r
+                                       // Replace the <textarea id="editor"> with an CKEditor\r
+                                       // instance, using default configurations.\r
+                                       CKEDITOR.replace( 'editor2',\r
+                                               {\r
+                                                       extraPlugins : 'uicolor',\r
+                                                       uiColor: '#14B8C4',\r
+                                                       toolbar :\r
+                                                       [\r
+                                                               [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ],\r
+                                                               [ 'UIColor' ]\r
+                                                       ]\r
+                                               } );\r
+\r
+                               //]]>\r
+                               </script>\r
+                       </p>\r
+                       <p>\r
+                               <input type="submit" value="Submit"/>\r
+                       </p>\r
+               </form>\r
+       <div id="footer">\r
+               <hr/>\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/" shape="rect">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright © 2003-2009, <a href="http://cksource.com/" shape="rect">CKSource</a> - Frederico Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/_samples/ui_languages.html b/_samples/ui_languages.html
new file mode 100644 (file)
index 0000000..b95c5f6
--- /dev/null
@@ -0,0 +1,115 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Sample - CKEditor</title>\r
+       <meta content="text/html; charset=utf-8" http-equiv="content-type"/>\r
+       <script type="text/javascript" src="../ckeditor.js"></script>\r
+       <script src="sample.js" type="text/javascript"></script>\r
+       <link href="sample.css" rel="stylesheet" type="text/css"/>\r
+       <script id="headscript" type="text/javascript">\r
+       //<![CDATA[\r
+\r
+       document.write( '<script type="text/javascript" src="../' +\r
+               'lang/_languages.js"><\/script>' );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <h1>\r
+               CKEditor Sample\r
+       </h1>\r
+       <!-- This <div> holds alert messages to be display in the sample page. -->\r
+       <div id="alerts">\r
+               <noscript>\r
+                       <p>\r
+                               <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript\r
+                               support, like yours, you should still see the contents (HTML data) and you should\r
+                               be able to edit it normally, without a rich editor interface.\r
+                       </p>\r
+               </noscript>\r
+       </div>\r
+       <!-- This <fieldset> holds the HTML that you will usually find in your\r
+            pages. -->\r
+       <form action="sample_posteddata.php" method="post">\r
+                       <p>\r
+                               <label for="editor1">\r
+                                       Available languages (<span id="count"> </span>\r
+                                       languages!):</label><br/>\r
+                               <select disabled="disabled" id="languages" onchange="createEditor( this.value );">\r
+                                       <script type="text/javascript">\r
+                                       //<![CDATA[\r
+\r
+                                               // Get the language list from the _languages.js file.\r
+                                               for ( var i = 0 ; i < window.CKEDITOR_LANGS.length ; i++ )\r
+                                               {\r
+                                                       document.write(\r
+                                                               '<option value="' + window.CKEDITOR_LANGS[i].code + '">' +\r
+                                                                       window.CKEDITOR_LANGS[i].name +\r
+                                                               '</option>' );\r
+                                               }\r
+\r
+                                       //]]>\r
+                                       </script>\r
+                               </select>\r
+                               <br/>\r
+                               <span style="color: #888888">(You may see strange characters if your system doesn't\r
+                                       support the selected language)</span>\r
+                       </p>\r
+                       <p>\r
+                               <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://www.fckeditor.net/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>\r
+                               <script type="text/javascript">\r
+                               //<![CDATA[\r
+\r
+                                       // Set the number of languages.\r
+                                       document.getElementById( 'count' ).innerHTML = window.CKEDITOR_LANGS.length;\r
+\r
+                                       var editor;\r
+\r
+                                       function createEditor( languageCode )\r
+                                       {\r
+                                               if ( editor )\r
+                                                       editor.destroy();\r
+\r
+                                               // Replace the <textarea id="editor"> with an CKEditor\r
+                                               // instance, using default configurations.\r
+                                               editor = CKEDITOR.replace( 'editor1',\r
+                                                       {\r
+                                                               language : languageCode,\r
+\r
+                                                               on :\r
+                                                               {\r
+                                                                       instanceReady : function()\r
+                                                                       {\r
+                                                                               // Wait for the editor to be ready to set\r
+                                                                               // the language combo.\r
+                                                                               var languages = document.getElementById( 'languages' );\r
+                                                                               languages.value = this.langCode;\r
+                                                                               languages.disabled = false;\r
+                                                                       }\r
+                                                               }\r
+                                                       } );\r
+                                       }\r
+\r
+                                       // At page startup, load the default language:\r
+                                       createEditor( '' );\r
+\r
+                               //]]>\r
+                               </script>\r
+                       </p>\r
+               </form>\r
+       <div id="footer">\r
+               <hr/>\r
+               <p>\r
+                       CKEditor - The text editor for Internet - <a href="http://ckeditor.com/" shape="rect">http://ckeditor.com</a>\r
+               </p>\r
+               <p id="copy">\r
+                       Copyright © 2003-2009, <a href="http://cksource.com/" shape="rect">CKSource</a> - Frederico Knabben. All rights reserved.\r
+               </p>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/_source/core/_bootstrap.js b/_source/core/_bootstrap.js
new file mode 100644 (file)
index 0000000..6c0440d
--- /dev/null
@@ -0,0 +1,64 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview API initialization code.\r
+ */\r
+\r
+(function()\r
+{\r
+       // Check is High Contrast is active by creating a temporary element with a\r
+       // background image.\r
+\r
+       var testImage = ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 ) ? ( CKEDITOR.basePath + 'images/spacer.gif' ) : 'about:blank';\r
+\r
+       var hcDetect = CKEDITOR.dom.element.createFromHtml(\r
+               '<div style="width:0px;height:0px;' +\r
+                       'position:absolute;left:-10000px;' +\r
+                       'background-image:url(' + testImage + ')"></div>', CKEDITOR.document );\r
+\r
+       hcDetect.appendTo( CKEDITOR.document.getHead() );\r
+\r
+       // Update CKEDITOR.env.\r
+       if ( ( CKEDITOR.env.hc = ( hcDetect.getComputedStyle( 'background-image' ) == 'none' ) ) )\r
+               CKEDITOR.env.cssClass += ' cke_hc';\r
+\r
+       hcDetect.remove();\r
+})();\r
+\r
+// Load core plugins.\r
+CKEDITOR.plugins.load( CKEDITOR.config.corePlugins.split( ',' ), function()\r
+       {\r
+               CKEDITOR.status = 'loaded';\r
+               CKEDITOR.fire( 'loaded' );\r
+\r
+               // Process all instances created by the "basic" implementation.\r
+               var pending = CKEDITOR._.pending;\r
+               if ( pending )\r
+               {\r
+                       delete CKEDITOR._.pending;\r
+\r
+                       for ( var i = 0 ; i < pending.length ; i++ )\r
+                               CKEDITOR.add( pending[ i ] );\r
+               }\r
+       });\r
+\r
+/*\r
+TODO: Enable the following and check if effective.\r
+\r
+if ( CKEDITOR.env.ie )\r
+{\r
+       // Remove IE mouse flickering on IE6 because of background images.\r
+       try\r
+       {\r
+               document.execCommand( 'BackgroundImageCache', false, true );\r
+       }\r
+       catch (e)\r
+       {\r
+               // We have been reported about loading problems caused by the above\r
+               // line. For safety, let's just ignore errors.\r
+       }\r
+}\r
+*/\r
diff --git a/_source/core/ajax.js b/_source/core/ajax.js
new file mode 100644 (file)
index 0000000..ad20ba6
--- /dev/null
@@ -0,0 +1,143 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.ajax} object, which holds ajax methods for\r
+ *             data loading.\r
+ */\r
+\r
+/**\r
+ * Ajax methods for data loading.\r
+ * @namespace\r
+ * @example\r
+ */\r
+CKEDITOR.ajax = (function()\r
+{\r
+       var createXMLHttpRequest = function()\r
+       {\r
+               // In IE, using the native XMLHttpRequest for local files may throw\r
+               // "Access is Denied" errors.\r
+               if ( !CKEDITOR.env.ie || location.protocol != 'file:' )\r
+                       try { return new XMLHttpRequest(); } catch(e) {}\r
+\r
+               try { return new ActiveXObject( 'Msxml2.XMLHTTP' ); } catch (e) {}\r
+               try { return new ActiveXObject( 'Microsoft.XMLHTTP' ); } catch (e) {}\r
+\r
+               return null;\r
+       };\r
+\r
+       var checkStatus = function( xhr )\r
+       {\r
+               // HTTP Status Codes:\r
+               //       2xx : Success\r
+               //       304 : Not Modified\r
+               //         0 : Returned when running locally (file://)\r
+               //      1223 : IE may change 204 to 1223 (see http://dev.jquery.com/ticket/1450)\r
+\r
+               return ( xhr.readyState == 4 &&\r
+                               (       ( xhr.status >= 200 && xhr.status < 300 ) ||\r
+                                       xhr.status == 304 ||\r
+                                       xhr.status === 0 ||\r
+                                       xhr.status == 1223 ) );\r
+       };\r
+\r
+       var getResponseText = function( xhr )\r
+       {\r
+               if ( checkStatus( xhr ) )\r
+                       return xhr.responseText;\r
+               return null;\r
+       };\r
+\r
+       var getResponseXml = function( xhr )\r
+       {\r
+               if ( checkStatus( xhr ) )\r
+               {\r
+                       var xml = xhr.responseXML;\r
+                       return new CKEDITOR.xml( xml && xml.firstChild ? xml : xhr.responseText );\r
+               }\r
+               return null;\r
+       };\r
+\r
+       var load = function( url, callback, getResponseFn )\r
+       {\r
+               var async = !!callback;\r
+\r
+               var xhr = createXMLHttpRequest();\r
+\r
+               if ( !xhr )\r
+                       return null;\r
+\r
+               xhr.open( 'GET', url, async );\r
+\r
+               if ( async )\r
+               {\r
+                       // TODO: perform leak checks on this closure.\r
+                       /** @ignore */\r
+                       xhr.onreadystatechange = function()\r
+                       {\r
+                               if ( xhr.readyState == 4 )\r
+                               {\r
+                                       callback( getResponseFn( xhr ) );\r
+                                       xhr = null;\r
+                               }\r
+                       };\r
+               }\r
+\r
+               xhr.send(null);\r
+\r
+               return async ? '' : getResponseFn( xhr );\r
+       };\r
+\r
+       return  /** @lends CKEDITOR.ajax */ {\r
+\r
+               /**\r
+                * Loads data from an URL as plain text.\r
+                * @param {String} url The URL from which load data.\r
+                * @param {Function} [callback] A callback function to be called on\r
+                *              data load. If not provided, the data will be loaded\r
+                *              asynchronously, passing the data value the function on load.\r
+                * @returns {String} The loaded data. For asynchronous requests, an\r
+                *              empty string. For invalid requests, null.\r
+                * @example\r
+                * // Load data synchronously.\r
+                * var data = CKEDITOR.ajax.load( 'somedata.txt' );\r
+                * alert( data );\r
+                * @example\r
+                * // Load data asynchronously.\r
+                * var data = CKEDITOR.ajax.load( 'somedata.txt', function( data )\r
+                *     {\r
+                *         alert( data );\r
+                *     } );\r
+                */\r
+               load : function( url, callback )\r
+               {\r
+                       return load( url, callback, getResponseText );\r
+               },\r
+\r
+               /**\r
+                * Loads data from an URL as XML.\r
+                * @param {String} url The URL from which load data.\r
+                * @param {Function} [callback] A callback function to be called on\r
+                *              data load. If not provided, the data will be loaded\r
+                *              asynchronously, passing the data value the function on load.\r
+                * @returns {CKEDITOR.xml} An XML object holding the loaded data. For asynchronous requests, an\r
+                *              empty string. For invalid requests, null.\r
+                * @example\r
+                * // Load XML synchronously.\r
+                * var xml = CKEDITOR.ajax.loadXml( 'somedata.xml' );\r
+                * alert( xml.getInnerXml( '//' ) );\r
+                * @example\r
+                * // Load XML asynchronously.\r
+                * var data = CKEDITOR.ajax.loadXml( 'somedata.xml', function( xml )\r
+                *     {\r
+                *         alert( xml.getInnerXml( '//' ) );\r
+                *     } );\r
+                */\r
+               loadXml : function( url, callback )\r
+               {\r
+                       return load( url, callback, getResponseXml );\r
+               }\r
+       };\r
+})();\r
diff --git a/_source/core/ckeditor.js b/_source/core/ckeditor.js
new file mode 100644 (file)
index 0000000..85da621
--- /dev/null
@@ -0,0 +1,96 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Contains the third and last part of the {@link CKEDITOR} object\r
+ *             definition.\r
+ */\r
+\r
+// Remove the CKEDITOR.loadFullCore reference defined on ckeditor_basic.\r
+delete CKEDITOR.loadFullCore;\r
+\r
+/**\r
+ * Holds references to all editor instances created. The name of the properties\r
+ * in this object correspond to instance names, and their values contains the\r
+ * {@link CKEDITOR.editor} object representing them.\r
+ * @type {Object}\r
+ * @example\r
+ * alert( <b>CKEDITOR.instances</b>.editor1.name );  // "editor1"\r
+ */\r
+CKEDITOR.instances = {};\r
+\r
+/**\r
+ * The document of the window holding the CKEDITOR object.\r
+ * @type {CKEDITOR.dom.document}\r
+ * @example\r
+ * alert( <b>CKEDITOR.document</b>.getBody().getName() );  // "body"\r
+ */\r
+CKEDITOR.document = new CKEDITOR.dom.document( document );\r
+\r
+/**\r
+ * Adds an editor instance to the global {@link CKEDITOR} object. This function\r
+ * is available for internal use mainly.\r
+ * @param {CKEDITOR.editor} editor The editor instance to be added.\r
+ * @example\r
+ */\r
+CKEDITOR.add = function( editor )\r
+{\r
+       CKEDITOR.instances[ editor.name ] = editor;\r
+\r
+       editor.on( 'focus', function()\r
+               {\r
+                       if ( CKEDITOR.currentInstance != editor )\r
+                       {\r
+                               CKEDITOR.currentInstance = editor;\r
+                               CKEDITOR.fire( 'currentInstance' );\r
+                       }\r
+               });\r
+\r
+       editor.on( 'blur', function()\r
+               {\r
+                       if ( CKEDITOR.currentInstance == editor )\r
+                       {\r
+                               CKEDITOR.currentInstance = null;\r
+                               CKEDITOR.fire( 'currentInstance' );\r
+                       }\r
+               });\r
+};\r
+\r
+/**\r
+ * Removes and editor instance from the global {@link CKEDITOR} object. his function\r
+ * is available for internal use mainly.\r
+ * @param {CKEDITOR.editor} editor The editor instance to be added.\r
+ * @example\r
+ */\r
+CKEDITOR.remove = function( editor )\r
+{\r
+       delete CKEDITOR.instances[ editor.name ];\r
+};\r
+\r
+// Load the bootstrap script.\r
+CKEDITOR.loader.load( 'core/_bootstrap' );             // @Packager.RemoveLine\r
+\r
+// Tri-state constants.\r
+\r
+/**\r
+ * Used to indicate the ON or ACTIVE state.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.TRISTATE_ON = 1;\r
+\r
+/**\r
+ * Used to indicate the OFF or NON ACTIVE state.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.TRISTATE_OFF = 2;\r
+\r
+/**\r
+ * Used to indicate DISABLED state.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.TRISTATE_DISABLED = 0;\r
diff --git a/_source/core/ckeditor_base.js b/_source/core/ckeditor_base.js
new file mode 100644 (file)
index 0000000..2d3a0fb
--- /dev/null
@@ -0,0 +1,190 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Contains the first and essential part of the {@link CKEDITOR}\r
+ *             object definition.\r
+ */\r
+\r
+// #### Compressed Code\r
+// Must be updated on changes in the script, as well as updated in the\r
+// ckeditor_source.js and ckeditor_basic_source.js files.\r
+\r
+// if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.0',rev:'4148',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();\r
+\r
+// #### Raw code\r
+// ATTENTION: read the above "Compressed Code" notes when changing this code.\r
+\r
+if ( !window.CKEDITOR )\r
+{\r
+       /**\r
+        * This is the API entry point. The entire CKEditor code runs under this object.\r
+        * @name CKEDITOR\r
+        * @namespace\r
+        * @example\r
+        */\r
+       window.CKEDITOR = (function()\r
+       {\r
+               var CKEDITOR =\r
+               /** @lends CKEDITOR */\r
+               {\r
+\r
+                       /**\r
+                        * A constant string unique for each release of CKEditor. Its value\r
+                        * is used, by default, to build the URL for all resources loaded\r
+                        * by the editor code, guaranteing clean cache results when\r
+                        * upgrading.\r
+                        * @type String\r
+                        * @example\r
+                        * alert( CKEDITOR.timestamp );  // e.g. '87dm'\r
+                        */\r
+                       // The production implementation contains a fixed timestamp, unique\r
+                       // for each release, generated by the releaser.\r
+                       // (Base 36 value of each component of YYMMDDHH - 4 chars total - e.g. 87bm == 08071122)\r
+                       timestamp : '97KD',\r
+\r
+                       /**\r
+                        * Contains the CKEditor version number.\r
+                        * @type String\r
+                        * @example\r
+                        * alert( CKEDITOR.version );  // e.g. 'CKEditor 3.0 Beta'\r
+                        */\r
+                       version : '3.0',\r
+\r
+                       /**\r
+                        * Contains the CKEditor revision number.\r
+                        * Revision number is incremented automatically after each modification of CKEditor source code.\r
+                        * @type String\r
+                        * @example\r
+                        * alert( CKEDITOR.revision );  // e.g. '3975'\r
+                        */\r
+                       revision : '4148',\r
+\r
+                       /**\r
+                        * Private object used to hold core stuff. It should not be used out of\r
+                        * the API code as properties defined here may change at any time\r
+                        * without notice.\r
+                        * @private\r
+                        */\r
+                       _ : {},\r
+\r
+                       /**\r
+                        * Indicates the API loading status. The following status are available:\r
+                        *              <ul>\r
+                        *                      <li><b>unloaded</b>: the API is not yet loaded.</li>\r
+                        *                      <li><b>basic_loaded</b>: the basic API features are available.</li>\r
+                        *                      <li><b>basic_ready</b>: the basic API is ready to load the full core code.</li>\r
+                        *                      <li><b>loading</b>: the full API is being loaded.</li>\r
+                        *                      <li><b>ready</b>: the API can be fully used.</li>\r
+                        *              </ul>\r
+                        * @type String\r
+                        * @example\r
+                        * if ( <b>CKEDITOR.status</b> == 'ready' )\r
+                        * {\r
+                        *     // The API can now be fully used.\r
+                        * }\r
+                        */\r
+                       status : 'unloaded',\r
+\r
+                       /**\r
+                        * Contains the full URL for the CKEditor installation directory.\r
+                        * It's possible to manually provide the base path by setting a\r
+                        * global variable named CKEDITOR_BASEPATH. This global variable\r
+                        * must be set "before" the editor script loading.\r
+                        * @type String\r
+                        * @example\r
+                        * alert( <b>CKEDITOR.basePath</b> );  // "http://www.example.com/ckeditor/" (e.g.)\r
+                        */\r
+                       basePath : (function()\r
+                       {\r
+                               // ATTENTION: fixes on this code must be ported to\r
+                               // var basePath in "core/loader.js".\r
+\r
+                               // Find out the editor directory path, based on its <script> tag.\r
+                               var path = window.CKEDITOR_BASEPATH || '';\r
+\r
+                               if ( !path )\r
+                               {\r
+                                       var scripts = document.getElementsByTagName( 'script' );\r
+\r
+                                       for ( var i = 0 ; i < scripts.length ; i++ )\r
+                                       {\r
+                                               var match = scripts[i].src.match( /(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i );\r
+\r
+                                               if ( match )\r
+                                               {\r
+                                                       path = match[1];\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               // In IE (only) the script.src string is the raw valued entered in the\r
+                               // HTML. Other browsers return the full resolved URL instead.\r
+                               if ( path.indexOf('://') == -1 )\r
+                               {\r
+                                       // Absolute path.\r
+                                       if ( path.indexOf( '/' ) === 0 )\r
+                                               path = location.href.match( /^.*?:\/\/[^\/]*/ )[0] + path;\r
+                                       // Relative path.\r
+                                       else\r
+                                               path = location.href.match( /^[^\?]*\/(?:)/ )[0] + path;\r
+                               }\r
+\r
+                               return path;\r
+                       })(),\r
+\r
+                       /**\r
+                        * Gets the full URL for CKEditor resources. By default, URLs\r
+                        * returned by this function contains a querystring parameter ("t")\r
+                        * set to the {@link CKEDITOR.timestamp} value.\r
+                        * It's possible to provide a custom implementation to this\r
+                        * function by setting a global variable named CKEDITOR_GETURL.\r
+                        * This global variable must be set "before" the editor script\r
+                        * loading. If the custom implementation returns nothing, the\r
+                        * default implementation is used.\r
+                        * @returns {String} The full URL.\r
+                        * @example\r
+                        * // e.g. http://www.example.com/ckeditor/skins/default/editor.css?t=87dm\r
+                        * alert( CKEDITOR.getUrl( 'skins/default/editor.css' ) );\r
+                        * @example\r
+                        * // e.g. http://www.example.com/skins/default/editor.css?t=87dm\r
+                        * alert( CKEDITOR.getUrl( '/skins/default/editor.css' ) );\r
+                        * @example\r
+                        * // e.g. http://www.somesite.com/skins/default/editor.css?t=87dm\r
+                        * alert( CKEDITOR.getUrl( 'http://www.somesite.com/skins/default/editor.css' ) );\r
+                        */\r
+                       getUrl : function( resource )\r
+                       {\r
+                               // If this is not a full or absolute path.\r
+                               if ( resource.indexOf('://') == -1 && resource.indexOf( '/' ) !== 0 )\r
+                                       resource = this.basePath + resource;\r
+\r
+                               // Add the timestamp, except for directories.\r
+                               if ( this.timestamp && resource.charAt( resource.length - 1 ) != '/' )\r
+                                       resource += ( resource.indexOf( '?' ) >= 0 ? '&' : '?' ) + 't=' + this.timestamp;\r
+\r
+                               return resource;\r
+                       }\r
+               };\r
+\r
+               // Make it possible to override the getUrl function with a custom\r
+               // implementation pointing to a global named CKEDITOR_GETURL.\r
+               var newGetUrl = window.CKEDITOR_GETURL;\r
+               if ( newGetUrl )\r
+               {\r
+                       var originalGetUrl = CKEDITOR.getUrl;\r
+                       CKEDITOR.getUrl = function ( resource )\r
+                       {\r
+                               return newGetUrl.call( CKEDITOR, resource ) ||\r
+                                       originalGetUrl.call( CKEDITOR, resource );\r
+                       };\r
+               }\r
+\r
+               return CKEDITOR;\r
+       })();\r
+}\r
+\r
+// PACKAGER_RENAME( CKEDITOR )\r
diff --git a/_source/core/ckeditor_basic.js b/_source/core/ckeditor_basic.js
new file mode 100644 (file)
index 0000000..76b8f01
--- /dev/null
@@ -0,0 +1,241 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Contains the second part of the {@link CKEDITOR} object\r
+ *             definition, which defines the basic editor features to be available in\r
+ *             the root ckeditor_basic.js file.\r
+ */\r
+\r
+if ( CKEDITOR.status == 'unloaded' )\r
+{\r
+       (function()\r
+       {\r
+               CKEDITOR.event.implementOn( CKEDITOR );\r
+\r
+               /**\r
+                * Forces the full CKEditor core code, in the case only the basic code has been\r
+                * loaded (ckeditor_basic.js). This method self-destroys (becomes undefined) in\r
+                * the first call or as soon as the full code is available.\r
+                * @example\r
+                * // Check if the full core code has been loaded and load it.\r
+                * if ( CKEDITOR.loadFullCore )\r
+                *     <b>CKEDITOR.loadFullCore()</b>;\r
+                */\r
+               CKEDITOR.loadFullCore = function()\r
+               {\r
+                       // If not the basic code is not ready it, just mark it to be loaded.\r
+                       if ( CKEDITOR.status != 'basic_ready' )\r
+                       {\r
+                               CKEDITOR.loadFullCore._load = true;\r
+                               return;\r
+                       }\r
+\r
+                       // Destroy this function.\r
+                       delete CKEDITOR.loadFullCore;\r
+\r
+                       // Append the script to the head.\r
+                       var script = document.createElement( 'script' );\r
+                       script.type = 'text/javascript';\r
+                       script.src = CKEDITOR.basePath + 'ckeditor.js';\r
+\r
+                       document.getElementsByTagName( 'head' )[0].appendChild( script );\r
+               };\r
+\r
+               /**\r
+                * The time to wait (in seconds) to load the full editor code after the\r
+                * page load, if the "ckeditor_basic" file is used. If set to zero, the\r
+                * editor is loaded on demand, as soon as an instance is created.\r
+                *\r
+                * This value must be set on the page before the page load completion.\r
+                * @type Number\r
+                * @default 0 (zero)\r
+                * @example\r
+                * // Loads the full source after five seconds.\r
+                * CKEDITOR.loadFullCoreTimeout = 5;\r
+                */\r
+               CKEDITOR.loadFullCoreTimeout = 0;\r
+\r
+               /**\r
+                * The class name used to identify &lt;textarea&gt; elements to be replace\r
+                * by CKEditor instances.\r
+                * @type String\r
+                * @default 'ckeditor'\r
+                * @example\r
+                * <b>CKEDITOR.replaceClass</b> = 'rich_editor';\r
+                */\r
+               CKEDITOR.replaceClass = 'ckeditor';\r
+\r
+               /**\r
+                * Enables the replacement of all textareas with class name matching\r
+                * {@link CKEDITOR.replaceClass}.\r
+                * @type Boolean\r
+                * @default true\r
+                * @example\r
+                * // Disable the auto-replace feature.\r
+                * <b>CKEDITOR.replaceByClassEnabled</b> = false;\r
+                */\r
+               CKEDITOR.replaceByClassEnabled = true;\r
+\r
+               var createInstance = function( elementOrIdOrName, config, creationFunction )\r
+               {\r
+                       if ( CKEDITOR.env.isCompatible )\r
+                       {\r
+                               // Load the full core.\r
+                               if ( CKEDITOR.loadFullCore )\r
+                                       CKEDITOR.loadFullCore();\r
+\r
+                               var editor = creationFunction( elementOrIdOrName, config );\r
+                               CKEDITOR.add( editor );\r
+                               return editor;\r
+                       }\r
+\r
+                       return null;\r
+               };\r
+\r
+               /**\r
+                * Replaces a &lt;textarea&gt; or a DOM element (DIV) with a CKEditor\r
+                * instance. For textareas, the initial value in the editor will be the\r
+                * textarea value. For DOM elements, their innerHTML will be used\r
+                * instead. We recommend using TEXTAREA and DIV elements only.\r
+                * @param {Object|String} elementOrIdOrName The DOM element (textarea), its\r
+                *              ID or name.\r
+                * @param {Object} [config] The specific configurations to apply to this\r
+                *              editor instance. Configurations set here will override global CKEditor\r
+                *              settings.\r
+                * @returns {CKEDITOR.editor} The editor instance created.\r
+                * @example\r
+                * &lt;textarea id="myfield" name="myfield"&gt;&lt:/textarea&gt;\r
+                * ...\r
+                * <b>CKEDITOR.replace( 'myfield' )</b>;\r
+                * @example\r
+                * var textarea = document.body.appendChild( document.createElement( 'textarea' ) );\r
+                * <b>CKEDITOR.replace( textarea )</b>;\r
+                */\r
+               CKEDITOR.replace = function( elementOrIdOrName, config )\r
+               {\r
+                       return createInstance( elementOrIdOrName, config, CKEDITOR.editor.replace );\r
+               };\r
+\r
+               /**\r
+                * Creates a new editor instance inside a specific DOM element.\r
+                * @param {Object|String} elementOrId The DOM element or its ID.\r
+                * @param {Object} [config] The specific configurations to apply to this\r
+                *              editor instance. Configurations set here will override global CKEditor\r
+                *              settings.\r
+                * @returns {CKEDITOR.editor} The editor instance created.\r
+                * @example\r
+                * &lt;div id="editorSpace"&gt;&lt:/div&gt;\r
+                * ...\r
+                * <b>CKEDITOR.appendTo( 'editorSpace' )</b>;\r
+                */\r
+               CKEDITOR.appendTo = function( elementOrId, config )\r
+               {\r
+                       return createInstance( elementOrId, config, CKEDITOR.editor.appendTo );\r
+               };\r
+\r
+               /**\r
+                * @ignore\r
+                * Documented at ckeditor.js.\r
+                */\r
+               CKEDITOR.add = function( editor )\r
+               {\r
+                       // For now, just put the editor in the pending list. It will be\r
+                       // processed as soon as the full code gets loaded.\r
+                       var pending = this._.pending || ( this._.pending = [] );\r
+                       pending.push( editor );\r
+               };\r
+\r
+               /**\r
+                * Replace all &lt;textarea&gt; elements available in the document with\r
+                * editor instances.\r
+                * @example\r
+                * // Replace all &lt;textarea&gt; elements in the page.\r
+                * CKEDITOR.replaceAll();\r
+                * @example\r
+                * // Replace all &lt;textarea class="myClassName"&gt; elements in the page.\r
+                * CKEDITOR.replaceAll( 'myClassName' );\r
+                * @example\r
+                * // Selectively replace &lt;textarea&gt; elements, based on custom assertions.\r
+                * CKEDITOR.replaceAll( function( textarea, config )\r
+                *     {\r
+                *         // Custom code to evaluate the replace, returning false\r
+                *         // if it must not be done.\r
+                *         // It also passes the "config" parameter, so the\r
+                *         // developer can customize the instance.\r
+                *     } );\r
+                */\r
+               CKEDITOR.replaceAll = function()\r
+               {\r
+                       var textareas = document.getElementsByTagName( 'textarea' );\r
+\r
+                       for ( var i = 0 ; i < textareas.length ; i++ )\r
+                       {\r
+                               var config = null;\r
+                               var textarea = textareas[i];\r
+                               var name = textarea.name;\r
+\r
+                               // The "name" and/or "id" attribute must exist.\r
+                               if ( !textarea.name && !textarea.id )\r
+                                       continue;\r
+\r
+                               if ( typeof arguments[0] == 'string' )\r
+                               {\r
+                                       // The textarea class name could be passed as the function\r
+                                       // parameter.\r
+\r
+                                       var classRegex = new RegExp( '(?:^| )' + arguments[0] + '(?:$| )' );\r
+\r
+                                       if ( !classRegex.test( textarea.className ) )\r
+                                               continue;\r
+                               }\r
+                               else if ( typeof arguments[0] == 'function' )\r
+                               {\r
+                                       // An assertion function could be passed as the function parameter.\r
+                                       // It must explicitly return "false" to ignore a specific <textarea>.\r
+                                       config = {};\r
+                                       if ( arguments[0]( textarea, config ) === false )\r
+                                               continue;\r
+                               }\r
+\r
+                               this.replace( textarea, config );\r
+                       }\r
+               };\r
+\r
+               (function()\r
+               {\r
+                       var onload = function()\r
+                       {\r
+                               var loadFullCore = CKEDITOR.loadFullCore,\r
+                                       loadFullCoreTimeout = CKEDITOR.loadFullCoreTimeout;\r
+\r
+                               // Replace all textareas with the default class name.\r
+                               if ( CKEDITOR.replaceByClassEnabled )\r
+                                       CKEDITOR.replaceAll( CKEDITOR.replaceClass );\r
+\r
+                               CKEDITOR.status = 'basic_ready';\r
+\r
+                               if ( loadFullCore && loadFullCore._load )\r
+                                       loadFullCore();\r
+                               else if ( loadFullCoreTimeout )\r
+                               {\r
+                                       setTimeout( function()\r
+                                               {\r
+                                                       if ( CKEDITOR.loadFullCore )\r
+                                                               CKEDITOR.loadFullCore();\r
+                                               }\r
+                                               , loadFullCoreTimeout * 1000 );\r
+                               }\r
+                       };\r
+\r
+                       if ( window.addEventListener )\r
+                               window.addEventListener( 'load', onload, false );\r
+                       else if ( window.attachEvent )\r
+                               window.attachEvent( 'onload', onload );\r
+               })();\r
+\r
+               CKEDITOR.status = 'basic_loaded';\r
+       })();\r
+}\r
diff --git a/_source/core/command.js b/_source/core/command.js
new file mode 100644 (file)
index 0000000..fe64f21
--- /dev/null
@@ -0,0 +1,70 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.command = function( editor, commandDefinition )\r
+{\r
+       this.exec = function( data )\r
+       {\r
+               if ( this.state == CKEDITOR.TRISTATE_DISABLED )\r
+                       return false;\r
+\r
+               // The editor will always have the focus when executing a command.\r
+               editor.focus();\r
+\r
+               return ( commandDefinition.exec.call( this, editor, data ) !== false );\r
+       };\r
+\r
+       CKEDITOR.tools.extend( this, commandDefinition,\r
+               // Defaults\r
+               {\r
+                       modes : { wysiwyg : 1 },\r
+                       state : CKEDITOR.TRISTATE_OFF\r
+               });\r
+\r
+       // Call the CKEDITOR.event constructor to initialize this instance.\r
+       CKEDITOR.event.call( this );\r
+};\r
+\r
+CKEDITOR.command.prototype =\r
+{\r
+       enable : function()\r
+       {\r
+               if ( this.state == CKEDITOR.TRISTATE_DISABLED )\r
+                       this.setState( ( !this.preserveState || ( typeof this.previousState == 'undefined' ) ) ? CKEDITOR.TRISTATE_OFF : this.previousState );\r
+       },\r
+\r
+       disable : function()\r
+       {\r
+               this.setState( CKEDITOR.TRISTATE_DISABLED );\r
+       },\r
+\r
+       setState : function( newState )\r
+       {\r
+               // Do nothing if there is no state change.\r
+               if ( this.state == newState )\r
+                       return false;\r
+\r
+               this.previousState = this.state;\r
+\r
+               // Set the new state.\r
+               this.state = newState;\r
+\r
+               // Fire the "state" event, so other parts of the code can react to the\r
+               // change.\r
+               this.fire( 'state' );\r
+\r
+               return true;\r
+       },\r
+\r
+       toggleState : function()\r
+       {\r
+               if ( this.state == CKEDITOR.TRISTATE_OFF )\r
+                       this.setState( CKEDITOR.TRISTATE_ON );\r
+               else if ( this.state == CKEDITOR.TRISTATE_ON )\r
+                       this.setState( CKEDITOR.TRISTATE_OFF );\r
+       }\r
+};\r
+\r
+CKEDITOR.event.implementOn( CKEDITOR.command.prototype, true );\r
diff --git a/_source/core/commanddefinition.js b/_source/core/commanddefinition.js
new file mode 100644 (file)
index 0000000..b178498
--- /dev/null
@@ -0,0 +1,72 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the "virtual" {@link CKEDITOR.commandDefinition} class,\r
+ *             which contains the defintion of a command. This file is for\r
+ *             documentation purposes only.\r
+ */\r
+\r
+/**\r
+ * (Virtual Class) Do not call this constructor. This class is not really part\r
+ *             of the API. It just illustrates the features of command objects to be\r
+ *             passed to the {@link CKEDITOR.editor.prototype.addCommand} function.\r
+ * @name CKEDITOR.commandDefinition\r
+ * @constructor\r
+ * @example\r
+ */\r
+\r
+ /**\r
+ * Executes the command.\r
+ * @name CKEDITOR.commandDefinition.prototype.exec\r
+ * @function\r
+ * @param {CKEDITOR.editor} editor The editor within which run the command.\r
+ * @param {Object} [data] Additional data to be used to execute the command.\r
+ * @returns {Boolean} Whether the command has been successfully executed.\r
+ *             Defaults to "true", if nothing is returned.\r
+ * @example\r
+ * editorInstance.addCommand( 'sample',\r
+ * {\r
+ *     exec : function( editor )\r
+ *     {\r
+ *         alert( 'Executing a command for the editor name "' + editor.name + '"!' );\r
+ *     }\r
+ * });\r
+ */\r
+\r
+/**\r
+ * Whether the command need to be hooked into the redo/undo system.\r
+ * @name  CKEDITOR.commandDefinition.canUndo\r
+ * @type {Boolean} If not defined or 'true' both hook into undo system, set it\r
+ *             to 'false' explicitly  keep it out.\r
+ * @field\r
+ * @example\r
+ * editorInstance.addCommand( 'alertName',\r
+ * {\r
+ *     exec : function( editor )\r
+ *     {\r
+ *         alert( editor.name );\r
+ *     },\r
+ *     canUndo : false    // No support for undo/redo\r
+ * });\r
+ */\r
+\r
+/**\r
+ * Whether the command is asynchronous, which means the 'afterCommandExec' event\r
+ * will be fired by the command itself manually, and the 'exec' function return value\r
+ * of this command is not to be returned.\r
+ * @name  CKEDITOR.commandDefinition.async\r
+ * @type {Boolean} If defined as 'true', the command is asynchronous.\r
+ * @example\r
+ * editorInstance.addCommand( 'alertName',\r
+ * {\r
+ *     exec : function( editor )\r
+ *     {\r
+ *         // Asynchronous operation below.\r
+ *         CKEDITOR.ajax.loadXml( 'data.xml' );\r
+ *     },\r
+ *     async : true    // The command need some time to complete after exec function returns.\r
+ * });\r
+ */\r
diff --git a/_source/core/config.js b/_source/core/config.js
new file mode 100644 (file)
index 0000000..caa8d53
--- /dev/null
@@ -0,0 +1,287 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.config} object, which holds the\r
+ * default configuration settings.\r
+ */\r
+\r
+CKEDITOR.ENTER_P       = 1;\r
+CKEDITOR.ENTER_BR      = 2;\r
+CKEDITOR.ENTER_DIV     = 3;\r
+\r
+/**\r
+ * Holds the default configuration settings. Changes to this object are\r
+ * reflected in all editor instances, if not specificaly specified for those\r
+ * instances.\r
+ * @namespace\r
+ * @example\r
+ * // All editor created after the following setting will not load custom\r
+ * // configuration files.\r
+ * CKEDITOR.config.customConfig = '';\r
+ */\r
+CKEDITOR.config =\r
+{\r
+       /**\r
+        * The URL path for the custom configuration file to be loaded. If not\r
+        * overloaded with inline configurations, it defaults to the "config.js"\r
+        * file present in the root of the CKEditor installation directory.<br /><br />\r
+        *\r
+        * CKEditor will recursively load custom configuration files defined inside\r
+        * other custom configuration files.\r
+        * @type String\r
+        * @default '&lt;CKEditor folder&gt;/config.js'\r
+        * @example\r
+        * // Load a specific configuration file.\r
+        * CKEDITOR.replace( 'myfiled', { customConfig : '/myconfig.js' } );\r
+        * @example\r
+        * // Do not load any custom configuration file.\r
+        * CKEDITOR.replace( 'myfiled', { customConfig : '' } );\r
+        */\r
+       customConfig : CKEDITOR.getUrl( 'config.js' ),\r
+\r
+       /**\r
+        * Whether the replaced element (usually a textarea) is to be updated\r
+        * automatically when posting the form containing the editor.\r
+        * @type Boolean\r
+        * @default true\r
+        * @example\r
+        * config.autoUpdateElement = true;\r
+        */\r
+       autoUpdateElement : true,\r
+\r
+       /**\r
+        * The base href URL used to resolve relative and absolute URLs in the\r
+        * editor content.\r
+        * @type String\r
+        * @default '' (empty string)\r
+        * @example\r
+        * config.baseHref = 'http://www.example.com/path/';\r
+        */\r
+       baseHref : '',\r
+\r
+       /**\r
+        * The CSS file to be used to apply style to the contents. It should\r
+        * reflect the CSS used in the final pages where the contents are to be\r
+        * used.\r
+        * @type String\r
+        * @default '&lt;CKEditor folder&gt;/contents.css'\r
+        * @example\r
+        * config.contentsCss = '/css/mysitestyles.css';\r
+        */\r
+       contentsCss : CKEDITOR.basePath + 'contents.css',\r
+\r
+       /**\r
+        * The writting direction of the language used to write the editor\r
+        * contents. Allowed values are 'ltr' for Left-To-Right language (like\r
+        * English), or 'rtl' for Right-To-Left languages (like Arabic).\r
+        * @default 'ltr'\r
+        * @type String\r
+        * @example\r
+        * config.contentsLangDirection = 'rtl';\r
+        */\r
+       contentsLangDirection : 'ltr',\r
+\r
+       /**\r
+        * The user interface language localization to use. If empty, the editor\r
+        * automatically localize the editor to the user language, if supported,\r
+        * otherwise the {@link CKEDITOR.config.defaultLanguage} language is used.\r
+        * @default true\r
+        * @type Boolean\r
+        * @example\r
+        * // Load the German interface.\r
+        * config.language = 'de';\r
+        */\r
+       language : '',\r
+\r
+       /**\r
+        * The language to be used if {@link CKEDITOR.config.language} is left empty and it's not\r
+        * possible to localize the editor to the user language.\r
+        * @default 'en'\r
+        * @type String\r
+        * @example\r
+        * config.defaultLanguage = 'it';\r
+        */\r
+       defaultLanguage : 'en',\r
+\r
+       /**\r
+        * Sets the behavior for the ENTER key. It also dictates other behaviour\r
+        * rules in the editor, like whether the &lt;br&gt; element is to be used\r
+        * as a paragraph separator when indenting text.\r
+        * The allowed values are the following constants, and their relative\r
+        * behavior:\r
+        * <ul>\r
+        *     <li>{@link CKEDITOR.ENTER_P} (1): new &lt;p&gt; paragraphs are created;</li>\r
+        *     <li>{@link CKEDITOR.ENTER_BR} (2): lines are broken with &lt;br&gt; elements;</li>\r
+        *     <li>{@link CKEDITOR.ENTER_DIV} (3): new &lt;div&gt; blocks are created.</li>\r
+        * </ul>\r
+        * <strong>Note</strong>: It's recommended to use the\r
+        * {@link CKEDITOR.ENTER_P} value because of its semantic value and\r
+        * correctness. The editor is optimized for this value.\r
+        * @type Number\r
+        * @default {@link CKEDITOR.ENTER_P}\r
+        * @example\r
+        * // Not recommended.\r
+        * config.enterMode = CKEDITOR.ENTER_BR;\r
+        */\r
+       enterMode : CKEDITOR.ENTER_P,\r
+\r
+       /**\r
+        * Just like the {@link CKEDITOR.config.enterMode} setting, it defines the behavior for the SHIFT+ENTER key.\r
+        * The allowed values are the following constants, and their relative\r
+        * behavior:\r
+        * <ul>\r
+        *     <li>{@link CKEDITOR.ENTER_P} (1): new &lt;p&gt; paragraphs are created;</li>\r
+        *     <li>{@link CKEDITOR.ENTER_BR} (2): lines are broken with &lt;br&gt; elements;</li>\r
+        *     <li>{@link CKEDITOR.ENTER_DIV} (3): new &lt;div&gt; blocks are created.</li>\r
+        * </ul>\r
+        * @type Number\r
+        * @default {@link CKEDITOR.ENTER_BR}\r
+        * @example\r
+        * config.shiftEnterMode = CKEDITOR.ENTER_P;\r
+        */\r
+       shiftEnterMode : CKEDITOR.ENTER_BR,\r
+\r
+       /**\r
+        * A comma separated list of plugins that are not related to editor\r
+        * instances. Reserved to plugins that extend the core code only.<br /><br />\r
+        *\r
+        * There are no ways to override this setting, except by editing the source\r
+        * code of CKEditor (_source/core/config.js).\r
+        * @type String\r
+        * @example\r
+        */\r
+       corePlugins : '',\r
+\r
+       /**\r
+        * Sets the doctype to be used when loading the editor content as HTML.\r
+        * @type String\r
+        * @default '&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;'\r
+        * @example\r
+        * // Set the doctype to the HTML 4 (quirks) mode.\r
+        * config.docType = '&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;';\r
+        */\r
+       docType : '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',\r
+\r
+       /**\r
+        * Indicates whether the contents to be edited are being inputted as a full\r
+        * HTML page. A full page includes the &lt;html&gt;, &lt;head&gt; and\r
+        * &lt;body&gt; tags. The final output will also reflect this setting,\r
+        * including the &lt;body&gt; contents only if this setting is disabled.\r
+        * @type Boolean\r
+        * @default false\r
+        * @example\r
+        * config.fullPage = true;\r
+        */\r
+       fullPage : false,\r
+\r
+       /**\r
+        * The editor height, in CSS size format or pixel integer.\r
+        * @type Number|String\r
+        * @default '200'\r
+        * @example\r
+        * config.height = 500;\r
+        * @example\r
+        * config.height = '25em';\r
+        */\r
+       height : 200,\r
+\r
+       /**\r
+        * Comma separated list of plugins to load and initialize for an editor\r
+        * instance. This should be rarely changed, using instead the\r
+        * {@link CKEDITOR.config.extraPlugins} and\r
+        * {@link CKEDITOR.config.removePlugins} for customizations.\r
+        * @type String\r
+        * @example\r
+        */\r
+       plugins : 'about,basicstyles,blockquote,button,clipboard,colorbutton,contextmenu,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',\r
+\r
+       /**\r
+        * List of additional plugins to be loaded. This is a tool setting which\r
+        * makes it easier to add new plugins, whithout having to touch and\r
+        * possibly breaking the {@link CKEDITOR.config.plugins} setting.\r
+        * @type String\r
+        * @example\r
+        * config.extraPlugins = 'myplugin,anotherplugin';\r
+        */\r
+       extraPlugins : '',\r
+\r
+       /**\r
+        * List of plugins that must not be loaded. This is a tool setting which\r
+        * makes it easier to avoid loading plugins definied in the\r
+        * {@link CKEDITOR.config.plugins} setting, whithout having to touch it and\r
+        * potentially breaking it.\r
+        * @type String\r
+        * @example\r
+        * config.removePlugins = 'elementspath,save,font';\r
+        */\r
+       removePlugins : '',\r
+\r
+       /**\r
+        * List of regular expressions to be executed over the input HTML,\r
+        * indicating code that must stay untouched.\r
+        * @type Array\r
+        * @default [] (empty array)\r
+        * @example\r
+        * config.protectedSource.push( /<\?[\s\S]*?\?>/g );   // PHP Code\r
+        * config.protectedSource.push( /<%[\s\S]*?%>/g );   // ASP Code\r
+        * config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi );   // ASP.Net Code\r
+        */\r
+       protectedSource : [],\r
+\r
+       /**\r
+        * The editor tabindex value.\r
+        * @type Number\r
+        * @default 0 (zero)\r
+        * @example\r
+        * config.tabIndex = 1;\r
+        */\r
+       tabIndex : 0,\r
+\r
+       /**\r
+        * The theme to be used to build the UI.\r
+        * @type String\r
+        * @default 'default'\r
+        * @see CKEDITOR.config.skin\r
+        * @example\r
+        * config.theme = 'default';\r
+        */\r
+       theme : 'default',\r
+\r
+       /**\r
+        * The skin to load. It may be the name of the skin folder inside the\r
+        * editor installation path, or the name and the path separated by a comma.\r
+        * @type String\r
+        * @default 'default'\r
+        * @example\r
+        * config.skin = 'v2';\r
+        * @example\r
+        * config.skin = 'myskin,/customstuff/myskin/';\r
+        */\r
+       skin : 'kama',\r
+\r
+       /**\r
+        * The editor width in CSS size format or pixel integer.\r
+        * @type String|Number\r
+        * @default '' (empty)\r
+        * @example\r
+        * config.width = 850;\r
+        * @example\r
+        * config.width = '75%';\r
+        */\r
+       width : '',\r
+\r
+       /**\r
+        * The base Z-index for floating dialogs and popups.\r
+        * @type Number\r
+        * @default 10000\r
+        * @example\r
+        * config.baseFloatZIndex = 2000\r
+        */\r
+       baseFloatZIndex : 10000\r
+\r
+};\r
+\r
+// PACKAGER_RENAME( CKEDITOR.config )\r
diff --git a/_source/core/dom.js b/_source/core/dom.js
new file mode 100644 (file)
index 0000000..9c2ed04
--- /dev/null
@@ -0,0 +1,21 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.dom} object, which contains DOM\r
+ *             manipulation objects and function.\r
+ */\r
+\r
+/**\r
+ * DOM manipulation objects and function.<br /><br />\r
+ * @see CKEDITOR.dom.element\r
+ * @see CKEDITOR.dom.node\r
+ * @namespace\r
+ * @example\r
+ */\r
+CKEDITOR.dom =\r
+{};\r
+\r
+// PACKAGER_RENAME( CKEDITOR.dom )\r
diff --git a/_source/core/dom/document.js b/_source/core/dom/document.js
new file mode 100644 (file)
index 0000000..dd0f9a0
--- /dev/null
@@ -0,0 +1,210 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.dom.document} class, which\r
+ *             represents a DOM document.\r
+ */\r
+\r
+/**\r
+ * Represents a DOM document.\r
+ * @constructor\r
+ * @augments CKEDITOR.dom.domObject\r
+ * @param {Object} domDocument A native DOM document.\r
+ * @example\r
+ * var document = new CKEDITOR.dom.document( document );\r
+ */\r
+CKEDITOR.dom.document = function( domDocument )\r
+{\r
+       CKEDITOR.dom.domObject.call( this, domDocument );\r
+};\r
+\r
+// PACKAGER_RENAME( CKEDITOR.dom.document )\r
+\r
+CKEDITOR.dom.document.prototype = new CKEDITOR.dom.domObject();\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.dom.document.prototype,\r
+       /** @lends CKEDITOR.dom.document.prototype */\r
+       {\r
+               /**\r
+                * Appends a CSS file to the document.\r
+                * @param {String} cssFileUrl The CSS file URL.\r
+                * @example\r
+                * <b>CKEDITOR.document.appendStyleSheet( '/mystyles.css' )</b>;\r
+                */\r
+               appendStyleSheet : function( cssFileUrl )\r
+               {\r
+                       if ( this.$.createStyleSheet )\r
+                               this.$.createStyleSheet( cssFileUrl );\r
+                       else\r
+                       {\r
+                               var link = new CKEDITOR.dom.element( 'link' );\r
+                               link.setAttributes(\r
+                                       {\r
+                                               rel             :'stylesheet',\r
+                                               type    : 'text/css',\r
+                                               href    : cssFileUrl\r
+                                       });\r
+\r
+                               this.getHead().append( link );\r
+                       }\r
+               },\r
+\r
+               createElement : function( name, attribsAndStyles )\r
+               {\r
+                       var element = new CKEDITOR.dom.element( name, this );\r
+\r
+                       if ( attribsAndStyles )\r
+                       {\r
+                               if ( attribsAndStyles.attributes )\r
+                                       element.setAttributes( attribsAndStyles.attributes );\r
+\r
+                               if ( attribsAndStyles.styles )\r
+                                       element.setStyles( attribsAndStyles.styles );\r
+                       }\r
+\r
+                       return element;\r
+               },\r
+\r
+               createText : function( text )\r
+               {\r
+                       return new CKEDITOR.dom.text( text, this );\r
+               },\r
+\r
+               focus : function()\r
+               {\r
+                       this.getWindow().focus();\r
+               },\r
+\r
+               /**\r
+                * Gets and element based on its id.\r
+                * @param {String} elementId The element id.\r
+                * @returns {CKEDITOR.dom.element} The element instance, or null if not found.\r
+                * @example\r
+                * var element = <b>CKEDITOR.document.getById( 'myElement' )</b>;\r
+                * alert( element.getId() );  // "myElement"\r
+                */\r
+               getById : function( elementId )\r
+               {\r
+                       var $ = this.$.getElementById( elementId );\r
+                       return $ ? new CKEDITOR.dom.element( $ ) : null;\r
+               },\r
+\r
+               getByAddress : function( address, normalized )\r
+               {\r
+                       var $ = this.$.documentElement;\r
+\r
+                       for ( var i = 0 ; $ && i < address.length ; i++ )\r
+                       {\r
+                               var target = address[ i ];\r
+\r
+                               if ( !normalized )\r
+                               {\r
+                                       $ = $.childNodes[ target ];\r
+                                       continue;\r
+                               }\r
+\r
+                               var currentIndex = -1;\r
+\r
+                               for (var j = 0 ; j < $.childNodes.length ; j++ )\r
+                               {\r
+                                       var candidate = $.childNodes[ j ];\r
+\r
+                                       if ( normalized === true &&\r
+                                                       candidate.nodeType == 3 &&\r
+                                                       candidate.previousSibling &&\r
+                                                       candidate.previousSibling.nodeType == 3 )\r
+                                       {\r
+                                               continue;\r
+                                       }\r
+\r
+                                       currentIndex++;\r
+\r
+                                       if ( currentIndex == target )\r
+                                       {\r
+                                               $ = candidate;\r
+                                               break;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       return $ ? new CKEDITOR.dom.node( $ ) : null;\r
+               },\r
+\r
+               getElementsByTag : function( tagName, namespace )\r
+               {\r
+                       if ( !CKEDITOR.env.ie && namespace )\r
+                               tagName = namespace + ':' + tagName;\r
+                       return new CKEDITOR.dom.nodeList( this.$.getElementsByTagName( tagName ) );\r
+               },\r
+\r
+               /**\r
+                * Gets the &lt;head&gt; element for this document.\r
+                * @returns {CKEDITOR.dom.element} The &lt;head&gt; element.\r
+                * @example\r
+                * var element = <b>CKEDITOR.document.getHead()</b>;\r
+                * alert( element.getName() );  // "head"\r
+                */\r
+               getHead : function()\r
+               {\r
+                       var head = this.$.getElementsByTagName( 'head' )[0];\r
+                       head = new CKEDITOR.dom.element( head );\r
+\r
+                       return (\r
+                       /** @ignore */\r
+                       this.getHead = function()\r
+                               {\r
+                                       return head;\r
+                               })();\r
+               },\r
+\r
+               /**\r
+                * Gets the &lt;body&gt; element for this document.\r
+                * @returns {CKEDITOR.dom.element} The &lt;body&gt; element.\r
+                * @example\r
+                * var element = <b>CKEDITOR.document.getBody()</b>;\r
+                * alert( element.getName() );  // "body"\r
+                */\r
+               getBody : function()\r
+               {\r
+                       var body = new CKEDITOR.dom.element( this.$.body );\r
+\r
+                       return (\r
+                       /** @ignore */\r
+                       this.getBody = function()\r
+                               {\r
+                                       return body;\r
+                               })();\r
+               },\r
+\r
+               getDocumentElement : function()\r
+               {\r
+                       var documentElement = new CKEDITOR.dom.element( this.$.documentElement );\r
+\r
+                       return (\r
+                       /** @ignore */\r
+                       this.getDocumentElement = function()\r
+                               {\r
+                                       return documentElement;\r
+                               })();\r
+               },\r
+\r
+               /**\r
+                * Gets the window object that holds this document.\r
+                * @returns {CKEDITOR.dom.window} The window object.\r
+                * @example\r
+                */\r
+               getWindow : function()\r
+               {\r
+                       var win = new CKEDITOR.dom.window( this.$.parentWindow || this.$.defaultView );\r
+\r
+                       return (\r
+                       /** @ignore */\r
+                       this.getWindow = function()\r
+                               {\r
+                                       return win;\r
+                               })();\r
+               }\r
+       });\r
diff --git a/_source/core/dom/documentfragment.js b/_source/core/dom/documentfragment.js
new file mode 100644 (file)
index 0000000..a449441
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+/**\r
+ * DocumentFragment is a "lightweight" or "minimal" Document object. It is\r
+ * commonly used to extract a portion of a document's tree or to create a new\r
+ * fragment of a document. Various operations may take DocumentFragment objects\r
+ * as arguments and results in all the child nodes of the DocumentFragment being\r
+ * moved to the child list of this node.\r
+ *\r
+ * @param {Object} ownerDocument\r
+ */\r
+CKEDITOR.dom.documentFragment = function( ownerDocument )\r
+{\r
+       ownerDocument = ownerDocument || CKEDITOR.document;\r
+       this.$ = ownerDocument.$.createDocumentFragment();\r
+};\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.dom.documentFragment.prototype,\r
+       CKEDITOR.dom.element.prototype,\r
+       {\r
+               type : CKEDITOR.NODE_DOCUMENT_FRAGMENT,\r
+               insertAfterNode : function( node )\r
+               {\r
+                       node = node.$;\r
+                       node.parentNode.insertBefore( this.$, node.nextSibling );\r
+               }\r
+       },\r
+       true,\r
+       {\r
+               'append' : 1,\r
+               'appendBogus' : 1,\r
+               'getFirst' : 1,\r
+               'getLast' : 1,\r
+               'appendTo' : 1,\r
+               'moveChildren' : 1,\r
+               'insertBefore' : 1,\r
+               'insertAfterNode' : 1,\r
+               'replace' : 1,\r
+               'trim' : 1,\r
+               'type' : 1,\r
+               'ltrim' : 1,\r
+               'rtrim' : 1,\r
+               'getDocument' : 1,\r
+               'getChildCount' : 1,\r
+               'getChild' : 1,\r
+               'getChildren' : 1\r
+       } );\r
diff --git a/_source/core/dom/domobject.js b/_source/core/dom/domobject.js
new file mode 100644 (file)
index 0000000..d8c3fde
--- /dev/null
@@ -0,0 +1,204 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.editor} class, which is the base\r
+ *             for other classes representing DOM objects.\r
+ */\r
+\r
+/**\r
+ * Represents a DOM object. This class is not intended to be used directly. It\r
+ * serves as the base class for other classes representing specific DOM\r
+ * objects.\r
+ * @constructor\r
+ * @param {Object} nativeDomObject A native DOM object.\r
+ * @augments CKEDITOR.event\r
+ * @example\r
+ */\r
+CKEDITOR.dom.domObject = function( nativeDomObject )\r
+{\r
+       if ( nativeDomObject )\r
+       {\r
+               /**\r
+                * The native DOM object represented by this class instance.\r
+                * @type Object\r
+                * @example\r
+                * var element = new CKEDITOR.dom.element( 'span' );\r
+                * alert( element.$.nodeType );  // "1"\r
+                */\r
+               this.$ = nativeDomObject;\r
+       }\r
+};\r
+\r
+CKEDITOR.dom.domObject.prototype = (function()\r
+{\r
+       // Do not define other local variables here. We want to keep the native\r
+       // listener closures as clean as possible.\r
+\r
+       var getNativeListener = function( domObject, eventName )\r
+       {\r
+               return function( domEvent )\r
+               {\r
+                       // In FF, when reloading the page with the editor focused, it may\r
+                       // throw an error because the CKEDITOR global is not anymore\r
+                       // available. So, we check it here first. (#2923)\r
+                       if ( typeof CKEDITOR != 'undefined' )\r
+                               domObject.fire( eventName, new CKEDITOR.dom.event( domEvent ) );\r
+               };\r
+       };\r
+\r
+       return /** @lends CKEDITOR.dom.domObject.prototype */ {\r
+\r
+               getPrivate : function()\r
+               {\r
+                       var priv;\r
+\r
+                       // Get the main private function from the custom data. Create it if not\r
+                       // defined.\r
+                       if ( !( priv = this.getCustomData( '_' ) ) )\r
+                               this.setCustomData( '_', ( priv = {} ) );\r
+\r
+                       return priv;\r
+               },\r
+\r
+               /** @ignore */\r
+               on  : function( eventName )\r
+               {\r
+                       // We customize the "on" function here. The basic idea is that we'll have\r
+                       // only one listener for a native event, which will then call all listeners\r
+                       // set to the event.\r
+\r
+                       // Get the listeners holder object.\r
+                       var nativeListeners = this.getCustomData( '_cke_nativeListeners' );\r
+\r
+                       if ( !nativeListeners )\r
+                       {\r
+                               nativeListeners = {};\r
+                               this.setCustomData( '_cke_nativeListeners', nativeListeners );\r
+                       }\r
+\r
+                       // Check if we have a listener for that event.\r
+                       if ( !nativeListeners[ eventName ] )\r
+                       {\r
+                               var listener = nativeListeners[ eventName ] = getNativeListener( this, eventName );\r
+\r
+                               if ( this.$.addEventListener )\r
+                                       this.$.addEventListener( eventName, listener, !!CKEDITOR.event.useCapture );\r
+                               else if ( this.$.attachEvent )\r
+                                       this.$.attachEvent( 'on' + eventName, listener );\r
+                       }\r
+\r
+                       // Call the original implementation.\r
+                       return CKEDITOR.event.prototype.on.apply( this, arguments );\r
+               },\r
+\r
+               /** @ignore */\r
+               removeListener : function( eventName )\r
+               {\r
+                       // Call the original implementation.\r
+                       CKEDITOR.event.prototype.removeListener.apply( this, arguments );\r
+\r
+                       // If we don't have listeners for this event, clean the DOM up.\r
+                       if ( !this.hasListeners( eventName ) )\r
+                       {\r
+                               var nativeListeners = this.getCustomData( '_cke_nativeListeners' );\r
+                               var listener = nativeListeners && nativeListeners[ eventName ];\r
+                               if ( listener )\r
+                               {\r
+                                       if ( this.$.removeEventListener )\r
+                                               this.$.removeEventListener( eventName, listener, false );\r
+                                       else if ( this.$.detachEvent )\r
+                                               this.$.detachEvent( 'on' + eventName, listener );\r
+\r
+                                       delete nativeListeners[ eventName ];\r
+                               }\r
+                       }\r
+               }\r
+       };\r
+})();\r
+\r
+(function( domObjectProto )\r
+{\r
+       var customData = {};\r
+\r
+       /**\r
+        * Determines whether the specified object is equal to the current object.\r
+        * @name CKEDITOR.dom.domObject.prototype.equals\r
+        * @function\r
+        * @param {Object} object The object to compare with the current object.\r
+        * @returns {Boolean} "true" if the object is equal.\r
+        * @example\r
+        * var doc = new CKEDITOR.dom.document( document );\r
+        * alert( doc.equals( CKEDITOR.document ) );  // "true"\r
+        * alert( doc == CKEDITOR.document );         // "false"\r
+        */\r
+       domObjectProto.equals = function( object )\r
+       {\r
+               return ( object && object.$ === this.$ );\r
+       };\r
+\r
+       /**\r
+        * Sets a data slot value for this object. These values are shared by all\r
+        * instances pointing to that same DOM object.\r
+        * @name CKEDITOR.dom.domObject.prototype.setCustomData\r
+        * @function\r
+        * @param {String} key A key used to identify the data slot.\r
+        * @param {Object} value The value to set to the data slot.\r
+        * @returns {CKEDITOR.dom.domObject} This DOM object instance.\r
+        * @see CKEDITOR.dom.domObject.prototype.getCustomData\r
+        * @example\r
+        * var element = new CKEDITOR.dom.element( 'span' );\r
+        * element.setCustomData( 'hasCustomData', true );\r
+        */\r
+       domObjectProto.setCustomData = function( key, value )\r
+       {\r
+               var expandoNumber = this.getUniqueId(),\r
+                       dataSlot = customData[ expandoNumber ] || ( customData[ expandoNumber ] = {} );\r
+\r
+               dataSlot[ key ] = value;\r
+\r
+               return this;\r
+       };\r
+\r
+       /**\r
+        * Gets the value set to a data slot in this object.\r
+        * @name CKEDITOR.dom.domObject.prototype.getCustomData\r
+        * @function\r
+        * @param {String} key The key used to identify the data slot.\r
+        * @returns {Object} This value set to the data slot.\r
+        * @see CKEDITOR.dom.domObject.prototype.setCustomData\r
+        * @example\r
+        * var element = new CKEDITOR.dom.element( 'span' );\r
+        * alert( element.getCustomData( 'hasCustomData' ) );  // e.g. 'true'\r
+        */\r
+       domObjectProto.getCustomData = function( key )\r
+       {\r
+               var expandoNumber = this.$._cke_expando,\r
+                       dataSlot = expandoNumber && customData[ expandoNumber ];\r
+\r
+               return dataSlot && dataSlot[ key ];\r
+       };\r
+\r
+       domObjectProto.removeCustomData = function( key )\r
+       {\r
+               var expandoNumber = this.$._cke_expando,\r
+                       dataSlot = expandoNumber && customData[ expandoNumber ],\r
+                       retval = dataSlot && dataSlot[ key ];\r
+\r
+               if ( typeof retval != 'undefined' )\r
+                       delete dataSlot[ key ];\r
+\r
+               return retval || null;\r
+       };\r
+\r
+       domObjectProto.getUniqueId = function()\r
+       {\r
+               return this.$._cke_expando || ( this.$._cke_expando = CKEDITOR.tools.getNextNumber() );\r
+       };\r
+\r
+       // Implement CKEDITOR.event.\r
+       CKEDITOR.event.implementOn( domObjectProto );\r
+\r
+})( CKEDITOR.dom.domObject.prototype );\r
diff --git a/_source/core/dom/element.js b/_source/core/dom/element.js
new file mode 100644 (file)
index 0000000..c4e8876
--- /dev/null
@@ -0,0 +1,1384 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.dom.element} class, which\r
+ *             represents a DOM element.\r
+ */\r
+\r
+/**\r
+ * Represents a DOM element.\r
+ * @constructor\r
+ * @augments CKEDITOR.dom.node\r
+ * @param {Object|String} element A native DOM element or the element name for\r
+ *             new elements.\r
+ * @param {CKEDITOR.dom.document} [ownerDocument] The document that will contain\r
+ *             the element in case of element creation.\r
+ * @example\r
+ * // Create a new &lt;span&gt; element.\r
+ * var element = new CKEDITOR.dom.element( 'span' );\r
+ * @example\r
+ * // Create an element based on a native DOM element.\r
+ * var element = new CKEDITOR.dom.element( document.getElementById( 'myId' ) );\r
+ */\r
+CKEDITOR.dom.element = function( element, ownerDocument )\r
+{\r
+       if ( typeof element == 'string' )\r
+               element = ( ownerDocument ? ownerDocument.$ : document ).createElement( element );\r
+\r
+       // Call the base constructor (we must not call CKEDITOR.dom.node).\r
+       CKEDITOR.dom.domObject.call( this, element );\r
+};\r
+\r
+// PACKAGER_RENAME( CKEDITOR.dom.element )\r
+\r
+/**\r
+ * The the {@link CKEDITOR.dom.element} representing and element. If the\r
+ * element is a native DOM element, it will be transformed into a valid\r
+ * CKEDITOR.dom.element object.\r
+ * @returns {CKEDITOR.dom.element} The transformed element.\r
+ * @example\r
+ * var element = new CKEDITOR.dom.element( 'span' );\r
+ * alert( element == <b>CKEDITOR.dom.element.get( element )</b> );  "true"\r
+ * @example\r
+ * var element = document.getElementById( 'myElement' );\r
+ * alert( <b>CKEDITOR.dom.element.get( element )</b>.getName() );  e.g. "p"\r
+ */\r
+CKEDITOR.dom.element.get = function( element )\r
+{\r
+       return element && ( element.$ ? element : new CKEDITOR.dom.element( element ) );\r
+};\r
+\r
+CKEDITOR.dom.element.prototype = new CKEDITOR.dom.node();\r
+\r
+/**\r
+ * Creates an instance of the {@link CKEDITOR.dom.element} class based on the\r
+ * HTML representation of an element.\r
+ * @param {String} html The element HTML. It should define only one element in\r
+ *             the "root" level. The "root" element can have child nodes, but not\r
+ *             siblings.\r
+ * @returns {CKEDITOR.dom.element} The element instance.\r
+ * @example\r
+ * var element = <b>CKEDITOR.dom.element.createFromHtml( '&lt;strong class="anyclass"&gt;My element&lt;/strong&gt;' )</b>;\r
+ * alert( element.getName() );  // "strong"\r
+ */\r
+CKEDITOR.dom.element.createFromHtml = function( html, ownerDocument )\r
+{\r
+       var temp = new CKEDITOR.dom.element( 'div', ownerDocument );\r
+       temp.setHtml( html );\r
+\r
+       // When returning the node, remove it from its parent to detach it.\r
+       return temp.getFirst().remove();\r
+};\r
+\r
+CKEDITOR.dom.element.setMarker = function( database, element, name, value )\r
+{\r
+       var id = element.getCustomData( 'list_marker_id' ) ||\r
+                       ( element.setCustomData( 'list_marker_id', CKEDITOR.tools.getNextNumber() ).getCustomData( 'list_marker_id' ) ),\r
+               markerNames = element.getCustomData( 'list_marker_names' ) ||\r
+                       ( element.setCustomData( 'list_marker_names', {} ).getCustomData( 'list_marker_names' ) );\r
+       database[id] = element;\r
+       markerNames[name] = 1;\r
+\r
+       return element.setCustomData( name, value );\r
+};\r
+\r
+CKEDITOR.dom.element.clearAllMarkers = function( database )\r
+{\r
+       for ( var i in database )\r
+               CKEDITOR.dom.element.clearMarkers( database, database[i], true );\r
+};\r
+\r
+CKEDITOR.dom.element.clearMarkers = function( database, element, removeFromDatabase )\r
+{\r
+       var names = element.getCustomData( 'list_marker_names' ),\r
+               id = element.getCustomData( 'list_marker_id' );\r
+       for ( var i in names )\r
+               element.removeCustomData( i );\r
+       element.removeCustomData( 'list_marker_names' );\r
+       if ( removeFromDatabase )\r
+       {\r
+               element.removeCustomData( 'list_marker_id' );\r
+               delete database[id];\r
+       }\r
+};\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.dom.element.prototype,\r
+       /** @lends CKEDITOR.dom.element.prototype */\r
+       {\r
+               /**\r
+                * The node type. This is a constant value set to\r
+                * {@link CKEDITOR.NODE_ELEMENT}.\r
+                * @type Number\r
+                * @example\r
+                */\r
+               type : CKEDITOR.NODE_ELEMENT,\r
+\r
+               /**\r
+                * Adds a CSS class to the element. It appends the class to the\r
+                * already existing names.\r
+                * @param {String} className The name of the class to be added.\r
+                * @example\r
+                * var element = new CKEDITOR.dom.element( 'div' );\r
+                * element.addClass( 'classA' );  // &lt;div class="classA"&gt;\r
+                * element.addClass( 'classB' );  // &lt;div class="classA classB"&gt;\r
+                * element.addClass( 'classA' );  // &lt;div class="classA classB"&gt;\r
+                */\r
+               addClass : function( className )\r
+               {\r
+                       var c = this.$.className;\r
+                       if ( c )\r
+                       {\r
+                               var regex = new RegExp( '(?:^|\\s)' + className + '(?:\\s|$)', '' );\r
+                               if ( !regex.test( c ) )\r
+                                       c += ' ' + className;\r
+                       }\r
+                       this.$.className = c || className;\r
+               },\r
+\r
+               /**\r
+                * Removes a CSS class name from the elements classes. Other classes\r
+                * remain untouched.\r
+                * @param {String} className The name of the class to remove.\r
+                * @example\r
+                * var element = new CKEDITOR.dom.element( 'div' );\r
+                * element.addClass( 'classA' );  // &lt;div class="classA"&gt;\r
+                * element.addClass( 'classB' );  // &lt;div class="classA classB"&gt;\r
+                * element.removeClass( 'classA' );  // &lt;div class="classB"&gt;\r
+                * element.removeClass( 'classB' );  // &lt;div&gt;\r
+                */\r
+               removeClass : function( className )\r
+               {\r
+                       var c = this.getAttribute( 'class' );\r
+                       if ( c )\r
+                       {\r
+                               var regex = new RegExp( '(?:^|\\s+)' + className + '(?=\\s|$)', 'i' );\r
+                               if ( regex.test( c ) )\r
+                               {\r
+                                       c = c.replace( regex, '' ).replace( /^\s+/, '' );\r
+\r
+                                       if ( c )\r
+                                               this.setAttribute( 'class', c );\r
+                                       else\r
+                                               this.removeAttribute( 'class' );\r
+                               }\r
+                       }\r
+               },\r
+\r
+               hasClass : function( className )\r
+               {\r
+                       var regex = new RegExp( '(?:^|\\s+)' + className + '(?=\\s|$)', '' );\r
+                       return regex.test( this.getAttribute('class') );\r
+               },\r
+\r
+               /**\r
+                * Append a node as a child of this element.\r
+                * @param {CKEDITOR.dom.node|String} node The node or element name to be\r
+                *              appended.\r
+                * @param {Boolean} [toStart] Indicates that the element is to be\r
+                *              appended at the start.\r
+                * @returns {CKEDITOR.dom.node} The appended node.\r
+                * @example\r
+                * var p = new CKEDITOR.dom.element( 'p' );\r
+                *\r
+                * var strong = new CKEDITOR.dom.element( 'strong' );\r
+                * <b>p.append( strong );</b>\r
+                *\r
+                * var em = <b>p.append( 'em' );</b>\r
+                *\r
+                * // result: "&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;"\r
+                */\r
+               append : function( node, toStart )\r
+               {\r
+                       if ( typeof node == 'string' )\r
+                               node = this.getDocument().createElement( node );\r
+\r
+                       if ( toStart )\r
+                               this.$.insertBefore( node.$, this.$.firstChild );\r
+                       else\r
+                               this.$.appendChild( node.$ );\r
+\r
+                       return node;\r
+               },\r
+\r
+               appendHtml : function( html )\r
+               {\r
+                       if ( !this.$.childNodes.length )\r
+                               this.setHtml( html );\r
+                       else\r
+                       {\r
+                               var temp = new CKEDITOR.dom.element( 'div', this.getDocument() );\r
+                               temp.setHtml( html );\r
+                               temp.moveChildren( this );\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * Append text to this element.\r
+                * @param {String} text The text to be appended.\r
+                * @returns {CKEDITOR.dom.node} The appended node.\r
+                * @example\r
+                * var p = new CKEDITOR.dom.element( 'p' );\r
+                * p.appendText( 'This is' );\r
+                * p.appendText( ' some text' );\r
+                *\r
+                * // result: "&lt;p&gt;This is some text&lt;/p&gt;"\r
+                */\r
+               appendText : function( text )\r
+               {\r
+                       if ( this.$.text != undefined )\r
+                               this.$.text += text;\r
+                       else\r
+                               this.append( new CKEDITOR.dom.text( text ) );\r
+               },\r
+\r
+               appendBogus : function()\r
+               {\r
+                       var lastChild = this.getLast() ;\r
+\r
+                       // Ignore empty/spaces text.\r
+                       while ( lastChild && lastChild.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.rtrim( lastChild.getText() ) )\r
+                               lastChild = lastChild.getPrevious();\r
+                       if ( !lastChild || !lastChild.is || !lastChild.is( 'br' ) )\r
+                       {\r
+                               this.append(\r
+                                       CKEDITOR.env.opera ?\r
+                                               this.getDocument().createText('') :\r
+                                               this.getDocument().createElement( 'br' ) );\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * Breaks one of the ancestor element in the element position, moving\r
+                * this element between the broken parts.\r
+                * @param {CKEDITOR.dom.element} parent The anscestor element to get broken.\r
+                * @example\r
+                * // Before breaking:\r
+                * //     <b>This <i>is some<span /> sample</i> test text</b>\r
+                * // If "element" is <span /> and "parent" is <i>:\r
+                * //     <b>This <i>is some</i><span /><i> sample</i> test text</b>\r
+                * element.breakParent( parent );\r
+                * @example\r
+                * // Before breaking:\r
+                * //     <b>This <i>is some<span /> sample</i> test text</b>\r
+                * // If "element" is <span /> and "parent" is <b>:\r
+                * //     <b>This <i>is some</i></b><span /><b><i> sample</i> test text</b>\r
+                * element.breakParent( parent );\r
+                */\r
+               breakParent : function( parent )\r
+               {\r
+                       var range = new CKEDITOR.dom.range( this.getDocument() );\r
+\r
+                       // We'll be extracting part of this element, so let's use our\r
+                       // range to get the correct piece.\r
+                       range.setStartAfter( this );\r
+                       range.setEndAfter( parent );\r
+\r
+                       // Extract it.\r
+                       var docFrag = range.extractContents();\r
+\r
+                       // Move the element outside the broken element.\r
+                       range.insertNode( this.remove() );\r
+\r
+                       // Re-insert the extracted piece after the element.\r
+                       docFrag.insertAfterNode( this );\r
+               },\r
+\r
+               contains :\r
+                       CKEDITOR.env.ie || CKEDITOR.env.webkit ?\r
+                               function( node )\r
+                               {\r
+                                       var $ = this.$;\r
+\r
+                                       return node.type != CKEDITOR.NODE_ELEMENT ?\r
+                                               $.contains( node.getParent().$ ) :\r
+                                               $ != node.$ && $.contains( node.$ );\r
+                               }\r
+                       :\r
+                               function( node )\r
+                               {\r
+                                       return !!( this.$.compareDocumentPosition( node.$ ) & 16 );\r
+                               },\r
+\r
+               /**\r
+                * Moves the selection focus to this element.\r
+                * @example\r
+                * var element = CKEDITOR.document.getById( 'myTextarea' );\r
+                * <b>element.focus()</b>;\r
+                */\r
+               focus : function()\r
+               {\r
+                       // IE throws error if the element is not visible.\r
+                       try\r
+                       {\r
+                               this.$.focus();\r
+                       }\r
+                       catch (e)\r
+                       {}\r
+               },\r
+\r
+               /**\r
+                * Gets the inner HTML of this element.\r
+                * @returns {String} The inner HTML of this element.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '&lt;div&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/div&gt;' );\r
+                * alert( <b>p.getHtml()</b> );  // "&lt;b&gt;Example&lt;/b&gt;"\r
+                */\r
+               getHtml : function()\r
+               {\r
+                       return this.$.innerHTML;\r
+               },\r
+\r
+               getOuterHtml : function()\r
+               {\r
+                       if ( this.$.outerHTML )\r
+                       {\r
+                               // IE includes the <?xml:namespace> tag in the outerHTML of\r
+                               // namespaced element. So, we must strip it here. (#3341)\r
+                               return this.$.outerHTML.replace( /<\?[^>]*>/, '' );\r
+                       }\r
+\r
+                       var tmpDiv = this.$.ownerDocument.createElement( 'div' );\r
+                       tmpDiv.appendChild( this.$.cloneNode( true ) );\r
+                       return tmpDiv.innerHTML;\r
+               },\r
+\r
+               /**\r
+                * Sets the inner HTML of this element.\r
+                * @param {String} html The HTML to be set for this element.\r
+                * @returns {String} The inserted HTML.\r
+                * @example\r
+                * var p = new CKEDITOR.dom.element( 'p' );\r
+                * <b>p.setHtml( '&lt;b&gt;Inner&lt;/b&gt; HTML' );</b>\r
+                *\r
+                * // result: "&lt;p&gt;&lt;b&gt;Inner&lt;/b&gt; HTML&lt;/p&gt;"\r
+                */\r
+               setHtml : function( html )\r
+               {\r
+                       return ( this.$.innerHTML = html );\r
+               },\r
+\r
+               /**\r
+                * Sets the element contents as plain text.\r
+                * @param {String} text The text to be set.\r
+                * @returns {String} The inserted text.\r
+                * @example\r
+                * var element = new CKEDITOR.dom.element( 'div' );\r
+                * element.setText( 'A > B & C < D' );\r
+                * alert( element.innerHTML );  // "A &amp;gt; B &amp;amp; C &amp;lt; D"\r
+                */\r
+               setText : function( text )\r
+               {\r
+                       CKEDITOR.dom.element.prototype.setText = ( this.$.innerText != undefined ) ?\r
+                               function ( text )\r
+                               {\r
+                                       return this.$.innerText = text;\r
+                               } :\r
+                               function ( text )\r
+                               {\r
+                                       return this.$.textContent = text;\r
+                               };\r
+\r
+                       return this.setText( text );\r
+               },\r
+\r
+               /**\r
+                * Gets the value of an element attribute.\r
+                * @function\r
+                * @param {String} name The attribute name.\r
+                * @returns {String} The attribute value or null if not defined.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '&lt;input type="text" /&gt;' );\r
+                * alert( <b>element.getAttribute( 'type' )</b> );  // "text"\r
+                */\r
+               getAttribute : (function()\r
+               {\r
+                       var standard = function( name )\r
+                       {\r
+                               return this.$.getAttribute( name, 2 );\r
+                       };\r
+\r
+                       if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) )\r
+                       {\r
+                               return function( name )\r
+                               {\r
+                                       switch ( name )\r
+                                       {\r
+                                               case 'class':\r
+                                                       name = 'className';\r
+                                                       break;\r
+\r
+                                               case 'tabindex':\r
+                                                       var tabIndex = standard.call( this, name );\r
+\r
+                                                       // IE returns tabIndex=0 by default for all\r
+                                                       // elements. For those elements,\r
+                                                       // getAtrribute( 'tabindex', 2 ) returns 32768\r
+                                                       // instead. So, we must make this check to give a\r
+                                                       // uniform result among all browsers.\r
+                                                       if ( tabIndex !== 0 && this.$.tabIndex === 0 )\r
+                                                               tabIndex = null;\r
+\r
+                                                       return tabIndex;\r
+                                                       break;\r
+\r
+                                               case 'checked':\r
+                                                       return this.$.checked;\r
+                                                       break;\r
+\r
+                                               case 'style':\r
+                                                       // IE does not return inline styles via getAttribute(). See #2947.\r
+                                                       return this.$.style.cssText;\r
+                                       }\r
+\r
+                                       return standard.call( this, name );\r
+                               };\r
+                       }\r
+                       else\r
+                               return standard;\r
+               })(),\r
+\r
+               getChildren : function()\r
+               {\r
+                       return new CKEDITOR.dom.nodeList( this.$.childNodes );\r
+               },\r
+\r
+               /**\r
+                * Gets the current computed value of one of the element CSS style\r
+                * properties.\r
+                * @function\r
+                * @param {String} propertyName The style property name.\r
+                * @returns {String} The property value.\r
+                * @example\r
+                * var element = new CKEDITOR.dom.element( 'span' );\r
+                * alert( <b>element.getComputedStyle( 'display' )</b> );  // "inline"\r
+                */\r
+               getComputedStyle :\r
+                       CKEDITOR.env.ie ?\r
+                               function( propertyName )\r
+                               {\r
+                                       return this.$.currentStyle[ CKEDITOR.tools.cssStyleToDomStyle( propertyName ) ];\r
+                               }\r
+                       :\r
+                               function( propertyName )\r
+                               {\r
+                                       return this.getWindow().$.getComputedStyle( this.$, '' ).getPropertyValue( propertyName );\r
+                               },\r
+\r
+               /**\r
+                * Gets the DTD entries for this element.\r
+                * @returns {Object} An object containing the list of elements accepted\r
+                *              by this element.\r
+                */\r
+               getDtd : function()\r
+               {\r
+                       var dtd = CKEDITOR.dtd[ this.getName() ];\r
+\r
+                       this.getDtd = function()\r
+                       {\r
+                               return dtd;\r
+                       };\r
+\r
+                       return dtd;\r
+               },\r
+\r
+               getElementsByTag : CKEDITOR.dom.document.prototype.getElementsByTag,\r
+\r
+               /**\r
+                * Gets the computed tabindex for this element.\r
+                * @function\r
+                * @returns {Number} The tabindex value.\r
+                * @example\r
+                * var element = CKEDITOR.document.getById( 'myDiv' );\r
+                * alert( <b>element.getTabIndex()</b> );  // e.g. "-1"\r
+                */\r
+               getTabIndex :\r
+                       CKEDITOR.env.ie ?\r
+                               function()\r
+                               {\r
+                                       var tabIndex = this.$.tabIndex;\r
+\r
+                                       // IE returns tabIndex=0 by default for all elements. In\r
+                                       // those cases we must check that the element really has\r
+                                       // the tabindex attribute set to zero, or it is one of\r
+                                       // those element that should have zero by default.\r
+                                       if ( tabIndex === 0 && !CKEDITOR.dtd.$tabIndex[ this.getName() ] && parseInt( this.getAttribute( 'tabindex' ), 10 ) !== 0 )\r
+                                               tabIndex = -1;\r
+\r
+                                               return tabIndex;\r
+                               }\r
+                       : CKEDITOR.env.webkit ?\r
+                               function()\r
+                               {\r
+                                       var tabIndex = this.$.tabIndex;\r
+\r
+                                       // Safari returns "undefined" for elements that should not\r
+                                       // have tabindex (like a div). So, we must try to get it\r
+                                       // from the attribute.\r
+                                       // https://bugs.webkit.org/show_bug.cgi?id=20596\r
+                                       if ( tabIndex == undefined )\r
+                                       {\r
+                                               tabIndex = parseInt( this.getAttribute( 'tabindex' ), 10 );\r
+\r
+                                               // If the element don't have the tabindex attribute,\r
+                                               // then we should return -1.\r
+                                               if ( isNaN( tabIndex ) )\r
+                                                       tabIndex = -1;\r
+                                       }\r
+\r
+                                       return tabIndex;\r
+                               }\r
+                       :\r
+                               function()\r
+                               {\r
+                                       return this.$.tabIndex;\r
+                               },\r
+\r
+               /**\r
+                * Gets the text value of this element.\r
+                *\r
+                * Only in IE (which uses innerText), &lt;br&gt; will cause linebreaks,\r
+                * and sucessive whitespaces (including line breaks) will be reduced to\r
+                * a single space. This behavior is ok for us, for now. It may change\r
+                * in the future.\r
+                * @returns {String} The text value.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '&lt;div&gt;Same &lt;i&gt;text&lt;/i&gt;.&lt;/div&gt;' );\r
+                * alert( <b>element.getText()</b> );  // "Sample text."\r
+                */\r
+               getText : function()\r
+               {\r
+                       return this.$.textContent || this.$.innerText || '';\r
+               },\r
+\r
+               /**\r
+                * Gets the window object that contains this element.\r
+                * @returns {CKEDITOR.dom.window} The window object.\r
+                * @example\r
+                */\r
+               getWindow : function()\r
+               {\r
+                       return this.getDocument().getWindow();\r
+               },\r
+\r
+               /**\r
+                * Gets the value of the "id" attribute of this element.\r
+                * @returns {String} The element id, or null if not available.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '&lt;p id="myId"&gt;&lt;/p&gt;' );\r
+                * alert( <b>element.getId()</b> );  // "myId"\r
+                */\r
+               getId : function()\r
+               {\r
+                       return this.$.id || null;\r
+               },\r
+\r
+               /**\r
+                * Gets the value of the "name" attribute of this element.\r
+                * @returns {String} The element name, or null if not available.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '&lt;input name="myName"&gt;&lt;/input&gt;' );\r
+                * alert( <b>element.getNameAtt()</b> );  // "myName"\r
+                */\r
+               getNameAtt : function()\r
+               {\r
+                       return this.$.name || null;\r
+               },\r
+\r
+               /**\r
+                * Gets the element name (tag name). The returned name is guaranteed to\r
+                * be always full lowercased.\r
+                * @returns {String} The element name.\r
+                * @example\r
+                * var element = new CKEDITOR.dom.element( 'span' );\r
+                * alert( <b>element.getName()</b> );  // "span"\r
+                */\r
+               getName : function()\r
+               {\r
+                       // Cache the lowercased name inside a closure.\r
+                       var nodeName = this.$.nodeName.toLowerCase();\r
+\r
+                       if ( CKEDITOR.env.ie )\r
+                       {\r
+                               var scopeName = this.$.scopeName;\r
+                               if ( scopeName != 'HTML' )\r
+                                       nodeName = scopeName.toLowerCase() + ':' + nodeName;\r
+                       }\r
+\r
+                       return (\r
+                       /** @ignore */\r
+                       this.getName = function()\r
+                               {\r
+                                       return nodeName;\r
+                               })();\r
+               },\r
+\r
+               /**\r
+                * Gets the value set to this element. This value is usually available\r
+                * for form field elements.\r
+                * @returns {String} The element value.\r
+                */\r
+               getValue : function()\r
+               {\r
+                       return this.$.value;\r
+               },\r
+\r
+               /**\r
+                * Gets the first child node of this element.\r
+                * @returns {CKEDITOR.dom.node} The first child node or null if not\r
+                *              available.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '&lt;div&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/div&gt;' );\r
+                * var first = <b>element.getFirst()</b>;\r
+                * alert( first.getName() );  // "b"\r
+                */\r
+               getFirst : function()\r
+               {\r
+                       var $ = this.$.firstChild;\r
+                       return $ ? new CKEDITOR.dom.node( $ ) : null;\r
+               },\r
+\r
+               /**\r
+                * @param {Function} evaluator Filtering the result node.\r
+                */\r
+               getLast : function( evaluator )\r
+               {\r
+                       var last = this.$.lastChild,\r
+                               retval = last && new CKEDITOR.dom.node( last );\r
+                       if ( retval && evaluator && !evaluator( retval ) )\r
+                               retval = retval.getPrevious( evaluator );\r
+\r
+                       return retval;\r
+               },\r
+\r
+               getStyle : function( name )\r
+               {\r
+                       return this.$.style[ CKEDITOR.tools.cssStyleToDomStyle( name ) ];\r
+               },\r
+\r
+               /**\r
+                * Checks if the element name matches one or more names.\r
+                * @param {String} name[,name[,...]] One or more names to be checked.\r
+                * @returns {Boolean} true if the element name matches any of the names.\r
+                * @example\r
+                * var element = new CKEDITOR.element( 'span' );\r
+                * alert( <b>element.is( 'span' )</b> );  "true"\r
+                * alert( <b>element.is( 'p', 'span' )</b> );  "true"\r
+                * alert( <b>element.is( 'p' )</b> );  "false"\r
+                * alert( <b>element.is( 'p', 'div' )</b> );  "false"\r
+                */\r
+               is : function()\r
+               {\r
+                       var name = this.getName();\r
+                       for ( var i = 0 ; i < arguments.length ; i++ )\r
+                       {\r
+                               if ( arguments[ i ] == name )\r
+                                       return true;\r
+                       }\r
+                       return false;\r
+               },\r
+\r
+               isEditable : function()\r
+               {\r
+                       // Get the element name.\r
+                       var name = this.getName();\r
+\r
+                       // Get the element DTD (defaults to span for unknown elements).\r
+                       var dtd = !CKEDITOR.dtd.$nonEditable[ name ]\r
+                                               && ( CKEDITOR.dtd[ name ] || CKEDITOR.dtd.span );\r
+\r
+                       // In the DTD # == text node.\r
+                       return ( dtd && dtd['#'] );\r
+               },\r
+\r
+               isIdentical : function( otherElement )\r
+               {\r
+                       if ( this.getName() != otherElement.getName() )\r
+                               return false;\r
+\r
+                       var thisAttribs = this.$.attributes,\r
+                               otherAttribs = otherElement.$.attributes;\r
+\r
+                       var thisLength = thisAttribs.length,\r
+                               otherLength = otherAttribs.length;\r
+\r
+                       if ( !CKEDITOR.env.ie && thisLength != otherLength )\r
+                               return false;\r
+\r
+                       for ( var i = 0 ; i < thisLength ; i++ )\r
+                       {\r
+                               var attribute = thisAttribs[ i ];\r
+\r
+                               if ( ( !CKEDITOR.env.ie || ( attribute.specified && attribute.nodeName != '_cke_expando' ) ) && attribute.nodeValue != otherElement.getAttribute( attribute.nodeName ) )\r
+                                       return false;\r
+                       }\r
+\r
+                       // For IE, we have to for both elements, because it's difficult to\r
+                       // know how the atttibutes collection is organized in its DOM.\r
+                       if ( CKEDITOR.env.ie )\r
+                       {\r
+                               for ( i = 0 ; i < otherLength ; i++ )\r
+                               {\r
+                                       attribute = otherAttribs[ i ];\r
+\r
+                                       if ( ( !CKEDITOR.env.ie || ( attribute.specified && attribute.nodeName != '_cke_expando' ) ) && attribute.nodeValue != thisAttribs.getAttribute( attribute.nodeName ) )\r
+                                               return false;\r
+                               }\r
+                       }\r
+\r
+                       return true;\r
+               },\r
+\r
+               /**\r
+                * Checks if this element is visible. May not work if the element is\r
+                * child of an element with visibility set to "hidden", but works well\r
+                * on the great majority of cases.\r
+                * @return {Boolean} True if the element is visible.\r
+                */\r
+               isVisible : function()\r
+               {\r
+                       return this.$.offsetWidth && ( this.$.style.visibility != 'hidden' );\r
+               },\r
+\r
+               /**\r
+                * Indicates that the element has defined attributes.\r
+                * @returns {Boolean} True if the element has attributes.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '<div title="Test">Example</div>' );\r
+                * alert( <b>element.hasAttributes()</b> );  "true"\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '<div>Example</div>' );\r
+                * alert( <b>element.hasAttributes()</b> );  "false"\r
+                */\r
+               hasAttributes :\r
+                       CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ?\r
+                               function()\r
+                               {\r
+                                       var attributes = this.$.attributes;\r
+\r
+                                       for ( var i = 0 ; i < attributes.length ; i++ )\r
+                                       {\r
+                                               var attribute = attributes[i];\r
+\r
+                                               switch ( attribute.nodeName )\r
+                                               {\r
+                                                       case 'class' :\r
+                                                               // IE has a strange bug. If calling removeAttribute('className'),\r
+                                                               // the attributes collection will still contain the "class"\r
+                                                               // attribute, which will be marked as "specified", even if the\r
+                                                               // outerHTML of the element is not displaying the class attribute.\r
+                                                               // Note : I was not able to reproduce it outside the editor,\r
+                                                               // but I've faced it while working on the TC of #1391.\r
+                                                               if ( this.getAttribute( 'class' ) )\r
+                                                                       return true;\r
+\r
+                                                       // Attributes to be ignored.\r
+                                                       case '_cke_expando' :\r
+                                                               continue;\r
+\r
+                                                       /*jsl:fallthru*/\r
+\r
+                                                       default :\r
+                                                               if ( attribute.specified )\r
+                                                                       return true;\r
+                                               }\r
+                                       }\r
+\r
+                                       return false;\r
+                               }\r
+                       :\r
+                               function()\r
+                               {\r
+                                       var attributes = this.$.attributes;\r
+                                       return ( attributes.length > 1 || ( attributes.length == 1 && attributes[0].nodeName != '_cke_expando' ) );\r
+                               },\r
+\r
+               /**\r
+                * Indicates whether a specified attribute is defined for this element.\r
+                * @returns {Boolean} True if the specified attribute is defined.\r
+                * @param (String) name The attribute name.\r
+                * @example\r
+                */\r
+               hasAttribute : function( name )\r
+               {\r
+                       var $attr = this.$.attributes.getNamedItem( name );\r
+                       return !!( $attr && $attr.specified );\r
+               },\r
+\r
+               /**\r
+                * Hides this element (display:none).\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.getById( 'myElement' );\r
+                * <b>element.hide()</b>;\r
+                */\r
+               hide : function()\r
+               {\r
+                       this.setStyle( 'display', 'none' );\r
+               },\r
+\r
+               moveChildren : function( target, toStart )\r
+               {\r
+                       var $ = this.$;\r
+                       target = target.$;\r
+\r
+                       if ( $ == target )\r
+                               return;\r
+\r
+                       var child;\r
+\r
+                       if ( toStart )\r
+                       {\r
+                               while ( ( child = $.lastChild ) )\r
+                                       target.insertBefore( $.removeChild( child ), target.firstChild );\r
+                       }\r
+                       else\r
+                       {\r
+                               while ( ( child = $.firstChild ) )\r
+                                       target.appendChild( $.removeChild( child ) );\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * Shows this element (display it).\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.getById( 'myElement' );\r
+                * <b>element.show()</b>;\r
+                */\r
+               show : function()\r
+               {\r
+                       this.setStyles(\r
+                               {\r
+                                       display : '',\r
+                                       visibility : ''\r
+                               });\r
+               },\r
+\r
+               /**\r
+                * Sets the value of an element attribute.\r
+                * @param {String} name The name of the attribute.\r
+                * @param {String} value The value to be set to the attribute.\r
+                * @function\r
+                * @returns {CKEDITOR.dom.element} This element instance.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.getById( 'myElement' );\r
+                * <b>element.setAttribute( 'class', 'myClass' )</b>;\r
+                * <b>element.setAttribute( 'title', 'This is an example' )</b>;\r
+                */\r
+               setAttribute : (function()\r
+               {\r
+                       var standard = function( name, value )\r
+                       {\r
+                               this.$.setAttribute( name, value );\r
+                               return this;\r
+                       };\r
+\r
+                       if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) )\r
+                       {\r
+                               return function( name, value )\r
+                               {\r
+                                       if ( name == 'class' )\r
+                                               this.$.className = value;\r
+                                       else if ( name == 'style' )\r
+                                               this.$.style.cssText = value;\r
+                                       else if ( name == 'tabindex' )  // Case sensitive.\r
+                                               this.$.tabIndex = value;\r
+                                       else if ( name == 'checked' )\r
+                                               this.$.checked = value;\r
+                                       else\r
+                                               standard.apply( this, arguments );\r
+                                       return this;\r
+                               };\r
+                       }\r
+                       else\r
+                               return standard;\r
+               })(),\r
+\r
+               /**\r
+                * Sets the value of several element attributes.\r
+                * @param {Object} attributesPairs An object containing the names and\r
+                *              values of the attributes.\r
+                * @returns {CKEDITOR.dom.element} This element instance.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.getById( 'myElement' );\r
+                * <b>element.setAttributes({\r
+                *     'class' : 'myClass',\r
+                *     'title' : 'This is an example' })</b>;\r
+                */\r
+               setAttributes : function( attributesPairs )\r
+               {\r
+                       for ( var name in attributesPairs )\r
+                               this.setAttribute( name, attributesPairs[ name ] );\r
+                       return this;\r
+               },\r
+\r
+               /**\r
+                * Sets the element value. This function is usually used with form\r
+                * field element.\r
+                * @param {String} value The element value.\r
+                * @returns {CKEDITOR.dom.element} This element instance.\r
+                */\r
+               setValue : function( value )\r
+               {\r
+                       this.$.value = value;\r
+                       return this;\r
+               },\r
+\r
+               /**\r
+                * Removes an attribute from the element.\r
+                * @param {String} name The attribute name.\r
+                * @function\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '<div class="classA"></div>' );\r
+                * element.removeAttribute( 'class' );\r
+                */\r
+               removeAttribute : (function()\r
+               {\r
+                       var standard = function( name )\r
+                       {\r
+                               this.$.removeAttribute( name );\r
+                       };\r
+\r
+                       if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) )\r
+                       {\r
+                               return function( name )\r
+                               {\r
+                                       if ( name == 'class' )\r
+                                               name = 'className';\r
+                                       else if ( name == 'tabindex' )\r
+                                               name = 'tabIndex';\r
+                                       standard.call( this, name );\r
+                               };\r
+                       }\r
+                       else\r
+                               return standard;\r
+               })(),\r
+\r
+               removeAttributes : function ( attributes )\r
+               {\r
+                       for ( var i = 0 ; i < attributes.length ; i++ )\r
+                               this.removeAttribute( attributes[ i ] );\r
+               },\r
+\r
+               /**\r
+                * Removes a style from the element.\r
+                * @param {String} name The style name.\r
+                * @function\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '<div style="display:none"></div>' );\r
+                * element.removeStyle( 'display' );\r
+                */\r
+               removeStyle : function( name )\r
+               {\r
+                       if ( this.$.style.removeAttribute )\r
+                               this.$.style.removeAttribute( CKEDITOR.tools.cssStyleToDomStyle( name ) );\r
+                       else\r
+                               this.setStyle( name, '' );\r
+\r
+                       if ( !this.$.style.cssText )\r
+                               this.removeAttribute( 'style' );\r
+               },\r
+\r
+               /**\r
+                * Sets the value of an element style.\r
+                * @param {String} name The name of the style. The CSS naming notation\r
+                *              must be used (e.g. "background-color").\r
+                * @param {String} value The value to be set to the style.\r
+                * @returns {CKEDITOR.dom.element} This element instance.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.getById( 'myElement' );\r
+                * <b>element.setStyle( 'background-color', '#ff0000' )</b>;\r
+                * <b>element.setStyle( 'margin-top', '10px' )</b>;\r
+                * <b>element.setStyle( 'float', 'right' )</b>;\r
+                */\r
+               setStyle : function( name, value )\r
+               {\r
+                       this.$.style[ CKEDITOR.tools.cssStyleToDomStyle( name ) ] = value;\r
+                       return this;\r
+               },\r
+\r
+               /**\r
+                * Sets the value of several element styles.\r
+                * @param {Object} stylesPairs An object containing the names and\r
+                *              values of the styles.\r
+                * @returns {CKEDITOR.dom.element} This element instance.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.getById( 'myElement' );\r
+                * <b>element.setStyles({\r
+                *     'position' : 'absolute',\r
+                *     'float' : 'right' })</b>;\r
+                */\r
+               setStyles : function( stylesPairs )\r
+               {\r
+                       for ( var name in stylesPairs )\r
+                               this.setStyle( name, stylesPairs[ name ] );\r
+                       return this;\r
+               },\r
+\r
+               /**\r
+                * Sets the opacity of an element.\r
+                * @param {Number} opacity A number within the range [0.0, 1.0].\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.getById( 'myElement' );\r
+                * <b>element.setOpacity( 0.75 )</b>;\r
+                */\r
+               setOpacity : function( opacity )\r
+               {\r
+                       if ( CKEDITOR.env.ie )\r
+                       {\r
+                               opacity = Math.round( opacity * 100 );\r
+                               this.setStyle( 'filter', opacity >= 100 ? '' : 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')' );\r
+                       }\r
+                       else\r
+                               this.setStyle( 'opacity', opacity );\r
+               },\r
+\r
+               /**\r
+                * Makes the element and its children unselectable.\r
+                * @function\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.getById( 'myElement' );\r
+                * element.unselectable();\r
+                */\r
+               unselectable :\r
+                       CKEDITOR.env.gecko ?\r
+                               function()\r
+                               {\r
+                                       this.$.style.MozUserSelect = 'none';\r
+                               }\r
+                       : CKEDITOR.env.webkit ?\r
+                               function()\r
+                               {\r
+                                       this.$.style.KhtmlUserSelect = 'none';\r
+                               }\r
+                       :\r
+                               function()\r
+                               {\r
+                                       if ( CKEDITOR.env.ie || CKEDITOR.env.opera )\r
+                                       {\r
+                                               var element = this.$,\r
+                                                       e,\r
+                                                       i = 0;\r
+\r
+                                               element.unselectable = 'on';\r
+\r
+                                               while ( ( e = element.all[ i++ ] ) )\r
+                                               {\r
+                                                       switch ( e.tagName.toLowerCase() )\r
+                                                       {\r
+                                                               case 'iframe' :\r
+                                                               case 'textarea' :\r
+                                                               case 'input' :\r
+                                                               case 'select' :\r
+                                                                       /* Ignore the above tags */\r
+                                                                       break;\r
+                                                               default :\r
+                                                                       e.unselectable = 'on';\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               },\r
+\r
+               getPositionedAncestor : function()\r
+               {\r
+                       var current = this;\r
+                       while ( current.getName() != 'html' )\r
+                       {\r
+                               if ( current.getComputedStyle( 'position' ) != 'static' )\r
+                                       return current;\r
+\r
+                               current = current.getParent();\r
+                       }\r
+                       return null;\r
+               },\r
+\r
+               getDocumentPosition : function( refDocument )\r
+               {\r
+                       var x = 0, y = 0,\r
+                               body = this.getDocument().getBody(),\r
+                               quirks = this.getDocument().$.compatMode == 'BackCompat';\r
+\r
+                       var doc = this.getDocument();\r
+\r
+                       if ( document.documentElement[ "getBoundingClientRect" ] )\r
+                       {\r
+                               var box  = this.$.getBoundingClientRect(),\r
+                                       $doc = doc.$,\r
+                                       $docElem = $doc.documentElement;\r
+\r
+                               var clientTop = $docElem.clientTop || body.$.clientTop || 0,\r
+                                       clientLeft = $docElem.clientLeft || body.$.clientLeft || 0,\r
+                                       needAdjustScrollAndBorders = true;\r
+\r
+                               /*\r
+                                * #3804: getBoundingClientRect() works differently on IE and non-IE\r
+                                * browsers, regarding scroll positions.\r
+                                *\r
+                                * On IE, the top position of the <html> element is always 0, no matter\r
+                                * how much you scrolled down.\r
+                                *\r
+                                * On other browsers, the top position of the <html> element is negative\r
+                                * scrollTop.\r
+                                */\r
+                               if ( CKEDITOR.env.ie )\r
+                               {\r
+                                       var inDocElem = doc.getDocumentElement().contains( this ),\r
+                                               inBody = doc.getBody().contains( this );\r
+\r
+                                       needAdjustScrollAndBorders = ( quirks && inBody ) || ( !quirks && inDocElem );\r
+                               }\r
+\r
+                               if ( needAdjustScrollAndBorders )\r
+                               {\r
+                                       x = box.left + ( !quirks && $docElem.scrollLeft || body.$.scrollLeft );\r
+                                       x -= clientLeft;\r
+                                       y = box.top  + ( !quirks && $docElem.scrollTop || body.$.scrollTop );\r
+                                       y -= clientTop;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               var current = this, previous = null, offsetParent;\r
+                               while ( current && !( current.getName() == 'body' || current.getName() == 'html' ) )\r
+                               {\r
+                                       x += current.$.offsetLeft - current.$.scrollLeft;\r
+                                       y += current.$.offsetTop - current.$.scrollTop;\r
+\r
+                                       // Opera includes clientTop|Left into offsetTop|Left.\r
+                                       if ( !current.equals( this ) )\r
+                                       {\r
+                                               x += ( current.$.clientLeft || 0 );\r
+                                               y += ( current.$.clientTop || 0 );\r
+                                       }\r
+\r
+                                       var scrollElement = previous;\r
+                                       while ( scrollElement && !scrollElement.equals( current ) )\r
+                                       {\r
+                                               x -= scrollElement.$.scrollLeft;\r
+                                               y -= scrollElement.$.scrollTop;\r
+                                               scrollElement = scrollElement.getParent();\r
+                                       }\r
+\r
+                                       previous = current;\r
+                                       current = ( offsetParent = current.$.offsetParent ) ?\r
+                                                 new CKEDITOR.dom.element( offsetParent ) : null;\r
+                               }\r
+                       }\r
+\r
+                       if ( refDocument )\r
+                       {\r
+                               var currentWindow = this.getWindow(),\r
+                                       refWindow = refDocument.getWindow();\r
+\r
+                               if ( !currentWindow.equals( refWindow ) && currentWindow.$.frameElement )\r
+                               {\r
+                                       var iframePosition = ( new CKEDITOR.dom.element( currentWindow.$.frameElement ) ).getDocumentPosition( refDocument );\r
+\r
+                                       x += iframePosition.x;\r
+                                       y += iframePosition.y;\r
+                               }\r
+                       }\r
+\r
+                       if ( !document.documentElement[ "getBoundingClientRect" ] )\r
+                       {\r
+                               // In Firefox, we'll endup one pixel before the element positions,\r
+                               // so we must add it here.\r
+                               if ( CKEDITOR.env.gecko && !quirks )\r
+                               {\r
+                                       x += this.$.clientLeft ? 1 : 0;\r
+                                       y += this.$.clientTop ? 1 : 0;\r
+                               }\r
+                       }\r
+\r
+                       return { x : x, y : y };\r
+               },\r
+\r
+               scrollIntoView : function( alignTop )\r
+               {\r
+                       // Get the element window.\r
+                       var win = this.getWindow(),\r
+                               winHeight = win.getViewPaneSize().height;\r
+\r
+                       // Starts from the offset that will be scrolled with the negative value of\r
+                       // the visible window height.\r
+                       var offset = winHeight * -1;\r
+\r
+                       // Append the view pane's height if align to top.\r
+                       // Append element height if we are aligning to the bottom.\r
+                       if ( alignTop )\r
+                               offset += winHeight;\r
+                       else\r
+                       {\r
+                               offset += this.$.offsetHeight || 0;\r
+\r
+                               // Consider the margin in the scroll, which is ok for our current needs, but\r
+                               // needs investigation if we will be using this function in other places.\r
+                               offset += parseInt( this.getComputedStyle( 'marginBottom' ) || 0, 10 ) || 0;\r
+                       }\r
+\r
+                       // Append the offsets for the entire element hierarchy.\r
+                       var elementPosition = this.getDocumentPosition();\r
+                       offset += elementPosition.y;\r
+\r
+                       // offset value might be out of range(nagative), fix it(#3692).\r
+                       offset = offset < 0 ? 0 : offset;\r
+\r
+                       // Scroll the window to the desired position, if not already visible(#3795).\r
+                       var currentScroll = win.getScrollPosition().y;\r
+                       if ( offset > currentScroll || offset < currentScroll - winHeight )\r
+                               win.$.scrollTo( 0, offset );\r
+               },\r
+\r
+               setState : function( state )\r
+               {\r
+                       switch ( state )\r
+                       {\r
+                               case CKEDITOR.TRISTATE_ON :\r
+                                       this.addClass( 'cke_on' );\r
+                                       this.removeClass( 'cke_off' );\r
+                                       this.removeClass( 'cke_disabled' );\r
+                                       break;\r
+                               case CKEDITOR.TRISTATE_DISABLED :\r
+                                       this.addClass( 'cke_disabled' );\r
+                                       this.removeClass( 'cke_off' );\r
+                                       this.removeClass( 'cke_on' );\r
+                                       break;\r
+                               default :\r
+                                       this.addClass( 'cke_off' );\r
+                                       this.removeClass( 'cke_on' );\r
+                                       this.removeClass( 'cke_disabled' );\r
+                                       break;\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * Returns the inner document of this IFRAME element.\r
+                * @returns {CKEDITOR.dom.document} The inner document.\r
+                */\r
+               getFrameDocument : function()\r
+               {\r
+                       var $ = this.$;\r
+\r
+                       try\r
+                       {\r
+                               // In IE, with custom document.domain, it may happen that\r
+                               // the iframe is not yet available, resulting in "Access\r
+                               // Denied" for the following property access.\r
+                               $.contentWindow.document;\r
+                       }\r
+                       catch ( e )\r
+                       {\r
+                               // Trick to solve this issue, forcing the iframe to get ready\r
+                               // by simply setting its "src" property.\r
+                               $.src = $.src;\r
+\r
+                               // In IE6 though, the above is not enough, so we must pause the\r
+                               // execution for a while, giving it time to think.\r
+                               if ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 )\r
+                               {\r
+                                       window.showModalDialog(\r
+                                               'javascript:document.write("' +\r
+                                                       '<script>' +\r
+                                                               'window.setTimeout(' +\r
+                                                                       'function(){window.close();}' +\r
+                                                                       ',50);' +\r
+                                                       '</script>")' );\r
+                               }\r
+                       }\r
+\r
+                       return $ && new CKEDITOR.dom.document( $.contentWindow.document );\r
+               },\r
+\r
+               /**\r
+                * Copy all the attributes from one node to the other, kinda like a clone\r
+                * skipAttributes is an object with the attributes that must NOT be copied.\r
+                * @param {CKEDITOR.dom.element} dest The destination element.\r
+                * @param {Object} skipAttributes A dictionary of attributes to skip.\r
+                * @example\r
+                */\r
+               copyAttributes : function( dest, skipAttributes )\r
+               {\r
+                       var attributes = this.$.attributes;\r
+                       skipAttributes = skipAttributes || {};\r
+\r
+                       for ( var n = 0 ; n < attributes.length ; n++ )\r
+                       {\r
+                               var attribute = attributes[n];\r
+\r
+                               // IE BUG: value attribute is never specified even if it exists.\r
+                               if ( attribute.specified ||\r
+                                 ( CKEDITOR.env.ie && attribute.nodeValue && attribute.nodeName.toLowerCase() == 'value' ) )\r
+                               {\r
+                                       var attrName = attribute.nodeName;\r
+                                       // We can set the type only once, so do it with the proper value, not copying it.\r
+                                       if ( attrName in skipAttributes )\r
+                                               continue;\r
+\r
+                                       var attrValue = this.getAttribute( attrName );\r
+                                       if ( attrValue === null )\r
+                                               attrValue = attribute.nodeValue;\r
+\r
+                                       dest.setAttribute( attrName, attrValue );\r
+                               }\r
+                       }\r
+\r
+                       // The style:\r
+                       if ( this.$.style.cssText !== '' )\r
+                               dest.$.style.cssText = this.$.style.cssText;\r
+               },\r
+\r
+               /**\r
+                * Changes the tag name of the current element.\r
+                * @param {String} newTag The new tag for the element.\r
+                */\r
+               renameNode : function( newTag )\r
+               {\r
+                       // If it's already correct exit here.\r
+                       if ( this.getName() == newTag )\r
+                               return;\r
+\r
+                       var doc = this.getDocument();\r
+\r
+                       // Create the new node.\r
+                       var newNode = new CKEDITOR.dom.element( newTag, doc );\r
+\r
+                       // Copy all attributes.\r
+                       this.copyAttributes( newNode );\r
+\r
+                       // Move children to the new node.\r
+                       this.moveChildren( newNode );\r
+\r
+                       // Replace the node.\r
+                       this.$.parentNode.replaceChild( newNode.$, this.$ );\r
+                       newNode.$._cke_expando = this.$._cke_expando;\r
+                       this.$ = newNode.$;\r
+               },\r
+\r
+               /**\r
+                * Gets a DOM tree descendant under the current node.\r
+                * @param {Array|Number} indices The child index or array of child indices under the node.\r
+                * @returns {CKEDITOR.dom.node} The specified DOM child under the current node. Null if child does not exist.\r
+                * @example\r
+                * var strong = p.getChild(0);\r
+                */\r
+               getChild : function( indices )\r
+               {\r
+                       var rawNode = this.$;\r
+\r
+                       if ( !indices.slice )\r
+                               rawNode = rawNode.childNodes[ indices ];\r
+                       else\r
+                       {\r
+                               while ( indices.length > 0 && rawNode )\r
+                                       rawNode = rawNode.childNodes[ indices.shift() ];\r
+                       }\r
+\r
+                       return rawNode ? new CKEDITOR.dom.node( rawNode ) : null;\r
+               },\r
+\r
+               getChildCount : function()\r
+               {\r
+                       return this.$.childNodes.length;\r
+               }\r
+       });\r
diff --git a/_source/core/dom/elementpath.js b/_source/core/dom/elementpath.js
new file mode 100644 (file)
index 0000000..bc9f01a
--- /dev/null
@@ -0,0 +1,104 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       // Elements that may be considered the "Block boundary" in an element path.\r
+       var pathBlockElements = { address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 };\r
+\r
+       // Elements that may be considered the "Block limit" in an element path.\r
+       var pathBlockLimitElements = { body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,caption:1,form:1 };\r
+\r
+       // Check if an element contains any block element.\r
+       var checkHasBlock = function( element )\r
+       {\r
+               var childNodes = element.getChildren();\r
+\r
+               for ( var i = 0, count = childNodes.count() ; i < count ; i++ )\r
+               {\r
+                       var child = childNodes.getItem( i );\r
+\r
+                       if ( child.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$block[ child.getName() ] )\r
+                               return true;\r
+               }\r
+\r
+               return false;\r
+       };\r
+\r
+       CKEDITOR.dom.elementPath = function( lastNode )\r
+       {\r
+               var block = null;\r
+               var blockLimit = null;\r
+               var elements = [];\r
+\r
+               var e = lastNode;\r
+\r
+               while ( e )\r
+               {\r
+                       if ( e.type == CKEDITOR.NODE_ELEMENT )\r
+                       {\r
+                               if ( !this.lastElement )\r
+                                       this.lastElement = e;\r
+\r
+                               var elementName = e.getName();\r
+                               if ( CKEDITOR.env.ie && e.$.scopeName != 'HTML' )\r
+                                       elementName = e.$.scopeName.toLowerCase() + ':' + elementName;\r
+\r
+                               if ( !blockLimit )\r
+                               {\r
+                                       if ( !block && pathBlockElements[ elementName ] )\r
+                                               block = e;\r
+\r
+                                       if ( pathBlockLimitElements[ elementName ] )\r
+                                       {\r
+                                               // DIV is considered the Block, if no block is available (#525)\r
+                                               // and if it doesn't contain other blocks.\r
+                                               if ( !block && elementName == 'div' && !checkHasBlock( e ) )\r
+                                                       block = e;\r
+                                               else\r
+                                                       blockLimit = e;\r
+                                       }\r
+                               }\r
+\r
+                               elements.push( e );\r
+\r
+                               if ( elementName == 'body' )\r
+                                       break;\r
+                       }\r
+                       e = e.getParent();\r
+               }\r
+\r
+               this.block = block;\r
+               this.blockLimit = blockLimit;\r
+               this.elements = elements;\r
+       };\r
+})();\r
+\r
+CKEDITOR.dom.elementPath.prototype =\r
+{\r
+       /**\r
+        * Compares this element path with another one.\r
+        * @param {CKEDITOR.dom.elementPath} otherPath The elementPath object to be\r
+        * compared with this one.\r
+        * @returns {Boolean} "true" if the paths are equal, containing the same\r
+        * number of elements and the same elements in the same order.\r
+        */\r
+       compare : function( otherPath )\r
+       {\r
+               var thisElements = this.elements;\r
+               var otherElements = otherPath && otherPath.elements;\r
+\r
+               if ( !otherElements || thisElements.length != otherElements.length )\r
+                       return false;\r
+\r
+               for ( var i = 0 ; i < thisElements.length ; i++ )\r
+               {\r
+                       if ( !thisElements[ i ].equals( otherElements[ i ] ) )\r
+                               return false;\r
+               }\r
+\r
+               return true;\r
+       }\r
+};\r
diff --git a/_source/core/dom/event.js b/_source/core/dom/event.js
new file mode 100644 (file)
index 0000000..765c82c
--- /dev/null
@@ -0,0 +1,137 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.dom.event} class, which\r
+ *             represents the a native DOM event object.\r
+ */\r
+\r
+/**\r
+ * Represents a native DOM event object.\r
+ * @constructor\r
+ * @param {Object} domEvent A native DOM event object.\r
+ * @example\r
+ */\r
+CKEDITOR.dom.event = function( domEvent )\r
+{\r
+       /**\r
+        * The native DOM event object represented by this class instance.\r
+        * @type Object\r
+        * @example\r
+        */\r
+       this.$ = domEvent;\r
+};\r
+\r
+CKEDITOR.dom.event.prototype =\r
+{\r
+       /**\r
+        * Gets the key code associated to the event.\r
+        * @returns {Number} The key code.\r
+        * @example\r
+        * alert( event.getKey() );  "65" is "a" has been pressed\r
+        */\r
+       getKey : function()\r
+       {\r
+               return this.$.keyCode || this.$.which;\r
+       },\r
+\r
+       /**\r
+        * Gets a number represeting the combination of the keys pressed during the\r
+        * event. It is the sum with the current key code and the {@link CKEDITOR.CTRL},\r
+        * {@link CKEDITOR.SHIFT} and {@link CKEDITOR.ALT} constants.\r
+        * @returns {Number} The number representing the keys combination.\r
+        * @example\r
+        * alert( event.getKeystroke() == 65 );                                   // "a" key\r
+        * alert( event.getKeystroke() == CKEDITOR.CTRL + 65 );                   // CTRL + "a" key\r
+        * alert( event.getKeystroke() == CKEDITOR.CTRL + CKEDITOR.SHIFT + 65 );  // CTRL + SHIFT + "a" key\r
+        */\r
+       getKeystroke : function()\r
+       {\r
+               var keystroke = this.getKey();\r
+\r
+               if ( this.$.ctrlKey || this.$.metaKey )\r
+                       keystroke += CKEDITOR.CTRL;\r
+\r
+               if ( this.$.shiftKey )\r
+                       keystroke += CKEDITOR.SHIFT;\r
+\r
+               if ( this.$.altKey )\r
+                       keystroke += CKEDITOR.ALT;\r
+\r
+               return keystroke;\r
+       },\r
+\r
+       /**\r
+        * Prevents the original behavior of the event to happen. It can optionally\r
+        * stop propagating the event in the event chain.\r
+        * @param {Boolean} [stopPropagation] Stop propagating this event in the\r
+        *              event chain.\r
+        * @example\r
+        * var element = CKEDITOR.document.getById( 'myElement' );\r
+        * element.on( 'click', function( ev )\r
+        *     {\r
+        *         // The DOM event object is passed by the "data" property.\r
+        *         var domEvent = ev.data;\r
+        *         // Prevent the click to chave any effect in the element.\r
+        *         domEvent.preventDefault();\r
+        *     });\r
+        */\r
+       preventDefault : function( stopPropagation )\r
+       {\r
+               var $ = this.$;\r
+               if ( $.preventDefault )\r
+                       $.preventDefault();\r
+               else\r
+                       $.returnValue = false;\r
+\r
+               if ( stopPropagation )\r
+               {\r
+                       if ( $.stopPropagation )\r
+                               $.stopPropagation();\r
+                       else\r
+                               $.cancelBubble = true;\r
+               }\r
+       },\r
+       /**\r
+        * Returns the DOM node where the event was targeted to.\r
+        * @returns {CKEDITOR.dom.node} The target DOM node.\r
+        * @example\r
+        * var element = CKEDITOR.document.getById( 'myElement' );\r
+        * element.on( 'click', function( ev )\r
+        *     {\r
+        *         // The DOM event object is passed by the "data" property.\r
+        *         var domEvent = ev.data;\r
+        *         // Add a CSS class to the event target.\r
+        *         domEvent.getTarget().addClass( 'clicked' );\r
+        *     });\r
+        */\r
+\r
+       getTarget : function()\r
+       {\r
+               var rawNode = this.$.target || this.$.srcElement;\r
+               return rawNode ? new CKEDITOR.dom.node( rawNode ) : null;\r
+       }\r
+};\r
+\r
+/**\r
+ * CTRL key (1000).\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.CTRL = 1000;\r
+\r
+/**\r
+ * SHIFT key (2000).\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.SHIFT = 2000;\r
+\r
+/**\r
+ * ALT key (4000).\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.ALT = 4000;\r
diff --git a/_source/core/dom/node.js b/_source/core/dom/node.js
new file mode 100644 (file)
index 0000000..30df0a1
--- /dev/null
@@ -0,0 +1,649 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.dom.node} class, which is the base\r
+ *             class for classes that represent DOM nodes.\r
+ */\r
+\r
+/**\r
+ * Base class for classes representing DOM nodes. This constructor may return\r
+ * and instance of classes that inherits this class, like\r
+ * {@link CKEDITOR.dom.element} or {@link CKEDITOR.dom.text}.\r
+ * @augments CKEDITOR.dom.domObject\r
+ * @param {Object} domNode A native DOM node.\r
+ * @constructor\r
+ * @see CKEDITOR.dom.element\r
+ * @see CKEDITOR.dom.text\r
+ * @example\r
+ */\r
+CKEDITOR.dom.node = function( domNode )\r
+{\r
+       if ( domNode )\r
+       {\r
+               switch ( domNode.nodeType )\r
+               {\r
+                       case CKEDITOR.NODE_ELEMENT :\r
+                               return new CKEDITOR.dom.element( domNode );\r
+\r
+                       case CKEDITOR.NODE_TEXT :\r
+                               return new CKEDITOR.dom.text( domNode );\r
+               }\r
+\r
+               // Call the base constructor.\r
+               CKEDITOR.dom.domObject.call( this, domNode );\r
+       }\r
+\r
+       return this;\r
+};\r
+\r
+CKEDITOR.dom.node.prototype = new CKEDITOR.dom.domObject();\r
+\r
+/**\r
+ * Element node type.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.NODE_ELEMENT = 1;\r
+\r
+/**\r
+ * Text node type.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.NODE_TEXT = 3;\r
+\r
+/**\r
+ * Comment node type.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.NODE_COMMENT = 8;\r
+\r
+CKEDITOR.NODE_DOCUMENT_FRAGMENT = 11;\r
+\r
+CKEDITOR.POSITION_IDENTICAL = 0;\r
+CKEDITOR.POSITION_DISCONNECTED = 1;\r
+CKEDITOR.POSITION_FOLLOWING = 2;\r
+CKEDITOR.POSITION_PRECEDING = 4;\r
+CKEDITOR.POSITION_IS_CONTAINED = 8;\r
+CKEDITOR.POSITION_CONTAINS = 16;\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.dom.node.prototype,\r
+       /** @lends CKEDITOR.dom.node.prototype */\r
+       {\r
+               /**\r
+                * Makes this node child of another element.\r
+                * @param {CKEDITOR.dom.element} element The target element to which append\r
+                *              this node.\r
+                * @returns {CKEDITOR.dom.element} The target element.\r
+                * @example\r
+                * var p = new CKEDITOR.dom.element( 'p' );\r
+                * var strong = new CKEDITOR.dom.element( 'strong' );\r
+                * strong.appendTo( p );\r
+                *\r
+                * // result: "&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;"\r
+                */\r
+               appendTo : function( element, toStart )\r
+               {\r
+                       element.append( this, toStart );\r
+                       return element;\r
+               },\r
+\r
+               clone : function( includeChildren, cloneId )\r
+               {\r
+                       var $clone = this.$.cloneNode( includeChildren );\r
+\r
+                       if ( !cloneId )\r
+                       {\r
+                               var removeIds = function( node )\r
+                               {\r
+                                       if ( node.nodeType != CKEDITOR.NODE_ELEMENT )\r
+                                               return;\r
+\r
+                                       node.removeAttribute( 'id', false ) ;\r
+                                       node.removeAttribute( '_cke_expando', false ) ;\r
+\r
+                                       var childs = node.childNodes;\r
+                                       for ( var i=0 ; i < childs.length ; i++ )\r
+                                               removeIds( childs[ i ] );\r
+                               };\r
+\r
+                               // The "id" attribute should never be cloned to avoid duplication.\r
+                               removeIds( $clone );\r
+                       }\r
+\r
+                       return new CKEDITOR.dom.node( $clone );\r
+               },\r
+\r
+               hasPrevious : function()\r
+               {\r
+                       return !!this.$.previousSibling;\r
+               },\r
+\r
+               hasNext : function()\r
+               {\r
+                       return !!this.$.nextSibling;\r
+               },\r
+\r
+               /**\r
+                * Inserts this element after a node.\r
+                * @param {CKEDITOR.dom.node} node The that will preceed this element.\r
+                * @returns {CKEDITOR.dom.node} The node preceeding this one after\r
+                *              insertion.\r
+                * @example\r
+                * var em = new CKEDITOR.dom.element( 'em' );\r
+                * var strong = new CKEDITOR.dom.element( 'strong' );\r
+                * strong.insertAfter( em );\r
+                *\r
+                * // result: "&lt;em&gt;&lt;/em&gt;&lt;strong&gt;&lt;/strong&gt;"\r
+                */\r
+               insertAfter : function( node )\r
+               {\r
+                       node.$.parentNode.insertBefore( this.$, node.$.nextSibling );\r
+                       return node;\r
+               },\r
+\r
+               /**\r
+                * Inserts this element before a node.\r
+                * @param {CKEDITOR.dom.node} node The that will be after this element.\r
+                * @returns {CKEDITOR.dom.node} The node being inserted.\r
+                * @example\r
+                * var em = new CKEDITOR.dom.element( 'em' );\r
+                * var strong = new CKEDITOR.dom.element( 'strong' );\r
+                * strong.insertBefore( em );\r
+                *\r
+                * // result: "&lt;strong&gt;&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;"\r
+                */\r
+               insertBefore : function( node )\r
+               {\r
+                       node.$.parentNode.insertBefore( this.$, node.$ );\r
+                       return node;\r
+               },\r
+\r
+               insertBeforeMe : function( node )\r
+               {\r
+                       this.$.parentNode.insertBefore( node.$, this.$ );\r
+                       return node;\r
+               },\r
+\r
+               /**\r
+                * Retrieves a uniquely identifiable tree address for this node.\r
+                * The tree address returns is an array of integers, with each integer\r
+                * indicating a child index of a DOM node, starting from\r
+                * document.documentElement.\r
+                *\r
+                * For example, assuming <body> is the second child from <html> (<head>\r
+                * being the first), and we'd like to address the third child under the\r
+                * fourth child of body, the tree address returned would be:\r
+                * [1, 3, 2]\r
+                *\r
+                * The tree address cannot be used for finding back the DOM tree node once\r
+                * the DOM tree structure has been modified.\r
+                */\r
+               getAddress : function( normalized )\r
+               {\r
+                       var address = [];\r
+                       var $documentElement = this.getDocument().$.documentElement;\r
+                       var node = this.$;\r
+\r
+                       while ( node && node != $documentElement )\r
+                       {\r
+                               var parentNode = node.parentNode;\r
+                               var currentIndex = -1;\r
+\r
+                               for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )\r
+                               {\r
+                                       var candidate = parentNode.childNodes[i];\r
+\r
+                                       if ( normalized &&\r
+                                                       candidate.nodeType == 3 &&\r
+                                                       candidate.previousSibling &&\r
+                                                       candidate.previousSibling.nodeType == 3 )\r
+                                       {\r
+                                               continue;\r
+                                       }\r
+\r
+                                       currentIndex++;\r
+\r
+                                       if ( candidate == node )\r
+                                               break;\r
+                               }\r
+\r
+                               address.unshift( currentIndex );\r
+\r
+                               node = node.parentNode;\r
+                       }\r
+\r
+                       return address;\r
+               },\r
+\r
+               /**\r
+                * Gets the document containing this element.\r
+                * @returns {CKEDITOR.dom.document} The document.\r
+                * @example\r
+                * var element = CKEDITOR.document.getById( 'example' );\r
+                * alert( <b>element.getDocument().equals( CKEDITOR.document )</b> );  // "true"\r
+                */\r
+               getDocument : function()\r
+               {\r
+                       var document = new CKEDITOR.dom.document( this.$.ownerDocument || this.$.parentNode.ownerDocument );\r
+\r
+                       return (\r
+                       /** @ignore */\r
+                       this.getDocument = function()\r
+                               {\r
+                                       return document;\r
+                               })();\r
+               },\r
+\r
+               getIndex : function()\r
+               {\r
+                       var $ = this.$;\r
+\r
+                       var currentNode = $.parentNode && $.parentNode.firstChild;\r
+                       var currentIndex = -1;\r
+\r
+                       while ( currentNode )\r
+                       {\r
+                               currentIndex++;\r
+\r
+                               if ( currentNode == $ )\r
+                                       return currentIndex;\r
+\r
+                               currentNode = currentNode.nextSibling;\r
+                       }\r
+\r
+                       return -1;\r
+               },\r
+\r
+               getNextSourceNode : function( startFromSibling, nodeType, guard )\r
+               {\r
+                       // If "guard" is a node, transform it in a function.\r
+                       if ( guard && !guard.call )\r
+                       {\r
+                               var guardNode = guard;\r
+                               guard = function( node )\r
+                               {\r
+                                       return !node.equals( guardNode );\r
+                               };\r
+                       }\r
+\r
+                       var node = ( !startFromSibling && this.getFirst && this.getFirst() ),\r
+                               parent;\r
+\r
+                       // Guarding when we're skipping the current element( no children or 'startFromSibling' ).\r
+                       // send the 'moving out' signal even we don't actually dive into.\r
+                       if ( !node )\r
+                       {\r
+                               if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false )\r
+                                       return null;\r
+                               node = this.getNext();\r
+                       }\r
+\r
+                       while ( !node && ( parent = ( parent || this ).getParent() ) )\r
+                       {\r
+                               // The guard check sends the "true" paramenter to indicate that\r
+                               // we are moving "out" of the element.\r
+                               if ( guard && guard( parent, true ) === false )\r
+                                       return null;\r
+\r
+                               node = parent.getNext();\r
+                       }\r
+\r
+                       if ( !node )\r
+                               return null;\r
+\r
+                       if ( guard && guard( node ) === false )\r
+                               return null;\r
+\r
+                       if ( nodeType && nodeType != node.type )\r
+                               return node.getNextSourceNode( false, nodeType, guard );\r
+\r
+                       return node;\r
+               },\r
+\r
+               getPreviousSourceNode : function( startFromSibling, nodeType, guard )\r
+               {\r
+                       if ( guard && !guard.call )\r
+                       {\r
+                               var guardNode = guard;\r
+                               guard = function( node )\r
+                               {\r
+                                       return !node.equals( guardNode );\r
+                               };\r
+                       }\r
+\r
+                       var node = ( !startFromSibling && this.getLast && this.getLast() ),\r
+                               parent;\r
+\r
+                       // Guarding when we're skipping the current element( no children or 'startFromSibling' ).\r
+                       // send the 'moving out' signal even we don't actually dive into.\r
+                       if ( !node )\r
+                       {\r
+                               if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false )\r
+                                       return null;\r
+                               node = this.getPrevious();\r
+                       }\r
+\r
+                       while ( !node && ( parent = ( parent || this ).getParent() ) )\r
+                       {\r
+                               // The guard check sends the "true" paramenter to indicate that\r
+                               // we are moving "out" of the element.\r
+                               if ( guard && guard( parent, true ) === false )\r
+                                       return null;\r
+\r
+                               node = parent.getPrevious();\r
+                       }\r
+\r
+                       if ( !node )\r
+                               return null;\r
+\r
+                       if ( guard && guard( node ) === false )\r
+                               return null;\r
+\r
+                       if ( nodeType && node.type != nodeType )\r
+                               return node.getPreviousSourceNode( false, nodeType, guard );\r
+\r
+                       return node;\r
+               },\r
+\r
+               getPrevious : function( evaluator )\r
+               {\r
+                       var previous = this.$, retval;\r
+                       do\r
+                       {\r
+                               previous = previous.previousSibling;\r
+                               retval = previous && new CKEDITOR.dom.node( previous );\r
+                       }\r
+                       while ( retval && evaluator && !evaluator( retval ) )\r
+                       return retval;\r
+               },\r
+\r
+               /**\r
+                * Gets the node that follows this element in its parent's child list.\r
+                * @param {Function} evaluator Filtering the result node.\r
+                * @returns {CKEDITOR.dom.node} The next node or null if not available.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '&lt;div&gt;&lt;b&gt;Example&lt;/b&gt; &lt;i&gt;next&lt;/i&gt;&lt;/div&gt;' );\r
+                * var first = <b>element.getFirst().getNext()</b>;\r
+                * alert( first.getName() );  // "i"\r
+                */\r
+               getNext : function( evaluator )\r
+               {\r
+                       var next = this.$, retval;\r
+                       do\r
+                       {\r
+                               next = next.nextSibling;\r
+                               retval = next && new CKEDITOR.dom.node( next );\r
+                       }\r
+                       while ( retval && evaluator && !evaluator( retval ) )\r
+                       return retval;\r
+               },\r
+\r
+               /**\r
+                * Gets the parent element for this node.\r
+                * @returns {CKEDITOR.dom.element} The parent element.\r
+                * @example\r
+                * var node = editor.document.getBody().getFirst();\r
+                * var parent = node.<b>getParent()</b>;\r
+                * alert( node.getName() );  // "body"\r
+                */\r
+               getParent : function()\r
+               {\r
+                       var parent = this.$.parentNode;\r
+                       return ( parent && parent.nodeType == 1 ) ? new CKEDITOR.dom.node( parent ) : null;\r
+               },\r
+\r
+               getParents : function( closerFirst )\r
+               {\r
+                       var node = this;\r
+                       var parents = [];\r
+\r
+                       do\r
+                       {\r
+                               parents[  closerFirst ? 'push' : 'unshift' ]( node );\r
+                       }\r
+                       while ( ( node = node.getParent() ) )\r
+\r
+                       return parents;\r
+               },\r
+\r
+               getCommonAncestor : function( node )\r
+               {\r
+                       if ( node.equals( this ) )\r
+                               return this;\r
+\r
+                       if ( node.contains && node.contains( this ) )\r
+                               return node;\r
+\r
+                       var start = this.contains ? this : this.getParent();\r
+\r
+                       do\r
+                       {\r
+                               if ( start.contains( node ) )\r
+                                       return start;\r
+                       }\r
+                       while ( ( start = start.getParent() ) );\r
+\r
+                       return null;\r
+               },\r
+\r
+               getPosition : function( otherNode )\r
+               {\r
+                       var $ = this.$;\r
+                       var $other = otherNode.$;\r
+\r
+                       if ( $.compareDocumentPosition )\r
+                               return $.compareDocumentPosition( $other );\r
+\r
+                       // IE and Safari have no support for compareDocumentPosition.\r
+\r
+                       if ( $ == $other )\r
+                               return CKEDITOR.POSITION_IDENTICAL;\r
+\r
+                       // Only element nodes support contains and sourceIndex.\r
+                       if ( this.type == CKEDITOR.NODE_ELEMENT && otherNode.type == CKEDITOR.NODE_ELEMENT )\r
+                       {\r
+                               if ( $.contains )\r
+                               {\r
+                                       if ( $.contains( $other ) )\r
+                                               return CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING;\r
+\r
+                                       if ( $other.contains( $ ) )\r
+                                               return CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING;\r
+                               }\r
+\r
+                               if ( 'sourceIndex' in $ )\r
+                               {\r
+                                       return ( $.sourceIndex < 0 || $other.sourceIndex < 0 ) ? CKEDITOR.POSITION_DISCONNECTED :\r
+                                               ( $.sourceIndex < $other.sourceIndex ) ? CKEDITOR.POSITION_PRECEDING :\r
+                                               CKEDITOR.POSITION_FOLLOWING;\r
+                               }\r
+                       }\r
+\r
+                       // For nodes that don't support compareDocumentPosition, contains\r
+                       // or sourceIndex, their "address" is compared.\r
+\r
+                       var addressOfThis = this.getAddress(),\r
+                               addressOfOther = otherNode.getAddress(),\r
+                               minLevel = Math.min( addressOfThis.length, addressOfOther.length );\r
+\r
+                               // Determinate preceed/follow relationship.\r
+                               for ( var i = 0 ; i <= minLevel - 1 ; i++ )\r
+                               {\r
+                                       if ( addressOfThis[ i ] != addressOfOther[ i ] )\r
+                                       {\r
+                                               if ( i < minLevel )\r
+                                               {\r
+                                                       return addressOfThis[ i ] < addressOfOther[ i ] ?\r
+                                                           CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING;\r
+                                               }\r
+                                               break;\r
+                                       }\r
+                               }\r
+\r
+                               // Determinate contains/contained relationship.\r
+                               return ( addressOfThis.length < addressOfOther.length ) ?\r
+                                                       CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING :\r
+                                                       CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING;\r
+               },\r
+\r
+               /**\r
+                * Gets the closes ancestor node of a specified node name.\r
+                * @param {String} name Node name of ancestor node.\r
+                * @param {Boolean} includeSelf (Optional) Whether to include the current\r
+                * node in the calculation or not.\r
+                * @returns {CKEDITOR.dom.node} Ancestor node.\r
+                */\r
+               getAscendant : function( name, includeSelf )\r
+               {\r
+                       var $ = this.$;\r
+\r
+                       if ( !includeSelf )\r
+                               $ = $.parentNode;\r
+\r
+                       while ( $ )\r
+                       {\r
+                               if ( $.nodeName && $.nodeName.toLowerCase() == name )\r
+                                       return new CKEDITOR.dom.node( $ );\r
+\r
+                               $ = $.parentNode;\r
+                       }\r
+                       return null;\r
+               },\r
+\r
+               hasAscendant : function( name, includeSelf )\r
+               {\r
+                       var $ = this.$;\r
+\r
+                       if ( !includeSelf )\r
+                               $ = $.parentNode;\r
+\r
+                       while ( $ )\r
+                       {\r
+                               if ( $.nodeName && $.nodeName.toLowerCase() == name )\r
+                                       return true;\r
+\r
+                               $ = $.parentNode;\r
+                       }\r
+                       return false;\r
+               },\r
+\r
+               move : function( target, toStart )\r
+               {\r
+                       target.append( this.remove(), toStart );\r
+               },\r
+\r
+               /**\r
+                * Removes this node from the document DOM.\r
+                * @param {Boolean} [preserveChildren] Indicates that the children\r
+                *              elements must remain in the document, removing only the outer\r
+                *              tags.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.getById( 'MyElement' );\r
+                * <b>element.remove()</b>;\r
+                */\r
+               remove : function( preserveChildren )\r
+               {\r
+                       var $ = this.$;\r
+                       var parent = $.parentNode;\r
+\r
+                       if ( parent )\r
+                       {\r
+                               if ( preserveChildren )\r
+                               {\r
+                                       // Move all children before the node.\r
+                                       for ( var child ; ( child = $.firstChild ) ; )\r
+                                       {\r
+                                               parent.insertBefore( $.removeChild( child ), $ );\r
+                                       }\r
+                               }\r
+\r
+                               parent.removeChild( $ );\r
+                       }\r
+\r
+                       return this;\r
+               },\r
+\r
+               replace : function( nodeToReplace )\r
+               {\r
+                       this.insertBefore( nodeToReplace );\r
+                       nodeToReplace.remove();\r
+               },\r
+\r
+               trim : function()\r
+               {\r
+                       this.ltrim();\r
+                       this.rtrim();\r
+               },\r
+\r
+               ltrim : function()\r
+               {\r
+                       var child;\r
+                       while ( this.getFirst && ( child = this.getFirst() ) )\r
+                       {\r
+                               if ( child.type == CKEDITOR.NODE_TEXT )\r
+                               {\r
+                                       var trimmed = CKEDITOR.tools.ltrim( child.getText() ),\r
+                                               originalLength = child.getLength();\r
+\r
+                                       if ( !trimmed )\r
+                                       {\r
+                                               child.remove();\r
+                                               continue;\r
+                                       }\r
+                                       else if ( trimmed.length < originalLength )\r
+                                       {\r
+                                               child.split( originalLength - trimmed.length );\r
+\r
+                                               // IE BUG: child.remove() may raise JavaScript errors here. (#81)\r
+                                               this.$.removeChild( this.$.firstChild );\r
+                                       }\r
+                               }\r
+                               break;\r
+                       }\r
+               },\r
+\r
+               rtrim : function()\r
+               {\r
+                       var child;\r
+                       while ( this.getLast && ( child = this.getLast() ) )\r
+                       {\r
+                               if ( child.type == CKEDITOR.NODE_TEXT )\r
+                               {\r
+                                       var trimmed = CKEDITOR.tools.rtrim( child.getText() ),\r
+                                               originalLength = child.getLength();\r
+\r
+                                       if ( !trimmed )\r
+                                       {\r
+                                               child.remove();\r
+                                               continue;\r
+                                       }\r
+                                       else if ( trimmed.length < originalLength )\r
+                                       {\r
+                                               child.split( trimmed.length );\r
+\r
+                                               // IE BUG: child.getNext().remove() may raise JavaScript errors here.\r
+                                               // (#81)\r
+                                               this.$.lastChild.parentNode.removeChild( this.$.lastChild );\r
+                                       }\r
+                               }\r
+                               break;\r
+                       }\r
+\r
+                       if ( !CKEDITOR.env.ie && !CKEDITOR.env.opera )\r
+                       {\r
+                               child = this.$.lastChild;\r
+\r
+                               if ( child && child.type == 1 && child.nodeName.toLowerCase() == 'br' )\r
+                               {\r
+                                       // Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#324).\r
+                                       child.parentNode.removeChild( child ) ;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+);\r
diff --git a/_source/core/dom/nodelist.js b/_source/core/dom/nodelist.js
new file mode 100644 (file)
index 0000000..b00cbc7
--- /dev/null
@@ -0,0 +1,23 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dom.nodeList = function( nativeList )\r
+{\r
+       this.$ = nativeList;\r
+};\r
+\r
+CKEDITOR.dom.nodeList.prototype =\r
+{\r
+       count : function()\r
+       {\r
+               return this.$.length;\r
+       },\r
+\r
+       getItem : function( index )\r
+       {\r
+               var $node = this.$[ index ];\r
+               return $node ? new CKEDITOR.dom.node( $node ) : null;\r
+       }\r
+};\r
diff --git a/_source/core/dom/range.js b/_source/core/dom/range.js
new file mode 100644 (file)
index 0000000..5b1681f
--- /dev/null
@@ -0,0 +1,1668 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dom.range = function( document )\r
+{\r
+       this.startContainer     = null;\r
+       this.startOffset        = null;\r
+       this.endContainer       = null;\r
+       this.endOffset          = null;\r
+       this.collapsed          = true;\r
+\r
+       this.document = document;\r
+};\r
+\r
+(function()\r
+{\r
+       // Updates the "collapsed" property for the given range object.\r
+       var updateCollapsed = function( range )\r
+       {\r
+               range.collapsed = (\r
+                       range.startContainer &&\r
+                       range.endContainer &&\r
+                       range.startContainer.equals( range.endContainer ) &&\r
+                       range.startOffset == range.endOffset );\r
+       };\r
+\r
+       // This is a shared function used to delete, extract and clone the range\r
+       // contents.\r
+       // V2\r
+       var execContentsAction = function( range, action, docFrag )\r
+       {\r
+               range.optimizeBookmark();\r
+\r
+               var startNode   = range.startContainer;\r
+               var endNode             = range.endContainer;\r
+\r
+               var startOffset = range.startOffset;\r
+               var endOffset   = range.endOffset;\r
+\r
+               var removeStartNode;\r
+               var removeEndNode;\r
+\r
+               // For text containers, we must simply split the node and point to the\r
+               // second part. The removal will be handled by the rest of the code .\r
+               if ( endNode.type == CKEDITOR.NODE_TEXT )\r
+                       endNode = endNode.split( endOffset );\r
+               else\r
+               {\r
+                       // If the end container has children and the offset is pointing\r
+                       // to a child, then we should start from it.\r
+                       if ( endNode.getChildCount() > 0 )\r
+                       {\r
+                               // If the offset points after the last node.\r
+                               if ( endOffset >= endNode.getChildCount() )\r
+                               {\r
+                                       // Let's create a temporary node and mark it for removal.\r
+                                       endNode = endNode.append( range.document.createText( '' ) );\r
+                                       removeEndNode = true;\r
+                               }\r
+                               else\r
+                                       endNode = endNode.getChild( endOffset );\r
+                       }\r
+               }\r
+\r
+               // For text containers, we must simply split the node. The removal will\r
+               // be handled by the rest of the code .\r
+               if ( startNode.type == CKEDITOR.NODE_TEXT )\r
+               {\r
+                       startNode.split( startOffset );\r
+\r
+                       // In cases the end node is the same as the start node, the above\r
+                       // splitting will also split the end, so me must move the end to\r
+                       // the second part of the split.\r
+                       if ( startNode.equals( endNode ) )\r
+                               endNode = startNode.getNext();\r
+               }\r
+               else\r
+               {\r
+                       // If the start container has children and the offset is pointing\r
+                       // to a child, then we should start from its previous sibling.\r
+\r
+                       // If the offset points to the first node, we don't have a\r
+                       // sibling, so let's use the first one, but mark it for removal.\r
+                       if ( !startOffset )\r
+                       {\r
+                               // Let's create a temporary node and mark it for removal.\r
+                               startNode = startNode.getFirst().insertBeforeMe( range.document.createText( '' ) );\r
+                               removeStartNode = true;\r
+                       }\r
+                       else if ( startOffset >= startNode.getChildCount() )\r
+                       {\r
+                               // Let's create a temporary node and mark it for removal.\r
+                               startNode = startNode.append( range.document.createText( '' ) );\r
+                               removeStartNode = true;\r
+                       }\r
+                       else\r
+                               startNode = startNode.getChild( startOffset ).getPrevious();\r
+               }\r
+\r
+               // Get the parent nodes tree for the start and end boundaries.\r
+               var startParents        = startNode.getParents();\r
+               var endParents          = endNode.getParents();\r
+\r
+               // Compare them, to find the top most siblings.\r
+               var i, topStart, topEnd;\r
+\r
+               for ( i = 0 ; i < startParents.length ; i++ )\r
+               {\r
+                       topStart = startParents[ i ];\r
+                       topEnd = endParents[ i ];\r
+\r
+                       // The compared nodes will match until we find the top most\r
+                       // siblings (different nodes that have the same parent).\r
+                       // "i" will hold the index in the parents array for the top\r
+                       // most element.\r
+                       if ( !topStart.equals( topEnd ) )\r
+                               break;\r
+               }\r
+\r
+               var clone = docFrag, levelStartNode, levelClone, currentNode, currentSibling;\r
+\r
+               // Remove all successive sibling nodes for every node in the\r
+               // startParents tree.\r
+               for ( var j = i ; j < startParents.length ; j++ )\r
+               {\r
+                       levelStartNode = startParents[j];\r
+\r
+                       // For Extract and Clone, we must clone this level.\r
+                       if ( clone && !levelStartNode.equals( startNode ) )             // action = 0 = Delete\r
+                               levelClone = clone.append( levelStartNode.clone() );\r
+\r
+                       currentNode = levelStartNode.getNext();\r
+\r
+                       while( currentNode )\r
+                       {\r
+                               // Stop processing when the current node matches a node in the\r
+                               // endParents tree or if it is the endNode.\r
+                               if ( currentNode.equals( endParents[ j ] ) || currentNode.equals( endNode ) )\r
+                                       break;\r
+\r
+                               // Cache the next sibling.\r
+                               currentSibling = currentNode.getNext();\r
+\r
+                               // If cloning, just clone it.\r
+                               if ( action == 2 )      // 2 = Clone\r
+                                       clone.append( currentNode.clone( true ) );\r
+                               else\r
+                               {\r
+                                       // Both Delete and Extract will remove the node.\r
+                                       currentNode.remove();\r
+\r
+                                       // When Extracting, move the removed node to the docFrag.\r
+                                       if ( action == 1 )      // 1 = Extract\r
+                                               clone.append( currentNode );\r
+                               }\r
+\r
+                               currentNode = currentSibling;\r
+                       }\r
+\r
+                       if ( clone )\r
+                               clone = levelClone;\r
+               }\r
+\r
+               clone = docFrag;\r
+\r
+               // Remove all previous sibling nodes for every node in the\r
+               // endParents tree.\r
+               for ( var k = i ; k < endParents.length ; k++ )\r
+               {\r
+                       levelStartNode = endParents[ k ];\r
+\r
+                       // For Extract and Clone, we must clone this level.\r
+                       if ( action > 0 && !levelStartNode.equals( endNode ) )          // action = 0 = Delete\r
+                               levelClone = clone.append( levelStartNode.clone() );\r
+\r
+                       // The processing of siblings may have already been done by the parent.\r
+                       if ( !startParents[ k ] || levelStartNode.$.parentNode != startParents[ k ].$.parentNode )\r
+                       {\r
+                               currentNode = levelStartNode.getPrevious();\r
+\r
+                               while( currentNode )\r
+                               {\r
+                                       // Stop processing when the current node matches a node in the\r
+                                       // startParents tree or if it is the startNode.\r
+                                       if ( currentNode.equals( startParents[ k ] ) || currentNode.equals( startNode ) )\r
+                                               break;\r
+\r
+                                       // Cache the next sibling.\r
+                                       currentSibling = currentNode.getPrevious();\r
+\r
+                                       // If cloning, just clone it.\r
+                                       if ( action == 2 )      // 2 = Clone\r
+                                               clone.$.insertBefore( currentNode.$.cloneNode( true ), clone.$.firstChild ) ;\r
+                                       else\r
+                                       {\r
+                                               // Both Delete and Extract will remove the node.\r
+                                               currentNode.remove();\r
+\r
+                                               // When Extracting, mode the removed node to the docFrag.\r
+                                               if ( action == 1 )      // 1 = Extract\r
+                                                       clone.$.insertBefore( currentNode.$, clone.$.firstChild );\r
+                                       }\r
+\r
+                                       currentNode = currentSibling;\r
+                               }\r
+                       }\r
+\r
+                       if ( clone )\r
+                               clone = levelClone;\r
+               }\r
+\r
+               if ( action == 2 )              // 2 = Clone.\r
+               {\r
+                       // No changes in the DOM should be done, so fix the split text (if any).\r
+\r
+                       var startTextNode = range.startContainer;\r
+                       if ( startTextNode.type == CKEDITOR.NODE_TEXT )\r
+                       {\r
+                               startTextNode.$.data += startTextNode.$.nextSibling.data;\r
+                               startTextNode.$.parentNode.removeChild( startTextNode.$.nextSibling );\r
+                       }\r
+\r
+                       var endTextNode = range.endContainer;\r
+                       if ( endTextNode.type == CKEDITOR.NODE_TEXT && endTextNode.$.nextSibling )\r
+                       {\r
+                               endTextNode.$.data += endTextNode.$.nextSibling.data;\r
+                               endTextNode.$.parentNode.removeChild( endTextNode.$.nextSibling );\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       // Collapse the range.\r
+\r
+                       // If a node has been partially selected, collapse the range between\r
+                       // topStart and topEnd. Otherwise, simply collapse it to the start. (W3C specs).\r
+                       if ( topStart && topEnd && ( startNode.$.parentNode != topStart.$.parentNode || endNode.$.parentNode != topEnd.$.parentNode ) )\r
+                       {\r
+                               var endIndex = topEnd.getIndex();\r
+\r
+                               // If the start node is to be removed, we must correct the\r
+                               // index to reflect the removal.\r
+                               if ( removeStartNode && topEnd.$.parentNode == startNode.$.parentNode )\r
+                                       endIndex--;\r
+\r
+                               range.setStart( topEnd.getParent(), endIndex );\r
+                       }\r
+\r
+                       // Collapse it to the start.\r
+                       range.collapse( true );\r
+               }\r
+\r
+               // Cleanup any marked node.\r
+               if( removeStartNode )\r
+                       startNode.remove();\r
+\r
+               if( removeEndNode && endNode.$.parentNode )\r
+                       endNode.remove();\r
+       };\r
+\r
+       var inlineChildReqElements = { abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 };\r
+\r
+       // Creates the appropriate node evaluator for the dom walker used inside\r
+       // check(Start|End)OfBlock.\r
+       function getCheckStartEndBlockEvalFunction( isStart )\r
+       {\r
+               var hadBr = false, bookmarkEvaluator = CKEDITOR.dom.walker.bookmark( true );\r
+               return function( node )\r
+               {\r
+                       // First ignore bookmark nodes.\r
+                       if ( bookmarkEvaluator( node ) )\r
+                               return true;\r
+\r
+                       if ( node.type == CKEDITOR.NODE_TEXT )\r
+                       {\r
+                               // If there's any visible text, then we're not at the start.\r
+                               if ( CKEDITOR.tools.trim( node.getText() ).length )\r
+                                       return false;\r
+                               }\r
+                       else\r
+                       {\r
+                               // If there are non-empty inline elements (e.g. <img />), then we're not\r
+                               // at the start.\r
+                               if ( !inlineChildReqElements[ node.getName() ] )\r
+                               {\r
+                                       // If we're working at the end-of-block, forgive the first <br /> in non-IE\r
+                                       // browsers.\r
+                                       if ( !isStart && !CKEDITOR.env.ie && node.getName() == 'br' && !hadBr )\r
+                                               hadBr = true;\r
+                                       else\r
+                                               return false;\r
+                               }\r
+                       }\r
+                       return true;\r
+               };\r
+       }\r
+\r
+       // Evaluator for CKEDITOR.dom.element::checkBoundaryOfElement, reject any\r
+       // text node and non-empty elements unless it's being bookmark text.\r
+       function elementBoundaryEval( node )\r
+       {\r
+               // Reject any text node unless it's being bookmark\r
+               // OR it's spaces. (#3883)\r
+               return node.type != CKEDITOR.NODE_TEXT\r
+                           && node.getName() in CKEDITOR.dtd.$removeEmpty\r
+                           || !CKEDITOR.tools.trim( node.getText() )\r
+                           || node.getParent().hasAttribute( '_fck_bookmark' );\r
+       }\r
+\r
+       CKEDITOR.dom.range.prototype =\r
+       {\r
+               clone : function()\r
+               {\r
+                       var clone = new CKEDITOR.dom.range( this.document );\r
+\r
+                       clone.startContainer = this.startContainer;\r
+                       clone.startOffset = this.startOffset;\r
+                       clone.endContainer = this.endContainer;\r
+                       clone.endOffset = this.endOffset;\r
+                       clone.collapsed = this.collapsed;\r
+\r
+                       return clone;\r
+               },\r
+\r
+               collapse : function( toStart )\r
+               {\r
+                       if ( toStart )\r
+                       {\r
+                               this.endContainer       = this.startContainer;\r
+                               this.endOffset          = this.startOffset;\r
+                       }\r
+                       else\r
+                       {\r
+                               this.startContainer     = this.endContainer;\r
+                               this.startOffset        = this.endOffset;\r
+                       }\r
+\r
+                       this.collapsed = true;\r
+               },\r
+\r
+               // The selection may be lost when cloning (due to the splitText() call).\r
+               cloneContents : function()\r
+               {\r
+                       var docFrag = new CKEDITOR.dom.documentFragment( this.document );\r
+\r
+                       if ( !this.collapsed )\r
+                               execContentsAction( this, 2, docFrag );\r
+\r
+                       return docFrag;\r
+               },\r
+\r
+               deleteContents : function()\r
+               {\r
+                       if ( this.collapsed )\r
+                               return;\r
+\r
+                       execContentsAction( this, 0 );\r
+               },\r
+\r
+               extractContents : function()\r
+               {\r
+                       var docFrag = new CKEDITOR.dom.documentFragment( this.document );\r
+\r
+                       if ( !this.collapsed )\r
+                               execContentsAction( this, 1, docFrag );\r
+\r
+                       return docFrag;\r
+               },\r
+\r
+               /**\r
+                * Creates a bookmark object, which can be later used to restore the\r
+                * range by using the moveToBookmark function.\r
+                * This is an "intrusive" way to create a bookmark. It includes <span> tags\r
+                * in the range boundaries. The advantage of it is that it is possible to\r
+                * handle DOM mutations when moving back to the bookmark.\r
+                * Attention: the inclusion of nodes in the DOM is a design choice and\r
+                * should not be changed as there are other points in the code that may be\r
+                * using those nodes to perform operations. See GetBookmarkNode.\r
+                * @param {Boolean} [serializable] Indicates that the bookmark nodes\r
+                *              must contain ids, which can be used to restore the range even\r
+                *              when these nodes suffer mutations (like a clonation or innerHTML\r
+                *              change).\r
+                * @returns {Object} And object representing a bookmark.\r
+                */\r
+               createBookmark : function( serializable )\r
+               {\r
+                       var startNode, endNode;\r
+                       var baseId;\r
+                       var clone;\r
+\r
+                       startNode = this.document.createElement( 'span' );\r
+                       startNode.setAttribute( '_fck_bookmark', 1 );\r
+                       startNode.setStyle( 'display', 'none' );\r
+\r
+                       // For IE, it must have something inside, otherwise it may be\r
+                       // removed during DOM operations.\r
+                       startNode.setHtml( '&nbsp;' );\r
+\r
+                       if ( serializable )\r
+                       {\r
+                               baseId = 'cke_bm_' + CKEDITOR.tools.getNextNumber();\r
+                               startNode.setAttribute( 'id', baseId + 'S' );\r
+                       }\r
+\r
+                       // If collapsed, the endNode will not be created.\r
+                       if ( !this.collapsed )\r
+                       {\r
+                               endNode = startNode.clone();\r
+                               endNode.setHtml( '&nbsp;' );\r
+\r
+                               if ( serializable )\r
+                                       endNode.setAttribute( 'id', baseId + 'E' );\r
+\r
+                               clone = this.clone();\r
+                               clone.collapse();\r
+                               clone.insertNode( endNode );\r
+                       }\r
+\r
+                       clone = this.clone();\r
+                       clone.collapse( true );\r
+                       clone.insertNode( startNode );\r
+\r
+                       // Update the range position.\r
+                       if ( endNode )\r
+                       {\r
+                               this.setStartAfter( startNode );\r
+                               this.setEndBefore( endNode );\r
+                       }\r
+                       else\r
+                               this.moveToPosition( startNode, CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       return {\r
+                               startNode : serializable ? baseId + 'S' : startNode,\r
+                               endNode : serializable ? baseId + 'E' : endNode,\r
+                               serializable : serializable\r
+                       };\r
+               },\r
+\r
+               /**\r
+                * Creates a "non intrusive" and "mutation sensible" bookmark. This\r
+                * kind of bookmark should be used only when the DOM is supposed to\r
+                * remain stable after its creation.\r
+                * @param {Boolean} [normalized] Indicates that the bookmark must\r
+                *              normalized. When normalized, the successive text nodes are\r
+                *              considered a single node. To sucessful load a normalized\r
+                *              bookmark, the DOM tree must be also normalized before calling\r
+                *              moveToBookmark.\r
+                * @returns {Object} An object representing the bookmark.\r
+                */\r
+               createBookmark2 : function( normalized )\r
+               {\r
+                       var startContainer      = this.startContainer,\r
+                               endContainer    = this.endContainer;\r
+\r
+                       var startOffset = this.startOffset,\r
+                               endOffset       = this.endOffset;\r
+\r
+                       var child, previous;\r
+\r
+                       // If there is no range then get out of here.\r
+                       // It happens on initial load in Safari #962 and if the editor it's\r
+                       // hidden also in Firefox\r
+                       if ( !startContainer || !endContainer )\r
+                               return { start : 0, end : 0 };\r
+\r
+                       if ( normalized )\r
+                       {\r
+                               // Find out if the start is pointing to a text node that will\r
+                               // be normalized.\r
+                               if ( startContainer.type == CKEDITOR.NODE_ELEMENT )\r
+                               {\r
+                                       child = startContainer.getChild( startOffset );\r
+\r
+                                       // In this case, move the start information to that text\r
+                                       // node.\r
+                                       if ( child && child.type == CKEDITOR.NODE_TEXT\r
+                                                       && startOffset > 0 && child.getPrevious().type == CKEDITOR.NODE_TEXT )\r
+                                       {\r
+                                               startContainer = child;\r
+                                               startOffset = 0;\r
+                                       }\r
+                               }\r
+\r
+                               // Normalize the start.\r
+                               while ( startContainer.type == CKEDITOR.NODE_TEXT\r
+                                               && ( previous = startContainer.getPrevious() )\r
+                                               && previous.type == CKEDITOR.NODE_TEXT )\r
+                               {\r
+                                       startContainer = previous;\r
+                                       startOffset += previous.getLength();\r
+                               }\r
+\r
+                               // Process the end only if not normalized.\r
+                               if ( !this.isCollapsed )\r
+                               {\r
+                                       // Find out if the start is pointing to a text node that\r
+                                       // will be normalized.\r
+                                       if ( endContainer.type == CKEDITOR.NODE_ELEMENT )\r
+                                       {\r
+                                               child = endContainer.getChild( endOffset );\r
+\r
+                                               // In this case, move the start information to that\r
+                                               // text node.\r
+                                               if ( child && child.type == CKEDITOR.NODE_TEXT\r
+                                                               && endOffset > 0 && child.getPrevious().type == CKEDITOR.NODE_TEXT )\r
+                                               {\r
+                                                       endContainer = child;\r
+                                                       endOffset = 0;\r
+                                               }\r
+                                       }\r
+\r
+                                       // Normalize the end.\r
+                                       while ( endContainer.type == CKEDITOR.NODE_TEXT\r
+                                                       && ( previous = endContainer.getPrevious() )\r
+                                                       && previous.type == CKEDITOR.NODE_TEXT )\r
+                                       {\r
+                                               endContainer = previous;\r
+                                               endOffset += previous.getLength();\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       return {\r
+                               start           : startContainer.getAddress( normalized ),\r
+                               end                     : this.isCollapsed ? null : endContainer.getAddress( normalized ),\r
+                               startOffset     : startOffset,\r
+                               endOffset       : endOffset,\r
+                               normalized      : normalized,\r
+                               is2                     : true          // It's a createBookmark2 bookmark.\r
+                       };\r
+               },\r
+\r
+               moveToBookmark : function( bookmark )\r
+               {\r
+                       if ( bookmark.is2 )             // Created with createBookmark2().\r
+                       {\r
+                               // Get the start information.\r
+                               var startContainer      = this.document.getByAddress( bookmark.start, bookmark.normalized ),\r
+                                       startOffset     = bookmark.startOffset;\r
+\r
+                               // Get the end information.\r
+                               var endContainer        = bookmark.end && this.document.getByAddress( bookmark.end, bookmark.normalized ),\r
+                                       endOffset       = bookmark.endOffset;\r
+\r
+                               // Set the start boundary.\r
+                               this.setStart( startContainer, startOffset );\r
+\r
+                               // Set the end boundary. If not available, collapse it.\r
+                               if ( endContainer )\r
+                                       this.setEnd( endContainer, endOffset );\r
+                               else\r
+                                       this.collapse( true );\r
+                       }\r
+                       else                                    // Created with createBookmark().\r
+                       {\r
+                               var serializable = bookmark.serializable,\r
+                                       startNode       = serializable ? this.document.getById( bookmark.startNode ) : bookmark.startNode,\r
+                                       endNode         = serializable ? this.document.getById( bookmark.endNode ) : bookmark.endNode;\r
+\r
+                               // Set the range start at the bookmark start node position.\r
+                               this.setStartBefore( startNode );\r
+\r
+                               // Remove it, because it may interfere in the setEndBefore call.\r
+                               startNode.remove();\r
+\r
+                               // Set the range end at the bookmark end node position, or simply\r
+                               // collapse it if it is not available.\r
+                               if ( endNode )\r
+                               {\r
+                                       this.setEndBefore( endNode );\r
+                                       endNode.remove();\r
+                               }\r
+                               else\r
+                                       this.collapse( true );\r
+                       }\r
+               },\r
+\r
+               getBoundaryNodes : function()\r
+               {\r
+                       var startNode = this.startContainer,\r
+                               endNode = this.endContainer,\r
+                               startOffset = this.startOffset,\r
+                               endOffset = this.endOffset,\r
+                               childCount;\r
+\r
+                       if ( startNode.type == CKEDITOR.NODE_ELEMENT )\r
+                       {\r
+                               childCount = startNode.getChildCount();\r
+                               if ( childCount > startOffset )\r
+                                       startNode = startNode.getChild( startOffset );\r
+                               else if ( childCount < 1 )\r
+                                       startNode = startNode.getPreviousSourceNode();\r
+                               else            // startOffset > childCount but childCount is not 0\r
+                               {\r
+                                       // Try to take the node just after the current position.\r
+                                       startNode = startNode.$;\r
+                                       while ( startNode.lastChild )\r
+                                               startNode = startNode.lastChild;\r
+                                       startNode = new CKEDITOR.dom.node( startNode );\r
+\r
+                                       // Normally we should take the next node in DFS order. But it\r
+                                       // is also possible that we've already reached the end of\r
+                                       // document.\r
+                                       startNode = startNode.getNextSourceNode() || startNode;\r
+                               }\r
+                       }\r
+                       if ( endNode.type == CKEDITOR.NODE_ELEMENT )\r
+                       {\r
+                               childCount = endNode.getChildCount();\r
+                               if ( childCount > endOffset )\r
+                                       endNode = endNode.getChild( endOffset ).getPreviousSourceNode( true );\r
+                               else if ( childCount < 1 )\r
+                                       endNode = endNode.getPreviousSourceNode();\r
+                               else            // endOffset > childCount but childCount is not 0\r
+                               {\r
+                                       // Try to take the node just before the current position.\r
+                                       endNode = endNode.$;\r
+                                       while ( endNode.lastChild )\r
+                                               endNode = endNode.lastChild;\r
+                                       endNode = new CKEDITOR.dom.node( endNode );\r
+                               }\r
+                       }\r
+\r
+                       // Sometimes the endNode will come right before startNode for collapsed\r
+                       // ranges. Fix it. (#3780)\r
+                       if ( startNode.getPosition( endNode ) & CKEDITOR.POSITION_FOLLOWING )\r
+                               startNode = endNode;\r
+\r
+                       return { startNode : startNode, endNode : endNode };\r
+               },\r
+\r
+               /**\r
+                * Find the node which fully contains the range.\r
+                * @param includeSelf\r
+                * @param {Boolean} ignoreTextNode Whether ignore CKEDITOR.NODE_TEXT type.\r
+                */\r
+               getCommonAncestor : function( includeSelf , ignoreTextNode )\r
+               {\r
+                       var start = this.startContainer,\r
+                               end = this.endContainer,\r
+                               ancestor;\r
+\r
+                       if ( start.equals( end ) )\r
+                       {\r
+                               if ( includeSelf\r
+                                               && start.type == CKEDITOR.NODE_ELEMENT\r
+                                               && this.startOffset == this.endOffset - 1 )\r
+                                       ancestor = start.getChild( this.startOffset );\r
+                               else\r
+                                       ancestor = start;\r
+                       }\r
+                       else\r
+                               ancestor = start.getCommonAncestor( end );\r
+\r
+                       return ignoreTextNode && !ancestor.is ? ancestor.getParent() : ancestor;\r
+               },\r
+\r
+               /**\r
+                * Transforms the startContainer and endContainer properties from text\r
+                * nodes to element nodes, whenever possible. This is actually possible\r
+                * if either of the boundary containers point to a text node, and its\r
+                * offset is set to zero, or after the last char in the node.\r
+                */\r
+               optimize : function()\r
+               {\r
+                       var container = this.startContainer;\r
+                       var offset = this.startOffset;\r
+\r
+                       if ( container.type != CKEDITOR.NODE_ELEMENT )\r
+                       {\r
+                               if ( !offset )\r
+                                       this.setStartBefore( container );\r
+                               else if ( offset >= container.getLength() )\r
+                                       this.setStartAfter( container );\r
+                       }\r
+\r
+                       container = this.endContainer;\r
+                       offset = this.endOffset;\r
+\r
+                       if ( container.type != CKEDITOR.NODE_ELEMENT )\r
+                       {\r
+                               if ( !offset )\r
+                                       this.setEndBefore( container );\r
+                               else if ( offset >= container.getLength() )\r
+                                       this.setEndAfter( container );\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * Move the range out of bookmark nodes if they're been the container.\r
+                */\r
+               optimizeBookmark: function()\r
+               {\r
+                       var startNode = this.startContainer,\r
+                               endNode = this.endContainer;\r
+\r
+                       if ( startNode.is && startNode.is( 'span' )\r
+                               && startNode.hasAttribute( '_fck_bookmark' ) )\r
+                               this.setStartAt( startNode, CKEDITOR.POSITION_BEFORE_START );\r
+                       if ( endNode && endNode.is && endNode.is( 'span' )\r
+                               && endNode.hasAttribute( '_fck_bookmark' ) )\r
+                               this.setEndAt( endNode,  CKEDITOR.POSITION_AFTER_END );\r
+               },\r
+\r
+               trim : function( ignoreStart, ignoreEnd )\r
+               {\r
+                       var startContainer = this.startContainer,\r
+                               startOffset = this.startOffset,\r
+                               collapsed = this.collapsed;\r
+                       if ( ( !ignoreStart || collapsed )\r
+                                && startContainer && startContainer.type == CKEDITOR.NODE_TEXT )\r
+                       {\r
+                               // If the offset is zero, we just insert the new node before\r
+                               // the start.\r
+                               if ( !startOffset )\r
+                               {\r
+                                       startOffset = startContainer.getIndex();\r
+                                       startContainer = startContainer.getParent();\r
+                               }\r
+                               // If the offset is at the end, we'll insert it after the text\r
+                               // node.\r
+                               else if ( startOffset >= startContainer.getLength() )\r
+                               {\r
+                                       startOffset = startContainer.getIndex() + 1;\r
+                                       startContainer = startContainer.getParent();\r
+                               }\r
+                               // In other case, we split the text node and insert the new\r
+                               // node at the split point.\r
+                               else\r
+                               {\r
+                                       var nextText = startContainer.split( startOffset );\r
+\r
+                                       startOffset = startContainer.getIndex() + 1;\r
+                                       startContainer = startContainer.getParent();\r
+                                       // Check if it is necessary to update the end boundary.\r
+                                       if ( !collapsed && this.startContainer.equals( this.endContainer ) )\r
+                                               this.setEnd( nextText, this.endOffset - this.startOffset );\r
+                               }\r
+\r
+                               this.setStart( startContainer, startOffset );\r
+\r
+                               if ( collapsed )\r
+                                       this.collapse( true );\r
+                       }\r
+\r
+                       var endContainer = this.endContainer;\r
+                       var endOffset = this.endOffset;\r
+\r
+                       if ( !( ignoreEnd || collapsed )\r
+                                && endContainer && endContainer.type == CKEDITOR.NODE_TEXT )\r
+                       {\r
+                               // If the offset is zero, we just insert the new node before\r
+                               // the start.\r
+                               if ( !endOffset )\r
+                               {\r
+                                       endOffset = endContainer.getIndex();\r
+                                       endContainer = endContainer.getParent();\r
+                               }\r
+                               // If the offset is at the end, we'll insert it after the text\r
+                               // node.\r
+                               else if ( endOffset >= endContainer.getLength() )\r
+                               {\r
+                                       endOffset = endContainer.getIndex() + 1;\r
+                                       endContainer = endContainer.getParent();\r
+                               }\r
+                               // In other case, we split the text node and insert the new\r
+                               // node at the split point.\r
+                               else\r
+                               {\r
+                                       endContainer.split( endOffset );\r
+\r
+                                       endOffset = endContainer.getIndex() + 1;\r
+                                       endContainer = endContainer.getParent();\r
+                               }\r
+\r
+                               this.setEnd( endContainer, endOffset );\r
+                       }\r
+               },\r
+\r
+               enlarge : function( unit )\r
+               {\r
+                       switch ( unit )\r
+                       {\r
+                               case CKEDITOR.ENLARGE_ELEMENT :\r
+\r
+                                       if ( this.collapsed )\r
+                                               return;\r
+\r
+                                       // Get the common ancestor.\r
+                                       var commonAncestor = this.getCommonAncestor();\r
+\r
+                                       var body = this.document.getBody();\r
+\r
+                                       // For each boundary\r
+                                       //              a. Depending on its position, find out the first node to be checked (a sibling) or, if not available, to be enlarge.\r
+                                       //              b. Go ahead checking siblings and enlarging the boundary as much as possible until the common ancestor is not reached. After reaching the common ancestor, just save the enlargeable node to be used later.\r
+\r
+                                       var startTop, endTop;\r
+\r
+                                       var enlargeable, sibling, commonReached;\r
+\r
+                                       // Indicates that the node can be added only if whitespace\r
+                                       // is available before it.\r
+                                       var needsWhiteSpace = false;\r
+                                       var isWhiteSpace;\r
+                                       var siblingText;\r
+\r
+                                       // Process the start boundary.\r
+\r
+                                       var container = this.startContainer;\r
+                                       var offset = this.startOffset;\r
+\r
+                                       if ( container.type == CKEDITOR.NODE_TEXT )\r
+                                       {\r
+                                               if ( offset )\r
+                                               {\r
+                                                       // Check if there is any non-space text before the\r
+                                                       // offset. Otherwise, container is null.\r
+                                                       container = !CKEDITOR.tools.trim( container.substring( 0, offset ) ).length && container;\r
+\r
+                                                       // If we found only whitespace in the node, it\r
+                                                       // means that we'll need more whitespace to be able\r
+                                                       // to expand. For example, <i> can be expanded in\r
+                                                       // "A <i> [B]</i>", but not in "A<i> [B]</i>".\r
+                                                       needsWhiteSpace = !!container;\r
+                                               }\r
+\r
+                                               if ( container )\r
+                                               {\r
+                                                       if ( !( sibling = container.getPrevious() ) )\r
+                                                               enlargeable = container.getParent();\r
+                                               }\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               // If we have offset, get the node preceeding it as the\r
+                                               // first sibling to be checked.\r
+                                               if ( offset )\r
+                                                       sibling = container.getChild( offset - 1 ) || container.getLast();\r
+\r
+                                               // If there is no sibling, mark the container to be\r
+                                               // enlarged.\r
+                                               if ( !sibling )\r
+                                                       enlargeable = container;\r
+                                       }\r
+\r
+                                       while ( enlargeable || sibling )\r
+                                       {\r
+                                               if ( enlargeable && !sibling )\r
+                                               {\r
+                                                       // If we reached the common ancestor, mark the flag\r
+                                                       // for it.\r
+                                                       if ( !commonReached && enlargeable.equals( commonAncestor ) )\r
+                                                               commonReached = true;\r
+\r
+                                                       if ( !body.contains( enlargeable ) )\r
+                                                               break;\r
+\r
+                                                       // If we don't need space or this element breaks\r
+                                                       // the line, then enlarge it.\r
+                                                       if ( !needsWhiteSpace || enlargeable.getComputedStyle( 'display' ) != 'inline' )\r
+                                                       {\r
+                                                               needsWhiteSpace = false;\r
+\r
+                                                               // If the common ancestor has been reached,\r
+                                                               // we'll not enlarge it immediately, but just\r
+                                                               // mark it to be enlarged later if the end\r
+                                                               // boundary also enlarges it.\r
+                                                               if ( commonReached )\r
+                                                                       startTop = enlargeable;\r
+                                                               else\r
+                                                                       this.setStartBefore( enlargeable );\r
+                                                       }\r
+\r
+                                                       sibling = enlargeable.getPrevious();\r
+                                               }\r
+\r
+                                               // Check all sibling nodes preceeding the enlargeable\r
+                                               // node. The node wil lbe enlarged only if none of them\r
+                                               // blocks it.\r
+                                               while ( sibling )\r
+                                               {\r
+                                                       // This flag indicates that this node has\r
+                                                       // whitespaces at the end.\r
+                                                       isWhiteSpace = false;\r
+\r
+                                                       if ( sibling.type == CKEDITOR.NODE_TEXT )\r
+                                                       {\r
+                                                               siblingText = sibling.getText();\r
+\r
+                                                               if ( /[^\s\ufeff]/.test( siblingText ) )\r
+                                                                       sibling = null;\r
+\r
+                                                               isWhiteSpace = /[\s\ufeff]$/.test( siblingText );\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               // If this is a visible element.\r
+                                                               // We need to check for the bookmark attribute because IE insists on\r
+                                                               // rendering the display:none nodes we use for bookmarks. (#3363)\r
+                                                               if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_fck_bookmark' ) )\r
+                                                               {\r
+                                                                       // We'll accept it only if we need\r
+                                                                       // whitespace, and this is an inline\r
+                                                                       // element with whitespace only.\r
+                                                                       if ( needsWhiteSpace && CKEDITOR.dtd.$removeEmpty[ sibling.getName() ] )\r
+                                                                       {\r
+                                                                               // It must contains spaces and inline elements only.\r
+\r
+                                                                               siblingText = sibling.getText();\r
+\r
+                                                                               if ( !(/[^\s\ufeff]/).test( siblingText ) )     // Spaces + Zero Width No-Break Space (U+FEFF)\r
+                                                                                       sibling = null;\r
+                                                                               else\r
+                                                                               {\r
+                                                                                       var allChildren = sibling.$.all || sibling.$.getElementsByTagName( '*' );\r
+                                                                                       for ( var i = 0, child ; child = allChildren[ i++ ] ; )\r
+                                                                                       {\r
+                                                                                               if ( !CKEDITOR.dtd.$removeEmpty[ child.nodeName.toLowerCase() ] )\r
+                                                                                               {\r
+                                                                                                       sibling = null;\r
+                                                                                                       break;\r
+                                                                                               }\r
+                                                                                       }\r
+                                                                               }\r
+\r
+                                                                               if ( sibling )\r
+                                                                                       isWhiteSpace = !!siblingText.length;\r
+                                                                       }\r
+                                                                       else\r
+                                                                               sibling = null;\r
+                                                               }\r
+                                                       }\r
+\r
+                                                       // A node with whitespaces has been found.\r
+                                                       if ( isWhiteSpace )\r
+                                                       {\r
+                                                               // Enlarge the last enlargeable node, if we\r
+                                                               // were waiting for spaces.\r
+                                                               if ( needsWhiteSpace )\r
+                                                               {\r
+                                                                       if ( commonReached )\r
+                                                                               startTop = enlargeable;\r
+                                                                       else if ( enlargeable )\r
+                                                                               this.setStartBefore( enlargeable );\r
+                                                               }\r
+                                                               else\r
+                                                                       needsWhiteSpace = true;\r
+                                                       }\r
+\r
+                                                       if ( sibling )\r
+                                                       {\r
+                                                               var next = sibling.getPrevious();\r
+\r
+                                                               if ( !enlargeable && !next )\r
+                                                               {\r
+                                                                       // Set the sibling as enlargeable, so it's\r
+                                                                       // parent will be get later outside this while.\r
+                                                                       enlargeable = sibling;\r
+                                                                       sibling = null;\r
+                                                                       break;\r
+                                                               }\r
+\r
+                                                               sibling = next;\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               // If sibling has been set to null, then we\r
+                                                               // need to stop enlarging.\r
+                                                               enlargeable = null;\r
+                                                       }\r
+                                               }\r
+\r
+                                               if ( enlargeable )\r
+                                                       enlargeable = enlargeable.getParent();\r
+                                       }\r
+\r
+                                       // Process the end boundary. This is basically the same\r
+                                       // code used for the start boundary, with small changes to\r
+                                       // make it work in the oposite side (to the right). This\r
+                                       // makes it difficult to reuse the code here. So, fixes to\r
+                                       // the above code are likely to be replicated here.\r
+\r
+                                       container = this.endContainer;\r
+                                       offset = this.endOffset;\r
+\r
+                                       // Reset the common variables.\r
+                                       enlargeable = sibling = null;\r
+                                       commonReached = needsWhiteSpace = false;\r
+\r
+                                       if ( container.type == CKEDITOR.NODE_TEXT )\r
+                                       {\r
+                                               // Check if there is any non-space text after the\r
+                                               // offset. Otherwise, container is null.\r
+                                               container = !CKEDITOR.tools.trim( container.substring( offset ) ).length && container;\r
+\r
+                                               // If we found only whitespace in the node, it\r
+                                               // means that we'll need more whitespace to be able\r
+                                               // to expand. For example, <i> can be expanded in\r
+                                               // "A <i> [B]</i>", but not in "A<i> [B]</i>".\r
+                                               needsWhiteSpace = !( container && container.getLength() );\r
+\r
+                                               if ( container )\r
+                                               {\r
+                                                       if ( !( sibling = container.getNext() ) )\r
+                                                               enlargeable = container.getParent();\r
+                                               }\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               // Get the node right after the boudary to be checked\r
+                                               // first.\r
+                                               sibling = container.getChild( offset );\r
+\r
+                                               if ( !sibling )\r
+                                                       enlargeable = container;\r
+                                       }\r
+\r
+                                       while ( enlargeable || sibling )\r
+                                       {\r
+                                               if ( enlargeable && !sibling )\r
+                                               {\r
+                                                       if ( !commonReached && enlargeable.equals( commonAncestor ) )\r
+                                                               commonReached = true;\r
+\r
+                                                       if ( !body.contains( enlargeable ) )\r
+                                                               break;\r
+\r
+                                                       if ( !needsWhiteSpace || enlargeable.getComputedStyle( 'display' ) != 'inline' )\r
+                                                       {\r
+                                                               needsWhiteSpace = false;\r
+\r
+                                                               if ( commonReached )\r
+                                                                       endTop = enlargeable;\r
+                                                               else if ( enlargeable )\r
+                                                                       this.setEndAfter( enlargeable );\r
+                                                       }\r
+\r
+                                                       sibling = enlargeable.getNext();\r
+                                               }\r
+\r
+                                               while ( sibling )\r
+                                               {\r
+                                                       isWhiteSpace = false;\r
+\r
+                                                       if ( sibling.type == CKEDITOR.NODE_TEXT )\r
+                                                       {\r
+                                                               siblingText = sibling.getText();\r
+\r
+                                                               if ( /[^\s\ufeff]/.test( siblingText ) )\r
+                                                                       sibling = null;\r
+\r
+                                                               isWhiteSpace = /^[\s\ufeff]/.test( siblingText );\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               // If this is a visible element.\r
+                                                               // We need to check for the bookmark attribute because IE insists on\r
+                                                               // rendering the display:none nodes we use for bookmarks. (#3363)\r
+                                                               if ( sibling.$.offsetWidth > 0 && !sibling.getAttribute( '_fck_bookmark' ) )\r
+                                                               {\r
+                                                                       // We'll accept it only if we need\r
+                                                                       // whitespace, and this is an inline\r
+                                                                       // element with whitespace only.\r
+                                                                       if ( needsWhiteSpace && CKEDITOR.dtd.$removeEmpty[ sibling.getName() ] )\r
+                                                                       {\r
+                                                                               // It must contains spaces and inline elements only.\r
+\r
+                                                                               siblingText = sibling.getText();\r
+\r
+                                                                               if ( !(/[^\s\ufeff]/).test( siblingText ) )\r
+                                                                                       sibling = null;\r
+                                                                               else\r
+                                                                               {\r
+                                                                                       allChildren = sibling.$.all || sibling.$.getElementsByTagName( '*' );\r
+                                                                                       for ( i = 0 ; child = allChildren[ i++ ] ; )\r
+                                                                                       {\r
+                                                                                               if ( !CKEDITOR.dtd.$removeEmpty[ child.nodeName.toLowerCase() ] )\r
+                                                                                               {\r
+                                                                                                       sibling = null;\r
+                                                                                                       break;\r
+                                                                                               }\r
+                                                                                       }\r
+                                                                               }\r
+\r
+                                                                               if ( sibling )\r
+                                                                                       isWhiteSpace = !!siblingText.length;\r
+                                                                       }\r
+                                                                       else\r
+                                                                               sibling = null;\r
+                                                               }\r
+                                                       }\r
+\r
+                                                       if ( isWhiteSpace )\r
+                                                       {\r
+                                                               if ( needsWhiteSpace )\r
+                                                               {\r
+                                                                       if ( commonReached )\r
+                                                                               endTop = enlargeable;\r
+                                                                       else\r
+                                                                               this.setEndAfter( enlargeable );\r
+                                                               }\r
+                                                       }\r
+\r
+                                                       if ( sibling )\r
+                                                       {\r
+                                                               next = sibling.getNext();\r
+\r
+                                                               if ( !enlargeable && !next )\r
+                                                               {\r
+                                                                       enlargeable = sibling;\r
+                                                                       sibling = null;\r
+                                                                       break;\r
+                                                               }\r
+\r
+                                                               sibling = next;\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               // If sibling has been set to null, then we\r
+                                                               // need to stop enlarging.\r
+                                                               enlargeable = null;\r
+                                                       }\r
+                                               }\r
+\r
+                                               if ( enlargeable )\r
+                                                       enlargeable = enlargeable.getParent();\r
+                                       }\r
+\r
+                                       // If the common ancestor can be enlarged by both boundaries, then include it also.\r
+                                       if ( startTop && endTop )\r
+                                       {\r
+                                               commonAncestor = startTop.contains( endTop ) ? endTop : startTop;\r
+\r
+                                               this.setStartBefore( commonAncestor );\r
+                                               this.setEndAfter( commonAncestor );\r
+                                       }\r
+                                       break;\r
+\r
+                               case CKEDITOR.ENLARGE_BLOCK_CONTENTS:\r
+                               case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:\r
+\r
+                                       // Enlarging the start boundary.\r
+                                       var walkerRange = new CKEDITOR.dom.range( this.document );\r
+\r
+                                       body = this.document.getBody();\r
+\r
+                                       walkerRange.setStartAt( body, CKEDITOR.POSITION_AFTER_START );\r
+                                       walkerRange.setEnd( this.startContainer, this.startOffset );\r
+\r
+                                       var walker = new CKEDITOR.dom.walker( walkerRange ),\r
+                                           blockBoundary,  // The node on which the enlarging should stop.\r
+                                               tailBr, //\r
+                                           defaultGuard = CKEDITOR.dom.walker.blockBoundary(\r
+                                                               ( unit == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ) ? { br : 1 } : null ),\r
+                                               // Record the encountered 'blockBoundary' for later use.\r
+                                               boundaryGuard = function( node )\r
+                                               {\r
+                                                       var retval = defaultGuard( node );\r
+                                                       if ( !retval )\r
+                                                               blockBoundary = node;\r
+                                                       return retval;\r
+                                               },\r
+                                               // Record the encounted 'tailBr' for later use.\r
+                                               tailBrGuard = function( node )\r
+                                               {\r
+                                                       var retval = boundaryGuard( node );\r
+                                                       if ( !retval && node.is && node.is( 'br' ) )\r
+                                                               tailBr = node;\r
+                                                       return retval;\r
+                                               };\r
+\r
+                                       walker.guard = boundaryGuard;\r
+\r
+                                       enlargeable = walker.lastBackward();\r
+\r
+                                       // It's the body which stop the enlarging if no block boundary found.\r
+                                       blockBoundary = blockBoundary || body;\r
+\r
+                                       // Start the range at different position by comparing\r
+                                       // the document position of it with 'enlargeable' node.\r
+                                       this.setStartAt(\r
+                                                       blockBoundary,\r
+                                                       !blockBoundary.is( 'br' ) &&\r
+                                                       ( !enlargeable || blockBoundary.contains( enlargeable ) ) ?\r
+                                                               CKEDITOR.POSITION_AFTER_START :\r
+                                                               CKEDITOR.POSITION_AFTER_END );\r
+\r
+                                       // Enlarging the end boundary.\r
+                                       walkerRange = this.clone();\r
+                                       walkerRange.collapse();\r
+                                       walkerRange.setEndAt( body, CKEDITOR.POSITION_BEFORE_END );\r
+                                       walker = new CKEDITOR.dom.walker( walkerRange );\r
+\r
+                                       // tailBrGuard only used for on range end.\r
+                                       walker.guard = ( unit == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ) ?\r
+                                               tailBrGuard : boundaryGuard;\r
+                                       blockBoundary = null;\r
+                                       // End the range right before the block boundary node.\r
+\r
+                                       enlargeable = walker.lastForward();\r
+\r
+                                       // It's the body which stop the enlarging if no block boundary found.\r
+                                       blockBoundary = blockBoundary || body;\r
+\r
+                                       // Start the range at different position by comparing\r
+                                       // the document position of it with 'enlargeable' node.\r
+                                       this.setEndAt(\r
+                                                       blockBoundary,\r
+                                                       !blockBoundary.is( 'br' ) &&\r
+                                                       ( !enlargeable || blockBoundary.contains( enlargeable ) ) ?\r
+                                                               CKEDITOR.POSITION_BEFORE_END :\r
+                                                               CKEDITOR.POSITION_BEFORE_START );\r
+                                       // We must include the <br> at the end of range if there's\r
+                                       // one and we're expanding list item contents\r
+                                       if ( tailBr )\r
+                                               this.setEndAfter( tailBr );\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * Inserts a node at the start of the range. The range will be expanded\r
+                * the contain the node.\r
+                */\r
+               insertNode : function( node )\r
+               {\r
+                       this.optimizeBookmark();\r
+                       this.trim( false, true );\r
+\r
+                       var startContainer = this.startContainer;\r
+                       var startOffset = this.startOffset;\r
+\r
+                       var nextNode = startContainer.getChild( startOffset );\r
+\r
+                       if ( nextNode )\r
+                               node.insertBefore( nextNode );\r
+                       else\r
+                               startContainer.append( node );\r
+\r
+                       // Check if we need to update the end boundary.\r
+                       if ( node.getParent().equals( this.endContainer ) )\r
+                               this.endOffset++;\r
+\r
+                       // Expand the range to embrace the new node.\r
+                       this.setStartBefore( node );\r
+               },\r
+\r
+               moveToPosition : function( node, position )\r
+               {\r
+                       this.setStartAt( node, position );\r
+                       this.collapse( true );\r
+               },\r
+\r
+               selectNodeContents : function( node )\r
+               {\r
+                       this.setStart( node, 0 );\r
+                       this.setEnd( node, node.type == CKEDITOR.NODE_TEXT ? node.getLength() : node.getChildCount() );\r
+               },\r
+\r
+               /**\r
+                * Sets the start position of a Range.\r
+                * @param {CKEDITOR.dom.node} startNode The node to start the range.\r
+                * @param {Number} startOffset An integer greater than or equal to zero\r
+                *              representing the offset for the start of the range from the start\r
+                *              of startNode.\r
+                */\r
+               setStart : function( startNode, startOffset )\r
+               {\r
+                       // W3C requires a check for the new position. If it is after the end\r
+                       // boundary, the range should be collapsed to the new start. It seams\r
+                       // we will not need this check for our use of this class so we can\r
+                       // ignore it for now.\r
+\r
+                       this.startContainer     = startNode;\r
+                       this.startOffset        = startOffset;\r
+\r
+                       if ( !this.endContainer )\r
+                       {\r
+                               this.endContainer       = startNode;\r
+                               this.endOffset          = startOffset;\r
+                       }\r
+\r
+                       updateCollapsed( this );\r
+               },\r
+\r
+               /**\r
+                * Sets the end position of a Range.\r
+                * @param {CKEDITOR.dom.node} endNode The node to end the range.\r
+                * @param {Number} endOffset An integer greater than or equal to zero\r
+                *              representing the offset for the end of the range from the start\r
+                *              of endNode.\r
+                */\r
+               setEnd : function( endNode, endOffset )\r
+               {\r
+                       // W3C requires a check for the new position. If it is before the start\r
+                       // boundary, the range should be collapsed to the new end. It seams we\r
+                       // will not need this check for our use of this class so we can ignore\r
+                       // it for now.\r
+\r
+                       this.endContainer       = endNode;\r
+                       this.endOffset          = endOffset;\r
+\r
+                       if ( !this.startContainer )\r
+                       {\r
+                               this.startContainer     = endNode;\r
+                               this.startOffset        = endOffset;\r
+                       }\r
+\r
+                       updateCollapsed( this );\r
+               },\r
+\r
+               setStartAfter : function( node )\r
+               {\r
+                       this.setStart( node.getParent(), node.getIndex() + 1 );\r
+               },\r
+\r
+               setStartBefore : function( node )\r
+               {\r
+                       this.setStart( node.getParent(), node.getIndex() );\r
+               },\r
+\r
+               setEndAfter : function( node )\r
+               {\r
+                       this.setEnd( node.getParent(), node.getIndex() + 1 );\r
+               },\r
+\r
+               setEndBefore : function( node )\r
+               {\r
+                       this.setEnd( node.getParent(), node.getIndex() );\r
+               },\r
+\r
+               setStartAt : function( node, position )\r
+               {\r
+                       switch( position )\r
+                       {\r
+                               case CKEDITOR.POSITION_AFTER_START :\r
+                                       this.setStart( node, 0 );\r
+                                       break;\r
+\r
+                               case CKEDITOR.POSITION_BEFORE_END :\r
+                                       if ( node.type == CKEDITOR.NODE_TEXT )\r
+                                               this.setStart( node, node.getLength() );\r
+                                       else\r
+                                               this.setStart( node, node.getChildCount() );\r
+                                       break;\r
+\r
+                               case CKEDITOR.POSITION_BEFORE_START :\r
+                                       this.setStartBefore( node );\r
+                                       break;\r
+\r
+                               case CKEDITOR.POSITION_AFTER_END :\r
+                                       this.setStartAfter( node );\r
+                       }\r
+\r
+                       updateCollapsed( this );\r
+               },\r
+\r
+               setEndAt : function( node, position )\r
+               {\r
+                       switch( position )\r
+                       {\r
+                               case CKEDITOR.POSITION_AFTER_START :\r
+                                       this.setEnd( node, 0 );\r
+                                       break;\r
+\r
+                               case CKEDITOR.POSITION_BEFORE_END :\r
+                                       if ( node.type == CKEDITOR.NODE_TEXT )\r
+                                               this.setEnd( node, node.getLength() );\r
+                                       else\r
+                                               this.setEnd( node, node.getChildCount() );\r
+                                       break;\r
+\r
+                               case CKEDITOR.POSITION_BEFORE_START :\r
+                                       this.setEndBefore( node );\r
+                                       break;\r
+\r
+                               case CKEDITOR.POSITION_AFTER_END :\r
+                                       this.setEndAfter( node );\r
+                       }\r
+\r
+                       updateCollapsed( this );\r
+               },\r
+\r
+               fixBlock : function( isStart, blockTag )\r
+               {\r
+                       var bookmark = this.createBookmark(),\r
+                               fixedBlock = this.document.createElement( blockTag );\r
+\r
+                       this.collapse( isStart );\r
+\r
+                       this.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                       this.extractContents().appendTo( fixedBlock );\r
+                       fixedBlock.trim();\r
+\r
+                       if ( !CKEDITOR.env.ie )\r
+                               fixedBlock.appendBogus();\r
+\r
+                       this.insertNode( fixedBlock );\r
+\r
+                       this.moveToBookmark( bookmark );\r
+\r
+                       return fixedBlock;\r
+               },\r
+\r
+               splitBlock : function( blockTag )\r
+               {\r
+                       var startPath   = new CKEDITOR.dom.elementPath( this.startContainer ),\r
+                               endPath         = new CKEDITOR.dom.elementPath( this.endContainer );\r
+\r
+                       var startBlockLimit     = startPath.blockLimit,\r
+                               endBlockLimit   = endPath.blockLimit;\r
+\r
+                       var startBlock  = startPath.block,\r
+                               endBlock        = endPath.block;\r
+\r
+                       var elementPath = null;\r
+                       // Do nothing if the boundaries are in different block limits.\r
+                       if ( !startBlockLimit.equals( endBlockLimit ) )\r
+                               return null;\r
+\r
+                       // Get or fix current blocks.\r
+                       if ( blockTag != 'br' )\r
+                       {\r
+                               if ( !startBlock )\r
+                               {\r
+                                       startBlock = this.fixBlock( true, blockTag );\r
+                                       endBlock = new CKEDITOR.dom.elementPath( this.endContainer ).block;\r
+                               }\r
+\r
+                               if ( !endBlock )\r
+                                       endBlock = this.fixBlock( false, blockTag );\r
+                       }\r
+\r
+                       // Get the range position.\r
+                       var isStartOfBlock = startBlock && this.checkStartOfBlock(),\r
+                               isEndOfBlock = endBlock && this.checkEndOfBlock();\r
+\r
+                       // Delete the current contents.\r
+                       // TODO: Why is 2.x doing CheckIsEmpty()?\r
+                       this.deleteContents();\r
+\r
+                       if ( startBlock && startBlock.equals( endBlock ) )\r
+                       {\r
+                               if ( isEndOfBlock )\r
+                               {\r
+                                       elementPath = new CKEDITOR.dom.elementPath( this.startContainer );\r
+                                       this.moveToPosition( endBlock, CKEDITOR.POSITION_AFTER_END );\r
+                                       endBlock = null;\r
+                               }\r
+                               else if ( isStartOfBlock )\r
+                               {\r
+                                       elementPath = new CKEDITOR.dom.elementPath( this.startContainer );\r
+                                       this.moveToPosition( startBlock, CKEDITOR.POSITION_BEFORE_START );\r
+                                       startBlock = null;\r
+                               }\r
+                               else\r
+                               {\r
+                                       // Extract the contents of the block from the selection point to the end\r
+                                       // of its contents.\r
+                                       this.setEndAt( startBlock, CKEDITOR.POSITION_BEFORE_END );\r
+                                       var documentFragment = this.extractContents();\r
+\r
+                                       // Duplicate the block element after it.\r
+                                       endBlock = startBlock.clone( false );\r
+\r
+                                       // Place the extracted contents into the duplicated block.\r
+                                       documentFragment.appendTo( endBlock );\r
+                                       endBlock.insertAfter( startBlock );\r
+                                       this.moveToPosition( startBlock, CKEDITOR.POSITION_AFTER_END );\r
+\r
+                                       // In Gecko, the last child node must be a bogus <br>.\r
+                                       // Note: bogus <br> added under <ul> or <ol> would cause\r
+                                       // lists to be incorrectly rendered.\r
+                                       if ( !CKEDITOR.env.ie && !startBlock.is( 'ul', 'ol') )\r
+                                               startBlock.appendBogus() ;\r
+                               }\r
+                       }\r
+\r
+                       return {\r
+                               previousBlock : startBlock,\r
+                               nextBlock : endBlock,\r
+                               wasStartOfBlock : isStartOfBlock,\r
+                               wasEndOfBlock : isEndOfBlock,\r
+                               elementPath : elementPath\r
+                       };\r
+               },\r
+\r
+               /**\r
+                * Check whether current range is on the inner edge of the specified element.\r
+                * @param {Number} checkType ( CKEDITOR.START | CKEDITOR.END ) The checking side.\r
+                * @param {CKEDITOR.dom.element} element The target element to check.\r
+                */\r
+               checkBoundaryOfElement : function( element, checkType )\r
+               {\r
+                       var walkerRange = this.clone();\r
+                       // Expand the range to element boundary.\r
+                       walkerRange[ checkType == CKEDITOR.START ?\r
+                        'setStartAt' : 'setEndAt' ]\r
+                        ( element, checkType == CKEDITOR.START ?\r
+                          CKEDITOR.POSITION_AFTER_START\r
+                          : CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( walkerRange ),\r
+                        retval = false;\r
+                       walker.evaluator = elementBoundaryEval;\r
+                       return walker[ checkType == CKEDITOR.START ?\r
+                               'checkBackward' : 'checkForward' ]();\r
+               },\r
+               // Calls to this function may produce changes to the DOM. The range may\r
+               // be updated to reflect such changes.\r
+               checkStartOfBlock : function()\r
+               {\r
+                       var startContainer = this.startContainer,\r
+                               startOffset = this.startOffset;\r
+\r
+                       // If the starting node is a text node, and non-empty before the offset,\r
+                       // then we're surely not at the start of block.\r
+                       if ( startOffset && startContainer.type == CKEDITOR.NODE_TEXT )\r
+                       {\r
+                               var textBefore = CKEDITOR.tools.ltrim( startContainer.substring( 0, startOffset ) );\r
+                               if ( textBefore.length )\r
+                                       return false;\r
+                       }\r
+\r
+                       // Antecipate the trim() call here, so the walker will not make\r
+                       // changes to the DOM, which would not get reflected into this\r
+                       // range otherwise.\r
+                       this.trim();\r
+\r
+                       // We need to grab the block element holding the start boundary, so\r
+                       // let's use an element path for it.\r
+                       var path = new CKEDITOR.dom.elementPath( this.startContainer );\r
+\r
+                       // Creates a range starting at the block start until the range start.\r
+                       var walkerRange = this.clone();\r
+                       walkerRange.collapse( true );\r
+                       walkerRange.setStartAt( path.block || path.blockLimit, CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( walkerRange );\r
+                       walker.evaluator = getCheckStartEndBlockEvalFunction( true );\r
+\r
+                       return walker.checkBackward();\r
+               },\r
+\r
+               checkEndOfBlock : function()\r
+               {\r
+                       var endContainer = this.endContainer,\r
+                               endOffset = this.endOffset;\r
+\r
+                       // If the ending node is a text node, and non-empty after the offset,\r
+                       // then we're surely not at the end of block.\r
+                       if ( endContainer.type == CKEDITOR.NODE_TEXT )\r
+                       {\r
+                               var textAfter = CKEDITOR.tools.rtrim( endContainer.substring( endOffset ) );\r
+                               if ( textAfter.length )\r
+                                       return false;\r
+                       }\r
+\r
+                       // Antecipate the trim() call here, so the walker will not make\r
+                       // changes to the DOM, which would not get reflected into this\r
+                       // range otherwise.\r
+                       this.trim();\r
+\r
+                       // We need to grab the block element holding the start boundary, so\r
+                       // let's use an element path for it.\r
+                       var path = new CKEDITOR.dom.elementPath( this.endContainer );\r
+\r
+                       // Creates a range starting at the block start until the range start.\r
+                       var walkerRange = this.clone();\r
+                       walkerRange.collapse( false );\r
+                       walkerRange.setEndAt( path.block || path.blockLimit, CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( walkerRange );\r
+                       walker.evaluator = getCheckStartEndBlockEvalFunction( false );\r
+\r
+                       return walker.checkForward();\r
+               },\r
+\r
+               /**\r
+                * Moves the range boundaries to the first editing point inside an\r
+                * element. For example, in an element tree like\r
+                * "&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt; Text&lt;/p&gt;", the start editing point is\r
+                * "&lt;p&gt;&lt;b&gt;&lt;i&gt;^&lt;/i&gt;&lt;/b&gt; Text&lt;/p&gt;" (inside &lt;i&gt;).\r
+                * @param {CKEDITOR.dom.element} targetElement The element into which\r
+                *              look for the editing spot.\r
+                */\r
+               moveToElementEditStart : function( targetElement )\r
+               {\r
+                       var editableElement;\r
+\r
+                       while ( targetElement && targetElement.type == CKEDITOR.NODE_ELEMENT )\r
+                       {\r
+                               if ( targetElement.isEditable() )\r
+                                       editableElement = targetElement;\r
+                               else if ( editableElement )\r
+                                       break ;         // If we already found an editable element, stop the loop.\r
+\r
+                               targetElement = targetElement.getFirst();\r
+                       }\r
+\r
+                       if ( editableElement )\r
+                       {\r
+                               this.moveToPosition(editableElement, CKEDITOR.POSITION_AFTER_START);\r
+                               return true;\r
+                       }\r
+                       else\r
+                               return false;\r
+               },\r
+\r
+               /**\r
+                * Get the single node enclosed within the range if there's one.\r
+                */\r
+               getEnclosedNode : function()\r
+               {\r
+                       var walkerRange = this.clone(),\r
+                               walker = new CKEDITOR.dom.walker( walkerRange ),\r
+                               isNotBookmarks = CKEDITOR.dom.walker.bookmark( true ),\r
+                               isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( true ),\r
+                               evaluator = function( node )\r
+                               {\r
+                                       return isNotWhitespaces( node ) && isNotBookmarks( node );\r
+                               };\r
+                       walkerRange.evaluator = evaluator;\r
+                       var node = walker.next();\r
+                       walker.reset();\r
+                       return node && node.equals( walker.previous() ) ? node : null;\r
+               },\r
+\r
+               getTouchedStartNode : function()\r
+               {\r
+                       var container = this.startContainer ;\r
+\r
+                       if ( this.collapsed || container.type != CKEDITOR.NODE_ELEMENT )\r
+                               return container ;\r
+\r
+                       return container.getChild( this.startOffset ) || container ;\r
+               },\r
+\r
+               getTouchedEndNode : function()\r
+               {\r
+                       var container = this.endContainer ;\r
+\r
+                       if ( this.collapsed || container.type != CKEDITOR.NODE_ELEMENT )\r
+                               return container ;\r
+\r
+                       return container.getChild( this.endOffset - 1 ) || container ;\r
+               }\r
+       };\r
+})();\r
+\r
+CKEDITOR.POSITION_AFTER_START  = 1;    // <element>^contents</element>         "^text"\r
+CKEDITOR.POSITION_BEFORE_END   = 2;    // <element>contents^</element>         "text^"\r
+CKEDITOR.POSITION_BEFORE_START = 3;    // ^<element>contents</element>         ^"text"\r
+CKEDITOR.POSITION_AFTER_END            = 4;    // <element>contents</element>^         "text"\r
+\r
+CKEDITOR.ENLARGE_ELEMENT = 1;\r
+CKEDITOR.ENLARGE_BLOCK_CONTENTS = 2;\r
+CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS = 3;\r
+\r
+/**\r
+ * Check boundary types.\r
+ * @see CKEDITOR.dom.range::checkBoundaryOfElement\r
+ */\r
+CKEDITOR.START = 1;\r
+CKEDITOR.END = 2;\r
+CKEDITOR.STARTEND = 3;\r
diff --git a/_source/core/dom/text.js b/_source/core/dom/text.js
new file mode 100644 (file)
index 0000000..2cedd9b
--- /dev/null
@@ -0,0 +1,123 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.dom.text} class, which represents\r
+ *             a DOM text node.\r
+ */\r
+\r
+/**\r
+ * Represents a DOM text node.\r
+ * @constructor\r
+ * @augments CKEDITOR.dom.node\r
+ * @param {Object|String} text A native DOM text node or a string containing\r
+ *             the text to use to create a new text node.\r
+ * @param {CKEDITOR.dom.document} [ownerDocument] The document that will contain\r
+ *             the node in case of new node creation. Defaults to the current document.\r
+ * @example\r
+ * var nativeNode = document.createTextNode( 'Example' );\r
+ * var text = CKEDITOR.dom.text( nativeNode );\r
+ * @example\r
+ * var text = CKEDITOR.dom.text( 'Example' );\r
+ */\r
+CKEDITOR.dom.text = function( text, ownerDocument )\r
+{\r
+       if ( typeof text == 'string' )\r
+               text = ( ownerDocument ? ownerDocument.$ : document ).createTextNode( text );\r
+\r
+       // Theoretically, we should call the base constructor here\r
+       // (not CKEDITOR.dom.node though). But, IE doesn't support expando\r
+       // properties on text node, so the features provided by domObject will not\r
+       // work for text nodes (which is not a big issue for us).\r
+       //\r
+       // CKEDITOR.dom.domObject.call( this, element );\r
+\r
+       /**\r
+        * The native DOM text node represented by this class instance.\r
+        * @type Object\r
+        * @example\r
+        * var element = new CKEDITOR.dom.text( 'Example' );\r
+        * alert( element.$.nodeType );  // "3"\r
+        */\r
+       this.$ = text;\r
+};\r
+\r
+CKEDITOR.dom.text.prototype = new CKEDITOR.dom.node();\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.dom.text.prototype,\r
+       /** @lends CKEDITOR.dom.text.prototype */\r
+       {\r
+               /**\r
+                * The node type. This is a constant value set to\r
+                * {@link CKEDITOR.NODE_TEXT}.\r
+                * @type Number\r
+                * @example\r
+                */\r
+               type : CKEDITOR.NODE_TEXT,\r
+\r
+               getLength : function()\r
+               {\r
+                       return this.$.nodeValue.length;\r
+               },\r
+\r
+               getText : function()\r
+               {\r
+                       return this.$.nodeValue;\r
+               },\r
+\r
+               /**\r
+                * Breaks this text node into two nodes at the specified offset,\r
+                * keeping both in the tree as siblings. This node then only contains\r
+                * all the content up to the offset point. A new text node, which is\r
+                * inserted as the next sibling of this node, contains all the content\r
+                * at and after the offset point. When the offset is equal to the\r
+                * length of this node, the new node has no data.\r
+                * @param {Number} The position at which to split, starting from zero.\r
+                * @returns {CKEDITOR.dom.text} The new text node.\r
+                */\r
+               split : function( offset )\r
+               {\r
+                       // If the offset is after the last char, IE creates the text node\r
+                       // on split, but don't include it into the DOM. So, we have to do\r
+                       // that manually here.\r
+                       if ( CKEDITOR.env.ie && offset == this.getLength() )\r
+                       {\r
+                               var next = this.getDocument().createText( '' );\r
+                               next.insertAfter( this );\r
+                               return next;\r
+                       }\r
+\r
+                       var doc = this.getDocument();\r
+                       var retval = new CKEDITOR.dom.text( this.$.splitText( offset ), doc );\r
+\r
+                       // IE BUG: IE8 does not update the childNodes array in DOM after splitText(),\r
+                       // we need to make some DOM changes to make it update. (#3436)\r
+                       if ( CKEDITOR.env.ie8 )\r
+                       {\r
+                               var workaround = new CKEDITOR.dom.text( '', doc );\r
+                               workaround.insertAfter( retval );\r
+                               workaround.remove();\r
+                       }\r
+\r
+                       return retval;\r
+               },\r
+\r
+               /**\r
+                * Extracts characters from indexA up to but not including indexB.\r
+                * @param {Number} indexA An integer between 0 and one less than the\r
+                *              length of the text.\r
+                * @param {Number} [indexB] An integer between 0 and the length of the\r
+                *              string. If omitted, extracts characters to the end of the text.\r
+                */\r
+               substring : function( indexA, indexB )\r
+               {\r
+                       // We need the following check due to a Firefox bug\r
+                       // https://bugzilla.mozilla.org/show_bug.cgi?id=458886\r
+                       if ( typeof indexB != 'number' )\r
+                               return this.$.nodeValue.substr( indexA );\r
+                       else\r
+                               return this.$.nodeValue.substring( indexA, indexB );\r
+               }\r
+       });\r
diff --git a/_source/core/dom/walker.js b/_source/core/dom/walker.js
new file mode 100644 (file)
index 0000000..4617a81
--- /dev/null
@@ -0,0 +1,411 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       // This function is to be called under a "walker" instance scope.\r
+       function iterate( rtl, breakOnFalse )\r
+       {\r
+               // Return null if we have reached the end.\r
+               if ( this._.end )\r
+                       return null;\r
+\r
+               var node,\r
+                       range = this.range,\r
+                       guard,\r
+                       userGuard = this.guard,\r
+                       type = this.type,\r
+                       getSourceNodeFn = ( rtl ? 'getPreviousSourceNode' : 'getNextSourceNode' );\r
+\r
+               // This is the first call. Initialize it.\r
+               if ( !this._.start )\r
+               {\r
+                       this._.start = 1;\r
+\r
+                       // Trim text nodes and optmize the range boundaries. DOM changes\r
+                       // may happen at this point.\r
+                       range.trim();\r
+\r
+                       // A collapsed range must return null at first call.\r
+                       if ( range.collapsed )\r
+                       {\r
+                               this.end();\r
+                               return null;\r
+                       }\r
+               }\r
+\r
+               // Create the LTR guard function, if necessary.\r
+               if ( !rtl && !this._.guardLTR )\r
+               {\r
+                       // Gets the node that stops the walker when going LTR.\r
+                       var limitLTR = range.endContainer,\r
+                               blockerLTR = limitLTR.getChild( range.endOffset );\r
+\r
+                       this._.guardLTR = function( node, movingOut )\r
+                       {\r
+                               return ( ( !movingOut || !limitLTR.equals( node ) )\r
+                                       && ( !blockerLTR || !node.equals( blockerLTR ) )\r
+                                       && ( node.type != CKEDITOR.NODE_ELEMENT || node.getName() != 'body' ) );\r
+                       };\r
+               }\r
+\r
+               // Create the RTL guard function, if necessary.\r
+               if ( rtl && !this._.guardRTL )\r
+               {\r
+                       // Gets the node that stops the walker when going LTR.\r
+                       var limitRTL = range.startContainer,\r
+                               blockerRTL = ( range.startOffset > 0 ) && limitRTL.getChild( range.startOffset - 1 );\r
+\r
+                       this._.guardRTL = function( node, movingOut )\r
+                       {\r
+                               return ( ( !movingOut || !limitRTL.equals( node ) )\r
+                                       && ( !blockerRTL || !node.equals( blockerRTL ) )\r
+                                       && ( node.type != CKEDITOR.NODE_ELEMENT || node.getName() != 'body' ) );\r
+                       };\r
+               }\r
+\r
+               // Define which guard function to use.\r
+               var stopGuard = rtl ? this._.guardRTL : this._.guardLTR;\r
+\r
+               // Make the user defined guard function participate in the process,\r
+               // otherwise simply use the boundary guard.\r
+               if ( userGuard )\r
+               {\r
+                       guard = function( node, movingOut )\r
+                       {\r
+                               if ( stopGuard( node, movingOut ) === false )\r
+                                       return false;\r
+\r
+                               return userGuard( node );\r
+                       };\r
+               }\r
+               else\r
+                       guard = stopGuard;\r
+\r
+               if ( this.current )\r
+                       node = this.current[ getSourceNodeFn ]( false, type, guard );\r
+               else\r
+               {\r
+                       // Get the first node to be returned.\r
+\r
+                       if ( rtl )\r
+                       {\r
+                               node = range.endContainer;\r
+\r
+                               if ( range.endOffset > 0 )\r
+                               {\r
+                                       node = node.getChild( range.endOffset - 1 );\r
+                                       if ( guard( node ) === false )\r
+                                               node = null;\r
+                               }\r
+                               else\r
+                                       node = ( guard ( node ) === false ) ?\r
+                                               null : node.getPreviousSourceNode( true, type, guard );\r
+                       }\r
+                       else\r
+                       {\r
+                               node = range.startContainer;\r
+                               node = node.getChild( range.startOffset );\r
+\r
+                               if ( node )\r
+                               {\r
+                                       if ( guard( node ) === false )\r
+                                               node = null;\r
+                               }\r
+                               else\r
+                                       node = ( guard ( range.startContainer ) === false ) ?\r
+                                               null : range.startContainer.getNextSourceNode( true, type, guard ) ;\r
+                       }\r
+               }\r
+\r
+               while ( node && !this._.end )\r
+               {\r
+                       this.current = node;\r
+\r
+                       if ( !this.evaluator || this.evaluator( node ) !== false )\r
+                       {\r
+                               if ( !breakOnFalse )\r
+                                       return node;\r
+                       }\r
+                       else if ( breakOnFalse && this.evaluator )\r
+                               return false;\r
+\r
+                       node = node[ getSourceNodeFn ]( false, type, guard );\r
+               }\r
+\r
+               this.end();\r
+               return this.current = null;\r
+       }\r
+\r
+       function iterateToLast( rtl )\r
+       {\r
+               var node, last = null;\r
+\r
+               while ( ( node = iterate.call( this, rtl ) ) )\r
+                       last = node;\r
+\r
+               return last;\r
+       }\r
+\r
+       CKEDITOR.dom.walker = CKEDITOR.tools.createClass(\r
+       {\r
+               /**\r
+                * Utility class to "walk" the DOM inside a range boundaries. If\r
+                * necessary, partially included nodes (text nodes) are broken to\r
+                * reflect the boundaries limits, so DOM and range changes may happen.\r
+                * Outside changes to the range may break the walker.\r
+                *\r
+                * The walker may return nodes that are not totaly included into the\r
+                * range boundaires. Let's take the following range representation,\r
+                * where the square brackets indicate the boundaries:\r
+                *\r
+                * [&lt;p&gt;Some &lt;b&gt;sample] text&lt;/b&gt;\r
+                *\r
+                * While walking forward into the above range, the following nodes are\r
+                * returned: &lt;p&gt;, "Some ", &lt;b&gt; and "sample". Going\r
+                * backwards instead we have: "sample" and "Some ". So note that the\r
+                * walker always returns nodes when "entering" them, but not when\r
+                * "leaving" them. The guard function is instead called both when\r
+                * entering and leaving nodes.\r
+                *\r
+                * @constructor\r
+                * @param {CKEDITOR.dom.range} range The range within which walk.\r
+                */\r
+               $ : function( range )\r
+               {\r
+                       this.range = range;\r
+\r
+                       /**\r
+                        * A function executed for every matched node, to check whether\r
+                        * it's to be considered into the walk or not. If not provided, all\r
+                        * matched nodes are considered good.\r
+                        * If the function returns "false" the node is ignored.\r
+                        * @name CKEDITOR.dom.walker.prototype.evaluator\r
+                        * @property\r
+                        * @type Function\r
+                        */\r
+                       // this.evaluator = null;\r
+\r
+                       /**\r
+                        * A function executed for every node the walk pass by to check\r
+                        * whether the walk is to be finished. It's called when both\r
+                        * entering and exiting nodes, as well as for the matched nodes.\r
+                        * If this function returns "false", the walking ends and no more\r
+                        * nodes are evaluated.\r
+                        * @name CKEDITOR.dom.walker.prototype.guard\r
+                        * @property\r
+                        * @type Function\r
+                        */\r
+                       // this.guard = null;\r
+\r
+                       /** @private */\r
+                       this._ = {};\r
+               },\r
+\r
+//             statics :\r
+//             {\r
+//                     /* Creates a CKEDITOR.dom.walker instance to walk inside DOM boundaries set by nodes.\r
+//                      * @param {CKEDITOR.dom.node} startNode The node from wich the walk\r
+//                      *              will start.\r
+//                      * @param {CKEDITOR.dom.node} [endNode] The last node to be considered\r
+//                      *              in the walk. No more nodes are retrieved after touching or\r
+//                      *              passing it. If not provided, the walker stops at the\r
+//                      *              &lt;body&gt; closing boundary.\r
+//                      * @returns {CKEDITOR.dom.walker} A DOM walker for the nodes between the\r
+//                      *              provided nodes.\r
+//                      */\r
+//                     createOnNodes : function( startNode, endNode, startInclusive, endInclusive )\r
+//                     {\r
+//                             var range = new CKEDITOR.dom.range();\r
+//                             if ( startNode )\r
+//                                     range.setStartAt( startNode, startInclusive ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_END ) ;\r
+//                             else\r
+//                                     range.setStartAt( startNode.getDocument().getBody(), CKEDITOR.POSITION_AFTER_START ) ;\r
+//\r
+//                             if ( endNode )\r
+//                                     range.setEndAt( endNode, endInclusive ? CKEDITOR.POSITION_AFTER_END : CKEDITOR.POSITION_BEFORE_START ) ;\r
+//                             else\r
+//                                     range.setEndAt( startNode.getDocument().getBody(), CKEDITOR.POSITION_BEFORE_END ) ;\r
+//\r
+//                             return new CKEDITOR.dom.walker( range );\r
+//                     }\r
+//             },\r
+//\r
+               proto :\r
+               {\r
+                       /**\r
+                        * Stop walking. No more nodes are retrieved if this function gets\r
+                        * called.\r
+                        */\r
+                       end : function()\r
+                       {\r
+                               this._.end = 1;\r
+                       },\r
+\r
+                       /**\r
+                        * Retrieves the next node (at right).\r
+                        * @returns {CKEDITOR.dom.node} The next node or null if no more\r
+                        *              nodes are available.\r
+                        */\r
+                       next : function()\r
+                       {\r
+                               return iterate.call( this );\r
+                       },\r
+\r
+                       /**\r
+                        * Retrieves the previous node (at left).\r
+                        * @returns {CKEDITOR.dom.node} The previous node or null if no more\r
+                        *              nodes are available.\r
+                        */\r
+                       previous : function()\r
+                       {\r
+                               return iterate.call( this, true );\r
+                       },\r
+\r
+                       /**\r
+                        * Check all nodes at right, executing the evaluation fuction.\r
+                        * @returns {Boolean} "false" if the evaluator function returned\r
+                        *              "false" for any of the matched nodes. Otherwise "true".\r
+                        */\r
+                       checkForward : function()\r
+                       {\r
+                               return iterate.call( this, false, true ) !== false;\r
+                       },\r
+\r
+                       /**\r
+                        * Check all nodes at left, executing the evaluation fuction.\r
+                        * @returns {Boolean} "false" if the evaluator function returned\r
+                        *              "false" for any of the matched nodes. Otherwise "true".\r
+                        */\r
+                       checkBackward : function()\r
+                       {\r
+                               return iterate.call( this, true, true ) !== false;\r
+                       },\r
+\r
+                       /**\r
+                        * Executes a full walk forward (to the right), until no more nodes\r
+                        * are available, returning the last valid node.\r
+                        * @returns {CKEDITOR.dom.node} The last node at the right or null\r
+                        *              if no valid nodes are available.\r
+                        */\r
+                       lastForward : function()\r
+                       {\r
+                               return iterateToLast.call( this );\r
+                       },\r
+\r
+                       /**\r
+                        * Executes a full walk backwards (to the left), until no more nodes\r
+                        * are available, returning the last valid node.\r
+                        * @returns {CKEDITOR.dom.node} The last node at the left or null\r
+                        *              if no valid nodes are available.\r
+                        */\r
+                       lastBackward : function()\r
+                       {\r
+                               return iterateToLast.call( this, true );\r
+                       },\r
+\r
+                       reset : function()\r
+                       {\r
+                               delete this.current;\r
+                               this._ = {};\r
+                       }\r
+\r
+               }\r
+       });\r
+\r
+       /*\r
+        * Anything whose display computed style is block, list-item, table,\r
+        * table-row-group, table-header-group, table-footer-group, table-row,\r
+        * table-column-group, table-column, table-cell, table-caption, or whose node\r
+        * name is hr, br (when enterMode is br only) is a block boundary.\r
+        */\r
+       var blockBoundaryDisplayMatch =\r
+       {\r
+               block : 1,\r
+               'list-item' : 1,\r
+               table : 1,\r
+               'table-row-group' : 1,\r
+               'table-header-group' : 1,\r
+               'table-footer-group' : 1,\r
+               'table-row' : 1,\r
+               'table-column-group' : 1,\r
+               'table-column' : 1,\r
+               'table-cell' : 1,\r
+               'table-caption' : 1\r
+       },\r
+       blockBoundaryNodeNameMatch = { hr : 1 };\r
+\r
+       CKEDITOR.dom.element.prototype.isBlockBoundary = function( customNodeNames )\r
+       {\r
+               var nodeNameMatches = CKEDITOR.tools.extend( {},\r
+                                                                                                       blockBoundaryNodeNameMatch, customNodeNames || {} );\r
+\r
+               return blockBoundaryDisplayMatch[ this.getComputedStyle( 'display' ) ] ||\r
+                       nodeNameMatches[ this.getName() ];\r
+       };\r
+\r
+       CKEDITOR.dom.walker.blockBoundary = function( customNodeNames )\r
+       {\r
+               return function( node , type )\r
+               {\r
+                       return ! ( node.type == CKEDITOR.NODE_ELEMENT\r
+                                               && node.isBlockBoundary( customNodeNames ) );\r
+               };\r
+       };\r
+\r
+       CKEDITOR.dom.walker.listItemBoundary = function()\r
+       {\r
+                       return this.blockBoundary( { br : 1 } );\r
+       };\r
+       /**\r
+        * Whether the node is a bookmark node's inner text node.\r
+        */\r
+       CKEDITOR.dom.walker.bookmarkContents = function( node )\r
+       {\r
+       },\r
+\r
+       /**\r
+        * Whether the to-be-evaluated node is a bookmark node OR bookmark node\r
+        * inner contents.\r
+        * @param {Boolean} contentOnly Whether only test againt the text content of\r
+        * bookmark node instead of the element itself(default).\r
+        * @param {Boolean} isReject Whether should return 'false' for the bookmark\r
+        * node instead of 'true'(default).\r
+        */\r
+       CKEDITOR.dom.walker.bookmark = function( contentOnly, isReject )\r
+       {\r
+               function isBookmarkNode( node )\r
+               {\r
+                       return ( node && node.getName\r
+                                       && node.getName() == 'span'\r
+                                       && node.hasAttribute('_fck_bookmark') );\r
+               }\r
+\r
+               return function( node )\r
+               {\r
+                       var isBookmark, parent;\r
+                       // Is bookmark inner text node?\r
+                       isBookmark = ( node && !node.getName && ( parent = node.getParent() )\r
+                                               && isBookmarkNode( parent ) );\r
+                       // Is bookmark node?\r
+                       isBookmark = contentOnly ? isBookmark : isBookmark || isBookmarkNode( node );\r
+                       return isReject ^ isBookmark;\r
+               };\r
+       };\r
+\r
+       /**\r
+        * Whether the node contains only white-spaces characters.\r
+        * @param isReject\r
+        */\r
+       CKEDITOR.dom.walker.whitespaces = function( isReject )\r
+       {\r
+               return function( node )\r
+               {\r
+                       var isWhitespace = node && ( node.type == CKEDITOR.NODE_TEXT )\r
+                                                       && !CKEDITOR.tools.trim( node.getText() );\r
+                       return isReject ^ isWhitespace;\r
+               };\r
+       };\r
+})();\r
diff --git a/_source/core/dom/window.js b/_source/core/dom/window.js
new file mode 100644 (file)
index 0000000..44426d0
--- /dev/null
@@ -0,0 +1,96 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.dom.document} class, which\r
+ *             represents a DOM document.\r
+ */\r
+\r
+/**\r
+ * Represents a DOM window.\r
+ * @constructor\r
+ * @augments CKEDITOR.dom.domObject\r
+ * @param {Object} domWindow A native DOM window.\r
+ * @example\r
+ * var document = new CKEDITOR.dom.window( window );\r
+ */\r
+CKEDITOR.dom.window = function( domWindow )\r
+{\r
+       CKEDITOR.dom.domObject.call( this, domWindow );\r
+};\r
+\r
+CKEDITOR.dom.window.prototype = new CKEDITOR.dom.domObject();\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.dom.window.prototype,\r
+       /** @lends CKEDITOR.dom.window.prototype */\r
+       {\r
+               /**\r
+                * Moves the selection focus to this window.\r
+                * @function\r
+                * @example\r
+                * var win = new CKEDITOR.dom.window( window );\r
+                * <b>win.focus()</b>;\r
+                */\r
+               focus : function()\r
+               {\r
+                       // Webkit is sometimes failed to focus iframe, blur it first(#3835).\r
+                       if( CKEDITOR.env.webkit && this.$.parent )\r
+                               this.$.parent.focus();\r
+                       this.$.focus();\r
+               },\r
+\r
+               /**\r
+                * Gets the width and height of this window's viewable area.\r
+                * @function\r
+                * @returns {Object} An object with the "width" and "height"\r
+                *              properties containing the size.\r
+                * @example\r
+                * var win = new CKEDITOR.dom.window( window );\r
+                * var size = <b>win.getViewPaneSize()</b>;\r
+                * alert( size.width );\r
+                * alert( size.height );\r
+                */\r
+               getViewPaneSize : function()\r
+               {\r
+                       var doc = this.$.document,\r
+                               stdMode = doc.compatMode == 'CSS1Compat';\r
+                       return {\r
+                               width : ( stdMode ? doc.documentElement.clientWidth : doc.body.clientWidth ) || 0,\r
+                               height : ( stdMode ? doc.documentElement.clientHeight : doc.body.clientHeight ) || 0\r
+                       };\r
+               },\r
+\r
+               /**\r
+                * Gets the current position of the window's scroll.\r
+                * @function\r
+                * @returns {Object} An object with the "x" and "y" properties\r
+                *              containing the scroll position.\r
+                * @example\r
+                * var win = new CKEDITOR.dom.window( window );\r
+                * var pos = <b>win.getScrollPosition()</b>;\r
+                * alert( pos.x );\r
+                * alert( pos.y );\r
+                */\r
+               getScrollPosition : function()\r
+               {\r
+                       var $ = this.$;\r
+\r
+                       if ( 'pageXOffset' in $ )\r
+                       {\r
+                               return {\r
+                                       x : $.pageXOffset || 0,\r
+                                       y : $.pageYOffset || 0\r
+                               };\r
+                       }\r
+                       else\r
+                       {\r
+                               var doc = $.document;\r
+                               return {\r
+                                       x : doc.documentElement.scrollLeft || doc.body.scrollLeft || 0,\r
+                                       y : doc.documentElement.scrollTop || doc.body.scrollTop || 0\r
+                               };\r
+                       }\r
+               }\r
+       });\r
diff --git a/_source/core/dtd.js b/_source/core/dtd.js
new file mode 100644 (file)
index 0000000..d0d6e9e
--- /dev/null
@@ -0,0 +1,200 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.dtd} object, which holds the DTD\r
+ *             mapping for XHTML 1.0 Transitional. This file was automatically\r
+ *             generated from the file: xhtml1-transitional.dtd.\r
+ */\r
+\r
+/**\r
+ * Holds and object representation of the HTML DTD to be used by the editor in\r
+ * its internal operations.\r
+ *\r
+ * Each element in the DTD is represented by a\r
+ * property in this object. Each property contains the list of elements that\r
+ * can be contained by the element. Text is represented by the "#" property.\r
+ *\r
+ * Several special grouping properties are also available. Their names start\r
+ * with the "$" character.\r
+ * @namespace\r
+ * @example\r
+ * // Check if "div" can be contained in a "p" element.\r
+ * alert( !!CKEDITOR.dtd[ 'p' ][ 'div' ] );  "false"\r
+ * @example\r
+ * // Check if "p" can be contained in a "div" element.\r
+ * alert( !!CKEDITOR.dtd[ 'div' ][ 'p' ] );  "true"\r
+ * @example\r
+ * // Check if "p" is a block element.\r
+ * alert( !!CKEDITOR.dtd.$block[ 'p' ] );  "true"\r
+ */\r
+CKEDITOR.dtd = (function()\r
+{\r
+    var X = CKEDITOR.tools.extend,\r
+\r
+               A = {isindex:1,fieldset:1},\r
+               B = {input:1,button:1,select:1,textarea:1,label:1},\r
+               C = X({a:1},B),\r
+               D = X({iframe:1},C),\r
+               E = {hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1},\r
+               F = {ins:1,del:1,script:1},\r
+               G = X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F),\r
+               H = X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G),\r
+               I = X({p:1},H),\r
+               J = X({iframe:1},H,B),\r
+               K = {img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1},\r
+\r
+               L = X({a:1},J),\r
+               M = {tr:1},\r
+               N = {'#':1},\r
+               O = X({param:1},K),\r
+               P = X({form:1},A,D,E,I),\r
+               Q = {li:1};\r
+\r
+       var block = {address:1,blockquote:1,center:1,dir:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,menu:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1};\r
+\r
+    return /** @lends CKEDITOR.dtd */ {\r
+\r
+               // The "$" items have been added manually.\r
+\r
+               /**\r
+                * List of block elements, like "p" or "div".\r
+                * @type Object\r
+                * @example\r
+                */\r
+               $block : block,\r
+\r
+               $body : X({script:1}, block),\r
+\r
+               $cdata : {script:1,style:1},\r
+\r
+               /**\r
+                * List of empty (self-closing) elements, like "br" or "img".\r
+                * @type Object\r
+                * @example\r
+                */\r
+               $empty : {area:1,base:1,br:1,col:1,hr:1,img:1,input:1,link:1,meta:1,param:1},\r
+\r
+               /**\r
+                * List of list item elements, like "li" or "dd".\r
+                * @type Object\r
+                * @example\r
+                */\r
+               $listItem : {dd:1,dt:1,li:1},\r
+\r
+               /**\r
+                * Elements that accept text nodes, but are not possible to edit into\r
+                * the browser.\r
+                * @type Object\r
+                * @example\r
+                */\r
+               $nonEditable : {applet:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,script:1,textarea:1},\r
+\r
+               /**\r
+                * List of elements that can be ignored if empty, like "b" or "span".\r
+                * @type Object\r
+                * @example\r
+                */\r
+               $removeEmpty : {abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1},\r
+\r
+               /**\r
+                * List of elements that have tabindex set to zero by default.\r
+                * @type Object\r
+                * @example\r
+                */\r
+               $tabIndex : {a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},\r
+\r
+               /**\r
+                * List of elements used inside the "table" element, like "tbody" or "td".\r
+                * @type Object\r
+                * @example\r
+                */\r
+               $tableContent : {caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},\r
+\r
+        col : {},\r
+        tr : {td:1,th:1},\r
+        img : {},\r
+        colgroup : {col:1},\r
+        noscript : P,\r
+        td : P,\r
+        br : {},\r
+        th : P,\r
+        center : P,\r
+        kbd : L,\r
+        button : X(I,E),\r
+        basefont : {},\r
+        h5 : L,\r
+        h4 : L,\r
+        samp : L,\r
+        h6 : L,\r
+        ol : Q,\r
+        h1 : L,\r
+        h3 : L,\r
+        option : N,\r
+        h2 : L,\r
+        form : X(A,D,E,I),\r
+        select : {optgroup:1,option:1},\r
+        font : L,\r
+        ins : P,\r
+        menu : Q,\r
+        abbr : L,\r
+        label : L,\r
+        table : {thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},\r
+        code : L,\r
+        script : N,\r
+        tfoot : M,\r
+        cite : L,\r
+        li : P,\r
+        input : {},\r
+        iframe : P,\r
+        strong : L,\r
+        textarea : N,\r
+        noframes : P,\r
+        big : L,\r
+        small : L,\r
+        span : L,\r
+        hr : {},\r
+        dt : L,\r
+        sub : L,\r
+        optgroup : {option:1},\r
+        param : {},\r
+        bdo : L,\r
+        'var' : L,\r
+        div : P,\r
+        object : O,\r
+        sup : L,\r
+        dd : P,\r
+        strike : L,\r
+        area : {},\r
+        dir : Q,\r
+        map : X({area:1,form:1,p:1},A,F,E),\r
+        applet : O,\r
+        dl : {dt:1,dd:1},\r
+        del : P,\r
+        isindex : {},\r
+        fieldset : X({legend:1},K),\r
+        thead : M,\r
+        ul : Q,\r
+        acronym : L,\r
+        b : L,\r
+        a : J,\r
+        blockquote : P,\r
+        caption : L,\r
+        i : L,\r
+        u : L,\r
+        tbody : M,\r
+        s : L,\r
+        address : X(D,I),\r
+        tt : L,\r
+        legend : L,\r
+        q : L,\r
+        pre : X(G,C),\r
+        p : L,\r
+        em : L,\r
+        dfn : L\r
+    };\r
+})();\r
+\r
+// PACKAGER_RENAME( CKEDITOR.dtd )\r
diff --git a/_source/core/editor.js b/_source/core/editor.js
new file mode 100644 (file)
index 0000000..d9017c0
--- /dev/null
@@ -0,0 +1,650 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.editor} class, which represents an\r
+ *             editor instance.\r
+ */\r
+\r
+(function()\r
+{\r
+       // The counter for automatic instance names.\r
+       var nameCounter = 0;\r
+\r
+       var getNewName = function()\r
+       {\r
+               var name = 'editor' + ( ++nameCounter );\r
+               return ( CKEDITOR.instances && CKEDITOR.instances[ name ] ) ? getNewName() : name;\r
+       };\r
+\r
+       // ##### START: Config Privates\r
+\r
+       // These function loads custom configuration files and cache the\r
+       // CKEDITOR.editorConfig functions defined on them, so there is no need to\r
+       // download them more than once for several instances.\r
+       var loadConfigLoaded = {};\r
+       var loadConfig = function( editor )\r
+       {\r
+               var customConfig = editor.config.customConfig;\r
+\r
+               // Check if there is a custom config to load.\r
+               if ( !customConfig )\r
+                       return false;\r
+\r
+               var loadedConfig = loadConfigLoaded[ customConfig ] || ( loadConfigLoaded[ customConfig ] = {} );\r
+\r
+               // If the custom config has already been downloaded, reuse it.\r
+               if ( loadedConfig.fn )\r
+               {\r
+                       // Call the cached CKEDITOR.editorConfig defined in the custom\r
+                       // config file for the editor instance depending on it.\r
+                       loadedConfig.fn.call( editor, editor.config );\r
+\r
+                       // If there is no other customConfig in the chain, fire the\r
+                       // "configLoaded" event.\r
+                       if ( editor.config.customConfig == customConfig || !loadConfig( editor ) )\r
+                               editor.fireOnce( 'customConfigLoaded' );\r
+               }\r
+               else\r
+               {\r
+                       // Load the custom configuration file.\r
+                       CKEDITOR.scriptLoader.load( customConfig, function()\r
+                               {\r
+                                       // If the CKEDITOR.editorConfig function has been properly\r
+                                       // defined in the custom configuration file, cache it.\r
+                                       if ( CKEDITOR.editorConfig )\r
+                                               loadedConfig.fn = CKEDITOR.editorConfig;\r
+                                       else\r
+                                               loadedConfig.fn = function(){};\r
+\r
+                                       // Call the load config again. This time the custom\r
+                                       // config is already cached and so it will get loaded.\r
+                                       loadConfig( editor );\r
+                               });\r
+               }\r
+\r
+               return true;\r
+       };\r
+\r
+       var initConfig = function( editor, instanceConfig )\r
+       {\r
+               // Setup the lister for the "customConfigLoaded" event.\r
+               editor.on( 'customConfigLoaded', function()\r
+                       {\r
+                               if ( instanceConfig )\r
+                               {\r
+                                       // Register the events that may have been set at the instance\r
+                                       // configuration object.\r
+                                       if ( instanceConfig.on )\r
+                                       {\r
+                                               for ( var eventName in instanceConfig.on )\r
+                                               {\r
+                                                       editor.on( eventName, instanceConfig.on[ eventName ] );\r
+                                               }\r
+                                       }\r
+\r
+                                       // Overwrite the settings from the in-page config.\r
+                                       CKEDITOR.tools.extend( editor.config, instanceConfig, true );\r
+\r
+                                       delete editor.config.on;\r
+                               }\r
+\r
+                               onConfigLoaded( editor );\r
+                       });\r
+\r
+               // The instance config may override the customConfig setting to avoid\r
+               // loading the default ~/config.js file.\r
+               if ( instanceConfig && instanceConfig.customConfig != undefined )\r
+                       editor.config.customConfig = instanceConfig.customConfig;\r
+\r
+               // Load configs from the custom configuration files.\r
+               if ( !loadConfig( editor ) )\r
+                       editor.fireOnce( 'customConfigLoaded' );\r
+       };\r
+\r
+       // ##### END: Config Privates\r
+\r
+       var onConfigLoaded = function( editor )\r
+       {\r
+               // Set config related properties.\r
+\r
+               var skin = editor.config.skin.split( ',' ),\r
+                       skinName = skin[ 0 ],\r
+                       skinPath = CKEDITOR.getUrl( skin[ 1 ] || (\r
+                               'skins/' + skinName + '/' ) );\r
+\r
+               editor.skinName = skinName;\r
+               editor.skinPath = skinPath;\r
+               editor.skinClass = 'cke_skin_' + skinName;\r
+\r
+               // Fire the "configLoaded" event.\r
+               editor.fireOnce( 'configLoaded' );\r
+\r
+               // Load language file.\r
+               loadLang( editor );\r
+       };\r
+\r
+       var loadLang = function( editor )\r
+       {\r
+               CKEDITOR.lang.load( editor.config.language, editor.config.defaultLanguage, function( languageCode, lang )\r
+                       {\r
+                               editor.langCode = languageCode;\r
+\r
+                               // As we'll be adding plugin specific entries that could come\r
+                               // from different language code files, we need a copy of lang,\r
+                               // not a direct reference to it.\r
+                               editor.lang = CKEDITOR.tools.prototypedCopy( lang );\r
+\r
+                               // We're not able to support RTL in Firefox 2 at this time.\r
+                               if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 && editor.lang.dir == 'rtl' )\r
+                                       editor.lang.dir = 'ltr';\r
+\r
+                               loadPlugins( editor );\r
+                       });\r
+       };\r
+\r
+       var loadPlugins = function( editor )\r
+       {\r
+               var config                      = editor.config,\r
+                       plugins                 = config.plugins,\r
+                       extraPlugins    = config.extraPlugins,\r
+                       removePlugins   = config.removePlugins;\r
+\r
+               if ( extraPlugins )\r
+               {\r
+                       // Remove them first to avoid duplications.\r
+                       var removeRegex = new RegExp( '(?:^|,)(?:' + extraPlugins.replace( /\s*,\s*/g, '|' ) + ')(?=,|$)' , 'g' );\r
+                       plugins = plugins.replace( removeRegex, '' );\r
+\r
+                       plugins += ',' + extraPlugins;\r
+               }\r
+\r
+               if ( removePlugins )\r
+               {\r
+                       removeRegex = new RegExp( '(?:^|,)(?:' + removePlugins.replace( /\s*,\s*/g, '|' ) + ')(?=,|$)' , 'g' );\r
+                       plugins = plugins.replace( removeRegex, '' );\r
+               }\r
+\r
+               // Load all plugins defined in the "plugins" setting.\r
+               CKEDITOR.plugins.load( plugins.split( ',' ), function( plugins )\r
+                       {\r
+                               // The list of plugins.\r
+                               var pluginsArray = [];\r
+\r
+                               // The language code to get loaded for each plugin. Null\r
+                               // entries will be appended for plugins with no language files.\r
+                               var languageCodes = [];\r
+\r
+                               // The list of URLs to language files.\r
+                               var languageFiles = [];\r
+\r
+                               // Cache the loaded plugin names.\r
+                               editor.plugins = plugins;\r
+\r
+                               // Loop through all plugins, to build the list of language\r
+                               // files to get loaded.\r
+                               for ( var pluginName in plugins )\r
+                               {\r
+                                       var plugin = plugins[ pluginName ],\r
+                                               pluginLangs = plugin.lang,\r
+                                               pluginPath = CKEDITOR.plugins.getPath( pluginName ),\r
+                                               lang = null;\r
+\r
+                                       // Set the plugin path in the plugin.\r
+                                       plugin.path = pluginPath;\r
+\r
+                                       // If the plugin has "lang".\r
+                                       if ( pluginLangs )\r
+                                       {\r
+                                               // Resolve the plugin language. If the current language\r
+                                               // is not available, get the first one (default one).\r
+                                               lang = ( CKEDITOR.tools.indexOf( pluginLangs, editor.langCode ) >= 0 ? editor.langCode : pluginLangs[ 0 ] );\r
+\r
+                                               if ( !plugin.lang[ lang ] )\r
+                                               {\r
+                                                       // Put the language file URL into the list of files to\r
+                                                       // get downloaded.\r
+                                                       languageFiles.push( CKEDITOR.getUrl( pluginPath + 'lang/' + lang + '.js' ) );\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       CKEDITOR.tools.extend( editor.lang, plugin.lang[ lang ] );\r
+                                                       lang = null;\r
+                                               }\r
+                                       }\r
+\r
+                                       // Save the language code, so we know later which\r
+                                       // language has been resolved to this plugin.\r
+                                       languageCodes.push( lang );\r
+\r
+                                       pluginsArray.push( plugin );\r
+                               }\r
+\r
+                               // Load all plugin specific language files in a row.\r
+                               CKEDITOR.scriptLoader.load( languageFiles, function()\r
+                                       {\r
+                                               // Initialize all plugins that have the "beforeInit" and "init" methods defined.\r
+                                               var methods = [ 'beforeInit', 'init', 'afterInit' ];\r
+                                               for ( var m = 0 ; m < methods.length ; m++ )\r
+                                               {\r
+                                                       for ( var i = 0 ; i < pluginsArray.length ; i++ )\r
+                                                       {\r
+                                                               var plugin = pluginsArray[ i ];\r
+\r
+                                                               // Uses the first loop to update the language entries also.\r
+                                                               if ( m === 0 && languageCodes[ i ] && plugin.lang )\r
+                                                                       CKEDITOR.tools.extend( editor.lang, plugin.lang[ languageCodes[ i ] ] );\r
+\r
+                                                               // Call the plugin method (beforeInit and init).\r
+                                                               if ( plugin[ methods[ m ] ] )\r
+                                                                       plugin[ methods[ m ] ]( editor );\r
+                                                       }\r
+                                               }\r
+\r
+                                               // Load the editor skin.\r
+                                               editor.fire( 'pluginsLoaded' );\r
+                                               loadSkin( editor );\r
+                                       });\r
+                       });\r
+       };\r
+\r
+       var loadSkin = function( editor )\r
+       {\r
+               CKEDITOR.skins.load( editor, 'editor', function()\r
+                       {\r
+                               loadTheme( editor );\r
+                       });\r
+       };\r
+\r
+       var loadTheme = function( editor )\r
+       {\r
+               var theme = editor.config.theme;\r
+               CKEDITOR.themes.load( theme, function()\r
+                       {\r
+                               var editorTheme = editor.theme = CKEDITOR.themes.get( theme );\r
+                               editorTheme.path = CKEDITOR.themes.getPath( theme );\r
+                               editorTheme.build( editor );\r
+\r
+                               if ( editor.config.autoUpdateElement )\r
+                                       attachToForm( editor );\r
+                       });\r
+       };\r
+\r
+       var attachToForm = function( editor )\r
+       {\r
+               var element = editor.element;\r
+\r
+               // If are replacing a textarea, we must\r
+               if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE && element.is( 'textarea' ) )\r
+               {\r
+                       var form = element.$.form && new CKEDITOR.dom.element( element.$.form );\r
+                       if ( form )\r
+                       {\r
+                               function onSubmit()\r
+                               {\r
+                                       editor.updateElement();\r
+                               }\r
+                               form.on( 'submit',onSubmit );\r
+\r
+                               // Setup the submit function because it doesn't fire the\r
+                               // "submit" event.\r
+                               if ( !form.$.submit.nodeName )\r
+                               {\r
+                                       form.$.submit = CKEDITOR.tools.override( form.$.submit, function( originalSubmit )\r
+                                               {\r
+                                                       return function()\r
+                                                               {\r
+                                                                       editor.updateElement();\r
+\r
+                                                                       // For IE, the DOM submit function is not a\r
+                                                                       // function, so we need thid check.\r
+                                                                       if ( originalSubmit.apply )\r
+                                                                               originalSubmit.apply( this, arguments );\r
+                                                                       else\r
+                                                                               originalSubmit();\r
+                                                               };\r
+                                               });\r
+                               }\r
+\r
+                               // Remove 'submit' events registered on form element before destroying.(#3988)\r
+                               editor.on( 'destroy', function()\r
+                               {\r
+                                       form.removeListener( 'submit', onSubmit );\r
+                               } );\r
+                       }\r
+               }\r
+       };\r
+\r
+       function updateCommandsMode()\r
+       {\r
+               var command,\r
+                       commands = this._.commands,\r
+                       mode = this.mode;\r
+\r
+               for ( var name in commands )\r
+               {\r
+                       command = commands[ name ];\r
+                       command[ command.modes[ mode ] ? 'enable' : 'disable' ]();\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Initializes the editor instance. This function is called by the editor\r
+        * contructor (editor_basic.js).\r
+        * @private\r
+        */\r
+       CKEDITOR.editor.prototype._init = function()\r
+               {\r
+                       // Get the properties that have been saved in the editor_base\r
+                       // implementation.\r
+                       var element                     = CKEDITOR.dom.element.get( this._.element ),\r
+                               instanceConfig  = this._.instanceConfig;\r
+                       delete this._.element;\r
+                       delete this._.instanceConfig;\r
+\r
+                       this._.commands = {};\r
+                       this._.styles = [];\r
+\r
+                       /**\r
+                        * The DOM element that has been replaced by this editor instance. This\r
+                        * element holds the editor data on load and post.\r
+                        * @name CKEDITOR.editor.prototype.element\r
+                        * @type CKEDITOR.dom.element\r
+                        * @example\r
+                        * var editor = CKEDITOR.instances.editor1;\r
+                        * alert( <b>editor.element</b>.getName() );  "textarea"\r
+                        */\r
+                       this.element = element;\r
+\r
+                       /**\r
+                        * The editor instance name. It hay be the replaced element id, name or\r
+                        * a default name using a progressive counter (editor1, editor2, ...).\r
+                        * @name CKEDITOR.editor.prototype.name\r
+                        * @type String\r
+                        * @example\r
+                        * var editor = CKEDITOR.instances.editor1;\r
+                        * alert( <b>editor.name</b> );  "editor1"\r
+                        */\r
+                       this.name = ( element && ( this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE )\r
+                                                       && ( element.getId() || element.getNameAtt() ) )\r
+                                               || getNewName();\r
+\r
+                       if ( this.name in CKEDITOR.instances )\r
+                               throw '[CKEDITOR.editor] The instance "' + this.name + '" already exists.';\r
+\r
+                       /**\r
+                        * The configurations for this editor instance. It inherits all\r
+                        * settings defined in (@link CKEDITOR.config}, combined with settings\r
+                        * loaded from custom configuration files and those defined inline in\r
+                        * the page when creating the editor.\r
+                        * @name CKEDITOR.editor.prototype.config\r
+                        * @type Object\r
+                        * @example\r
+                        * var editor = CKEDITOR.instances.editor1;\r
+                        * alert( <b>editor.config.theme</b> );  "default" e.g.\r
+                        */\r
+                       this.config = CKEDITOR.tools.prototypedCopy( CKEDITOR.config );\r
+\r
+                       /**\r
+                        * Namespace containing UI features related to this editor instance.\r
+                        * @name CKEDITOR.editor.prototype.ui\r
+                        * @type CKEDITOR.ui\r
+                        * @example\r
+                        */\r
+                       this.ui = new CKEDITOR.ui( this );\r
+\r
+                       /**\r
+                        * Controls the focus state of this editor instance. This property\r
+                        * is rarely used for normal API operations. It is mainly\r
+                        * destinated to developer adding UI elements to the editor interface.\r
+                        * @name CKEDITOR.editor.prototype.focusManager\r
+                        * @type CKEDITOR.focusManager\r
+                        * @example\r
+                        */\r
+                       this.focusManager = new CKEDITOR.focusManager( this );\r
+\r
+                       CKEDITOR.fire( 'instanceCreated', null, this );\r
+\r
+                       this.on( 'mode', updateCommandsMode, null, null, 1 );\r
+\r
+                       initConfig( this, instanceConfig );\r
+               };\r
+})();\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.editor.prototype,\r
+       /** @lends CKEDITOR.editor.prototype */\r
+       {\r
+               /**\r
+                * Adds a command definition to the editor instance. Commands added with\r
+                * this function can be later executed with {@link #execCommand}.\r
+                * @param {String} commandName The indentifier name of the command.\r
+                * @param {CKEDITOR.commandDefinition} commandDefinition The command definition.\r
+                * @example\r
+                * editorInstance.addCommand( 'sample',\r
+                * {\r
+                *     exec : function( editor )\r
+                *     {\r
+                *         alert( 'Executing a command for the editor name "' + editor.name + '"!' );\r
+                *     }\r
+                * });\r
+                */\r
+               addCommand : function( commandName, commandDefinition )\r
+               {\r
+                       return this._.commands[ commandName ] = new CKEDITOR.command( this, commandDefinition );\r
+               },\r
+\r
+               addCss : function( css )\r
+               {\r
+                       this._.styles.push( css );\r
+               },\r
+\r
+               /**\r
+                * Destroys the editor instance, releasing all resources used by it.\r
+                * If the editor replaced an element, the element will be recovered.\r
+                * @param {Boolean} [noUpdate] If the instance is replacing a DOM\r
+                *              element, this parameter indicates whether or not to update the\r
+                *              element with the instance contents.\r
+                * @example\r
+                * alert( CKEDITOR.instances.editor1 );  e.g "object"\r
+                * <b>CKEDITOR.instances.editor1.destroy()</b>;\r
+                * alert( CKEDITOR.instances.editor1 );  "undefined"\r
+                */\r
+               destroy : function( noUpdate )\r
+               {\r
+                       if ( !noUpdate )\r
+                               this.updateElement();\r
+\r
+                       this.theme.destroy( this );\r
+                       this.fire( 'destroy' );\r
+                       CKEDITOR.remove( this );\r
+               },\r
+\r
+               /**\r
+                * Executes a command.\r
+                * @param {String} commandName The indentifier name of the command.\r
+                * @param {Object} [data] Data to be passed to the command\r
+                * @returns {Boolean} "true" if the command has been successfuly\r
+                *              executed, otherwise "false".\r
+                * @example\r
+                * editorInstance.execCommand( 'Bold' );\r
+                */\r
+               execCommand : function( commandName, data )\r
+               {\r
+                       var command = this.getCommand( commandName );\r
+\r
+                       var eventData =\r
+                       {\r
+                               name: commandName,\r
+                               commandData: data,\r
+                               command: command\r
+                       };\r
+\r
+                       if ( command && command.state != CKEDITOR.TRISTATE_DISABLED )\r
+                       {\r
+                               if ( this.fire( 'beforeCommandExec', eventData ) !== true )\r
+                               {\r
+                                       eventData.returnValue = command.exec( eventData.commandData );\r
+\r
+                                       // Fire the 'afterCommandExec' immediately if command is synchronous.\r
+                                       if ( !command.async && this.fire( 'afterCommandExec', eventData ) !== true )\r
+                                               return eventData.returnValue;\r
+                               }\r
+                       }\r
+\r
+                       // throw 'Unknown command name "' + commandName + '"';\r
+                       return false;\r
+               },\r
+\r
+               /**\r
+                * Gets one of the registered commands. Note that, after registering a\r
+                * command definition with addCommand, it is transformed internally\r
+                * into an instance of {@link CKEDITOR.command}, which will be then\r
+                * returned by this function.\r
+                * @param {String} commandName The name of the command to be returned.\r
+                * This is the same used to register the command with addCommand.\r
+                * @returns {CKEDITOR.command} The command object identified by the\r
+                * provided name.\r
+                */\r
+               getCommand : function( commandName )\r
+               {\r
+                       return this._.commands[ commandName ];\r
+               },\r
+\r
+               /**\r
+                * Gets the editor data. The data will be in raw format. It is the same\r
+                * data that is posted by the editor.\r
+                * @type String\r
+                * @returns (String) The editor data.\r
+                * @example\r
+                * if ( CKEDITOR.instances.editor1.<b>getData()</b> == '' )\r
+                *     alert( 'There is no data available' );\r
+                */\r
+               getData : function()\r
+               {\r
+                       this.fire( 'beforeGetData' );\r
+\r
+                       var eventData = this._.data;\r
+\r
+                       if ( typeof eventData != 'string' )\r
+                       {\r
+                               var element = this.element;\r
+                               if ( element && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE )\r
+                                       eventData = element.is( 'textarea' ) ? element.getValue() : element.getHtml();\r
+                               else\r
+                                       eventData = '';\r
+                       }\r
+\r
+                       eventData = { dataValue : eventData };\r
+\r
+                       // Fire "getData" so data manipulation may happen.\r
+                       this.fire( 'getData', eventData );\r
+\r
+                       return eventData.dataValue;\r
+               },\r
+\r
+               getSnapshot : function()\r
+               {\r
+                       var data = this.fire( 'getSnapshot' );\r
+\r
+                       if ( typeof data != 'string' )\r
+                       {\r
+                               var element = this.element;\r
+                               if ( element && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE )\r
+                                       data = element.is( 'textarea' ) ? element.getValue() : element.getHtml();\r
+                       }\r
+\r
+                       return data;\r
+               },\r
+\r
+               loadSnapshot : function( snapshot )\r
+               {\r
+                       this.fire( 'loadSnapshot', snapshot );\r
+               },\r
+\r
+               /**\r
+                * Sets the editor data. The data must be provided in raw format.\r
+                * @param {String} data HTML code to replace the curent content in the editor.\r
+                * @example\r
+                * CKEDITOR.instances.editor1.<b>setData( '&lt;p&gt;This is the editor data.&lt;/p&gt;' )</b>;\r
+                */\r
+               setData : function( data )\r
+               {\r
+                       // Fire "setData" so data manipulation may happen.\r
+                       var eventData = { dataValue : data };\r
+                       this.fire( 'setData', eventData );\r
+\r
+                       this._.data = eventData.dataValue;\r
+\r
+                       this.fire( 'afterSetData', eventData );\r
+               },\r
+\r
+               /**\r
+                * Inserts HTML into the currently selected position in the editor.\r
+                * @param {String} data HTML code to be inserted into the editor.\r
+                * @example\r
+                * CKEDITOR.instances.editor1.<b>insertHtml( '&lt;p&gt;This is a new paragraph.&lt;/p&gt;' )</b>;\r
+                */\r
+               insertHtml : function( data )\r
+               {\r
+                       this.fire( 'insertHtml', data );\r
+               },\r
+\r
+               /**\r
+                * Inserts an element into the currently selected position in the\r
+                * editor.\r
+                * @param {CKEDITOR.dom.element} element The element to be inserted\r
+                *              into the editor.\r
+                * @example\r
+                * var element = CKEDITOR.dom.element.createFromHtml( '&lt;img src="hello.png" border="0" title="Hello" /&gt;' );\r
+                * CKEDITOR.instances.editor1.<b>insertElement( element )</b>;\r
+                */\r
+               insertElement : function( element )\r
+               {\r
+                       this.fire( 'insertElement', element );\r
+               },\r
+\r
+               checkDirty : function()\r
+               {\r
+                       return ( this.mayBeDirty && this._.previousValue !== this.getSnapshot() );\r
+               },\r
+\r
+               resetDirty : function()\r
+               {\r
+                       if ( this.mayBeDirty )\r
+                               this._.previousValue = this.getSnapshot();\r
+               },\r
+\r
+               /**\r
+                * Updates the &lt;textarea&gt; element that has been replaced by the editor with\r
+                * the current data available in the editor.\r
+                * @example\r
+                * CKEDITOR.instances.editor1.updateElement();\r
+                * alert( document.getElementById( 'editor1' ).value );  // The current editor data.\r
+                */\r
+               updateElement : function()\r
+               {\r
+                       var element = this.element;\r
+                       if ( element && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE )\r
+                       {\r
+                               if ( element.is( 'textarea' ) )\r
+                                       element.setValue( this.getData() );\r
+                               else\r
+                                       element.setHtml( this.getData() );\r
+                       }\r
+               }\r
+       });\r
+\r
+CKEDITOR.on( 'loaded', function()\r
+       {\r
+               // Run the full initialization for pending editors.\r
+               var pending = CKEDITOR.editor._pending;\r
+               if ( pending )\r
+               {\r
+                       delete CKEDITOR.editor._pending;\r
+\r
+                       for ( var i = 0 ; i < pending.length ; i++ )\r
+                               pending[ i ]._init();\r
+               }\r
+       });\r
diff --git a/_source/core/editor_basic.js b/_source/core/editor_basic.js
new file mode 100644 (file)
index 0000000..cb0963e
--- /dev/null
@@ -0,0 +1,178 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+if ( !CKEDITOR.editor )\r
+{\r
+       /**\r
+        * No element is linked to the editor instance.\r
+        * @constant\r
+        * @example\r
+        */\r
+       CKEDITOR.ELEMENT_MODE_NONE = 0;\r
+\r
+       /**\r
+        * The element is to be replaced by the editor instance.\r
+        * @constant\r
+        * @example\r
+        */\r
+       CKEDITOR.ELEMENT_MODE_REPLACE = 1;\r
+\r
+       /**\r
+        * The editor is to be created inside the element.\r
+        * @constant\r
+        * @example\r
+        */\r
+       CKEDITOR.ELEMENT_MODE_APPENDTO = 2;\r
+\r
+       /**\r
+        * Represents an editor instance. This constructor should be rarely used,\r
+        * being the {@link CKEDITOR} methods preferible.\r
+        * @constructor\r
+        * @param {Object} instanceConfig Configuration values for this specific\r
+        *              instance.\r
+        * @param {CKEDITOR.dom.element} [element] The element linked to this\r
+        *              instance.\r
+        * @param {Number} [mode] The mode in which the element is linked to this\r
+        *              instance.\r
+        * @augments CKEDITOR.event\r
+        * @example\r
+        */\r
+       CKEDITOR.editor = function( instanceConfig, element, mode )\r
+       {\r
+               this._ =\r
+               {\r
+                       // Save the config to be processed later by the full core code.\r
+                       instanceConfig : instanceConfig,\r
+                       element : element\r
+               };\r
+\r
+               /**\r
+                * The mode in which the {@link #element} is linked to this editor\r
+                * instance. It can be any of the following values:\r
+                * <ul>\r
+                * <li><b>CKEDITOR.ELEMENT_MODE_NONE</b>: No element is linked to the\r
+                *              editor instance.</li>\r
+                * <li><b>CKEDITOR.ELEMENT_MODE_REPLACE</b>: The element is to be\r
+                *              replaced by the editor instance.</li>\r
+                * <li><b>CKEDITOR.ELEMENT_MODE_APPENDTO</b>: The editor is to be\r
+                *              created inside the element.</li>\r
+                * </ul>\r
+                * @name CKEDITOR.editor.prototype.elementMode\r
+                * @type Number\r
+                * @example\r
+                * var editor = CKEDITOR.replace( 'editor1' );\r
+                * alert( <b>editor.elementMode</b> );  "1"\r
+                */\r
+               this.elementMode = mode || CKEDITOR.ELEMENT_MODE_NONE;\r
+\r
+               // Call the CKEDITOR.event constructor to initialize this instance.\r
+               CKEDITOR.event.call( this );\r
+\r
+               this._init();\r
+       };\r
+\r
+       /**\r
+        * Replaces a &lt;textarea&gt; or a DOM element (DIV) with a CKEditor\r
+        * instance. For textareas, the initial value in the editor will be the\r
+        * textarea value. For DOM elements, their innerHTML will be used\r
+        * instead. We recommend using TEXTAREA and DIV elements only. Do not use\r
+        * this function directly. Use {@link CKEDITOR.replace} instead.\r
+        * @param {Object|String} elementOrIdOrName The DOM element (textarea), its\r
+        *              ID or name.\r
+        * @param {Object} [config] The specific configurations to apply to this\r
+        *              editor instance. Configurations set here will override global CKEditor\r
+        *              settings.\r
+        * @returns {CKEDITOR.editor} The editor instance created.\r
+        * @example\r
+        */\r
+       CKEDITOR.editor.replace = function( elementOrIdOrName, config )\r
+       {\r
+               var element = elementOrIdOrName;\r
+\r
+               if ( typeof element != 'object' )\r
+               {\r
+                       // Look for the element by id. We accept any kind of element here.\r
+                       element = document.getElementById( elementOrIdOrName );\r
+\r
+                       // If not found, look for elements by name. In this case we accept only\r
+                       // textareas.\r
+                       if ( !element )\r
+                       {\r
+                               var i = 0,\r
+                                       textareasByName = document.getElementsByName( elementOrIdOrName );\r
+\r
+                               while ( ( element = textareasByName[ i++ ] ) && element.tagName.toLowerCase() != 'textarea' )\r
+                               { /*jsl:pass*/ }\r
+                       }\r
+\r
+                       if ( !element )\r
+                               throw '[CKEDITOR.editor.replace] The element with id or name "' + elementOrIdOrName + '" was not found.';\r
+               }\r
+\r
+               // Do not replace the textarea right now, just hide it. The effective\r
+               // replacement will be done by the _init function.\r
+               element.style.visibility = 'hidden';\r
+\r
+               // Create the editor instance.\r
+               return new CKEDITOR.editor( config, element, CKEDITOR.ELEMENT_MODE_REPLACE );\r
+       };\r
+\r
+       /**\r
+        * Creates a new editor instance inside a specific DOM element. Do not use\r
+        * this function directly. Use {@link CKEDITOR.appendTo} instead.\r
+        * @param {Object|String} elementOrId The DOM element or its ID.\r
+        * @param {Object} [config] The specific configurations to apply to this\r
+        *              editor instance. Configurations set here will override global CKEditor\r
+        *              settings.\r
+        * @returns {CKEDITOR.editor} The editor instance created.\r
+        * @example\r
+        */\r
+       CKEDITOR.editor.appendTo = function( elementOrId, config )\r
+       {\r
+               if ( typeof elementOrId != 'object' )\r
+               {\r
+                       elementOrId = document.getElementById( elementOrId );\r
+\r
+                       if ( !elementOrId )\r
+                               throw '[CKEDITOR.editor.appendTo] The element with id "' + elementOrId + '" was not found.';\r
+               }\r
+\r
+               // Create the editor instance.\r
+               return new CKEDITOR.editor( config, elementOrId, CKEDITOR.ELEMENT_MODE_APPENDTO );\r
+       };\r
+\r
+       CKEDITOR.editor.prototype =\r
+       {\r
+               /**\r
+                * Initializes the editor instance. This function will be overriden by the\r
+                * full CKEDITOR.editor implementation (editor.js).\r
+                * @private\r
+                */\r
+               _init : function()\r
+               {\r
+                       var pending = CKEDITOR.editor._pending || ( CKEDITOR.editor._pending = [] );\r
+                       pending.push( this );\r
+               },\r
+\r
+               // Both fire and fireOnce will always pass this editor instance as the\r
+               // "editor" param in CKEDITOR.event.fire. So, we override it to do that\r
+               // automaticaly.\r
+\r
+               /** @ignore */\r
+               fire : function( eventName, data )\r
+               {\r
+                       return CKEDITOR.event.prototype.fire.call( this, eventName, data, this );\r
+               },\r
+\r
+               /** @ignore */\r
+               fireOnce : function( eventName, data )\r
+               {\r
+                       return CKEDITOR.event.prototype.fireOnce.call( this, eventName, data, this );\r
+               }\r
+       };\r
+\r
+       // "Inherit" (copy actually) from CKEDITOR.event.\r
+       CKEDITOR.event.implementOn( CKEDITOR.editor.prototype, true );\r
+}\r
diff --git a/_source/core/env.js b/_source/core/env.js
new file mode 100644 (file)
index 0000000..ec4dc7b
--- /dev/null
@@ -0,0 +1,219 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.env} object, which constains\r
+ *             environment and browser information.\r
+ */\r
+\r
+if ( !CKEDITOR.env )\r
+{\r
+       /**\r
+        * Environment and browser information.\r
+        * @namespace\r
+        * @example\r
+        */\r
+       CKEDITOR.env = (function()\r
+       {\r
+               var agent = navigator.userAgent.toLowerCase();\r
+               var opera = window.opera;\r
+\r
+               var env =\r
+               /** @lends CKEDITOR.env */\r
+               {\r
+                       /**\r
+                        * Indicates that CKEditor is running on Internet Explorer.\r
+                        * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.ie )\r
+                        *     alert( "I'm on IE!" );\r
+                        */\r
+                       ie              : /*@cc_on!@*/false,\r
+\r
+                       /**\r
+                        * Indicates that CKEditor is running on Opera.\r
+                        * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.opera )\r
+                        *     alert( "I'm on Opera!" );\r
+                        */\r
+                       opera   : ( !!opera && opera.version ),\r
+\r
+                       /**\r
+                        * Indicates that CKEditor is running on a WebKit based browser, like\r
+                        * Safari.\r
+                        * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.webkit )\r
+                        *     alert( "I'm on WebKit!" );\r
+                        */\r
+                       webkit  : ( agent.indexOf( ' applewebkit/' ) > -1 ),\r
+\r
+                       /**\r
+                        * Indicates that CKEditor is running on Adobe AIR.\r
+                        * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.air )\r
+                        *     alert( "I'm on AIR!" );\r
+                        */\r
+                       air             : ( agent.indexOf( ' adobeair/' ) > -1 ),\r
+\r
+                       /**\r
+                        * Indicates that CKEditor is running on Macintosh.\r
+                        * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.mac )\r
+                        *     alert( "I love apples!" );\r
+                        */\r
+                       mac     : ( agent.indexOf( 'macintosh' ) > -1 ),\r
+\r
+                       quirks : ( document.compatMode == 'BackCompat' ),\r
+\r
+                       isCustomDomain : function()\r
+                       {\r
+                               return this.ie && document.domain != window.location.hostname;\r
+                       }\r
+               };\r
+\r
+               /**\r
+                * Indicates that CKEditor is running on a Gecko based browser, like\r
+                * Firefox.\r
+                * @name CKEDITOR.env.gecko\r
+                * @type Boolean\r
+                * @example\r
+                * if ( CKEDITOR.env.gecko )\r
+                *     alert( "I'm riding a gecko!" );\r
+                */\r
+               env.gecko = ( navigator.product == 'Gecko' && !env.webkit && !env.opera );\r
+\r
+               var version = 0;\r
+\r
+               // Internet Explorer 6.0+\r
+               if ( env.ie )\r
+               {\r
+                       version = parseFloat( agent.match( /msie (\d+)/ )[1] );\r
+\r
+                       /**\r
+                        *  Indicate IE8 browser.\r
+                        */\r
+                       env.ie8 = !!document.documentMode;\r
+\r
+                       /**\r
+                        * Indicte IE8 document mode.\r
+                        */\r
+                       env.ie8Compat = document.documentMode == 8;\r
+\r
+                       /**\r
+                        * Indicates that CKEditor is running on an IE7-like environment, which\r
+                        * includes IE7 itself and IE8's IE7 document mode.\r
+                        * @type Boolean\r
+                        */\r
+                       env.ie7Compat = ( ( version == 7 && !document.documentMode )\r
+                                       || document.documentMode == 7 );\r
+\r
+                       /**\r
+                        * Indicates that CKEditor is running on an IE6-like environment, which\r
+                        * includes IE6 itself and IE7 and IE8 quirks mode.\r
+                        * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.ie6Compat )\r
+                        *     alert( "I'm on IE6 or quirks mode!" );\r
+                        */\r
+                       env.ie6Compat = ( version < 7 || env.quirks );\r
+\r
+               }\r
+\r
+               // Gecko.\r
+               if ( env.gecko )\r
+               {\r
+                       var geckoRelease = agent.match( /rv:([\d\.]+)/ );\r
+                       if ( geckoRelease )\r
+                       {\r
+                               geckoRelease = geckoRelease[1].split( '.' );\r
+                               version = geckoRelease[0] * 10000 + ( geckoRelease[1] || 0 ) * 100 + ( geckoRelease[2] || 0 ) * 1;\r
+                       }\r
+               }\r
+\r
+               // Opera 9.50+\r
+               if ( env.opera )\r
+                       version = parseFloat( opera.version() );\r
+\r
+               // Adobe AIR 1.0+\r
+               // Checked before Safari because AIR have the WebKit rich text editor\r
+               // features from Safari 3.0.4, but the version reported is 420.\r
+               if ( env.air )\r
+                       version = parseFloat( agent.match( / adobeair\/(\d+)/ )[1] );\r
+\r
+               // WebKit 522+ (Safari 3+)\r
+               if ( env.webkit )\r
+                       version = parseFloat( agent.match( / applewebkit\/(\d+)/ )[1] );\r
+\r
+               /**\r
+                * Contains the browser version.\r
+                *\r
+                * For gecko based browsers (like Firefox) it contains the revision\r
+                * number with first three parts concatenated with a padding zero\r
+                * (e.g. for revision 1.9.0.2 we have 10900).\r
+                *\r
+                * For webkit based browser (like Safari and Chrome) it contains the\r
+                * WebKit build version (e.g. 522).\r
+                * @name CKEDITOR.env.version\r
+                * @type Boolean\r
+                * @example\r
+                * if ( CKEDITOR.env.ie && <b>CKEDITOR.env.version</b> <= 6 )\r
+                *     alert( "Ouch!" );\r
+                */\r
+               env.version = version;\r
+\r
+               /**\r
+                * Indicates that CKEditor is running on a compatible browser.\r
+                * @name CKEDITOR.env.isCompatible\r
+                * @type Boolean\r
+                * @example\r
+                * if ( CKEDITOR.env.isCompatible )\r
+                *     alert( "Your browser is pretty cool!" );\r
+                */\r
+               env.isCompatible =\r
+                       ( env.ie && version >= 6 ) ||\r
+                       ( env.gecko && version >= 10801 ) ||\r
+                       ( env.opera && version >= 9.5 ) ||\r
+                       ( env.air && version >= 1 ) ||\r
+                       ( env.webkit && version >= 522 ) ||\r
+                       false;\r
+\r
+               // The CSS class to be appended on the main UI containers, making it\r
+               // easy to apply browser specific styles to it.\r
+               env.cssClass =\r
+                       'cke_browser_' + (\r
+                               env.ie ? 'ie' :\r
+                               env.gecko ? 'gecko' :\r
+                               env.opera ? 'opera' :\r
+                               env.air ? 'air' :\r
+                               env.webkit ? 'webkit' :\r
+                               'unknown' );\r
+\r
+               if ( env.quirks )\r
+                       env.cssClass += ' cke_browser_quirks';\r
+\r
+               if ( env.ie )\r
+               {\r
+                       env.cssClass += ' cke_browser_ie' + (\r
+                               env.version < 7 ? '6' :\r
+                               env.version >= 8 ? '8' :\r
+                               '7' );\r
+\r
+                       if ( env.quirks )\r
+                               env.cssClass += ' cke_browser_iequirks';\r
+               }\r
+\r
+               if ( env.gecko && version < 10900 )\r
+                       env.cssClass += ' cke_browser_gecko18';\r
+\r
+               return env;\r
+       })();\r
+}\r
+\r
+// PACKAGER_RENAME( CKEDITOR.env )\r
+// PACKAGER_RENAME( CKEDITOR.env.ie )\r
diff --git a/_source/core/event.js b/_source/core/event.js
new file mode 100644 (file)
index 0000000..8990e9a
--- /dev/null
@@ -0,0 +1,335 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.event} class, which serves as the\r
+ *             base for classes and objects that require event handling features.\r
+ */\r
+\r
+if ( !CKEDITOR.event )\r
+{\r
+       /**\r
+        * This is a base class for classes and objects that require event handling\r
+        * features.\r
+        * @constructor\r
+        * @example\r
+        */\r
+       CKEDITOR.event = function()\r
+       {};\r
+\r
+       /**\r
+        * Implements the {@link CKEDITOR.event} features in an object.\r
+        * @param {Object} targetObject The object in which implement the features.\r
+        * @example\r
+        * var myObject = { message : 'Example' };\r
+        * <b>CKEDITOR.event.implementOn( myObject }</b>;\r
+        * myObject.on( 'testEvent', function()\r
+        *     {\r
+        *         alert( this.message );  // "Example"\r
+        *     });\r
+        * myObject.fire( 'testEvent' );\r
+        */\r
+       CKEDITOR.event.implementOn = function( targetObject, isTargetPrototype )\r
+       {\r
+               var eventProto = CKEDITOR.event.prototype;\r
+\r
+               for ( var prop in eventProto )\r
+               {\r
+                       if ( targetObject[ prop ] == undefined )\r
+                               targetObject[ prop ] = eventProto[ prop ];\r
+               }\r
+       };\r
+\r
+       CKEDITOR.event.prototype = (function()\r
+       {\r
+               // Returns the private events object for a given object.\r
+               var getPrivate = function( obj )\r
+               {\r
+                       var _ = ( obj.getPrivate && obj.getPrivate() ) || obj._ || ( obj._ = {} );\r
+                       return _.events || ( _.events = {} );\r
+               };\r
+\r
+               var eventEntry = function( eventName )\r
+               {\r
+                       this.name = eventName;\r
+                       this.listeners = [];\r
+               };\r
+\r
+               eventEntry.prototype =\r
+               {\r
+                       // Get the listener index for a specified function.\r
+                       // Returns -1 if not found.\r
+                       getListenerIndex : function( listenerFunction )\r
+                       {\r
+                               for ( var i = 0, listeners = this.listeners ; i < listeners.length ; i++ )\r
+                               {\r
+                                       if ( listeners[i].fn == listenerFunction )\r
+                                               return i;\r
+                               }\r
+                               return -1;\r
+                       }\r
+               };\r
+\r
+               return /** @lends CKEDITOR.event.prototype */ {\r
+                       /**\r
+                        * Registers a listener to a specific event in the current object.\r
+                        * @param {String} eventName The event name to which listen.\r
+                        * @param {Function} listenerFunction The function listening to the\r
+                        *              event.\r
+                        * @param {Object} [scopeObj] The object used to scope the listener\r
+                        *              call (the this object. If omitted, the current object is used.\r
+                        * @param {Object} [listenerData] Data to be sent as the\r
+                        *              {@link CKEDITOR.eventInfo#listenerData} when calling the\r
+                        *              listener.\r
+                        * @param {Number} [priority] The listener priority. Lower priority\r
+                        *              listeners are called first. Listeners with the same priority\r
+                        *              value are called in registration order. Defaults to 10.\r
+                        * @example\r
+                        * someObject.on( 'someEvent', function()\r
+                        *     {\r
+                        *         alert( this == someObject );  // "true"\r
+                        *     });\r
+                        * @example\r
+                        * someObject.on( 'someEvent', function()\r
+                        *     {\r
+                        *         alert( this == anotherObject );  // "true"\r
+                        *     }\r
+                        *     , anotherObject );\r
+                        * @example\r
+                        * someObject.on( 'someEvent', function( event )\r
+                        *     {\r
+                        *         alert( event.listenerData );  // "Example"\r
+                        *     }\r
+                        *     , null, 'Example' );\r
+                        * @example\r
+                        * someObject.on( 'someEvent', function() { ... } );                   // 2nd called\r
+                        * someObject.on( 'someEvent', function() { ... }, null, null, 100 );  // 3rd called\r
+                        * someObject.on( 'someEvent', function() { ... }, null, null, 1 );    // 1st called\r
+                        */\r
+                       on : function( eventName, listenerFunction, scopeObj, listenerData, priority )\r
+                       {\r
+                               // Get the event entry (create it if needed).\r
+                               var events = getPrivate( this ),\r
+                                       event = events[ eventName ] || ( events[ eventName ] = new eventEntry( eventName ) );\r
+\r
+                               if ( event.getListenerIndex( listenerFunction ) < 0 )\r
+                               {\r
+                                       // Get the listeners.\r
+                                       var listeners = event.listeners;\r
+\r
+                                       // Fill the scope.\r
+                                       if ( !scopeObj )\r
+                                               scopeObj = this;\r
+\r
+                                       // Default the priority, if needed.\r
+                                       if ( isNaN( priority ) )\r
+                                               priority = 10;\r
+\r
+                                       var me = this;\r
+\r
+                                       // Create the function to be fired for this listener.\r
+                                       var listenerFirer = function( editor, publisherData, stopFn, cancelFn )\r
+                                       {\r
+                                               var ev =\r
+                                               {\r
+                                                       name : eventName,\r
+                                                       sender : this,\r
+                                                       editor : editor,\r
+                                                       data : publisherData,\r
+                                                       listenerData : listenerData,\r
+                                                       stop : stopFn,\r
+                                                       cancel : cancelFn,\r
+                                                       removeListener : function()\r
+                                                       {\r
+                                                               me.removeListener( eventName, listenerFunction );\r
+                                                       }\r
+                                               };\r
+\r
+                                               listenerFunction.call( scopeObj, ev );\r
+\r
+                                               return ev.data;\r
+                                       };\r
+                                       listenerFirer.fn = listenerFunction;\r
+                                       listenerFirer.priority = priority;\r
+\r
+                                       // Search for the right position for this new listener, based on its\r
+                                       // priority.\r
+                                       for ( var i = listeners.length - 1 ; i >= 0 ; i-- )\r
+                                       {\r
+                                               // Find the item which should be before the new one.\r
+                                               if ( listeners[ i ].priority <= priority )\r
+                                               {\r
+                                                       // Insert the listener in the array.\r
+                                                       listeners.splice( i + 1, 0, listenerFirer );\r
+                                                       return;\r
+                                               }\r
+                                       }\r
+\r
+                                       // If no position has been found (or zero length), put it in\r
+                                       // the front of list.\r
+                                       listeners.unshift( listenerFirer );\r
+                               }\r
+                       },\r
+\r
+                       /**\r
+                        * Fires an specific event in the object. All registered listeners are\r
+                        * called at this point.\r
+                        * @function\r
+                        * @param {String} eventName The event name to fire.\r
+                        * @param {Object} [data] Data to be sent as the\r
+                        *              {@link CKEDITOR.eventInfo#data} when calling the\r
+                        *              listeners.\r
+                        * @param {CKEDITOR.editor} [editor] The editor instance to send as the\r
+                        *              {@link CKEDITOR.eventInfo#editor} when calling the\r
+                        *              listener.\r
+                        * @returns {Boolean|Object} A booloan indicating that the event is to be\r
+                        *              canceled, or data returned by one of the listeners.\r
+                        * @example\r
+                        * someObject.on( 'someEvent', function() { ... } );\r
+                        * someObject.on( 'someEvent', function() { ... } );\r
+                        * <b>someObject.fire( 'someEvent' )</b>;  // both listeners are called\r
+                        * @example\r
+                        * someObject.on( 'someEvent', function( event )\r
+                        *     {\r
+                        *         alert( event.data );  // "Example"\r
+                        *     });\r
+                        * <b>someObject.fire( 'someEvent', 'Example' )</b>;\r
+                        */\r
+                       fire : (function()\r
+                       {\r
+                               // Create the function that marks the event as stopped.\r
+                               var stopped = false;\r
+                               var stopEvent = function()\r
+                               {\r
+                                       stopped = true;\r
+                               };\r
+\r
+                               // Create the function that marks the event as canceled.\r
+                               var canceled = false;\r
+                               var cancelEvent = function()\r
+                               {\r
+                                       canceled = true;\r
+                               };\r
+\r
+                               return function( eventName, data, editor )\r
+                               {\r
+                                       // Get the event entry.\r
+                                       var event = getPrivate( this )[ eventName ];\r
+\r
+                                       // Save the previous stopped and cancelled states. We may\r
+                                       // be nesting fire() calls.\r
+                                       var previousStopped = stopped,\r
+                                               previousCancelled = canceled;\r
+\r
+                                       // Reset the stopped and canceled flags.\r
+                                       stopped = canceled = false;\r
+\r
+                                       if ( event )\r
+                                       {\r
+                                               var listeners = event.listeners;\r
+\r
+                                               if ( listeners.length )\r
+                                               {\r
+                                                       // As some listeners may remove themselves from the\r
+                                                       // event, the original array length is dinamic. So,\r
+                                                       // let's make a copy of all listeners, so we are\r
+                                                       // sure we'll call all of them.\r
+                                                       listeners = listeners.slice( 0 );\r
+\r
+                                                       // Loop through all listeners.\r
+                                                       for ( var i = 0 ; i < listeners.length ; i++ )\r
+                                                       {\r
+                                                               // Call the listener, passing the event data.\r
+                                                               var retData = listeners[i].call( this, editor, data, stopEvent, cancelEvent );\r
+\r
+                                                               if ( typeof retData != 'undefined' )\r
+                                                                       data = retData;\r
+\r
+                                                               // No further calls is stopped or canceled.\r
+                                                               if ( stopped || canceled )\r
+                                                                       break;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+\r
+                                       var ret = canceled || ( typeof data == 'undefined' ? false : data );\r
+\r
+                                       // Restore the previous stopped and canceled states.\r
+                                       stopped = previousStopped;\r
+                                       canceled = previousCancelled;\r
+\r
+                                       return ret;\r
+                               };\r
+                       })(),\r
+\r
+                       /**\r
+                        * Fires an specific event in the object, releasing all listeners\r
+                        * registered to that event. The same listeners are not called again on\r
+                        * successive calls of it or of {@link #fire}.\r
+                        * @param {String} eventName The event name to fire.\r
+                        * @param {Object} [data] Data to be sent as the\r
+                        *              {@link CKEDITOR.eventInfo#data} when calling the\r
+                        *              listeners.\r
+                        * @param {CKEDITOR.editor} [editor] The editor instance to send as the\r
+                        *              {@link CKEDITOR.eventInfo#editor} when calling the\r
+                        *              listener.\r
+                        * @returns {Boolean|Object} A booloan indicating that the event is to be\r
+                        *              canceled, or data returned by one of the listeners.\r
+                        * @example\r
+                        * someObject.on( 'someEvent', function() { ... } );\r
+                        * someObject.fire( 'someEvent' );  // above listener called\r
+                        * <b>someObject.fireOnce( 'someEvent' )</b>;  // above listener called\r
+                        * someObject.fire( 'someEvent' );  // no listeners called\r
+                        */\r
+                       fireOnce : function( eventName, data, editor )\r
+                       {\r
+                               var ret = this.fire( eventName, data, editor );\r
+                               delete getPrivate( this )[ eventName ];\r
+                               return ret;\r
+                       },\r
+\r
+                       /**\r
+                        * Unregisters a listener function from being called at the specified\r
+                        *              event. No errors are thrown if the listener has not been\r
+                        *              registered previously.\r
+                        * @param {String} eventName The event name.\r
+                        * @param {Function} listenerFunction The listener function to unregister.\r
+                        * @example\r
+                        * var myListener = function() { ... };\r
+                        * someObject.on( 'someEvent', myListener );\r
+                        * someObject.fire( 'someEvent' );  // myListener called\r
+                        * <b>someObject.removeListener( 'someEvent', myListener )</b>;\r
+                        * someObject.fire( 'someEvent' );  // myListener not called\r
+                        */\r
+                       removeListener : function( eventName, listenerFunction )\r
+                       {\r
+                               // Get the event entry.\r
+                               var event = getPrivate( this )[ eventName ];\r
+\r
+                               if ( event )\r
+                               {\r
+                                       var index = event.getListenerIndex( listenerFunction );\r
+                                       if ( index >= 0 )\r
+                                               event.listeners.splice( index, 1 );\r
+                               }\r
+                       },\r
+\r
+                       /**\r
+                        * Checks if there is any listener registered to a given event.\r
+                        * @param {String} eventName The event name.\r
+                        * @example\r
+                        * var myListener = function() { ... };\r
+                        * someObject.on( 'someEvent', myListener );\r
+                        * alert( someObject.<b>hasListeners( 'someEvent' )</b> );  // "true"\r
+                        * alert( someObject.<b>hasListeners( 'noEvent' )</b> );    // "false"\r
+                        */\r
+                       hasListeners : function( eventName )\r
+                       {\r
+                               var event = getPrivate( this )[ eventName ];\r
+                               return ( event && event.listeners.length > 0 ) ;\r
+                       }\r
+               };\r
+       })();\r
+}\r
diff --git a/_source/core/eventInfo.js b/_source/core/eventInfo.js
new file mode 100644 (file)
index 0000000..7f534d7
--- /dev/null
@@ -0,0 +1,120 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the "virtual" {@link CKEDITOR.eventInfo} class, which\r
+ *             contains the defintions of the event object passed to event listeners.\r
+ *             This file is for documentation purposes only.\r
+ */\r
+\r
+/**\r
+ * This class is not really part of the API. It just illustrates the features\r
+ * of the event object passed to event listeners by a {@link CKEDITOR.event}\r
+ * based object.\r
+ * @name CKEDITOR.eventInfo\r
+ * @constructor\r
+ * @example\r
+ * // Do not do this.\r
+ * var myEvent = new CKEDITOR.eventInfo();  // Error: CKEDITOR.eventInfo is undefined\r
+ */\r
+\r
+/**\r
+ * The event name.\r
+ * @name CKEDITOR.eventInfo.prototype.name\r
+ * @field\r
+ * @type String\r
+ * @example\r
+ * someObject.on( 'someEvent', function( event )\r
+ *     {\r
+ *         alert( <b>event.name</b> );  // "someEvent"\r
+ *     });\r
+ * someObject.fire( 'someEvent' );\r
+ */\r
+\r
+/**\r
+ * The object that publishes (sends) the event.\r
+ * @name CKEDITOR.eventInfo.prototype.sender\r
+ * @field\r
+ * @type Object\r
+ * @example\r
+ * someObject.on( 'someEvent', function( event )\r
+ *     {\r
+ *         alert( <b>event.sender</b> == someObject );  // "true"\r
+ *     });\r
+ * someObject.fire( 'someEvent' );\r
+ */\r
+\r
+/**\r
+ * The editor instance that holds the sender. May be the same as sender. May be\r
+ * null if the sender is not part of an editor instance, like a component\r
+ * running in standalone mode.\r
+ * @name CKEDITOR.eventInfo.prototype.editor\r
+ * @field\r
+ * @type CKEDITOR.editor\r
+ * @example\r
+ * myButton.on( 'someEvent', function( event )\r
+ *     {\r
+ *         alert( <b>event.editor</b> == myEditor );  // "true"\r
+ *     });\r
+ * myButton.fire( 'someEvent', null, <b>myEditor</b> );\r
+ */\r
+\r
+/**\r
+ * Any kind of additional data. Its format and usage is event dependent.\r
+ * @name CKEDITOR.eventInfo.prototype.data\r
+ * @field\r
+ * @type Object\r
+ * @example\r
+ * someObject.on( 'someEvent', function( event )\r
+ *     {\r
+ *         alert( <b>event.data</b> );  // "Example"\r
+ *     });\r
+ * someObject.fire( 'someEvent', <b>'Example'</b> );\r
+ */\r
+\r
+/**\r
+ * Any extra data appended during the listener registration.\r
+ * @name CKEDITOR.eventInfo.prototype.listenerData\r
+ * @field\r
+ * @type Object\r
+ * @example\r
+ * someObject.on( 'someEvent', function( event )\r
+ *     {\r
+ *         alert( <b>event.listenerData</b> );  // "Example"\r
+ *     }\r
+ *     , null, <b>'Example'</b> );\r
+ */\r
+\r
+/**\r
+ * Indicates that no further listeners are to be called.\r
+ * @name CKEDITOR.eventInfo.prototype.stop\r
+ * @function\r
+ * @example\r
+ * someObject.on( 'someEvent', function( event )\r
+ *     {\r
+ *         <b>event.stop()</b>;\r
+ *     });\r
+ * someObject.on( 'someEvent', function( event )\r
+ *     {\r
+ *         // This one will not be called.\r
+ *     });\r
+ * alert( someObject.fire( 'someEvent' ) );  // "false"\r
+ */\r
+\r
+/**\r
+ * Indicates that the event is to be cancelled (if cancelable).\r
+ * @name CKEDITOR.eventInfo.prototype.cancel\r
+ * @function\r
+ * @example\r
+ * someObject.on( 'someEvent', function( event )\r
+ *     {\r
+ *         <b>event.cancel()</b>;\r
+ *     });\r
+ * someObject.on( 'someEvent', function( event )\r
+ *     {\r
+ *         // This one will not be called.\r
+ *     });\r
+ * alert( someObject.fire( 'someEvent' ) );  // "true"\r
+ */\r
diff --git a/_source/core/focusmanager.js b/_source/core/focusmanager.js
new file mode 100644 (file)
index 0000000..0a3f514
--- /dev/null
@@ -0,0 +1,123 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.focusManager} class, which is used\r
+ *             to handle the focus on editor instances..\r
+ */\r
+\r
+/**\r
+ * Manages the focus activity in an editor instance. This class is to be used\r
+ * mainly by UI elements coders when adding interface elements to CKEditor.\r
+ * @constructor\r
+ * @param {CKEDITOR.editor} editor The editor instance.\r
+ * @example\r
+ */\r
+CKEDITOR.focusManager = function( editor )\r
+{\r
+       if ( editor.focusManager )\r
+               return editor.focusManager;\r
+\r
+       /**\r
+        * Indicates that the editor instance has focus.\r
+        * @type Boolean\r
+        * @example\r
+        * alert( CKEDITOR.instances.editor1.focusManager.hasFocus );  // e.g "true"\r
+        */\r
+       this.hasFocus = false;\r
+\r
+       /**\r
+        * Object used to hold private stuff.\r
+        * @private\r
+        */\r
+       this._ =\r
+       {\r
+               editor : editor\r
+       };\r
+\r
+       return this;\r
+};\r
+\r
+CKEDITOR.focusManager.prototype =\r
+{\r
+       /**\r
+        * Indicates that the editor instance has the focus.\r
+        *\r
+        * This function is not used to set the focus in the editor. Use\r
+        * {@link CKEDITOR.editor#focus} for it instead.\r
+        * @example\r
+        * var editor = CKEDITOR.instances.editor1;\r
+        * <b>editor.focusManager.focus()</b>;\r
+        */\r
+       focus : function()\r
+       {\r
+               if ( this._.timer )\r
+                       clearTimeout( this._.timer );\r
+\r
+               if ( !this.hasFocus )\r
+               {\r
+                       // If another editor has the current focus, we first "blur" it. In\r
+                       // this way the events happen in a more logical sequence, like:\r
+                       //              "focus 1" > "blur 1" > "focus 2"\r
+                       // ... instead of:\r
+                       //              "focus 1" > "focus 2" > "blur 1"\r
+                       if ( CKEDITOR.currentInstance )\r
+                               CKEDITOR.currentInstance.focusManager.forceBlur();\r
+\r
+                       var editor = this._.editor;\r
+\r
+                       editor.container.getFirst().addClass( 'cke_focus' );\r
+\r
+                       this.hasFocus = true;\r
+                       editor.fire( 'focus' );\r
+               }\r
+       },\r
+\r
+       /**\r
+        * Indicates that the editor instance has lost the focus. Note that this\r
+        * functions acts asynchronously with a delay of 100ms to avoid subsequent\r
+        * blur/focus effects. If you want the "blur" to happen immediately, use\r
+        * the {@link #forceBlur} function instead.\r
+        * @example\r
+        * var editor = CKEDITOR.instances.editor1;\r
+        * <b>editor.focusManager.blur()</b>;\r
+        */\r
+       blur : function()\r
+       {\r
+               var focusManager = this;\r
+\r
+               if ( focusManager._.timer )\r
+                       clearTimeout( focusManager._.timer );\r
+\r
+               focusManager._.timer = setTimeout(\r
+                       function()\r
+                       {\r
+                               delete focusManager._.timer;\r
+                               focusManager.forceBlur();\r
+                       }\r
+                       , 100 );\r
+       },\r
+\r
+       /**\r
+        * Indicates that the editor instance has lost the focus. Unlike\r
+        * {@link #blur}, this function is synchronous, marking the instance as\r
+        * "blured" immediately.\r
+        * @example\r
+        * var editor = CKEDITOR.instances.editor1;\r
+        * <b>editor.focusManager.forceBlur()</b>;\r
+        */\r
+       forceBlur : function()\r
+       {\r
+               if ( this.hasFocus )\r
+               {\r
+                       var editor = this._.editor;\r
+\r
+                       editor.container.getFirst().removeClass( 'cke_focus' );\r
+\r
+                       this.hasFocus = false;\r
+                       editor.fire( 'blur' );\r
+               }\r
+       }\r
+};\r
diff --git a/_source/core/htmlparser.js b/_source/core/htmlparser.js
new file mode 100644 (file)
index 0000000..e34fcb2
--- /dev/null
@@ -0,0 +1,212 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * HTML text parser.\r
+ * @constructor\r
+ * @example\r
+ */\r
+CKEDITOR.htmlParser = function()\r
+{\r
+       this._ =\r
+       {\r
+               htmlPartsRegex : new RegExp( '<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s>]+)\\s*((?:(?:[^"\'>]+)|(?:"[^"]*")|(?:\'[^\']*\'))*)\\/?>))', 'g' )\r
+       };\r
+};\r
+\r
+(function()\r
+{\r
+       var attribsRegex        = /([\w:]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,\r
+               emptyAttribs    = {checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};\r
+\r
+       CKEDITOR.htmlParser.prototype =\r
+       {\r
+               /**\r
+                * Function to be fired when a tag opener is found. This function\r
+                * should be overriden when using this class.\r
+                * @param {String} tagName The tag name. The name is guarantted to be\r
+                *              lowercased.\r
+                * @param {Object} attributes An object containing all tag attributes. Each\r
+                *              property in this object represent and attribute name and its\r
+                *              value is the attribute value.\r
+                * @param {Boolean} selfClosing true if the tag closes itself, false if the\r
+                *              tag doesn't.\r
+                * @example\r
+                * var parser = new CKEDITOR.htmlParser();\r
+                * parser.onTagOpen = function( tagName, attributes, selfClosing )\r
+                *     {\r
+                *         alert( tagName );  // e.g. "b"\r
+                *     });\r
+                * parser.parse( "&lt;!-- Example --&gt;&lt;b&gt;Hello&lt;/b&gt;" );\r
+                */\r
+               onTagOpen       : function() {},\r
+\r
+               /**\r
+                * Function to be fired when a tag closer is found. This function\r
+                * should be overriden when using this class.\r
+                * @param {String} tagName The tag name. The name is guarantted to be\r
+                *              lowercased.\r
+                * @example\r
+                * var parser = new CKEDITOR.htmlParser();\r
+                * parser.onTagClose = function( tagName )\r
+                *     {\r
+                *         alert( tagName );  // e.g. "b"\r
+                *     });\r
+                * parser.parse( "&lt;!-- Example --&gt;&lt;b&gt;Hello&lt;/b&gt;" );\r
+                */\r
+               onTagClose      : function() {},\r
+\r
+               /**\r
+                * Function to be fired when text is found. This function\r
+                * should be overriden when using this class.\r
+                * @param {String} text The text found.\r
+                * @example\r
+                * var parser = new CKEDITOR.htmlParser();\r
+                * parser.onText = function( text )\r
+                *     {\r
+                *         alert( text );  // e.g. "Hello"\r
+                *     });\r
+                * parser.parse( "&lt;!-- Example --&gt;&lt;b&gt;Hello&lt;/b&gt;" );\r
+                */\r
+               onText          : function() {},\r
+\r
+               /**\r
+                * Function to be fired when CDATA section is found. This function\r
+                * should be overriden when using this class.\r
+                * @param {String} cdata The CDATA been found.\r
+                * @example\r
+                * var parser = new CKEDITOR.htmlParser();\r
+                * parser.onCDATA = function( cdata )\r
+                *     {\r
+                *         alert( cdata );  // e.g. "var hello;"\r
+                *     });\r
+                * parser.parse( "&lt;script&gt;var hello;&lt;/script&gt;" );\r
+                */\r
+               onCDATA         : function() {},\r
+\r
+               /**\r
+                * Function to be fired when a commend is found. This function\r
+                * should be overriden when using this class.\r
+                * @param {String} comment The comment text.\r
+                * @example\r
+                * var parser = new CKEDITOR.htmlParser();\r
+                * parser.onText = function( comment )\r
+                *     {\r
+                *         alert( comment );  // e.g. " Example "\r
+                *     });\r
+                * parser.parse( "&lt;!-- Example --&gt;&lt;b&gt;Hello&lt;/b&gt;" );\r
+                */\r
+               onComment       : function() {},\r
+\r
+               /**\r
+                * Parses text, looking for HTML tokens, like tag openers or closers,\r
+                * or comments. This function fires the onTagOpen, onTagClose, onText\r
+                * and onComment function during its execution.\r
+                * @param {String} html The HTML to be parsed.\r
+                * @example\r
+                * var parser = new CKEDITOR.htmlParser();\r
+                * // The onTagOpen, onTagClose, onText and onComment should be overriden\r
+                * // at this point.\r
+                * parser.parse( "&lt;!-- Example --&gt;&lt;b&gt;Hello&lt;/b&gt;" );\r
+                */\r
+               parse : function( html )\r
+               {\r
+                       var parts,\r
+                               tagName,\r
+                               nextIndex = 0,\r
+                               cdata;  // The collected data inside a CDATA section.\r
+\r
+                       while ( ( parts = this._.htmlPartsRegex.exec( html ) ) )\r
+                       {\r
+                               var tagIndex = parts.index;\r
+                               if ( tagIndex > nextIndex )\r
+                               {\r
+                                       var text = html.substring( nextIndex, tagIndex );\r
+\r
+                                       if ( cdata )\r
+                                               cdata.push( text );\r
+                                       else\r
+                                               this.onText( text );\r
+                               }\r
+\r
+                               nextIndex = this._.htmlPartsRegex.lastIndex;\r
+\r
+                               /*\r
+                                "parts" is an array with the following items:\r
+                                       0 : The entire match for opening/closing tags and comments.\r
+                                       1 : Group filled with the tag name for closing tags.\r
+                                       2 : Group filled with the comment text.\r
+                                       3 : Group filled with the tag name for opening tags.\r
+                                       4 : Group filled with the attributes part of opening tags.\r
+                                */\r
+\r
+                               // Closing tag\r
+                               if ( ( tagName = parts[ 1 ] ) )\r
+                               {\r
+                                       tagName = tagName.toLowerCase();\r
+\r
+                                       if ( cdata && CKEDITOR.dtd.$cdata[ tagName ] )\r
+                                       {\r
+                                               // Send the CDATA data.\r
+                                               this.onCDATA( cdata.join('') );\r
+                                               cdata = null;\r
+                                       }\r
+\r
+                                       if ( !cdata )\r
+                                       {\r
+                                               this.onTagClose( tagName );\r
+                                               continue;\r
+                                       }\r
+                               }\r
+\r
+                               // If CDATA is enabled, just save the raw match.\r
+                               if ( cdata )\r
+                               {\r
+                                       cdata.push( parts[ 0 ] );\r
+                                       continue;\r
+                               }\r
+\r
+                               // Opening tag\r
+                               if ( ( tagName = parts[ 3 ] ) )\r
+                               {\r
+                                       tagName = tagName.toLowerCase();\r
+                                       var attribs = {},\r
+                                               attribMatch,\r
+                                               attribsPart = parts[ 4 ],\r
+                                               selfClosing = !!( attribsPart && attribsPart.charAt( attribsPart.length - 1 ) == '/' );\r
+\r
+                                       if ( attribsPart )\r
+                                       {\r
+                                               while ( ( attribMatch = attribsRegex.exec( attribsPart ) ) )\r
+                                               {\r
+                                                       var attName = attribMatch[1].toLowerCase(),\r
+                                                               attValue = attribMatch[2] || attribMatch[3] || attribMatch[4] || '';\r
+\r
+                                                       if ( !attValue && emptyAttribs[ attName ] )\r
+                                                               attribs[ attName ] = attName;\r
+                                                       else\r
+                                                               attribs[ attName ] = attValue;\r
+                                               }\r
+                                       }\r
+\r
+                                       this.onTagOpen( tagName, attribs, selfClosing );\r
+\r
+                                       // Open CDATA mode when finding the appropriate tags.\r
+                                       if ( !cdata && CKEDITOR.dtd.$cdata[ tagName ] )\r
+                                               cdata = [];\r
+\r
+                                       continue;\r
+                               }\r
+\r
+                               // Comment\r
+                               if( ( tagName = parts[ 2 ] ) )\r
+                                       this.onComment( tagName );\r
+                       }\r
+\r
+                       if ( html.length > nextIndex )\r
+                               this.onText( html.substring( nextIndex, html.length ) );\r
+               }\r
+       };\r
+})();\r
diff --git a/_source/core/htmlparser/basicwriter.js b/_source/core/htmlparser/basicwriter.js
new file mode 100644 (file)
index 0000000..ecb45f6
--- /dev/null
@@ -0,0 +1,140 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.htmlParser.basicWriter = CKEDITOR.tools.createClass(\r
+{\r
+       $ : function()\r
+       {\r
+               this._ =\r
+               {\r
+                       output : []\r
+               };\r
+       },\r
+\r
+       proto :\r
+       {\r
+               /**\r
+                * Writes the tag opening part for a opener tag.\r
+                * @param {String} tagName The element name for this tag.\r
+                * @param {Object} attributes The attributes defined for this tag. The\r
+                *              attributes could be used to inspect the tag.\r
+                * @example\r
+                * // Writes "&lt;p".\r
+                * writer.openTag( 'p', { class : 'MyClass', id : 'MyId' } );\r
+                */\r
+               openTag : function( tagName, attributes )\r
+               {\r
+                       this._.output.push( '<', tagName );\r
+               },\r
+\r
+               /**\r
+                * Writes the tag closing part for a opener tag.\r
+                * @param {String} tagName The element name for this tag.\r
+                * @param {Boolean} isSelfClose Indicates that this is a self-closing tag,\r
+                *              like "br" or "img".\r
+                * @example\r
+                * // Writes "&gt;".\r
+                * writer.openTagClose( 'p', false );\r
+                * @example\r
+                * // Writes " /&gt;".\r
+                * writer.openTagClose( 'br', true );\r
+                */\r
+               openTagClose : function( tagName, isSelfClose )\r
+               {\r
+                       if ( isSelfClose )\r
+                               this._.output.push( ' />' );\r
+                       else\r
+                               this._.output.push( '>' );\r
+               },\r
+\r
+               /**\r
+                * Writes an attribute. This function should be called after opening the\r
+                * tag with {@link #openTagClose}.\r
+                * @param {String} attName The attribute name.\r
+                * @param {String} attValue The attribute value.\r
+                * @example\r
+                * // Writes ' class="MyClass"'.\r
+                * writer.attribute( 'class', 'MyClass' );\r
+                */\r
+               attribute : function( attName, attValue )\r
+               {\r
+                       this._.output.push( ' ', attName, '="', attValue, '"' );\r
+               },\r
+\r
+               /**\r
+                * Writes a closer tag.\r
+                * @param {String} tagName The element name for this tag.\r
+                * @example\r
+                * // Writes "&lt;/p&gt;".\r
+                * writer.closeTag( 'p' );\r
+                */\r
+               closeTag : function( tagName )\r
+               {\r
+                       this._.output.push( '</', tagName, '>' );\r
+               },\r
+\r
+               /**\r
+                * Writes text.\r
+                * @param {String} text The text value\r
+                * @example\r
+                * // Writes "Hello Word".\r
+                * writer.text( 'Hello Word' );\r
+                */\r
+               text : function( text )\r
+               {\r
+                       this._.output.push( text );\r
+               },\r
+\r
+               /**\r
+                * Writes a comment.\r
+                * @param {String} comment The comment text.\r
+                * @example\r
+                * // Writes "&lt;!-- My comment --&gt;".\r
+                * writer.comment( ' My comment ' );\r
+                */\r
+               comment : function( comment )\r
+               {\r
+                       this._.output.push( '<!--', comment, '-->' );\r
+               },\r
+\r
+               /**\r
+                * Writes any kind of data to the ouput.\r
+                * @example\r
+                * writer.write( 'This is an &lt;b&gt;example&lt;/b&gt;.' );\r
+                */\r
+               write : function( data )\r
+               {\r
+                       this._.output.push( data );\r
+               },\r
+\r
+               /**\r
+                * Empties the current output buffer.\r
+                * @example\r
+                * writer.reset();\r
+                */\r
+               reset : function()\r
+               {\r
+                       this._.output = [];\r
+               },\r
+\r
+               /**\r
+                * Empties the current output buffer.\r
+                * @param {Boolean} reset Indicates that the {@link reset} function is to\r
+                *              be automatically called after retrieving the HTML.\r
+                * @returns {String} The HTML written to the writer so far.\r
+                * @example\r
+                * var html = writer.getHtml();\r
+                */\r
+               getHtml : function( reset )\r
+               {\r
+                       var html = this._.output.join( '' );\r
+\r
+                       if ( reset )\r
+                               this.reset();\r
+\r
+                       return html;\r
+               }\r
+       }\r
+});\r
diff --git a/_source/core/htmlparser/cdata.js b/_source/core/htmlparser/cdata.js
new file mode 100644 (file)
index 0000000..787e9ae
--- /dev/null
@@ -0,0 +1,44 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+\r
+       /**\r
+        * A lightweight representation of HTML text.\r
+        * @constructor\r
+        * @example\r
+        */\r
+       CKEDITOR.htmlParser.cdata = function( value )\r
+       {\r
+               /**\r
+                * The CDATA value.\r
+                * @type String\r
+                * @example\r
+                */\r
+               this.value = value;\r
+\r
+       };\r
+\r
+       CKEDITOR.htmlParser.cdata.prototype =\r
+       {\r
+               /**\r
+                * CDATA has the same type as {@link CKEDITOR.htmlParser.text} This is\r
+                * a constant value set to {@link CKEDITOR.NODE_TEXT}.\r
+                * @type Number\r
+                * @example\r
+                */\r
+               type : CKEDITOR.NODE_TEXT,\r
+\r
+               /**\r
+                * Writes write the CDATA with no special manipulations.\r
+                * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.\r
+                */\r
+               writeHtml : function( writer )\r
+               {\r
+                       writer.write( this.value );\r
+               }\r
+       };\r
+})();\r
diff --git a/_source/core/htmlparser/comment.js b/_source/core/htmlparser/comment.js
new file mode 100644 (file)
index 0000000..c2f4f25
--- /dev/null
@@ -0,0 +1,59 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * A lightweight representation of an HTML comment.\r
+ * @constructor\r
+ * @example\r
+ */\r
+CKEDITOR.htmlParser.comment = function( value )\r
+{\r
+       /**\r
+        * The comment text.\r
+        * @type String\r
+        * @example\r
+        */\r
+       this.value = value;\r
+\r
+       /** @private */\r
+       this._ =\r
+       {\r
+               isBlockLike : false\r
+       };\r
+};\r
+\r
+CKEDITOR.htmlParser.comment.prototype =\r
+{\r
+       /**\r
+        * The node type. This is a constant value set to {@link CKEDITOR.NODE_COMMENT}.\r
+        * @type Number\r
+        * @example\r
+        */\r
+       type : CKEDITOR.NODE_COMMENT,\r
+\r
+       /**\r
+        * Writes the HTML representation of this comment to a CKEDITOR.htmlWriter.\r
+        * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.\r
+        * @example\r
+        */\r
+       writeHtml : function( writer, filter )\r
+       {\r
+               var comment = this.value;\r
+\r
+               if ( filter )\r
+               {\r
+                       if ( !( comment = filter.onComment( comment ) ) )\r
+                               return;\r
+\r
+                       if ( typeof comment != 'string' )\r
+                       {\r
+                               comment.writeHtml( writer, filter );\r
+                               return;\r
+                       }\r
+               }\r
+\r
+               writer.comment( comment );\r
+       }\r
+};\r
diff --git a/_source/core/htmlparser/element.js b/_source/core/htmlparser/element.js
new file mode 100644 (file)
index 0000000..6ad0264
--- /dev/null
@@ -0,0 +1,196 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * A lightweight representation of an HTML element.\r
+ * @param {String} name The element name.\r
+ * @param {Object} attributes And object holding all attributes defined for\r
+ *             this element.\r
+ * @constructor\r
+ * @example\r
+ */\r
+CKEDITOR.htmlParser.element = function( name, attributes )\r
+{\r
+       /**\r
+        * The element name.\r
+        * @type String\r
+        * @example\r
+        */\r
+       this.name = name;\r
+\r
+       /**\r
+        * Holds the attributes defined for this element.\r
+        * @type Object\r
+        * @example\r
+        */\r
+       this.attributes = attributes;\r
+\r
+       /**\r
+        * The nodes that are direct children of this element.\r
+        * @type Array\r
+        * @example\r
+        */\r
+       this.children = [];\r
+\r
+       var dtd                 = CKEDITOR.dtd,\r
+               isBlockLike     = !!( dtd.$block[ name ] || dtd.$listItem[ name ] || dtd.$tableContent[ name ] ),\r
+               isEmpty         = !!dtd.$empty[ name ];\r
+\r
+       this.isEmpty    = isEmpty;\r
+       this.isUnknown  = !dtd[ name ];\r
+\r
+       /** @private */\r
+       this._ =\r
+       {\r
+               isBlockLike : isBlockLike,\r
+               hasInlineStarted : isEmpty || !isBlockLike\r
+       };\r
+};\r
+\r
+(function()\r
+{\r
+       // Used to sort attribute entries in an array, where the first element of\r
+       // each object is the attribute name.\r
+       var sortAttribs = function( a, b )\r
+       {\r
+               a = a[0];\r
+               b = b[0];\r
+               return a < b ? -1 : a > b ? 1 : 0;\r
+       };\r
+\r
+       CKEDITOR.htmlParser.element.prototype =\r
+       {\r
+               /**\r
+                * The node type. This is a constant value set to {@link CKEDITOR.NODE_ELEMENT}.\r
+                * @type Number\r
+                * @example\r
+                */\r
+               type : CKEDITOR.NODE_ELEMENT,\r
+\r
+               /**\r
+                * Adds a node to the element children list.\r
+                * @param {Object} node The node to be added. It can be any of of the\r
+                *              following types: {@link CKEDITOR.htmlParser.element},\r
+                *              {@link CKEDITOR.htmlParser.text} and\r
+                *              {@link CKEDITOR.htmlParser.comment}.\r
+                * @function\r
+                * @example\r
+                */\r
+               add : CKEDITOR.htmlParser.fragment.prototype.add,\r
+\r
+               /**\r
+                * Clone this element.\r
+                * @returns {CKEDITOR.htmlParser.element} The element clone.\r
+                * @example\r
+                */\r
+               clone : function()\r
+               {\r
+                       return new CKEDITOR.htmlParser.element( this.name, this.attributes );\r
+               },\r
+\r
+               /**\r
+                * Writes the element HTML to a CKEDITOR.htmlWriter.\r
+                * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.\r
+                * @example\r
+                */\r
+               writeHtml : function( writer, filter )\r
+               {\r
+                       var attributes = this.attributes;\r
+\r
+                       // The "_cke_replacedata" indicates that this element is replacing\r
+                       // a data snippet, which should be outputted as is.\r
+                       if ( attributes._cke_replacedata )\r
+                       {\r
+                               writer.write( attributes._cke_replacedata );\r
+                               return;\r
+                       }\r
+\r
+                       // Ignore cke: prefixes when writing HTML.\r
+                       var element = this,\r
+                               writeName = element.name,\r
+                               a, value;\r
+\r
+                       if ( filter )\r
+                       {\r
+                               while ( true )\r
+                               {\r
+                                       if ( !( writeName = filter.onElementName( writeName ) ) )\r
+                                               return;\r
+\r
+                                       element.name = writeName;\r
+\r
+                                       if ( !( element = filter.onElement( element ) ) )\r
+                                               return;\r
+\r
+                                       if ( element.name == writeName )\r
+                                               break;\r
+\r
+                                       writeName = element.name;\r
+                                       if ( !writeName )       // Send children.\r
+                                       {\r
+                                               CKEDITOR.htmlParser.fragment.prototype.writeHtml.apply( element, arguments );\r
+                                               return;\r
+                                       }\r
+                               }\r
+\r
+                               // The element may have been changed, so update the local\r
+                               // references.\r
+                               attributes = element.attributes;\r
+                       }\r
+\r
+                       // Open element tag.\r
+                       writer.openTag( writeName, attributes );\r
+\r
+                       if ( writer.sortAttributes )\r
+                       {\r
+                               // Copy all attributes to an array.\r
+                               var attribsArray = [];\r
+                               for ( a in attributes )\r
+                               {\r
+                                       value = attributes[ a ];\r
+\r
+                                       if ( filter && ( !( a = filter.onAttributeName( a ) ) || ( value = filter.onAttribute( element, a, value ) ) === false ) )\r
+                                               continue;\r
+\r
+                                       attribsArray.push( [ a, value ] );\r
+                               }\r
+\r
+                               // Sort the attributes by name.\r
+                               attribsArray.sort( sortAttribs );\r
+\r
+                               // Send the attributes.\r
+                               for ( var i = 0, len = attribsArray.length ; i < len ; i++ )\r
+                               {\r
+                                       var attrib = attribsArray[ i ];\r
+                                       writer.attribute( attrib[0], attrib[1] );\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               for ( a in attributes )\r
+                               {\r
+                                       value = attributes[ a ];\r
+\r
+                                       if ( filter && ( !( a = filter.onAttributeName( a ) ) || ( value = filter.onAttribute( element, a, value ) ) === false ) )\r
+                                               continue;\r
+\r
+                                       writer.attribute( a, value );\r
+                               }\r
+                       }\r
+\r
+                       // Close the tag.\r
+                       writer.openTagClose( writeName, element.isEmpty );\r
+\r
+                       if ( !element.isEmpty )\r
+                       {\r
+                               // Send children.\r
+                               CKEDITOR.htmlParser.fragment.prototype.writeHtml.apply( element, arguments );\r
+\r
+                               // Close the element.\r
+                               writer.closeTag( writeName );\r
+                       }\r
+               }\r
+       };\r
+})();\r
diff --git a/_source/core/htmlparser/filter.js b/_source/core/htmlparser/filter.js
new file mode 100644 (file)
index 0000000..3d46487
--- /dev/null
@@ -0,0 +1,233 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       CKEDITOR.htmlParser.filter = CKEDITOR.tools.createClass(\r
+       {\r
+               $ : function( rules )\r
+               {\r
+                       this._ =\r
+                       {\r
+                               elementNames : [],\r
+                               attributeNames : [],\r
+                               elements : { $length : 0 },\r
+                               attributes : { $length : 0 }\r
+                       };\r
+\r
+                       if ( rules )\r
+                               this.addRules( rules, 10 );\r
+               },\r
+\r
+               proto :\r
+               {\r
+                       addRules : function( rules, priority )\r
+                       {\r
+                               if ( typeof priority != 'number' )\r
+                                       priority = 10;\r
+\r
+                               // Add the elementNames.\r
+                               addItemsToList( this._.elementNames, rules.elementNames, priority );\r
+\r
+                               // Add the attributeNames.\r
+                               addItemsToList( this._.attributeNames, rules.attributeNames, priority );\r
+\r
+                               // Add the elements.\r
+                               addNamedItems( this._.elements, rules.elements, priority );\r
+\r
+                               // Add the attributes.\r
+                               addNamedItems( this._.attributes, rules.attributes, priority );\r
+\r
+                               // Add the text.\r
+                               this._.text = transformNamedItem( this._.text, rules.text, priority ) || this._.text;\r
+\r
+                               // Add the comment.\r
+                               this._.comment = transformNamedItem( this._.comment, rules.comment, priority ) || this._.comment;\r
+                       },\r
+\r
+                       onElementName : function( name )\r
+                       {\r
+                               return filterName( name, this._.elementNames );\r
+                       },\r
+\r
+                       onAttributeName : function( name )\r
+                       {\r
+                               return filterName( name, this._.attributeNames );\r
+                       },\r
+\r
+                       onText : function( text )\r
+                       {\r
+                               var textFilter = this._.text;\r
+                               return textFilter ? textFilter.filter( text ) : text;\r
+                       },\r
+\r
+                       onComment : function( commentText )\r
+                       {\r
+                               var textFilter = this._.comment;\r
+                               return textFilter ? textFilter.filter( commentText ) : commentText;\r
+                       },\r
+\r
+                       onElement : function( element )\r
+                       {\r
+                               // We must apply filters set to the specific element name as\r
+                               // well as those set to the generic $ name. So, add both to an\r
+                               // array and process them in a small loop.\r
+                               var filters = [ this._.elements[ element.name ], this._.elements.$ ],\r
+                                       filter, ret;\r
+\r
+                               for ( var i = 0 ; i < 2 ; i++ )\r
+                               {\r
+                                       filter = filters[ i ];\r
+                                       if ( filter )\r
+                                       {\r
+                                               ret = filter.filter( element, this );\r
+\r
+                                               if ( ret === false )\r
+                                                       return null;\r
+\r
+                                               if ( ret && ret != element )\r
+                                                       return this.onElement( ret );\r
+                                       }\r
+                               }\r
+\r
+                               return element;\r
+                       },\r
+\r
+                       onAttribute : function( element, name, value )\r
+                       {\r
+                               var filter = this._.attributes[ name ];\r
+\r
+                               if ( filter )\r
+                               {\r
+                                       var ret = filter.filter( value, element, this );\r
+\r
+                                       if ( ret === false )\r
+                                               return false;\r
+\r
+                                       if ( typeof ret != 'undefined' )\r
+                                               return ret;\r
+                               }\r
+\r
+                               return value;\r
+                       }\r
+               }\r
+       });\r
+\r
+       function filterName( name, filters )\r
+       {\r
+               for ( var i = 0 ; name && i < filters.length ; i++ )\r
+               {\r
+                       var filter = filters[ i ];\r
+                       name = name.replace( filter[ 0 ], filter[ 1 ] );\r
+               }\r
+               return name;\r
+       }\r
+\r
+       function addItemsToList( list, items, priority )\r
+       {\r
+               var i, j,\r
+                       listLength = list.length,\r
+                       itemsLength = items && items.length;\r
+\r
+               if ( itemsLength )\r
+               {\r
+                       // Find the index to insert the items at.\r
+                       for ( i = 0 ; i < listLength && list[ i ].pri < priority ; i++ )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       // Add all new items to the list at the specific index.\r
+                       for ( j = itemsLength - 1 ; j >= 0 ; j-- )\r
+                       {\r
+                               var item = items[ j ];\r
+                               item.pri = priority;\r
+                               list.splice( i, 0, item );\r
+                       }\r
+               }\r
+       }\r
+\r
+       function addNamedItems( hashTable, items, priority )\r
+       {\r
+               if ( items )\r
+               {\r
+                       for ( var name in items )\r
+                       {\r
+                               var current = hashTable[ name ];\r
+\r
+                               hashTable[ name ] =\r
+                                       transformNamedItem(\r
+                                               current,\r
+                                               items[ name ],\r
+                                               priority );\r
+\r
+                               if ( !current )\r
+                                       hashTable.$length++;\r
+                       }\r
+               }\r
+       }\r
+\r
+       function transformNamedItem( current, item, priority )\r
+       {\r
+               if ( item )\r
+               {\r
+                       item.pri = priority;\r
+\r
+                       if ( current )\r
+                       {\r
+                               // If the current item is not an Array, transform it.\r
+                               if ( !current.splice )\r
+                               {\r
+                                       if ( current.pri > priority )\r
+                                               current = [ item, current ];\r
+                                       else\r
+                                               current = [ current, item ];\r
+\r
+                                       current.filter = callItems;\r
+                               }\r
+                               else\r
+                                       addItemsToList( current, item, priority );\r
+\r
+                               return current;\r
+                       }\r
+                       else\r
+                       {\r
+                               item.filter = item;\r
+                               return item;\r
+                       }\r
+               }\r
+       }\r
+\r
+       function callItems( currentEntry )\r
+       {\r
+               var isObject = ( typeof currentEntry == 'object' );\r
+\r
+               for ( var i = 0 ; i < this.length ; i++ )\r
+               {\r
+                       var item = this[ i ],\r
+                               ret = item.apply( window, arguments );\r
+\r
+                       if ( typeof ret != 'undefined' )\r
+                       {\r
+                               if ( ret === false )\r
+                                       return false;\r
+\r
+                               if ( isObject && ret != currentEntry )\r
+                                       return ret;\r
+                       }\r
+               }\r
+\r
+               return null;\r
+       }\r
+})();\r
+\r
+// "entities" plugin\r
+/*\r
+{\r
+       text : function( text )\r
+       {\r
+               // TODO : Process entities.\r
+               return text.toUpperCase();\r
+       }\r
+};\r
+*/\r
diff --git a/_source/core/htmlparser/fragment.js b/_source/core/htmlparser/fragment.js
new file mode 100644 (file)
index 0000000..7f6c6df
--- /dev/null
@@ -0,0 +1,434 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * A lightweight representation of an HTML DOM structure.\r
+ * @constructor\r
+ * @example\r
+ */\r
+CKEDITOR.htmlParser.fragment = function()\r
+{\r
+       /**\r
+        * The nodes contained in the root of this fragment.\r
+        * @type Array\r
+        * @example\r
+        * var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '<b>Sample</b> Text' );\r
+        * alert( fragment.children.length );  "2"\r
+        */\r
+       this.children = [];\r
+\r
+       /**\r
+        * Get the fragment parent. Should always be null.\r
+        * @type Object\r
+        * @default null\r
+        * @example\r
+        */\r
+       this.parent = null;\r
+\r
+       /** @private */\r
+       this._ =\r
+       {\r
+               isBlockLike : true,\r
+               hasInlineStarted : false\r
+       };\r
+};\r
+\r
+(function()\r
+{\r
+       // Elements which the end tag is marked as optional in the HTML 4.01 DTD\r
+       // (expect empty elements).\r
+       var optionalClose = {colgroup:1,dd:1,dt:1,li:1,option:1,p:1,td:1,tfoot:1,th:1,thead:1,tr:1};\r
+\r
+       // Block-level elements whose internal structure should be respected during\r
+       // parser fixing.\r
+       var nonBreakingBlocks = CKEDITOR.tools.extend(\r
+                       {table:1,ul:1,ol:1,dl:1},\r
+                       CKEDITOR.dtd.table, CKEDITOR.dtd.ul, CKEDITOR.dtd.ol, CKEDITOR.dtd.dl );\r
+\r
+       /**\r
+        * Creates a {@link CKEDITOR.htmlParser.fragment} from an HTML string.\r
+        * @param {String} fragmentHtml The HTML to be parsed, filling the fragment.\r
+        * @param {Number} [fixForBody=false] Wrap body with specified element if needed.\r
+        * @returns CKEDITOR.htmlParser.fragment The fragment created.\r
+        * @example\r
+        * var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '<b>Sample</b> Text' );\r
+        * alert( fragment.children[0].name );  "b"\r
+        * alert( fragment.children[1].value );  " Text"\r
+        */\r
+       CKEDITOR.htmlParser.fragment.fromHtml = function( fragmentHtml, fixForBody )\r
+       {\r
+               var parser = new CKEDITOR.htmlParser(),\r
+                       html = [],\r
+                       fragment = new CKEDITOR.htmlParser.fragment(),\r
+                       pendingInline = [],\r
+                       currentNode = fragment,\r
+                   // Indicate we're inside a <pre> element, spaces should be touched differently.\r
+                       inPre = false,\r
+                       returnPoint;\r
+\r
+               function checkPending( newTagName )\r
+               {\r
+                       if ( pendingInline.length > 0 )\r
+                       {\r
+                               for ( var i = 0 ; i < pendingInline.length ; i++ )\r
+                               {\r
+                                       var pendingElement = pendingInline[ i ],\r
+                                               pendingName = pendingElement.name,\r
+                                               pendingDtd = CKEDITOR.dtd[ pendingName ],\r
+                                               currentDtd = currentNode.name && CKEDITOR.dtd[ currentNode.name ];\r
+\r
+                                       if ( ( !currentDtd || currentDtd[ pendingName ] ) && ( !newTagName || !pendingDtd || pendingDtd[ newTagName ] || !CKEDITOR.dtd[ newTagName ] ) )\r
+                                       {\r
+                                               // Get a clone for the pending element.\r
+                                               pendingElement = pendingElement.clone();\r
+\r
+                                               // Add it to the current node and make it the current,\r
+                                               // so the new element will be added inside of it.\r
+                                               pendingElement.parent = currentNode;\r
+                                               currentNode = pendingElement;\r
+\r
+                                               // Remove the pending element (back the index by one\r
+                                               // to properly process the next entry).\r
+                                               pendingInline.splice( i, 1 );\r
+                                               i--;\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               function addElement( element, target, enforceCurrent )\r
+               {\r
+                       target = target || currentNode || fragment;\r
+\r
+                       // If the target is the fragment and this element can't go inside\r
+                       // body (if fixForBody).\r
+                       if ( fixForBody && !target.type )\r
+                       {\r
+                               var elementName, realElementName;\r
+                               if ( element.attributes\r
+                                        && ( realElementName =\r
+                                                 element.attributes[ '_cke_real_element_type' ] ) )\r
+                                       elementName = realElementName;\r
+                               else\r
+                                       elementName =  element.name;\r
+                               if ( !( elementName in CKEDITOR.dtd.$body ) )\r
+                               {\r
+                                       var savedCurrent = currentNode;\r
+\r
+                                       // Create a <p> in the fragment.\r
+                                       currentNode = target;\r
+                                       parser.onTagOpen( fixForBody, {} );\r
+\r
+                                       // The new target now is the <p>.\r
+                                       target = currentNode;\r
+\r
+                                       if ( enforceCurrent )\r
+                                               currentNode = savedCurrent;\r
+                               }\r
+                       }\r
+\r
+                       // Rtrim empty spaces on block end boundary. (#3585)\r
+                       if ( element._.isBlockLike\r
+                                && element.name != 'pre' )\r
+                       {\r
+\r
+                               var length = element.children.length,\r
+                                       lastChild = element.children[ length - 1 ],\r
+                                       text;\r
+                               if ( lastChild && lastChild.type == CKEDITOR.NODE_TEXT )\r
+                               {\r
+                                       if ( !( text = CKEDITOR.tools.rtrim( lastChild.value ) ) )\r
+                                               element.children.length = length -1;\r
+                                       else\r
+                                               lastChild.value = text;\r
+                               }\r
+                       }\r
+\r
+                       target.add( element );\r
+\r
+                       if ( element.returnPoint )\r
+                       {\r
+                               currentNode = element.returnPoint;\r
+                               delete element.returnPoint;\r
+                       }\r
+               }\r
+\r
+               parser.onTagOpen = function( tagName, attributes, selfClosing )\r
+               {\r
+                       var element = new CKEDITOR.htmlParser.element( tagName, attributes );\r
+\r
+                       // "isEmpty" will be always "false" for unknown elements, so we\r
+                       // must force it if the parser has identified it as a selfClosing tag.\r
+                       if ( element.isUnknown && selfClosing )\r
+                               element.isEmpty = true;\r
+\r
+                       // This is a tag to be removed if empty, so do not add it immediately.\r
+                       if ( CKEDITOR.dtd.$removeEmpty[ tagName ] )\r
+                       {\r
+                               pendingInline.push( element );\r
+                               return;\r
+                       }\r
+                       else if ( tagName == 'pre' )\r
+                               inPre = true;\r
+                       else if ( tagName == 'br' && inPre )\r
+                       {\r
+                               currentNode.add( new CKEDITOR.htmlParser.text( '\n' ) );\r
+                               return;\r
+                       }\r
+\r
+                       var currentName = currentNode.name,\r
+                               currentDtd = ( currentName && CKEDITOR.dtd[ currentName ] ) || ( currentNode._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span );\r
+\r
+                       // If the element cannot be child of the current element.\r
+                       if ( !element.isUnknown && !currentNode.isUnknown && !currentDtd[ tagName ] )\r
+                       {\r
+                               // If this is the fragment node, just ignore this tag and add\r
+                               // its children.\r
+                               if ( !currentName )\r
+                                       return;\r
+\r
+                               var reApply = false;\r
+\r
+                               // If the element name is the same as the current element name,\r
+                               // then just close the current one and append the new one to the\r
+                               // parent. This situation usually happens with <p>, <li>, <dt> and\r
+                               // <dd>, specially in IE. Do not enter in this if block in this case.\r
+                               if ( tagName == currentName )\r
+                               {\r
+                                       addElement( currentNode, currentNode.parent );\r
+                               }\r
+                               else\r
+                               {\r
+                                       if ( nonBreakingBlocks[ currentName ] )\r
+                                       {\r
+                                               if ( !returnPoint )\r
+                                                       returnPoint = currentNode;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               addElement( currentNode, currentNode.parent, true );\r
+\r
+                                               if ( !optionalClose[ currentName ] )\r
+                                               {\r
+                                                       // The current element is an inline element, which\r
+                                                       // cannot hold the new one. Put it in the pending list,\r
+                                                       // and try adding the new one after it.\r
+                                                       pendingInline.unshift( currentNode );\r
+                                               }\r
+                                       }\r
+\r
+                                       reApply = true;\r
+                               }\r
+\r
+                               // In any of the above cases, we'll be adding, or trying to\r
+                               // add it to the parent.\r
+                               currentNode = currentNode.returnPoint || currentNode.parent;\r
+\r
+                               if ( reApply )\r
+                               {\r
+                                       parser.onTagOpen.apply( this, arguments );\r
+                                       return;\r
+                               }\r
+                       }\r
+\r
+                       checkPending( tagName );\r
+\r
+                       element.parent = currentNode;\r
+                       element.returnPoint = returnPoint;\r
+                       returnPoint = 0;\r
+\r
+                       if ( element.isEmpty )\r
+                               addElement( element );\r
+                       else\r
+                               currentNode = element;\r
+               };\r
+\r
+               parser.onTagClose = function( tagName )\r
+               {\r
+                       var index = 0,\r
+                               pendingAdd = [],\r
+                               candidate = currentNode;\r
+\r
+                       while ( candidate.type && candidate.name != tagName )\r
+                       {\r
+                               // If this is an inline element, add it to the pending list, so\r
+                               // it will continue after the closing tag.\r
+                               if ( !candidate._.isBlockLike )\r
+                               {\r
+                                       pendingInline.unshift( candidate );\r
+\r
+                                       // Increase the index, so it will not get checked again in\r
+                                       // the pending list check that follows.\r
+                                       index++;\r
+                               }\r
+\r
+                               // This node should be added to it's parent at this point. But,\r
+                               // it should happen only if the closing tag is really closing\r
+                               // one of the nodes. So, for now, we just cache it.\r
+                               pendingAdd.push( candidate );\r
+\r
+                               candidate = candidate.parent;\r
+                       }\r
+\r
+                       if ( candidate.type )\r
+                       {\r
+                               // Add all elements that have been found in the above loop.\r
+                               for ( var i = 0 ; i < pendingAdd.length ; i++ )\r
+                               {\r
+                                       var node = pendingAdd[ i ];\r
+                                       addElement( node, node.parent );\r
+                               }\r
+\r
+                               currentNode = candidate;\r
+\r
+                               if( currentNode.name == 'pre' )\r
+                                       inPre = false;\r
+\r
+                               addElement( candidate, candidate.parent );\r
+\r
+                               // The parent should start receiving new nodes now, except if\r
+                               // addElement changed the currentNode.\r
+                               if ( candidate == currentNode )\r
+                                       currentNode = currentNode.parent;\r
+                       }\r
+                       // The tag is not actually closing anything, thus we need invalidate\r
+                       // the pending elements.(#3862)\r
+                       else\r
+                       {\r
+                               pendingInline.splice( 0, index );\r
+                               index = 0;\r
+                       }\r
+\r
+                       // Check if there is any pending tag to be closed.\r
+                       for ( ; index < pendingInline.length ; index++ )\r
+                       {\r
+                               // If found, just remove it from the list.\r
+                               if ( tagName == pendingInline[ index ].name )\r
+                               {\r
+                                       pendingInline.splice( index, 1 );\r
+\r
+                                       // Decrease the index so we continue from the next one.\r
+                                       index--;\r
+                               }\r
+                       }\r
+               };\r
+\r
+               parser.onText = function( text )\r
+               {\r
+                       // Trim empty spaces at beginning of element contents except <pre>.\r
+                       if ( !currentNode._.hasInlineStarted && !inPre )\r
+                       {\r
+                               text = CKEDITOR.tools.ltrim( text );\r
+\r
+                               if ( text.length === 0 )\r
+                                       return;\r
+                       }\r
+\r
+                       checkPending();\r
+\r
+                       if ( fixForBody && !currentNode.type )\r
+                               this.onTagOpen( fixForBody, {} );\r
+\r
+                       // Shrinking consequential spaces into one single for all elements\r
+                       // text contents.\r
+                       if ( !inPre )\r
+                               text = text.replace( /[\t\r\n ]{2,}|[\t\r\n]/g, ' ' );\r
+\r
+                       currentNode.add( new CKEDITOR.htmlParser.text( text ) );\r
+               };\r
+\r
+               parser.onCDATA = function( cdata )\r
+               {\r
+                       currentNode.add( new CKEDITOR.htmlParser.cdata( cdata ) );\r
+               };\r
+\r
+               parser.onComment = function( comment )\r
+               {\r
+                       currentNode.add( new CKEDITOR.htmlParser.comment( comment ) );\r
+               };\r
+\r
+               // Parse it.\r
+               parser.parse( fragmentHtml );\r
+\r
+               // Close all pending nodes.\r
+               while ( currentNode.type )\r
+               {\r
+                       var parent = currentNode.parent,\r
+                               node = currentNode;\r
+\r
+                       if ( fixForBody && !parent.type && !CKEDITOR.dtd.$body[ node.name ] )\r
+                       {\r
+                               currentNode = parent;\r
+                               parser.onTagOpen( fixForBody, {} );\r
+                               parent = currentNode;\r
+                       }\r
+\r
+                       parent.add( node );\r
+                       currentNode = parent;\r
+               }\r
+\r
+               return fragment;\r
+       };\r
+\r
+       CKEDITOR.htmlParser.fragment.prototype =\r
+       {\r
+               /**\r
+                * Adds a node to this fragment.\r
+                * @param {Object} node The node to be added. It can be any of of the\r
+                *              following types: {@link CKEDITOR.htmlParser.element},\r
+                *              {@link CKEDITOR.htmlParser.text} and\r
+                *              {@link CKEDITOR.htmlParser.comment}.\r
+                * @example\r
+                */\r
+               add : function( node )\r
+               {\r
+                       var len = this.children.length,\r
+                               previous = len > 0 && this.children[ len - 1 ] || null;\r
+\r
+                       if ( previous )\r
+                       {\r
+                               // If the block to be appended is following text, trim spaces at\r
+                               // the right of it.\r
+                               if ( node._.isBlockLike && previous.type == CKEDITOR.NODE_TEXT )\r
+                               {\r
+                                       previous.value = CKEDITOR.tools.rtrim( previous.value );\r
+\r
+                                       // If we have completely cleared the previous node.\r
+                                       if ( previous.value.length === 0 )\r
+                                       {\r
+                                               // Remove it from the list and add the node again.\r
+                                               this.children.pop();\r
+                                               this.add( node );\r
+                                               return;\r
+                                       }\r
+                               }\r
+\r
+                               previous.next = node;\r
+                       }\r
+\r
+                       node.previous = previous;\r
+                       node.parent = this;\r
+\r
+                       this.children.push( node );\r
+\r
+                       this._.hasInlineStarted = node.type == CKEDITOR.NODE_TEXT || ( node.type == CKEDITOR.NODE_ELEMENT && !node._.isBlockLike );\r
+               },\r
+\r
+               /**\r
+                * Writes the fragment HTML to a CKEDITOR.htmlWriter.\r
+                * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.\r
+                * @example\r
+                * var writer = new CKEDITOR.htmlWriter();\r
+                * var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '&lt;P&gt;&lt;B&gt;Example' );\r
+                * fragment.writeHtml( writer )\r
+                * alert( writer.getHtml() );  "&lt;p&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/p&gt;"\r
+                */\r
+               writeHtml : function( writer, filter )\r
+               {\r
+                       for ( var i = 0, len = this.children.length ; i < len ; i++ )\r
+                               this.children[i].writeHtml( writer, filter );\r
+               }\r
+       };\r
+})();\r
diff --git a/_source/core/htmlparser/text.js b/_source/core/htmlparser/text.js
new file mode 100644 (file)
index 0000000..718bd82
--- /dev/null
@@ -0,0 +1,55 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       var spacesRegex = /[\t\r\n ]{2,}|[\t\r\n]/g;\r
+\r
+       /**\r
+        * A lightweight representation of HTML text.\r
+        * @constructor\r
+        * @example\r
+        */\r
+       CKEDITOR.htmlParser.text = function( value )\r
+       {\r
+               /**\r
+                * The text value.\r
+                * @type String\r
+                * @example\r
+                */\r
+               this.value = value;\r
+\r
+               /** @private */\r
+               this._ =\r
+               {\r
+                       isBlockLike : false\r
+               };\r
+       };\r
+\r
+       CKEDITOR.htmlParser.text.prototype =\r
+       {\r
+               /**\r
+                * The node type. This is a constant value set to {@link CKEDITOR.NODE_TEXT}.\r
+                * @type Number\r
+                * @example\r
+                */\r
+               type : CKEDITOR.NODE_TEXT,\r
+\r
+               /**\r
+                * Writes the HTML representation of this text to a CKEDITOR.htmlWriter.\r
+                * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.\r
+                * @example\r
+                */\r
+               writeHtml : function( writer, filter )\r
+               {\r
+                       var text = this.value;\r
+\r
+                       if ( filter && !( text = filter.onText( text, this ) ) )\r
+                               return;\r
+\r
+                       writer.text( text );\r
+               }\r
+       };\r
+})();\r
diff --git a/_source/core/imagecacher.js b/_source/core/imagecacher.js
new file mode 100644 (file)
index 0000000..c626093
--- /dev/null
@@ -0,0 +1,58 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       var loaded = {};\r
+\r
+       var loadImage = function( image, callback )\r
+       {\r
+               var doCallback = function()\r
+                       {\r
+                               loaded[ image ] = 1;\r
+                               callback();\r
+                       };\r
+\r
+               var img = new CKEDITOR.dom.element( 'img' );\r
+               img.on( 'load', doCallback );\r
+               img.on( 'error', doCallback );\r
+               img.setAttribute( 'src', image );\r
+       };\r
+\r
+       /**\r
+        * Load images into the browser cache.\r
+        * @namespace\r
+        * @example\r
+        */\r
+       CKEDITOR.imageCacher =\r
+       {\r
+               /**\r
+                * Loads one or more images.\r
+                * @param {Array} images The URLs for the images to be loaded.\r
+                * @param {Function} callback The function to be called once all images\r
+                *              are loaded.\r
+                */\r
+               load : function( images, callback )\r
+               {\r
+                       var pendingCount = images.length;\r
+\r
+                       var checkPending = function()\r
+                       {\r
+                               if ( --pendingCount === 0 )\r
+                                       callback();\r
+                       };\r
+\r
+                       for ( var i = 0 ; i < images.length ; i++ )\r
+                       {\r
+                               var image = images[ i ];\r
+\r
+                               if ( loaded[ image ] )\r
+                                       checkPending();\r
+                               else\r
+                                       loadImage( image, checkPending );\r
+                       }\r
+               }\r
+       };\r
+})();\r
diff --git a/_source/core/lang.js b/_source/core/lang.js
new file mode 100644 (file)
index 0000000..6ada788
--- /dev/null
@@ -0,0 +1,147 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       var loadedLangs = {};\r
+\r
+       CKEDITOR.lang =\r
+       {\r
+               /**\r
+                * The list of languages available in the editor core.\r
+                * @type Object\r
+                * @example\r
+                * alert( CKEDITOR.lang.en );  // "true"\r
+                */\r
+               languages :\r
+               {\r
+                       'af'    : 1,\r
+                       'ar'    : 1,\r
+                       'bg'    : 1,\r
+                       'bn'    : 1,\r
+                       'bs'    : 1,\r
+                       'ca'    : 1,\r
+                       'cs'    : 1,\r
+                       'da'    : 1,\r
+                       'de'    : 1,\r
+                       'el'    : 1,\r
+                       'en-au' : 1,\r
+                       'en-ca' : 1,\r
+                       'en-uk' : 1,\r
+                       'en'    : 1,\r
+                       'eo'    : 1,\r
+                       'es'    : 1,\r
+                       'et'    : 1,\r
+                       'eu'    : 1,\r
+                       'fa'    : 1,\r
+                       'fi'    : 1,\r
+                       'fo'    : 1,\r
+                       'fr-ca' : 1,\r
+                       'fr'    : 1,\r
+                       'gl'    : 1,\r
+                       'gu'    : 1,\r
+                       'he'    : 1,\r
+                       'hi'    : 1,\r
+                       'hr'    : 1,\r
+                       'hu'    : 1,\r
+                       'is'    : 1,\r
+                       'it'    : 1,\r
+                       'ja'    : 1,\r
+                       'km'    : 1,\r
+                       'ko'    : 1,\r
+                       'lt'    : 1,\r
+                       'lv'    : 1,\r
+                       'mn'    : 1,\r
+                       'ms'    : 1,\r
+                       'nb'    : 1,\r
+                       'nl'    : 1,\r
+                       'no'    : 1,\r
+                       'pl'    : 1,\r
+                       'pt-br' : 1,\r
+                       'pt'    : 1,\r
+                       'ro'    : 1,\r
+                       'ru'    : 1,\r
+                       'sk'    : 1,\r
+                       'sl'    : 1,\r
+                       'sr-latn'       : 1,\r
+                       'sr'    : 1,\r
+                       'sv'    : 1,\r
+                       'th'    : 1,\r
+                       'tr'    : 1,\r
+                       'uk'    : 1,\r
+                       'vi'    : 1,\r
+                       'zh-cn' : 1,\r
+                       'zh'    : 1\r
+               },\r
+\r
+               /**\r
+                * Loads a specific language file, or auto detect it. A callback is\r
+                * then called when the file gets loaded.\r
+                * @param {String} languageCode The code of the language file to be\r
+                *              loaded. If "autoDetect" is set to true, this language will be\r
+                *              used as the default one, if the detect language is not\r
+                *              available in the core.\r
+                * @param {Boolean} autoDetect Indicates that the function must try to\r
+                *              detect the user language and load it instead.\r
+                * @param {Function} callback The function to be called once the\r
+                *              language file is loaded. Two parameters are passed to this\r
+                *              function: the language code and the loaded language entries.\r
+                * @example\r
+                */\r
+               load : function( languageCode, defaultLanguage, callback )\r
+               {\r
+                       if ( !languageCode )\r
+                               languageCode = this.detect( defaultLanguage );\r
+\r
+                       if ( !this[ languageCode ] )\r
+                       {\r
+                               CKEDITOR.scriptLoader.load( CKEDITOR.getUrl(\r
+                                       'lang/' + languageCode + '.js' ),\r
+                                       function()\r
+                                               {\r
+                                                       callback( languageCode, this[ languageCode ] );\r
+                                               }\r
+                                               , this );\r
+                       }\r
+                       else\r
+                               callback( languageCode, this[ languageCode ] );\r
+               },\r
+\r
+               /**\r
+                * Returns the language that best fit the user language. For example,\r
+                * suppose that the user language is "pt-br". If this language is\r
+                * supported by the editor, it is returned. Otherwise, if only "pt" is\r
+                * supported, it is returned instead. If none of the previous are\r
+                * supported, a default language is then returned.\r
+                * @param {String} defaultLanguage The default language to be returned\r
+                *              if the user language is not supported.\r
+                * @returns {String} The detected language code.\r
+                * @example\r
+                * alert( CKEDITOR.lang.detect( 'en' ) );  // e.g., in a German browser: "de"\r
+                */\r
+               detect : function( defaultLanguage )\r
+               {\r
+                       var languages = this.languages;\r
+\r
+                       var parts = ( navigator.userLanguage || navigator.language )\r
+                                       .toLowerCase()\r
+                                       .match( /([a-z]+)(?:-([a-z]+))?/ ),\r
+                               lang = parts[1],\r
+                               locale = parts[2];\r
+\r
+                       if ( languages[ lang + '-' + locale ] )\r
+                               lang = lang + '-' + locale;\r
+                       else if ( !languages[ lang ] )\r
+                               lang = null;\r
+\r
+                       CKEDITOR.lang.detect = lang ?\r
+                               function() { return lang; } :\r
+                               function( defaultLanguage ) { return defaultLanguage; };\r
+\r
+                       return lang || defaultLanguage;\r
+               }\r
+       };\r
+\r
+})();\r
diff --git a/_source/core/loader.js b/_source/core/loader.js
new file mode 100644 (file)
index 0000000..8d6177f
--- /dev/null
@@ -0,0 +1,238 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.loader} objects, which is used to\r
+ *             load core scripts and their dependencies from _source.\r
+ */\r
+\r
+if ( typeof CKEDITOR == 'undefined' )\r
+       CKEDITOR = {};\r
+\r
+if ( !CKEDITOR.loader )\r
+{\r
+       /**\r
+        * Load core scripts and their dependencies from _source.\r
+        * @namespace\r
+        * @example\r
+        */\r
+       CKEDITOR.loader = (function()\r
+       {\r
+               // Table of script names and their dependencies.\r
+               var scripts =\r
+               {\r
+                       'core/_bootstrap'               : [ 'core/config', 'core/ckeditor', 'core/plugins', 'core/scriptloader', 'core/tools', /* The following are entries that we want to force loading at the end to avoid dependence recursion */ 'core/dom/elementpath', 'core/dom/text', 'core/dom/range' ],\r
+                       'core/ajax'                             : [ 'core/xml' ],\r
+                       'core/ckeditor'                 : [ 'core/ckeditor_basic', 'core/dom', 'core/dtd', 'core/dom/document', 'core/dom/element', 'core/editor', 'core/event', 'core/htmlparser', 'core/htmlparser/element', 'core/htmlparser/fragment', 'core/htmlparser/filter', 'core/htmlparser/basicwriter', 'core/tools' ],\r
+                       'core/ckeditor_base'    : [],\r
+                       'core/ckeditor_basic'   : [ 'core/editor_basic', 'core/env', 'core/event' ],\r
+                       'core/command'                  : [],\r
+                       'core/config'                   : [ 'core/ckeditor_base' ],\r
+                       'core/dom'                              : [],\r
+                       'core/dom/document'             : [ 'core/dom', 'core/dom/domobject', 'core/dom/window' ],\r
+                       'core/dom/documentfragment'     : [ 'core/dom/element' ],\r
+                       'core/dom/element'              : [ 'core/dom', 'core/dom/document', 'core/dom/domobject', 'core/dom/node', 'core/dom/nodelist', 'core/tools' ],\r
+                       'core/dom/elementpath'  : [ 'core/dom/element' ],\r
+                       'core/dom/event'                : [],\r
+                       'core/dom/node'                 : [ 'core/dom/domobject', 'core/tools' ],\r
+                       'core/dom/nodelist'             : [ 'core/dom/node' ],\r
+                       'core/dom/domobject'    : [ 'core/dom/event' ],\r
+                       'core/dom/range'                : [ 'core/dom/document', 'core/dom/documentfragment', 'core/dom/element', 'core/dom/walker' ],\r
+                       'core/dom/text'                 : [ 'core/dom/node', 'core/dom/domobject' ],\r
+                       'core/dom/walker'               : [ 'core/dom/node' ],\r
+                       'core/dom/window'               : [ 'core/dom/domobject' ],\r
+                       'core/dtd'                              : [ 'core/tools' ],\r
+                       'core/editor'                   : [ 'core/command', 'core/config', 'core/editor_basic', 'core/focusmanager', 'core/lang', 'core/plugins', 'core/skins', 'core/themes', 'core/tools', 'core/ui' ],\r
+                       'core/editor_basic'             : [ 'core/event' ],\r
+                       'core/env'                              : [],\r
+                       'core/event'                    : [],\r
+                       'core/focusmanager'             : [],\r
+                       'core/htmlparser'               : [],\r
+                       'core/htmlparser/comment'       : [ 'core/htmlparser' ],\r
+                       'core/htmlparser/element'       : [ 'core/htmlparser', 'core/htmlparser/fragment' ],\r
+                       'core/htmlparser/fragment'      : [ 'core/htmlparser', 'core/htmlparser/comment', 'core/htmlparser/text', 'core/htmlparser/cdata' ],\r
+                       'core/htmlparser/text'          : [ 'core/htmlparser' ],\r
+                       'core/htmlparser/cdata'         : [ 'core/htmlparser' ],\r
+                       'core/htmlparser/filter'        : [ 'core/htmlparser' ],\r
+                       'core/htmlparser/basicwriter': [ 'core/htmlparser' ],\r
+                       'core/imagecacher'              : [ 'core/dom/element' ],\r
+                       'core/lang'                             : [],\r
+                       'core/plugins'                  : [ 'core/resourcemanager' ],\r
+                       'core/resourcemanager'  : [ 'core/scriptloader', 'core/tools' ],\r
+                       'core/scriptloader'             : [ 'core/dom/element', 'core/env' ],\r
+                       'core/skins'                    : [ 'core/imagecacher', 'core/scriptloader' ],\r
+                       'core/themes'                   : [ 'core/resourcemanager' ],\r
+                       'core/tools'                    : [ 'core/env' ],\r
+                       'core/ui'                               : [],\r
+                       'core/xml'                              : [ 'core/env' ]\r
+               };\r
+\r
+               var basePath = (function()\r
+               {\r
+                       // This is a copy of CKEDITOR.basePath, but requires the script having\r
+                       // "_source/core/loader.js".\r
+                       if ( CKEDITOR && CKEDITOR.basePath )\r
+                               return CKEDITOR.basePath;\r
+\r
+                       // Find out the editor directory path, based on its <script> tag.\r
+                       var path = '';\r
+                       var scripts = document.getElementsByTagName( 'script' );\r
+\r
+                       for ( var i = 0 ; i < scripts.length ; i++ )\r
+                       {\r
+                               var match = scripts[i].src.match( /(^|.*[\\\/])core\/loader.js(?:\?.*)?$/i );\r
+\r
+                               if ( match )\r
+                               {\r
+                                       path = match[1];\r
+                                       break;\r
+                               }\r
+                       }\r
+\r
+                       // In IE (only) the script.src string is the raw valued entered in the\r
+                       // HTML. Other browsers return the full resolved URL instead.\r
+                       if ( path.indexOf('://') == -1 )\r
+                       {\r
+                               // Absolute path.\r
+                               if ( path.indexOf( '/' ) === 0 )\r
+                                       path = location.href.match( /^.*?:\/\/[^\/]*/ )[0] + path;\r
+                               // Relative path.\r
+                               else\r
+                                       path = location.href.match( /^[^\?]*\// )[0] + path;\r
+                       }\r
+\r
+                       return path;\r
+               })();\r
+\r
+               var timestamp = '97KD';\r
+\r
+               var getUrl = function( resource )\r
+               {\r
+                       if ( CKEDITOR && CKEDITOR.getUrl )\r
+                               return CKEDITOR.getUrl( resource );\r
+\r
+                       return basePath + resource +\r
+                               ( resource.indexOf( '?' ) >= 0 ? '&' : '?' ) +\r
+                               't=' + timestamp;\r
+               };\r
+\r
+               var pendingLoad = [];\r
+\r
+               /** @lends CKEDITOR.loader */\r
+               return {\r
+                       /**\r
+                        * The list of loaded scripts in their loading order.\r
+                        * @type Array\r
+                        * @example\r
+                        * // Alert the loaded script names.\r
+                        * alert( <b>CKEDITOR.loader.loadedScripts</b> );\r
+                        */\r
+                       loadedScripts : [],\r
+\r
+                       loadPending : function()\r
+                       {\r
+                               var scriptName = pendingLoad.shift();\r
+\r
+                               if ( !scriptName )\r
+                                       return;\r
+\r
+                               var scriptSrc = getUrl( '_source/' + scriptName + '.js' );\r
+\r
+                               var script = document.createElement( 'script' );\r
+                               script.type = 'text/javascript';\r
+                               script.src = scriptSrc;\r
+\r
+                               function onScriptLoaded()\r
+                               {\r
+                                       // Append this script to the list of loaded scripts.\r
+                                       CKEDITOR.loader.loadedScripts.push( scriptName );\r
+\r
+                                       // Load the next.\r
+                                       CKEDITOR.loader.loadPending();\r
+                               }\r
+\r
+                               // We must guarantee the execution order of the scripts, so we\r
+                               // need to load them one by one. (#4145)\r
+                               // The followin if/else block has been taken from the scriptloader core code.\r
+                               if ( CKEDITOR.env.ie )\r
+                               {\r
+                                       /** @ignore */\r
+                                       script.onreadystatechange = function()\r
+                                       {\r
+                                               if ( script.readyState == 'loaded' || script.readyState == 'complete' )\r
+                                               {\r
+                                                       script.onreadystatechange = null;\r
+                                                       onScriptLoaded();\r
+                                               }\r
+                                       };\r
+                               }\r
+                               else\r
+                               {\r
+                                       /** @ignore */\r
+                                       script.onload = function()\r
+                                       {\r
+                                               // Some browsers, such as Safari, may call the onLoad function\r
+                                               // immediately. Which will break the loading sequence. (#3661)\r
+                                               setTimeout( function() { onScriptLoaded( scriptName ); }, 0 );\r
+                                       };\r
+                               }\r
+\r
+                               document.body.appendChild( script );\r
+                       },\r
+\r
+                       /**\r
+                        * Loads a specific script, including its dependencies. This is not a\r
+                        * synchronous loading, which means that the code the be loaded will\r
+                        * not necessarily be available after this call.\r
+                        * @example\r
+                        * CKEDITOR.loader.load( 'core/dom/element' );\r
+                        */\r
+                       load : function( scriptName, defer )\r
+                       {\r
+                               // Check if the script has already been loaded.\r
+                               if ( scriptName in this.loadedScripts )\r
+                                       return;\r
+\r
+                               // Get the script dependencies list.\r
+                               var dependencies = scripts[ scriptName ];\r
+                               if ( !dependencies )\r
+                                       throw 'The script name"' + scriptName + '" is not defined.';\r
+\r
+                               // Mark the script as loaded, even before really loading it, to\r
+                               // avoid cross references recursion.\r
+                               this.loadedScripts[ scriptName ] = true;\r
+\r
+                               // Load all dependencies first.\r
+                               for ( var i = 0 ; i < dependencies.length ; i++ )\r
+                                       this.load( dependencies[ i ], true );\r
+\r
+                               var scriptSrc = getUrl( '_source/' + scriptName + '.js' );\r
+\r
+                               // Append the <script> element to the DOM.\r
+                               if ( document.body )\r
+                               {\r
+                                       pendingLoad.push( scriptName );\r
+\r
+                                       if ( !defer )\r
+                                               this.loadPending();\r
+                               }\r
+                               else\r
+                               {\r
+                                       // Append this script to the list of loaded scripts.\r
+                                       this.loadedScripts.push( scriptName );\r
+\r
+                                       document.write( '<script src="' + scriptSrc + '" type="text/javascript"><\/script>' );\r
+                               }\r
+                       }\r
+               };\r
+       })();\r
+}\r
+\r
+// Check if any script has been defined for autoload.\r
+if ( CKEDITOR._autoLoad )\r
+{\r
+       CKEDITOR.loader.load( CKEDITOR._autoLoad );\r
+       delete CKEDITOR._autoLoad;\r
+}\r
diff --git a/_source/core/plugindefinition.js b/_source/core/plugindefinition.js
new file mode 100644 (file)
index 0000000..d8e4c1c
--- /dev/null
@@ -0,0 +1,66 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the "virtual" {@link CKEDITOR.pluginDefinition} class, which\r
+ *             contains the defintion of a plugin. This file is for documentation\r
+ *             purposes only.\r
+ */\r
+\r
+/**\r
+ * (Virtual Class) Do not call this constructor. This class is not really part\r
+ *             of the API. It just illustrates the features of plugin objects to be\r
+ *             passed to the {@link CKEDITOR.plugins.add} function.\r
+ * @name CKEDITOR.pluginDefinition\r
+ * @constructor\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * A list of plugins that are required by this plugin. Note that this property\r
+ * doesn't guarantee the loading order of the plugins.\r
+ * @name CKEDITOR.pluginDefinition.prototype.requires\r
+ * @type Array\r
+ * @example\r
+ * CKEDITOR.plugins.add( 'sample',\r
+ * {\r
+ *     requires : [ 'button', 'selection' ]\r
+ * });\r
+ */\r
+\r
+ /**\r
+ * Function called on initialization of every editor instance created in the\r
+ * page before the init() call task. The beforeInit function will be called for\r
+ * all plugins, after that the init function is called for all of them. This\r
+ * feature makes it possible to initialize things that could be used in the\r
+ * init function of other plugins.\r
+ * @name CKEDITOR.pluginDefinition.prototype.beforeInit\r
+ * @function\r
+ * @param {CKEDITOR.editor} editor The editor instance being initialized.\r
+ * @example\r
+ * CKEDITOR.plugins.add( 'sample',\r
+ * {\r
+ *     beforeInit : function( editor )\r
+ *     {\r
+ *         alert( 'Editor "' + editor.name + '" is to be initialized!' );\r
+ *     }\r
+ * });\r
+ */\r
+\r
+ /**\r
+ * Function called on initialization of every editor instance created in the\r
+ * page.\r
+ * @name CKEDITOR.pluginDefinition.prototype.init\r
+ * @function\r
+ * @param {CKEDITOR.editor} editor The editor instance being initialized.\r
+ * @example\r
+ * CKEDITOR.plugins.add( 'sample',\r
+ * {\r
+ *     init : function( editor )\r
+ *     {\r
+ *         alert( 'Editor "' + editor.name + '" is being initialized!' );\r
+ *     }\r
+ * });\r
+ */\r
diff --git a/_source/core/plugins.js b/_source/core/plugins.js
new file mode 100644 (file)
index 0000000..5137e3f
--- /dev/null
@@ -0,0 +1,82 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.plugins} object, which is used to\r
+ *             manage plugins registration and loading.\r
+ */\r
+\r
+/**\r
+ * Manages plugins registration and loading.\r
+ * @namespace\r
+ * @augments CKEDITOR.resourceManager\r
+ * @example\r
+ */\r
+CKEDITOR.plugins = new CKEDITOR.resourceManager(\r
+       'plugins/', 'plugin' );\r
+\r
+// PACKAGER_RENAME( CKEDITOR.plugins )\r
+\r
+CKEDITOR.plugins.load = CKEDITOR.tools.override( CKEDITOR.plugins.load, function( originalLoad )\r
+       {\r
+               return function( name, callback, scope )\r
+               {\r
+                       var allPlugins = {};\r
+\r
+                       var loadPlugins = function( names )\r
+                       {\r
+                               originalLoad.call( this, names, function( plugins )\r
+                                       {\r
+                                               CKEDITOR.tools.extend( allPlugins, plugins );\r
+\r
+                                               var requiredPlugins = [];\r
+                                               for ( var pluginName in plugins )\r
+                                               {\r
+                                                       var plugin = plugins[ pluginName ],\r
+                                                               requires = plugin && plugin.requires;\r
+\r
+                                                       if ( requires )\r
+                                                       {\r
+                                                               for ( var i = 0 ; i < requires.length ; i++ )\r
+                                                               {\r
+                                                                       if ( !allPlugins[ requires[ i ] ] )\r
+                                                                               requiredPlugins.push( requires[ i ] );\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+\r
+                                               if ( requiredPlugins.length )\r
+                                                       loadPlugins.call( this, requiredPlugins );\r
+                                               else\r
+                                               {\r
+                                                       // Call the "onLoad" function for all plugins.\r
+                                                       for ( pluginName in allPlugins )\r
+                                                       {\r
+                                                               plugin = allPlugins[ pluginName ];\r
+                                                               if ( plugin.onLoad && !plugin.onLoad._called )\r
+                                                               {\r
+                                                                       plugin.onLoad();\r
+                                                                       plugin.onLoad._called = 1;\r
+                                                               }\r
+                                                       }\r
+\r
+                                                       // Call the callback.\r
+                                                       if ( callback )\r
+                                                               callback.call( scope || window, allPlugins );\r
+                                               }\r
+                                       }\r
+                                       , this);\r
+\r
+                       };\r
+\r
+                       loadPlugins.call( this, name );\r
+               };\r
+       });\r
+\r
+CKEDITOR.plugins.setLang = function( pluginName, languageCode, languageEntries )\r
+{\r
+       var plugin = this.get( pluginName );\r
+       plugin.lang[ languageCode ] = languageEntries;\r
+};\r
diff --git a/_source/core/resourcemanager.js b/_source/core/resourcemanager.js
new file mode 100644 (file)
index 0000000..ebf6be3
--- /dev/null
@@ -0,0 +1,233 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.resourceManager} class, which is\r
+ *             the base for resource managers, like plugins and themes.\r
+ */\r
+\r
+ /**\r
+ * Base class for resource managers, like plugins and themes. This class is not\r
+ * intended to be used out of the CKEditor core code.\r
+ * @param {String} basePath The path for the resources folder.\r
+ * @param {String} fileName The name used for resource files.\r
+ * @namespace\r
+ * @example\r
+ */\r
+CKEDITOR.resourceManager = function( basePath, fileName )\r
+{\r
+       /**\r
+        * The base directory containing all resources.\r
+        * @name CKEDITOR.resourceManager.prototype.basePath\r
+        * @type String\r
+        * @example\r
+        */\r
+       this.basePath = basePath;\r
+\r
+       /**\r
+        * The name used for resource files.\r
+        * @name CKEDITOR.resourceManager.prototype.fileName\r
+        * @type String\r
+        * @example\r
+        */\r
+       this.fileName = fileName;\r
+\r
+       /**\r
+        * Contains references to all resources that have already been registered\r
+        * with {@link #add}.\r
+        * @name CKEDITOR.resourceManager.prototype.registered\r
+        * @type Object\r
+        * @example\r
+        */\r
+       this.registered = {};\r
+\r
+       /**\r
+        * Contains references to all resources that have already been loaded\r
+        * with {@link #load}.\r
+        * @name CKEDITOR.resourceManager.prototype.loaded\r
+        * @type Object\r
+        * @example\r
+        */\r
+       this.loaded = {};\r
+\r
+       /**\r
+        * Contains references to all resources that have already been registered\r
+        * with {@link #addExternal}.\r
+        * @name CKEDITOR.resourceManager.prototype.externals\r
+        * @type Object\r
+        * @example\r
+        */\r
+       this.externals = {};\r
+\r
+       /**\r
+        * @private\r
+        */\r
+       this._ =\r
+       {\r
+               // List of callbacks waiting for plugins to be loaded.\r
+               waitingList : {}\r
+       };\r
+};\r
+\r
+CKEDITOR.resourceManager.prototype =\r
+{\r
+       /**\r
+        * Registers a resource.\r
+        * @param {String} name The resource name.\r
+        * @param {Object} [definition] The resource definition.\r
+        * @example\r
+        * CKEDITOR.plugins.add( 'sample', { ... plugin definition ... } );\r
+        * @see CKEDITOR.pluginDefinition\r
+        */\r
+       add : function( name, definition )\r
+       {\r
+               if ( this.registered[ name ] )\r
+                       throw '[CKEDITOR.resourceManager.add] The resource name "' + name + '" is already registered.';\r
+\r
+               this.registered[ name ] = definition || {};\r
+       },\r
+\r
+       /**\r
+        * Gets the definition of a specific resource.\r
+        * @param {String} name The resource name.\r
+        * @type Object\r
+        * @example\r
+        * var definition = <b>CKEDITOR.plugins.get( 'sample' )</b>;\r
+        */\r
+       get : function( name )\r
+       {\r
+               return this.registered[ name ] || null;\r
+       },\r
+\r
+       /**\r
+        * Get the folder path for a specific loaded resource.\r
+        * @param {String} name The resource name.\r
+        * @type String\r
+        * @example\r
+        * alert( <b>CKEDITOR.plugins.getPath( 'sample' )</b> );  // "&lt;editor path&gt;/plugins/sample/"\r
+        */\r
+       getPath : function( name )\r
+       {\r
+               var external = this.externals[ name ];\r
+               return CKEDITOR.getUrl( ( external && external.dir ) || this.basePath + name + '/' );\r
+       },\r
+\r
+       /**\r
+        * Get the file path for a specific loaded resource.\r
+        * @param {String} name The resource name.\r
+        * @type String\r
+        * @example\r
+        * alert( <b>CKEDITOR.plugins.getFilePath( 'sample' )</b> );  // "&lt;editor path&gt;/plugins/sample/plugin.js"\r
+        */\r
+       getFilePath : function( name )\r
+       {\r
+               var external = this.externals[ name ];\r
+               return CKEDITOR.getUrl(\r
+                               this.getPath( name ) +\r
+                               ( ( external && external.file ) || ( this.fileName + '.js' ) ) );\r
+       },\r
+\r
+       /**\r
+        * Registers one or more resources to be loaded from an external path\r
+        * instead of the core base path.\r
+        * @param {String} names The resource names, separated by commas.\r
+        * @param {String} path The path of the folder containing the resource.\r
+        * @param {String} [fileName] The resource file name. If not provided, the\r
+        *              default name is used.\r
+        * @example\r
+        * // Loads a plugin from '/myplugin/samples/plugin.js'.\r
+        * CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/' );\r
+        * @example\r
+        * // Loads a plugin from '/myplugin/samples/my_plugin.js'.\r
+        * CKEDITOR.plugins.addExternal( 'sample', '/myplugins/sample/', 'my_plugin.js' );\r
+        */\r
+       addExternal : function( names, path, fileName )\r
+       {\r
+               names = names.split( ',' );\r
+               for ( var i = 0 ; i < names.length ; i++ )\r
+               {\r
+                       var name = names[ i ];\r
+\r
+                       this.externals[ name ] =\r
+                       {\r
+                               dir : path,\r
+                               file : fileName\r
+                       };\r
+               }\r
+       },\r
+\r
+       /**\r
+        * Loads one or more resources.\r
+        * @param {String|Array} name The name of the resource to load. It may be a\r
+        *              string with a single resource name, or an array with several names.\r
+        * @param {Function} callback A function to be called when all resources\r
+        *              are loaded. The callback will receive an array containing all\r
+        *              loaded names.\r
+        * @param {Object} [scope] The scope object to be used for the callback\r
+        *              call.\r
+        * @example\r
+        * <b>CKEDITOR.plugins.load</b>( 'myplugin', function( plugins )\r
+        *     {\r
+        *         alert( plugins['myplugin'] );  // "object"\r
+        *     });\r
+        */\r
+       load : function( names, callback, scope )\r
+       {\r
+               // Ensure that we have an array of names.\r
+               if ( !CKEDITOR.tools.isArray( names ) )\r
+                       names = names ? [ names ] : [];\r
+\r
+               var loaded = this.loaded,\r
+                       registered = this.registered,\r
+                       urls = [],\r
+                       urlsNames = {},\r
+                       resources = {};\r
+\r
+               // Loop through all names.\r
+               for ( var i = 0 ; i < names.length ; i++ )\r
+               {\r
+                       var name = names[ i ];\r
+\r
+                       if ( !name )\r
+                               continue;\r
+\r
+                       // If not available yet.\r
+                       if ( !loaded[ name ] && !registered[ name ] )\r
+                       {\r
+                               var url = this.getFilePath( name );\r
+                               urls.push( url );\r
+                               if ( !( url in urlsNames ) )\r
+                                       urlsNames[ url ] = [];\r
+                               urlsNames[ url ].push( name );\r
+                       }\r
+                       else\r
+                               resources[ name ] = this.get( name );\r
+               }\r
+\r
+               CKEDITOR.scriptLoader.load( urls, function( completed, failed )\r
+                       {\r
+                               if ( failed.length )\r
+                               {\r
+                                       throw '[CKEDITOR.resourceManager.load] Resource name "' + urlsNames[ failed[ 0 ] ].join( ',' )\r
+                                               + '" was not found at "' + failed[ 0 ] + '".';\r
+                               }\r
+\r
+                               for ( var i = 0 ; i < completed.length ; i++ )\r
+                               {\r
+                                       var nameList = urlsNames[ completed[ i ] ];\r
+                                       for ( var j = 0 ; j < nameList.length ; j++ )\r
+                                       {\r
+                                               var name = nameList[ j ];\r
+                                               resources[ name ] = this.get( name );\r
+\r
+                                               loaded[ name ] = 1;\r
+                                       }\r
+                               }\r
+\r
+                               callback.call( scope, resources );\r
+                       }\r
+                       , this);\r
+       }\r
+};\r
diff --git a/_source/core/scriptloader.js b/_source/core/scriptloader.js
new file mode 100644 (file)
index 0000000..6e7884b
--- /dev/null
@@ -0,0 +1,194 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.scriptLoader} object, used to load scripts\r
+ *             asynchronously.\r
+ */\r
+\r
+/**\r
+ * Load scripts asynchronously.\r
+ * @namespace\r
+ * @example\r
+ */\r
+CKEDITOR.scriptLoader = (function()\r
+{\r
+       var uniqueScripts = {};\r
+       var waitingList = {};\r
+\r
+       return /** @lends CKEDITOR.scriptLoader */ {\r
+               /**\r
+                * Loads one or more external script checking if not already loaded\r
+                * previously by this function.\r
+                * @param {String|Array} scriptUrl One or more URLs pointing to the\r
+                *              scripts to be loaded.\r
+                * @param {Function} [callback] A function to be called when the script\r
+                *              is loaded and executed. If a string is passed to "scriptUrl", a\r
+                *              boolean parameter is passed to the callback, indicating the\r
+                *              success of the load. If an array is passed instead, two array\r
+                *              parameters are passed to the callback; the first contains the\r
+                *              URLs that have been properly loaded, and the second the failed\r
+                *              ones.\r
+                * @param {Object} [scope] The scope ("this" reference) to be used for\r
+                *              the callback call. Default to {@link CKEDITOR}.\r
+                * @param {Boolean} [noCheck] Indicates that the script must be loaded\r
+                *              anyway, not checking if it has already loaded.\r
+                * @example\r
+                * CKEDITOR.scriptLoader.load( '/myscript.js' );\r
+                * @example\r
+                * CKEDITOR.scriptLoader.load( '/myscript.js', function( success )\r
+                *     {\r
+                *         // Alerts "true" if the script has been properly loaded.\r
+                *         // HTTP error 404 should return "false".\r
+                *         alert( success );\r
+                *     });\r
+                * @example\r
+                * CKEDITOR.scriptLoader.load( [ '/myscript1.js', '/myscript2.js' ], function( completed, failed )\r
+                *     {\r
+                *         alert( 'Number of scripts loaded: ' + completed.length );\r
+                *         alert( 'Number of failures: ' + failed.length );\r
+                *     });\r
+                */\r
+               load : function( scriptUrl, callback, scope, noCheck )\r
+               {\r
+                       var isString = ( typeof scriptUrl == 'string' );\r
+\r
+                       if ( isString )\r
+                               scriptUrl = [ scriptUrl ];\r
+\r
+                       if ( !scope )\r
+                               scope = CKEDITOR;\r
+\r
+                       var scriptCount = scriptUrl.length,\r
+                               completed = [],\r
+                               failed = [];\r
+\r
+                       var doCallback = function( success )\r
+                       {\r
+                               if ( callback )\r
+                               {\r
+                                       if ( isString )\r
+                                               callback.call( scope, success );\r
+                                       else\r
+                                               callback.call( scope, completed, failed );\r
+                               }\r
+                       };\r
+\r
+                       if ( scriptCount === 0 )\r
+                       {\r
+                               doCallback( true );\r
+                               return;\r
+                       }\r
+\r
+                       var checkLoaded = function( url, success )\r
+                       {\r
+                               ( success ? completed : failed ).push( url );\r
+\r
+                               if ( --scriptCount <= 0 )\r
+                                       doCallback( success );\r
+                       };\r
+\r
+                       var onLoad = function( url, success )\r
+                       {\r
+                               // Mark this script as loaded.\r
+                               uniqueScripts[ url ] = 1;\r
+\r
+                               // Get the list of callback checks waiting for this file.\r
+                               var waitingInfo = waitingList[ url ];\r
+                               delete waitingList[ url ];\r
+\r
+                               // Check all callbacks waiting for this file.\r
+                               for ( var i = 0 ; i < waitingInfo.length ; i++ )\r
+                                       waitingInfo[ i ]( url, success );\r
+                       };\r
+\r
+                       var loadScript = function( url )\r
+                       {\r
+                               if ( noCheck !== true && uniqueScripts[ url ] )\r
+                               {\r
+                                       checkLoaded( url, true );\r
+                                       return;\r
+                               }\r
+\r
+                               var waitingInfo = waitingList[ url ] || ( waitingList[ url ] = [] );\r
+                               waitingInfo.push( checkLoaded );\r
+\r
+                               // Load it only for the first request.\r
+                               if ( waitingInfo.length > 1 )\r
+                                       return;\r
+\r
+                               // Create the <script> element.\r
+                               var script = new CKEDITOR.dom.element( 'script' );\r
+                               script.setAttributes( {\r
+                                       type : 'text/javascript',\r
+                                       src : url } );\r
+\r
+                               if ( callback )\r
+                               {\r
+                                       if ( CKEDITOR.env.ie )\r
+                                       {\r
+                                               // FIXME: For IE, we are not able to return false on error (like 404).\r
+\r
+                                               /** @ignore */\r
+                                               script.$.onreadystatechange = function ()\r
+                                               {\r
+                                                       if ( script.$.readyState == 'loaded' || script.$.readyState == 'complete' )\r
+                                                       {\r
+                                                               script.$.onreadystatechange = null;\r
+                                                               onLoad( url, true );\r
+                                                       }\r
+                                               };\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               /** @ignore */\r
+                                               script.$.onload = function()\r
+                                               {\r
+                                                       // Some browsers, such as Safari, may call the onLoad function\r
+                                                       // immediately. Which will break the loading sequence. (#3661)\r
+                                                       setTimeout( function() { onLoad( url, true ); }, 0 );\r
+                                               };\r
+\r
+                                               // FIXME: Opera and Safari will not fire onerror.\r
+\r
+                                               /** @ignore */\r
+                                               script.$.onerror = function()\r
+                                               {\r
+                                                       onLoad( url, false );\r
+                                               };\r
+                                       }\r
+                               }\r
+\r
+                               // Append it to <head>.\r
+                               script.appendTo( CKEDITOR.document.getHead() );\r
+\r
+                               CKEDITOR.fire( 'download', url );               // @Packager.RemoveLine\r
+                       };\r
+\r
+                       for ( var i = 0 ; i < scriptCount ; i++ )\r
+                       {\r
+                               loadScript( scriptUrl[ i ] );\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * Executes a JavaScript code into the current document.\r
+                * @param {String} code The code to be executed.\r
+                * @example\r
+                * CKEDITOR.scriptLoader.loadCode( 'var x = 10;' );\r
+                * alert( x );  // "10"\r
+                */\r
+               loadCode : function( code )\r
+               {\r
+                       // Create the <script> element.\r
+                       var script = new CKEDITOR.dom.element( 'script' );\r
+                       script.setAttribute( 'type', 'text/javascript' );\r
+                       script.appendText( code );\r
+\r
+                       // Append it to <head>.\r
+                       script.appendTo( CKEDITOR.document.getHead() );\r
+               }\r
+       };\r
+})();\r
diff --git a/_source/core/skins.js b/_source/core/skins.js
new file mode 100644 (file)
index 0000000..2de7456
--- /dev/null
@@ -0,0 +1,185 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.skins} object, which is used to\r
+ *             manage skins loading.\r
+ */\r
+\r
+/**\r
+ * Manages skins loading.\r
+ * @namespace\r
+ * @example\r
+ */\r
+CKEDITOR.skins = (function()\r
+{\r
+       // Holds the list of loaded skins.\r
+       var loaded = {};\r
+       var preloaded = {};\r
+       var paths = {};\r
+\r
+       var loadedPart = function( skinName, part, callback )\r
+       {\r
+               // Get the skin definition.\r
+               var skinDefinition = loaded[ skinName ];\r
+\r
+               var appendSkinPath = function( fileNames )\r
+               {\r
+                       for ( var n = 0 ; n < fileNames.length ; n++ )\r
+                       {\r
+                               fileNames[ n ] = CKEDITOR.getUrl( paths[ skinName ] + fileNames[ n ] );\r
+                       }\r
+               };\r
+\r
+               // Check if we need to preload images from it.\r
+               if ( !preloaded[ skinName ] )\r
+               {\r
+                       var preload = skinDefinition.preload;\r
+                       if ( preload && preload.length > 0 )\r
+                       {\r
+                               appendSkinPath( preload );\r
+                               CKEDITOR.imageCacher.load( preload, function()\r
+                                       {\r
+                                               preloaded[ skinName ] = 1;\r
+                                               loadedPart( skinName, part, callback );\r
+                                       } );\r
+                               return;\r
+                       }\r
+\r
+                       // Mark it as preloaded.\r
+                       preloaded[ skinName ] = 1;\r
+               }\r
+\r
+               // Get the part definition.\r
+               part = skinDefinition[ part ];\r
+               var partIsLoaded = !part || !!part._isLoaded;\r
+\r
+               // Call the callback immediately if already loaded.\r
+               if ( partIsLoaded )\r
+                       callback && callback();\r
+               else\r
+               {\r
+                       // Put the callback in a queue.\r
+                       var pending = part._pending || ( part._pending = [] );\r
+                       pending.push( callback );\r
+\r
+                       // We may have more than one skin part load request. Just the first\r
+                       // one must do the loading job.\r
+                       if ( pending.length > 1 )\r
+                               return;\r
+\r
+                       // Check whether the "css" and "js" properties have been defined\r
+                       // for that part.\r
+                       var cssIsLoaded = !part.css || !part.css.length;\r
+                       var jsIsLoaded = !part.js || !part.js.length;\r
+\r
+                       // This is the function that will trigger the callback calls on\r
+                       // load.\r
+                       var checkIsLoaded = function()\r
+                       {\r
+                               if ( cssIsLoaded && jsIsLoaded )\r
+                               {\r
+                                       // Mark the part as loaded.\r
+                                       part._isLoaded = 1;\r
+\r
+                                       // Call all pending callbacks.\r
+                                       for ( var i = 0 ; i < pending.length ; i++ )\r
+                                       {\r
+                                               if ( pending[ i ] )\r
+                                                       pending[ i ]();\r
+                                       }\r
+                               }\r
+                       };\r
+\r
+                       // Load the "css" pieces.\r
+                       if ( !cssIsLoaded )\r
+                       {\r
+                               appendSkinPath( part.css );\r
+\r
+                               for ( var c = 0 ; c < part.css.length ; c++ )\r
+                                       CKEDITOR.document.appendStyleSheet( part.css[ c ] );\r
+\r
+                               cssIsLoaded = 1;\r
+                       }\r
+\r
+                       // Load the "js" pieces.\r
+                       if ( !jsIsLoaded )\r
+                       {\r
+                               appendSkinPath( part.js );\r
+                               CKEDITOR.scriptLoader.load( part.js, function()\r
+                                       {\r
+                                               jsIsLoaded = 1;\r
+                                               checkIsLoaded();\r
+                                       });\r
+                       }\r
+\r
+                       // We may have nothing to load, so check it immediately.\r
+                       checkIsLoaded();\r
+               }\r
+       };\r
+\r
+       return /** @lends CKEDITOR.skins */ {\r
+\r
+               /**\r
+                * Registers a skin definition.\r
+                * @param {String} skinName The skin name.\r
+                * @param {Object} skinDefinition The skin definition.\r
+                * @example\r
+                */\r
+               add : function( skinName, skinDefinition )\r
+               {\r
+                       loaded[ skinName ] = skinDefinition;\r
+\r
+                       skinDefinition.skinPath = paths[ skinName ]\r
+                               || ( paths[ skinName ] =\r
+                                               CKEDITOR.getUrl(\r
+                                                       'skins/' + skinName + '/' ) );\r
+               },\r
+\r
+               /**\r
+                * Loads a skin part. Skins are defined in parts, which are basically\r
+                * separated CSS files. This function is mainly used by the core code and\r
+                * should not have much use out of it.\r
+                * @param {String} skinName The name of the skin to be loaded.\r
+                * @param {String} skinPart The skin part to be loaded. Common skin parts\r
+                *              are "editor" and "dialog".\r
+                * @param {Function} [callback] A function to be called once the skin\r
+                *              part files are loaded.\r
+                * @example\r
+                */\r
+               load : function( editor, skinPart, callback )\r
+               {\r
+                       var skinName = editor.skinName,\r
+                               skinPath = editor.skinPath;\r
+\r
+                       if ( loaded[ skinName ] )\r
+                       {\r
+                               loadedPart( skinName, skinPart, callback );\r
+\r
+                               // Get the skin definition.\r
+                               var skinDefinition = loaded[ skinName ];\r
+\r
+                               // Trigger init function if any.\r
+                               if ( skinDefinition.init )\r
+                                       skinDefinition.init( editor );\r
+                       }\r
+                       else\r
+                       {\r
+                               paths[ skinName ] = skinPath;\r
+                               CKEDITOR.scriptLoader.load( skinPath + 'skin.js', function()\r
+                                               {\r
+                                                       loadedPart( skinName, skinPart, callback );\r
+\r
+                                                       // Get the skin definition.\r
+                                                       var skinDefinition = loaded[ skinName ];\r
+\r
+                                                       // Trigger init function if any.\r
+                                                       if ( skinDefinition.init )\r
+                                                               skinDefinition.init( editor );\r
+                                               });\r
+                       }\r
+               }\r
+       };\r
+})();\r
diff --git a/_source/core/test.js b/_source/core/test.js
new file mode 100644 (file)
index 0000000..1d32c53
--- /dev/null
@@ -0,0 +1,184 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.test} object, which contains\r
+ *             functions used at our testing environment.\r
+ */\r
+\r
+/*jsl:import ../tests/yuitest.js*/\r
+\r
+/**\r
+ * Contains functions used at our testing environment. Currently,\r
+ * our testing system is based on the\r
+ * <a href="http://developer.yahoo.com/yui/yuitest/">YUI Test</a>.\r
+ * @namespace\r
+ * @example\r
+ */\r
+CKEDITOR.test =\r
+{\r
+       /**\r
+        * The assertion namespace, containing all assertion functions. Currently,\r
+        * this is an alias for\r
+        * <a href="http://developer.yahoo.com/yui/docs/YAHOO.util.Assert.html">YAHOO.util.Assert</a>.\r
+        * @example\r
+        * <b>CKEDITOR.test.assert</b>.areEqual( '10', 10 );        // "true"\r
+        * <b>CKEDITOR.test.assert</b>.areSame( '10', 10 );         // "false"\r
+        * <b>CKEDITOR.test.assert</b>.isUndefined( window.test );  // "true"\r
+        */\r
+       assert : YAHOO.util.Assert,\r
+\r
+       runner : YAHOO.tool.TestRunner,\r
+\r
+       /**\r
+        * Adds a test case to the test runner.\r
+        * @param {Object} testCase The test case object. See other tests for\r
+        *              examples.\r
+        * @example\r
+        * <b>CKEDITOR.test.addTestCase</b>((function()\r
+        * {\r
+        *     // Local reference to the "assert" object.\r
+        *     var assert = CKEDITOR.test.assert;\r
+        *\r
+        *     return {\r
+        *         test_example : function()\r
+        *         {\r
+        *             assert.areSame( '10', 10 );  // FAIL\r
+        *         }\r
+        *      };\r
+        * })());\r
+        */\r
+       addTestCase : function( testCase )\r
+       {\r
+               YAHOO.tool.TestRunner.add( new YAHOO.tool.TestCase( testCase ) );\r
+       },\r
+\r
+       /**\r
+        * Gets the inner HTML of an element, for testing purposes.\r
+        * @param {Boolean} stripLineBreaks Assign 'false' to avoid trimming line-breaks.\r
+        */\r
+       getInnerHtml : function( elementOrId , stripLineBreaks )\r
+       {\r
+               var html;\r
+\r
+               if ( typeof elementOrId == 'string' )\r
+                       html = document.getElementById( elementOrId ).innerHTML;\r
+               else if ( elementOrId.getHtml )\r
+                       html = elementOrId.getHtml();\r
+               else\r
+                       html = elementOrId.innerHTML    // retrieve from innerHTML\r
+                                  || elementOrId.value;    // retrieve from value\r
+\r
+               return CKEDITOR.test.fixHtml( html, stripLineBreaks );\r
+       },\r
+\r
+       fixHtml : function( html, stripLineBreaks )\r
+       {\r
+               html = html.toLowerCase();\r
+\r
+               if ( stripLineBreaks !== false )\r
+                       html = html.replace( /[\n\r]/g, '' );\r
+               else\r
+                       html = html.replace( /\r/g, '' );    // Normalize CRLF.\r
+\r
+               function sorter( a, b )\r
+               {\r
+                       var nameA = a[ 0 ];\r
+                       var nameB = b[ 0 ];\r
+                       return nameA < nameB ? -1 : nameA > nameB ? 1 : 0;\r
+               }\r
+\r
+               html = html.replace( /<\w[^>]*/g, function( match )\r
+                       {\r
+                               var attribs = [];\r
+                               var hasClass;\r
+\r
+                               match = match.replace( /\s([^\s=]+)=((?:"[^"]*")|(?:'[^']*')|(?:[^\s]+))/g, function( match, attName, attValue )\r
+                                       {\r
+                                               if ( attName == 'style' )\r
+                                               {\r
+                                                       // Reorganize the style rules so they are sorted by name.\r
+\r
+                                                       var rules = [];\r
+\r
+                                                       // Push all rules into an Array.\r
+                                                       attValue.replace( /(?:"| |;|^ )\s*([^ :]+?)\s*:\s*([^;"]+?)\s*(?=;|"|$)/g, function( match, name, value )\r
+                                                               {\r
+                                                                       rules.push( [ name, value ] );\r
+                                                               });\r
+\r
+                                                       // Sort the Array.\r
+                                                       rules.sort( sorter );\r
+\r
+                                                       // Transform each rule entry into a string name:value.\r
+                                                       for ( var i = 0 ; i < rules.length ; i++ )\r
+                                                               rules[ i ] = rules[ i ].join( ':' );\r
+\r
+                                                       // Join all rules with commas, removing spaces and adding an extra comma to the end.\r
+                                                       attValue = '"' + rules && ( rules.join( ';' ).replace( /\s+/g, '' ) + ';' );\r
+                                               }\r
+\r
+                                               // IE may have 'class' more than once.\r
+                                               if ( attName == 'class' )\r
+                                               {\r
+                                                       if ( hasClass )\r
+                                                               return '';\r
+\r
+                                                       hasClass = true;\r
+                                               }\r
+\r
+                                               if ( attName != '_cke_expando' )\r
+                                                       attribs.push( [ attName, attValue ] );\r
+\r
+                                               return '';\r
+                                       } );\r
+\r
+                               attribs.sort( sorter );\r
+\r
+                               var ret = match.replace( /\s{2,}/g, ' ' );\r
+\r
+                               for ( var i = 0 ; i < attribs.length ; i++ )\r
+                               {\r
+                                       ret += ' ' + attribs[i][0] + '=';\r
+                                       ret += (/^["']/).test( attribs[i][1] ) ? attribs[i][1] : '"' + attribs[i][1] + '"';\r
+                               }\r
+\r
+                               return ret;\r
+                       } );\r
+\r
+               return html;\r
+       },\r
+\r
+       /**\r
+        * Wrapper of CKEDITOR.dom.element::getAttribute for style text normalization.\r
+        * @param element\r
+        * @param attrName\r
+        */\r
+       getAttribute : function( element, attrName )\r
+       {\r
+               var retval = element.getAttribute( attrName );\r
+               if ( attrName == 'style' )\r
+               {\r
+                       // 1. Lower case property name.\r
+                       // 2. Add space after colon.\r
+                       // 3. Strip whitepsaces around semicolon.\r
+                       // 4. Always end with semicolon\r
+                       return retval.replace( /(?:^|;)\s*([A-Z-_]+)(:\s*)/ig,\r
+                               function( match, property, colon )\r
+                               {\r
+                                       return property.toLowerCase() + ': ';\r
+                               } )\r
+                               .replace( /\s+(?:;\s*|$)/g, ';' )\r
+                               .replace( /([^;])$/g, '$1;' );\r
+               }\r
+\r
+               return retval;\r
+       },\r
+\r
+       /**\r
+        * Whether control the runner manually instead of running on window onload.\r
+        */\r
+       deferRunner : false\r
+};\r
diff --git a/_source/core/themes.js b/_source/core/themes.js
new file mode 100644 (file)
index 0000000..f345206
--- /dev/null
@@ -0,0 +1,18 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.themes} object, which is used to\r
+ *             manage themes registration and loading.\r
+ */\r
+\r
+/**\r
+ * Manages themes registration and loading.\r
+ * @namespace\r
+ * @augments CKEDITOR.resourceManager\r
+ * @example\r
+ */\r
+CKEDITOR.themes = new CKEDITOR.resourceManager(\r
+       'themes/', 'theme' );\r
diff --git a/_source/core/tools.js b/_source/core/tools.js
new file mode 100644 (file)
index 0000000..29b34b4
--- /dev/null
@@ -0,0 +1,531 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.tools} object, which contains\r
+ *             utility functions.\r
+ */\r
+\r
+(function()\r
+{\r
+       var functions = [];\r
+\r
+       /**\r
+        * Utility functions.\r
+        * @namespace\r
+        * @example\r
+        */\r
+       CKEDITOR.tools =\r
+       {\r
+               arrayCompare : function( arrayA, arrayB )\r
+               {\r
+                       if ( !arrayA && !arrayB )\r
+                               return true;\r
+\r
+                       if ( !arrayA || !arrayB || arrayA.length != arrayB.length )\r
+                               return false;\r
+\r
+                       for ( var i = 0 ; i < arrayA.length ; i++ )\r
+                       {\r
+                               if ( arrayA[ i ] != arrayB[ i ] )\r
+                                       return false;\r
+                       }\r
+\r
+                       return true;\r
+               },\r
+\r
+               /**\r
+                * Creates a deep copy of an object.\r
+                * Attention: there is no support for recursive references.\r
+                * @param {Object} object The object to be cloned.\r
+                * @returns {Object} The object clone.\r
+                * @example\r
+                * var obj =\r
+                *     {\r
+                *         name : 'John',\r
+                *         cars :\r
+                *             {\r
+                *                 Mercedes : { color : 'blue' },\r
+                *                 Porsche : { color : 'red' }\r
+                *             }\r
+                *     };\r
+                * var clone = CKEDITOR.tools.clone( obj );\r
+                * clone.name = 'Paul';\r
+                * clone.cars.Porsche.color = 'silver';\r
+                * alert( obj.name );   // John\r
+                * alert( clone.name ); // Paul\r
+                * alert( obj.cars.Porsche.color );     // red\r
+                * alert( clone.cars.Porsche.color );   // silver\r
+                */\r
+               clone : function( obj )\r
+               {\r
+                       var clone;\r
+\r
+                       // Array.\r
+                       if ( obj && ( obj instanceof Array ) )\r
+                       {\r
+                               clone = [];\r
+\r
+                               for ( var i = 0 ; i < obj.length ; i++ )\r
+                                       clone[ i ] = this.clone( obj[ i ] );\r
+\r
+                               return clone;\r
+                       }\r
+\r
+                       // "Static" types.\r
+                       if ( obj === null\r
+                               || ( typeof( obj ) != 'object' )\r
+                               || ( obj instanceof String )\r
+                               || ( obj instanceof Number )\r
+                               || ( obj instanceof Boolean )\r
+                               || ( obj instanceof Date ) )\r
+                       {\r
+                               return obj;\r
+                       }\r
+\r
+                       // Objects.\r
+                       clone = new obj.constructor();\r
+\r
+                       for ( var propertyName in obj )\r
+                       {\r
+                               var property = obj[ propertyName ];\r
+                               clone[ propertyName ] = this.clone( property );\r
+                       }\r
+\r
+                       return clone;\r
+               },\r
+\r
+               /**\r
+                * Copy the properties from one object to another. By default, properties\r
+                * already present in the target object <strong>are not</strong> overwritten.\r
+                * @param {Object} target The object to be extended.\r
+                * @param {Object} source[,souce(n)] The objects from which copy\r
+                *              properties. Any number of objects can be passed to this function.\r
+                * @param {Boolean} [overwrite] If 'true' is specified it indicates that\r
+                *            properties already present in the target object could be\r
+                *            overwritten by subsequent objects.\r
+                * @param {Object} [properties] Only properties within the specified names\r
+                *            list will be received from the source object.\r
+                * @returns {Object} the extended object (target).\r
+                * @example\r
+                * // Create the sample object.\r
+                * var myObject =\r
+                * {\r
+                *     prop1 : true\r
+                * };\r
+                *\r
+                * // Extend the above object with two properties.\r
+                * CKEDITOR.tools.extend( myObject,\r
+                *     {\r
+                *         prop2 : true,\r
+                *         prop3 : true\r
+                *     } );\r
+                *\r
+                * // Alert "prop1", "prop2" and "prop3".\r
+                * for ( var p in myObject )\r
+                *     alert( p );\r
+                */\r
+               extend : function( target )\r
+               {\r
+                       var argsLength = arguments.length,\r
+                               overwrite, propertiesList;\r
+\r
+                       if ( typeof ( overwrite = arguments[ argsLength - 1 ] ) == 'boolean')\r
+                               argsLength--;\r
+                       else if ( typeof ( overwrite = arguments[ argsLength - 2 ] ) == 'boolean' )\r
+                       {\r
+                               propertiesList = arguments [ argsLength -1 ];\r
+                               argsLength-=2;\r
+                       }\r
+                       for ( var i = 1 ; i < argsLength ; i++ )\r
+                       {\r
+                               var source = arguments[ i ];\r
+                               for ( var propertyName in source )\r
+                               {\r
+                                       // Only copy existed fields if in overwrite mode.\r
+                                       if ( overwrite === true || target[ propertyName ] == undefined )\r
+                                       {\r
+                                               // Only copy  specified fields if list is provided.\r
+                                               if ( !propertiesList || ( propertyName in propertiesList ) )\r
+                                                       target[ propertyName ] = source[ propertyName ];\r
+\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       return target;\r
+               },\r
+\r
+               /**\r
+                * Creates an object which is an instance of a class which prototype is a\r
+                * predefined object. All properties defined in the source object are\r
+                * automatically inherited by the resulting object, including future\r
+                * changes to it.\r
+                * @param {Object} source The source object to be used as the prototype for\r
+                *              the final object.\r
+                * @returns {Object} The resulting copy.\r
+                */\r
+               prototypedCopy : function( source )\r
+               {\r
+                       var copy = function()\r
+                       {};\r
+                       copy.prototype = source;\r
+                       return new copy();\r
+               },\r
+\r
+               /**\r
+                * Checks if an object is an Array.\r
+                * @param {Object} object The object to be checked.\r
+                * @type Boolean\r
+                * @returns <i>true</i> if the object is an Array, otherwise <i>false</i>.\r
+                * @example\r
+                * alert( CKEDITOR.tools.isArray( [] ) );      // "true"\r
+                * alert( CKEDITOR.tools.isArray( 'Test' ) );  // "false"\r
+                */\r
+               isArray : function( object )\r
+               {\r
+                       return ( !!object && object instanceof Array );\r
+               },\r
+\r
+               /**\r
+                * Transforms a CSS property name to its relative DOM style name.\r
+                * @param {String} cssName The CSS property name.\r
+                * @returns {String} The transformed name.\r
+                * @example\r
+                * alert( CKEDITOR.tools.cssStyleToDomStyle( 'background-color' ) );  // "backgroundColor"\r
+                * alert( CKEDITOR.tools.cssStyleToDomStyle( 'float' ) );             // "cssFloat"\r
+                */\r
+               cssStyleToDomStyle : function( cssName )\r
+               {\r
+                       if ( cssName == 'float' )\r
+                               return 'cssFloat';\r
+                       else\r
+                       {\r
+                               return cssName.replace( /-./g, function( match )\r
+                                       {\r
+                                               return match.substr( 1 ).toUpperCase();\r
+                                       });\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * Replace special HTML characters in a string with their relative HTML\r
+                * entity values.\r
+                * @param {String} text The string to be encoded.\r
+                * @returns {String} The encode string.\r
+                * @example\r
+                * alert( CKEDITOR.tools.htmlEncode( 'A > B & C < D' ) );  // "A &amp;gt; B &amp;amp; C &amp;lt; D"\r
+                */\r
+               htmlEncode : function( text )\r
+               {\r
+                       var standard = function( text )\r
+                       {\r
+                               var span = new CKEDITOR.dom.element( 'span' );\r
+                               span.setText( text );\r
+                               return span.getHtml();\r
+                       };\r
+\r
+                       var fix1 = ( standard( '\n' ).toLowerCase() == '<br>' ) ?\r
+                               function( text )\r
+                               {\r
+                                       // #3874 IE and Safari encode line-break into <br>\r
+                                       return standard( text ).replace( /<br>/gi, '\n' );\r
+                               } :\r
+                               standard;\r
+\r
+                       var fix2 = ( standard( '>' ) == '>' ) ?\r
+                               function( text )\r
+                               {\r
+                                       // WebKit does't encode the ">" character, which makes sense, but\r
+                                       // it's different than other browsers.\r
+                                       return fix1( text ).replace( />/g, '&gt;' );\r
+                               } :\r
+                               fix1;\r
+\r
+                       var fix3 = ( standard( '  ' ) == '&nbsp; ' ) ?\r
+                               function( text )\r
+                               {\r
+                                       // #3785 IE8 changes spaces (>= 2) to &nbsp;\r
+                                       return fix2( text ).replace( /&nbsp;/g, ' ' );\r
+                               } :\r
+                               fix2;\r
+\r
+                       this.htmlEncode = fix3;\r
+\r
+                       return this.htmlEncode( text );\r
+               },\r
+\r
+               /**\r
+                * Gets a unique number for this CKEDITOR execution session. It returns\r
+                * progressive numbers starting at 1.\r
+                * @function\r
+                * @returns {Number} A unique number.\r
+                * @example\r
+                * alert( CKEDITOR.tools.<b>getNextNumber()</b> );  // "1" (e.g.)\r
+                * alert( CKEDITOR.tools.<b>getNextNumber()</b> );  // "2"\r
+                */\r
+               getNextNumber : (function()\r
+               {\r
+                       var last = 0;\r
+                       return function()\r
+                       {\r
+                               return ++last;\r
+                       };\r
+               })(),\r
+\r
+               /**\r
+                * Creates a function override.\r
+                * @param {Function} originalFunction The function to be overridden.\r
+                * @param {Function} functionBuilder A function that returns the new\r
+                *              function. The original function reference will be passed to this\r
+                *              function.\r
+                * @returns {Function} The new function.\r
+                * @example\r
+                * var example =\r
+                * {\r
+                *     myFunction : function( name )\r
+                *     {\r
+                *         alert( 'Name: ' + name );\r
+                *     }\r
+                * };\r
+                *\r
+                * example.myFunction = CKEDITOR.tools.override( example.myFunction, function( myFunctionOriginal )\r
+                *     {\r
+                *         return function( name )\r
+                *             {\r
+                *                 alert( 'Override Name: ' + name );\r
+                *                 myFunctionOriginal.call( this, name );\r
+                *             };\r
+                *     });\r
+                */\r
+               override : function( originalFunction, functionBuilder )\r
+               {\r
+                       return functionBuilder( originalFunction );\r
+               },\r
+\r
+               /**\r
+                * Executes a function after specified delay.\r
+                * @param {Function} func The function to be executed.\r
+                * @param {Number} [milliseconds] The amount of time (millisecods) to wait\r
+                *              to fire the function execution. Defaults to zero.\r
+                * @param {Object} [scope] The object to hold the function execution scope\r
+                *              (the "this" object). By default the "window" object.\r
+                * @param {Object|Array} [args] A single object, or an array of objects, to\r
+                *              pass as arguments to the function.\r
+                * @param {Object} [ownerWindow] The window that will be used to set the\r
+                *              timeout. By default the current "window".\r
+                * @returns {Object} A value that can be used to cancel the function execution.\r
+                * @example\r
+                * CKEDITOR.tools.<b>setTimeout(\r
+                *     function()\r
+                *     {\r
+                *         alert( 'Executed after 2 seconds' );\r
+                *     },\r
+                *     2000 )</b>;\r
+                */\r
+               setTimeout : function( func, milliseconds, scope, args, ownerWindow )\r
+               {\r
+                       if ( !ownerWindow )\r
+                               ownerWindow = window;\r
+\r
+                       if ( !scope )\r
+                               scope = ownerWindow;\r
+\r
+                       return ownerWindow.setTimeout(\r
+                               function()\r
+                               {\r
+                                       if ( args )\r
+                                               func.apply( scope, [].concat( args ) ) ;\r
+                                       else\r
+                                               func.apply( scope ) ;\r
+                               },\r
+                               milliseconds || 0 );\r
+               },\r
+\r
+               /**\r
+                * Remove spaces from the start and the end of a string. The following\r
+                * characters are removed: space, tab, line break, line feed.\r
+                * @function\r
+                * @param {String} str The text from which remove the spaces.\r
+                * @returns {String} The modified string without the boundary spaces.\r
+                * @example\r
+                * alert( CKEDITOR.tools.trim( '  example ' );  // "example"\r
+                */\r
+               trim : (function()\r
+               {\r
+                       // We are not using \s because we don't want "non-breaking spaces" to be caught.\r
+                       var trimRegex = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;\r
+                       return function( str )\r
+                       {\r
+                               return str.replace( trimRegex, '' ) ;\r
+                       };\r
+               })(),\r
+\r
+               /**\r
+                * Remove spaces from the start (left) of a string. The following\r
+                * characters are removed: space, tab, line break, line feed.\r
+                * @function\r
+                * @param {String} str The text from which remove the spaces.\r
+                * @returns {String} The modified string excluding the removed spaces.\r
+                * @example\r
+                * alert( CKEDITOR.tools.ltrim( '  example ' );  // "example "\r
+                */\r
+               ltrim : (function()\r
+               {\r
+                       // We are not using \s because we don't want "non-breaking spaces" to be caught.\r
+                       var trimRegex = /^[ \t\n\r]+/g;\r
+                       return function( str )\r
+                       {\r
+                               return str.replace( trimRegex, '' ) ;\r
+                       };\r
+               })(),\r
+\r
+               /**\r
+                * Remove spaces from the end (right) of a string. The following\r
+                * characters are removed: space, tab, line break, line feed.\r
+                * @function\r
+                * @param {String} str The text from which remove the spaces.\r
+                * @returns {String} The modified string excluding the removed spaces.\r
+                * @example\r
+                * alert( CKEDITOR.tools.ltrim( '  example ' );  // "  example"\r
+                */\r
+               rtrim : (function()\r
+               {\r
+                       // We are not using \s because we don't want "non-breaking spaces" to be caught.\r
+                       var trimRegex = /[ \t\n\r]+$/g;\r
+                       return function( str )\r
+                       {\r
+                               return str.replace( trimRegex, '' ) ;\r
+                       };\r
+               })(),\r
+\r
+               /**\r
+                * Returns the index of an element in an array.\r
+                * @param {Array} array The array to be searched.\r
+                * @param {Object} entry The element to be found.\r
+                * @returns {Number} The (zero based) index of the first entry that matches\r
+                *              the entry, or -1 if not found.\r
+                * @example\r
+                * var letters = [ 'a', 'b', 0, 'c', false ];\r
+                * alert( CKEDITOR.tools.indexOf( letters, '0' ) );  "-1" because 0 !== '0'\r
+                * alert( CKEDITOR.tools.indexOf( letters, false ) );  "4" because 0 !== false\r
+                */\r
+               indexOf :\r
+                       // #2514: We should try to use Array.indexOf if it does exist.\r
+                       ( Array.prototype.indexOf ) ?\r
+                               function( array, entry )\r
+                                       {\r
+                                               return array.indexOf( entry );\r
+                                       }\r
+                       :\r
+                               function( array, entry )\r
+                               {\r
+                                       for ( var i = 0, len = array.length ; i < len ; i++ )\r
+                                       {\r
+                                               if ( array[ i ] === entry )\r
+                                                       return i;\r
+                                       }\r
+                                       return -1;\r
+                               },\r
+\r
+               bind : function( func, obj )\r
+               {\r
+                       return function() { return func.apply( obj, arguments ); };\r
+               },\r
+\r
+               /**\r
+                * Class creation based on prototype inheritance, with supports of the\r
+                * following features:\r
+                * <ul>\r
+                * <li> Static fields </li>\r
+                * <li> Private fields </li>\r
+                * <li> Public(prototype) fields </li>\r
+                * <li> Chainable base class constructor </li>\r
+                * </ul>\r
+                *\r
+                * @param {Object} definiton (Optional)The class definiton object.\r
+                */\r
+               createClass : function( definition )\r
+               {\r
+                       var $ = definition.$,\r
+                               baseClass = definition.base,\r
+                               privates = definition.privates || definition._,\r
+                               proto = definition.proto,\r
+                               statics = definition.statics;\r
+\r
+                       if ( privates )\r
+                       {\r
+                               var originalConstructor = $;\r
+                               $ = function()\r
+                               {\r
+                                       // Create (and get) the private namespace.\r
+                                       var _ = this._ || ( this._ = {} );\r
+\r
+                                       // Make some magic so "this" will refer to the main\r
+                                       // instance when coding private functions.\r
+                                       for ( var privateName in privates )\r
+                                       {\r
+                                               var priv = privates[ privateName ];\r
+\r
+                                               _[ privateName ] =\r
+                                                       ( typeof priv == 'function' ) ? CKEDITOR.tools.bind( priv, this ) : priv;\r
+                                       }\r
+\r
+                                       originalConstructor.apply( this, arguments );\r
+                               };\r
+                       }\r
+\r
+                       if ( baseClass )\r
+                       {\r
+                               $.prototype = this.prototypedCopy( baseClass.prototype );\r
+                               $.prototype.constructor = $;\r
+                               $.prototype.base = function()\r
+                               {\r
+                                       this.base = baseClass.prototype.base;\r
+                                       baseClass.apply( this, arguments );\r
+                                       this.base = arguments.callee;\r
+                               };\r
+                       }\r
+\r
+                       if ( proto )\r
+                               this.extend( $.prototype, proto, true );\r
+\r
+                       if ( statics )\r
+                               this.extend( $, statics, true );\r
+\r
+                       return $;\r
+               },\r
+\r
+               addFunction : function( fn, scope )\r
+               {\r
+                       return functions.push( function()\r
+                               {\r
+                                       fn.apply( scope || this, arguments );\r
+                               }) - 1;\r
+               },\r
+\r
+               callFunction : function( index )\r
+               {\r
+                       var fn = functions[ index ];\r
+                       return fn.apply( window, Array.prototype.slice.call( arguments, 1 ) );\r
+               },\r
+\r
+               cssLength : (function()\r
+               {\r
+                       var decimalRegex = /^\d+(?:\.\d+)?$/;\r
+                       return function( length )\r
+                       {\r
+                               return length + ( decimalRegex.test( length ) ? 'px' : '' );\r
+                       };\r
+               })(),\r
+\r
+               repeat : function( str, times )\r
+               {\r
+                       return new Array( times + 1 ).join( str );\r
+               }\r
+       };\r
+})();\r
+\r
+// PACKAGER_RENAME( CKEDITOR.tools )\r
diff --git a/_source/core/ui.js b/_source/core/ui.js
new file mode 100644 (file)
index 0000000..1d152e2
--- /dev/null
@@ -0,0 +1,106 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * Contains UI features related to an editor instance.\r
+ * @constructor\r
+ * @param {CKEDITOR.editor} editor The editor instance.\r
+ * @example\r
+ */\r
+CKEDITOR.ui = function( editor )\r
+{\r
+       if ( editor.ui )\r
+               return editor.ui;\r
+\r
+       /**\r
+        * Object used to hold private stuff.\r
+        * @private\r
+        */\r
+       this._ =\r
+       {\r
+               handlers : {},\r
+               items : {}\r
+       };\r
+\r
+       return this;\r
+};\r
+\r
+// PACKAGER_RENAME( CKEDITOR.ui )\r
+\r
+CKEDITOR.ui.prototype =\r
+{\r
+       /**\r
+        * Adds a UI item to the items collection. These items can be later used in\r
+        * the interface.\r
+        * @param {String} name The UI item name.\r
+        * @param {Object} type The item type.\r
+        * @param {Object} definition The item definition. The properties of this\r
+        *              object depend on the item type.\r
+        * @example\r
+        * // Add a new button named "MyBold".\r
+        * editorInstance.ui.add( 'MyBold', CKEDITOR.UI_BUTTON,\r
+        *     {\r
+        *         label : 'My Bold',\r
+        *         command : 'bold'\r
+        *     });\r
+        */\r
+       add : function( name, type, definition )\r
+       {\r
+               this._.items[ name ] =\r
+               {\r
+                       type : type,\r
+                       args : Array.prototype.slice.call( arguments, 2 )\r
+               };\r
+       },\r
+\r
+       /**\r
+        * Gets a UI object.\r
+        * @param {String} name The UI item hame.\r
+        * @example\r
+        */\r
+       create : function( name )\r
+       {\r
+               var item        = this._.items[ name ],\r
+                       handler = item && this._.handlers[ item.type ];\r
+\r
+               return handler && handler.create.apply( this, item.args );\r
+       },\r
+\r
+       /**\r
+        * Adds a handler for a UI item type. The handler is responsible for\r
+        * transforming UI item definitions in UI objects.\r
+        * @param {Object} type The item type.\r
+        * @param {Object} handler The handler definition.\r
+        * @example\r
+        */\r
+       addHandler : function( type, handler )\r
+       {\r
+               this._.handlers[ type ] = handler;\r
+       }\r
+};\r
+\r
+/**\r
+ * (Virtual Class) Do not call this constructor. This class is not really part\r
+ *             of the API. It just illustrates the features of hanlder objects to be\r
+ *             passed to the {@link CKEDITOR.ui.prototype.addHandler} function.\r
+ * @name CKEDITOR.ui.handlerDefinition\r
+ * @constructor\r
+ * @example\r
+ */\r
+\r
+ /**\r
+ * Transforms an item definition into an UI item object.\r
+ * @name CKEDITOR.handlerDefinition.prototype.create\r
+ * @function\r
+ * @param {Object} definition The item definition.\r
+ * @example\r
+ * editorInstance.ui.addHandler( CKEDITOR.UI_BUTTON,\r
+ *     {\r
+ *         create : function( definition )\r
+ *         {\r
+ *             return new CKEDITOR.ui.button( definition );\r
+ *         }\r
+ *     });\r
+ */\r
diff --git a/_source/core/xml.js b/_source/core/xml.js
new file mode 100644 (file)
index 0000000..a4e3af0
--- /dev/null
@@ -0,0 +1,165 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.xml} class, which represents a\r
+ *             loaded XML document.\r
+ */\r
+\r
+/**\r
+ * Represents a loaded XML document.\r
+ * @constructor\r
+ * @param {object|string} xmlObjectOrData A native XML (DOM document) object or\r
+ *             a string containing the XML definition to be loaded.\r
+ * @example\r
+ * var xml = <b>new CKEDITOR.xml( '<books><book title="My Book" /></books>' )</b>;\r
+ */\r
+CKEDITOR.xml = function( xmlObjectOrData )\r
+{\r
+       var baseXml = null;\r
+\r
+       if ( typeof xmlObjectOrData == 'object' )\r
+               baseXml = xmlObjectOrData;\r
+       else\r
+       {\r
+               var data = ( xmlObjectOrData || '' ).replace( /&nbsp;/g, '\xA0' );\r
+               if ( window.DOMParser )\r
+                       baseXml = (new DOMParser()).parseFromString( data, 'text/xml' );\r
+               else if ( window.ActiveXObject )\r
+               {\r
+                       try { baseXml = new ActiveXObject( 'MSXML2.DOMDocument' ); }\r
+                       catch(e)\r
+                       {\r
+                               try { baseXml = new ActiveXObject( 'Microsoft.XmlDom' ); } catch(e) {}\r
+                       }\r
+\r
+                       if ( baseXml )\r
+                       {\r
+                               baseXml.async = false;\r
+                               baseXml.resolveExternals = false;\r
+                               baseXml.validateOnParse = false;\r
+                               baseXml.loadXML( data );\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * The native XML (DOM document) used by the class instance.\r
+        * @type object\r
+        * @example\r
+        */\r
+       this.baseXml = baseXml;\r
+};\r
+\r
+CKEDITOR.xml.prototype =\r
+{\r
+       /**\r
+        * Get a single node from the XML document, based on a XPath query.\r
+        * @param {String} xpath The XPath query to execute.\r
+        * @param {Object} [contextNode] The XML DOM node to be used as the context\r
+        *              for the XPath query. The document root is used by default.\r
+        * @returns {Object} A XML node element or null if the query has no results.\r
+        * @example\r
+        * // Create the XML instance.\r
+        * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' );\r
+        * // Get the first <item> node.\r
+        * var itemNode = <b>xml.selectSingleNode( 'list/item' )</b>;\r
+        * // Alert "item".\r
+        * alert( itemNode.nodeName );\r
+        */\r
+       selectSingleNode : function( xpath, contextNode )\r
+       {\r
+               var baseXml = this.baseXml;\r
+\r
+               if ( contextNode || ( contextNode = baseXml ) )\r
+               {\r
+                       if ( CKEDITOR.env.ie || contextNode.selectSingleNode )  // IE\r
+                               return contextNode.selectSingleNode( xpath );\r
+                       else if ( baseXml.evaluate )                                                    // Others\r
+                       {\r
+                               var result = baseXml.evaluate( xpath, contextNode, null, 9, null);\r
+                               return ( result && result.singleNodeValue ) || null;\r
+                       }\r
+               }\r
+\r
+               return null;\r
+       },\r
+\r
+       /**\r
+        * Gets a list node from the XML document, based on a XPath query.\r
+        * @param {String} xpath The XPath query to execute.\r
+        * @param {Object} [contextNode] The XML DOM node to be used as the context\r
+        *              for the XPath query. The document root is used by default.\r
+        * @returns {ArrayLike} An array containing all matched nodes. The array will\r
+        *              be empty if the query has no results.\r
+        * @example\r
+        * // Create the XML instance.\r
+        * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' );\r
+        * // Get the first <item> node.\r
+        * var itemNodes = xml.selectSingleNode( 'list/item' );\r
+        * // Alert "item" twice, one for each <item>.\r
+        * for ( var i = 0 ; i < itemNodes.length ; i++ )\r
+        *     alert( itemNodes[i].nodeName );\r
+        */\r
+       selectNodes : function( xpath, contextNode )\r
+       {\r
+               var baseXml = this.baseXml,\r
+                       nodes = [];\r
+\r
+               if ( contextNode || ( contextNode = baseXml ) )\r
+               {\r
+                       if ( CKEDITOR.env.ie || contextNode.selectNodes )               // IE\r
+                               return contextNode.selectNodes( xpath );\r
+                       else if ( baseXml.evaluate )                                                    // Others\r
+                       {\r
+                               var result = baseXml.evaluate( xpath, contextNode, null, 5, null);\r
+\r
+                               if ( result )\r
+                               {\r
+                                       var node;\r
+                                       while( ( node = result.iterateNext() ) )\r
+                                               nodes.push( node );\r
+                               }\r
+                       }\r
+               }\r
+\r
+               return nodes;\r
+       },\r
+\r
+       /**\r
+        * Gets the string representation of hte inner contents of a XML node,\r
+        * based on a XPath query.\r
+        * @param {String} xpath The XPath query to execute.\r
+        * @param {Object} [contextNode] The XML DOM node to be used as the context\r
+        *              for the XPath query. The document root is used by default.\r
+        * @returns {String} The textual representation of the inner contents of\r
+        *              the node or null if the query has no results.\r
+        * @example\r
+        * // Create the XML instance.\r
+        * var xml = new CKEDITOR.xml( '<list><item id="test1" /><item id="test2" /></list>' );\r
+        * // Alert "<item id="test1" /><item id="test2" />".\r
+        * alert( xml.getInnerXml( 'list' ) );\r
+        */\r
+       getInnerXml : function( xpath, contextNode )\r
+       {\r
+               var node = this.selectSingleNode( xpath, contextNode ),\r
+                       xml = [];\r
+               if ( node )\r
+               {\r
+                       node = node.firstChild;\r
+                       while ( node )\r
+                       {\r
+                               if ( node.xml )                         // IE\r
+                                       xml.push( node.xml );\r
+                               else if ( window.XMLSerializer )        // Others\r
+                                       xml.push( ( new XMLSerializer() ).serializeToString( node ) );\r
+\r
+                               node = node.nextSibling;\r
+                       }\r
+               }\r
+\r
+               return xml.length ? xml.join( '' ) : null;\r
+       }\r
+};\r
diff --git a/_source/lang/_languages.js b/_source/lang/_languages.js
new file mode 100644 (file)
index 0000000..a36d5eb
--- /dev/null
@@ -0,0 +1,82 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+var CKEDITOR_LANGS = (function()\r
+{\r
+       var langs =\r
+       {\r
+               af              : 'Afrikaans',\r
+               ar              : 'Arabic',\r
+               bg              : 'Bulgarian',\r
+               bn              : 'Bengali/Bangla',\r
+               bs              : 'Bosnian',\r
+               ca              : 'Catalan',\r
+               cs              : 'Czech',\r
+               da              : 'Danish',\r
+               de              : 'German',\r
+               el              : 'Greek',\r
+               en              : 'English',\r
+               'en-au' : 'English (Australia)',\r
+               'en-ca' : 'English (Canadian)',\r
+               'en-uk' : 'English (United Kingdom)',\r
+               eo              : 'Esperanto',\r
+               es              : 'Spanish',\r
+               et              : 'Estonian',\r
+               eu              : 'Basque',\r
+               fa              : 'Persian',\r
+               fi              : 'Finnish',\r
+               fo              : 'Faroese',\r
+               fr              : 'French',\r
+               'fr-ca' : 'French (Canada)',\r
+               gl              : 'Galician',\r
+               gu              : 'Gujarati',\r
+               he              : 'Hebrew',\r
+               hi              : 'Hindi',\r
+               hr              : 'Croatian',\r
+               hu              : 'Hungarian',\r
+               is              : 'Icelandic',\r
+               it              : 'Italian',\r
+               ja              : 'Japanese',\r
+               km              : 'Khmer',\r
+               ko              : 'Korean',\r
+               lt              : 'Lithuanian',\r
+               lv              : 'Latvian',\r
+               mn              : 'Mongolian',\r
+               ms              : 'Malay',\r
+               nb              : 'Norwegian Bokmal',\r
+               nl              : 'Dutch',\r
+               no              : 'Norwegian',\r
+               pl              : 'Polish',\r
+               pt              : 'Portuguese (Portugal)',\r
+               'pt-br' : 'Portuguese (Brazil)',\r
+               ro              : 'Romanian',\r
+               ru              : 'Russian',\r
+               sk              : 'Slovak',\r
+               sl              : 'Slovenian',\r
+               sr              : 'Serbian (Cyrillic)',\r
+               'sr-latn'       : 'Serbian (Latin)',\r
+               sv              : 'Swedish',\r
+               th              : 'Thai',\r
+               tr              : 'Turkish',\r
+               uk              : 'Ukrainian',\r
+               vi              : 'Vietnamese',\r
+               zh              : 'Chinese Traditional',\r
+               'zh-cn' : 'Chinese Simplified'\r
+       };\r
+\r
+       var langsArray = [];\r
+\r
+       for ( var code in langs )\r
+       {\r
+               langsArray.push( { code : code, name : langs[ code ] } );\r
+       }\r
+\r
+       langsArray.sort( function( a, b )\r
+               {\r
+                       return ( a.name < b.name ) ? -1 : 1;\r
+               });\r
+\r
+       return langsArray;\r
+})();\r
diff --git a/_source/lang/_translationstatus.txt b/_source/lang/_translationstatus.txt
new file mode 100644 (file)
index 0000000..33a770a
--- /dev/null
@@ -0,0 +1,59 @@
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+\r
+af.js      Found: 312 Missing: 123\r
+ar.js      Found: 329 Missing: 106\r
+bg.js      Found: 305 Missing: 130\r
+bn.js      Found: 307 Missing: 128\r
+bs.js      Found: 210 Missing: 225\r
+ca.js      Found: 435 Missing: 0\r
+cs.js      Found: 327 Missing: 108\r
+da.js      Found: 326 Missing: 109\r
+de.js      Found: 435 Missing: 0\r
+el.js      Found: 311 Missing: 124\r
+en-au.js   Found: 395 Missing: 40\r
+en-ca.js   Found: 395 Missing: 40\r
+en-uk.js   Found: 395 Missing: 40\r
+eo.js      Found: 282 Missing: 153\r
+es.js      Found: 435 Missing: 0\r
+et.js      Found: 326 Missing: 109\r
+eu.js      Found: 435 Missing: 0\r
+fa.js      Found: 327 Missing: 108\r
+fi.js      Found: 325 Missing: 110\r
+fo.js      Found: 326 Missing: 109\r
+fr-ca.js   Found: 327 Missing: 108\r
+fr.js      Found: 434 Missing: 1\r
+gl.js      Found: 308 Missing: 127\r
+gu.js      Found: 326 Missing: 109\r
+he.js      Found: 332 Missing: 103\r
+hi.js      Found: 327 Missing: 108\r
+hr.js      Found: 435 Missing: 0\r
+hu.js      Found: 326 Missing: 109\r
+is.js      Found: 332 Missing: 103\r
+it.js      Found: 434 Missing: 1\r
+ja.js      Found: 434 Missing: 1\r
+km.js      Found: 299 Missing: 136\r
+ko.js      Found: 318 Missing: 117\r
+lt.js      Found: 331 Missing: 104\r
+lv.js      Found: 308 Missing: 127\r
+mn.js      Found: 326 Missing: 109\r
+ms.js      Found: 287 Missing: 148\r
+nb.js      Found: 325 Missing: 110\r
+nl.js      Found: 327 Missing: 108\r
+no.js      Found: 325 Missing: 110\r
+pl.js      Found: 435 Missing: 0\r
+pt-br.js   Found: 434 Missing: 1\r
+pt.js      Found: 307 Missing: 128\r
+ro.js      Found: 326 Missing: 109\r
+ru.js      Found: 332 Missing: 103\r
+sk.js      Found: 327 Missing: 108\r
+sl.js      Found: 325 Missing: 110\r
+sr-latn.js Found: 301 Missing: 134\r
+sr.js      Found: 301 Missing: 134\r
+sv.js      Found: 324 Missing: 111\r
+th.js      Found: 312 Missing: 123\r
+tr.js      Found: 332 Missing: 103\r
+uk.js      Found: 435 Missing: 0\r
+vi.js      Found: 435 Missing: 0\r
+zh-cn.js   Found: 435 Missing: 0\r
+zh.js      Found: 435 Missing: 0\r
diff --git a/_source/lang/af.js b/_source/lang/af.js
new file mode 100644 (file)
index 0000000..d814be9
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Afrikaans language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['af'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Source',\r
+       newPage                 : 'Nuwe Bladsy',\r
+       save                    : 'Bewaar',\r
+       preview                 : 'Voorskou',\r
+       cut                             : 'Uitsny ',\r
+       copy                    : 'Kopieer',\r
+       paste                   : 'Byvoeg',\r
+       print                   : 'Druk',\r
+       underline               : 'Onderstreep',\r
+       bold                    : 'Vet',\r
+       italic                  : 'Skuins',\r
+       selectAll               : 'Selekteer alles',\r
+       removeFormat    : 'Formaat verweider',\r
+       strike                  : 'Gestreik',\r
+       subscript               : 'Subscript',\r
+       superscript             : 'Superscript',\r
+       horizontalrule  : 'Horisontale lyn byvoeg',\r
+       pagebreak               : 'Bladsy breek byvoeg',\r
+       unlink                  : 'Skakel verweider',\r
+       undo                    : 'Ont-skep',\r
+       redo                    : 'Her-skep',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Server deurblaai',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokol',\r
+               upload                  : 'Oplaai',\r
+               uploadSubmit    : 'Stuur dit na die Server',\r
+               image                   : 'Beeld',\r
+               flash                   : 'Flash',\r
+               form                    : 'Form',\r
+               checkbox                : 'HakBox',\r
+               radio           : 'PuntBox',\r
+               textField               : 'Byvoegbare karakter strook',\r
+               textarea                : 'Byvoegbare karakter area',\r
+               hiddenField             : 'Blinde strook',\r
+               button                  : 'Knop',\r
+               select  : 'Opklapbare keuse strook',\r
+               imageButton             : 'Beeld knop',\r
+               notSet                  : '<geen instelling>',\r
+               id                              : 'Id',\r
+               name                    : 'Naam',\r
+               langDir                 : 'Taal rigting',\r
+               langDirLtr              : 'Links na regs (LTR)',\r
+               langDirRtl              : 'Regs na links (RTL)',\r
+               langCode                : 'Taal kode',\r
+               longDescr               : 'Lang beskreiwing URL',\r
+               cssClass                : 'Skakel Tiepe',\r
+               advisoryTitle   : 'Voorbeveelings Titel',\r
+               cssStyle                : 'Styl',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Kanseleer',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Ingewikkeld',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Spesiaale Karakter byvoeg',\r
+               title           : 'Kies spesiale karakter'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Skakel byvoeg/verander',\r
+               menu            : 'Verander skakel',\r
+               title           : 'Skakel',\r
+               info            : 'Skakel informasie',\r
+               target          : 'Mikpunt',\r
+               upload          : 'Oplaai',\r
+               advanced        : 'Ingewikkeld',\r
+               type            : 'Skakel soort',\r
+               toAnchor        : 'Skakel na plekhouers in text',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Mikpunt',\r
+               targetNotSet    : '<geen instelling>',\r
+               targetFrame     : '<raam>',\r
+               targetPopup     : '<popup venster>',\r
+               targetNew       : 'Nuwe Venster (_blank)',\r
+               targetTop       : 'Boonste Venster (_top)',\r
+               targetSelf      : 'Selfde Venster (_self)',\r
+               targetParent    : 'Vorige Venster (_parent)',\r
+               targetFrameName : 'Mikpunt Venster Naam',\r
+               targetPopupName : 'Popup Venster Naam',\r
+               popupFeatures   : 'Popup Venster Geaartheid',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Status Balk',\r
+               popupLocationBar        : 'Adres Balk',\r
+               popupToolbar    : 'Gereedskap Balk',\r
+               popupMenuBar    : 'Menu Balk',\r
+               popupFullScreen : 'Voll Skerm (IE)',\r
+               popupScrollBars : 'Gleibalkstuk',\r
+               popupDependent  : 'Afhanklik (Netscape)',\r
+               popupWidth              : 'Weite',\r
+               popupLeft               : 'Links Posisie',\r
+               popupHeight             : 'Hoogde',\r
+               popupTop                : 'Bo Posisie',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Taal rigting',\r
+               langDirNotSet   : '<geen instelling>',\r
+               langDirLTR              : 'Links na regs (LTR)',\r
+               langDirRTL              : 'Regs na links (RTL)',\r
+               acccessKey              : 'Toegang sleutel',\r
+               name                    : 'Naam',\r
+               langCode                : 'Taal rigting',\r
+               tabIndex                : 'Tab Index',\r
+               advisoryTitle   : 'Voorbeveelings Titel',\r
+               advisoryContentType     : 'Voorbeveelings inhoud soort',\r
+               cssClasses              : 'Skakel Tiepe',\r
+               charset                 : 'Geskakelde voorbeeld karakterstel',\r
+               styles                  : 'Styl',\r
+               selectAnchor    : 'Kies \'n plekhouer',\r
+               anchorName              : 'Volgens plekhouer naam',\r
+               anchorId                : 'Volgens element Id',\r
+               emailAddress    : 'E-Mail Adres',\r
+               emailSubject    : 'Boodskap Opskrif',\r
+               emailBody               : 'Boodskap Inhoud',\r
+               noAnchors               : '(Geen plekhouers beskikbaar in dokument}',\r
+               noUrl                   : 'Voeg asseblief die URL in',\r
+               noEmail                 : 'Voeg asseblief die e-mail adres in'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Plekhouer byvoeg/verander',\r
+               menu            : 'Plekhouer eienskappe',\r
+               title           : 'Plekhouer eienskappe',\r
+               name            : 'Plekhouer Naam',\r
+               errorName       : 'Voltooi die plekhouer naam asseblief'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'Vind',\r
+               replace                         : 'Vervang',\r
+               findWhat                        : 'Soek wat:',\r
+               replaceWith                     : 'Vervang met:',\r
+               notFoundMsg                     : 'Die gespesifiseerde karakters word nie gevind nie.',\r
+               matchCase                       : 'Vergelyk karakter skryfweise',\r
+               matchWord                       : 'Vergelyk komplete woord',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Vervang alles',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabel',\r
+               title           : 'Tabel eienskappe',\r
+               menu            : 'Tabel eienskappe',\r
+               deleteTable     : 'Tabel verweider',\r
+               rows            : 'Reie',\r
+               columns         : 'Kolome',\r
+               border          : 'Kant groote',\r
+               align           : 'Parideering',\r
+               alignNotSet     : '<geen instelling>',\r
+               alignLeft       : 'Links',\r
+               alignCenter     : 'Middel',\r
+               alignRight      : 'Regs',\r
+               width           : 'Weite',\r
+               widthPx         : 'pixels',\r
+               widthPc         : 'percent',\r
+               height          : 'Hoogde',\r
+               cellSpace       : 'Cell spasieering',\r
+               cellPad         : 'Cell buffer',\r
+               caption         : 'Beskreiwing',\r
+               summary         : 'Opsomming',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell',\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'Cell verweider',\r
+                       merge                   : 'Cell verenig',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Ry',\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'Ry verweider'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Kolom',\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'Kolom verweider'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Knop eienskappe',\r
+               text            : 'Karakters (Waarde)',\r
+               type            : 'Soort',\r
+               typeBtn         : 'Knop',\r
+               typeSbm         : 'Indien',\r
+               typeRst         : 'Reset'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'HakBox eienskappe',\r
+               radioTitle      : 'PuntBox eienskappe',\r
+               value           : 'Waarde',\r
+               selected        : 'Uitgekies'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Form eienskappe',\r
+               menu            : 'Form eienskappe',\r
+               action          : 'Aksie',\r
+               method          : 'Metode',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Mikpunt',\r
+               targetNotSet    : '<geen instelling>',\r
+               targetNew       : 'Nuwe Venster (_blank)',\r
+               targetTop       : 'Boonste Venster (_top)',\r
+               targetSelf      : 'Selfde Venster (_self)',\r
+               targetParent    : 'Vorige Venster (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Opklapbare keuse strook eienskappe',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Beskikbare Opsies',\r
+               value           : 'Waarde',\r
+               size            : 'Grote',\r
+               lines           : 'lyne',\r
+               chkMulti        : 'Laat meerere keuses toe',\r
+               opText          : 'Karakters',\r
+               opValue         : 'Waarde',\r
+               btnAdd          : 'Byvoeg',\r
+               btnModify       : 'Verander',\r
+               btnUp           : 'Op',\r
+               btnDown         : 'Af',\r
+               btnSetValue : 'Stel as uitgekiesde waarde',\r
+               btnDelete       : 'Verweider'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Karakter area eienskappe',\r
+               cols            : 'Kolom',\r
+               rows            : 'Reie'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Karakter strook eienskappe',\r
+               name            : 'Naam',\r
+               value           : 'Waarde',\r
+               charWidth       : 'Karakter weite',\r
+               maxChars        : 'Maximale karakters',\r
+               type            : 'Soort',\r
+               typeText        : 'Karakters',\r
+               typePass        : 'Wagwoord'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Blinde strook eienskappe',\r
+               name    : 'Naam',\r
+               value   : 'Waarde'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Beeld eienskappe',\r
+               titleButton     : 'Beeld knop eienskappe',\r
+               menu            : 'Beeld eienskappe',\r
+               infoTab : 'Beeld informasie',\r
+               btnUpload       : 'Stuur dit na die Server',\r
+               url             : 'URL',\r
+               upload  : 'Uplaai',\r
+               alt             : 'Alternatiewe beskrywing',\r
+               width           : 'Weidte',\r
+               height  : 'Hoogde',\r
+               lockRatio       : 'Behou preporsie',\r
+               resetSize       : 'Herstel groote',\r
+               border  : 'Kant',\r
+               hSpace  : 'HSpasie',\r
+               vSpace  : 'VSpasie',\r
+               align           : 'Paradeer',\r
+               alignLeft       : 'Links',\r
+               alignAbsBottom: 'Abs Onder',\r
+               alignAbsMiddle: 'Abs Middel',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Onder',\r
+               alignMiddle     : 'Middel',\r
+               alignRight      : 'Regs',\r
+               alignTextTop    : 'Text Bo',\r
+               alignTop        : 'Bo',\r
+               preview : 'Voorskou',\r
+               alertUrl        : 'Voeg asseblief Beeld URL in.',\r
+               linkTab : 'Skakel',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash eienskappe',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash eienskappe',\r
+               chkPlay         : 'Automaties Speel',\r
+               chkLoop         : 'Herhaling',\r
+               chkMenu         : 'Laat Flash Menu toe',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Scale',\r
+               scaleAll                : 'Wys alles',\r
+               scaleNoBorder   : 'Geen kante',\r
+               scaleFit                : 'Presiese pas',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Paradeer',\r
+               alignLeft       : 'Links',\r
+               alignAbsBottom: 'Abs Onder',\r
+               alignAbsMiddle: 'Abs Middel',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Onder',\r
+               alignMiddle     : 'Middel',\r
+               alignRight      : 'Regs',\r
+               alignTextTop    : 'Text Bo',\r
+               alignTop        : 'Bo',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Agtergrond kleur',\r
+               width   : 'Weidte',\r
+               height  : 'Hoogde',\r
+               hSpace  : 'HSpasie',\r
+               vSpace  : 'VSpasie',\r
+               validateSrc : 'Voeg asseblief die URL in',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Spelling nagaan',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Nie in woordeboek nie',\r
+               changeTo                : 'Verander na',\r
+               btnIgnore               : 'Ignoreer',\r
+               btnIgnoreAll    : 'Ignoreer na-volgende',\r
+               btnReplace              : 'Vervang',\r
+               btnReplaceAll   : 'vervang na-volgende',\r
+               btnUndo                 : 'Ont-skep',\r
+               noSuggestions   : '- Geen voorstel -',\r
+               progress                : 'Spelling word beproef...',\r
+               noMispell               : 'Spellproef kompleet: Geen foute',\r
+               noChanges               : 'Spellproef kompleet: Geen woord veranderings',\r
+               oneChange               : 'Spellproef kompleet: Een woord verander',\r
+               manyChanges             : 'Spellproef kompleet: %1 woorde verander',\r
+               ieSpellDownload : 'Geen Spellproefer geinstaleer nie. Wil U dit aflaai?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Voeg Smiley by'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Genommerde lys',\r
+       bulletedlist : 'Gepunkte lys',\r
+       indent : 'Paradeering verleng',\r
+       outdent : 'Paradeering verkort',\r
+\r
+       justify :\r
+       {\r
+               left : 'Links rig',\r
+               center : 'Rig Middel',\r
+               right : 'Regs rig',\r
+               block : 'Blok paradeer'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Byvoeg',\r
+               cutError        : 'U browser se sekuriteit instelling behinder die uitsny aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+X).',\r
+               copyError       : 'U browser se sekuriteit instelling behinder die kopieerings aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+C).',\r
+               pasteMsg        : 'Voeg asseblief die inhoud in die gegewe box by met sleutel kombenasie(<STRONG>Ctrl+V</STRONG>) en druk <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Van Word af byvoeg',\r
+               title : 'Van Word af byvoeg',\r
+               advice : 'Voeg asseblief die inhoud in die gegewe box by met sleutel kombenasie(<STRONG>Ctrl+V</STRONG>) en druk <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignoreer karakter soort defenisies',\r
+               removeStyle : 'Verweider Styl defenisies'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Voeg slegs karakters by',\r
+               title : 'Voeg slegs karakters by'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Templates',\r
+               title : 'Inhoud Templates',\r
+               insertOption: 'Vervang bestaande inhoud',\r
+               selectPromptMsg: 'Kies die template om te gebruik in die editor<br>(Inhoud word vervang!):',\r
+               emptyListMsg : '(Geen templates gedefinieerd)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Styl',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Karakter formaat',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Karakter formaat',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normaal',\r
+               tag_pre : 'Geformateerd',\r
+               tag_address : 'Adres',\r
+               tag_h1 : 'Opskrif 1',\r
+               tag_h2 : 'Opskrif 2',\r
+               tag_h3 : 'Opskrif 3',\r
+               tag_h4 : 'Opskrif 4',\r
+               tag_h5 : 'Opskrif 5',\r
+               tag_h6 : 'Opskrif 6',\r
+               tag_div : 'Normaal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Karakters',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Karakters',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Karakter grote',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Karakter grote',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Karakter kleur',\r
+               bgColorTitle : 'Agtergrond kleur',\r
+               auto : 'Automaties',\r
+               more : 'Meer Kleure...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/ar.js b/_source/lang/ar.js
new file mode 100644 (file)
index 0000000..288317e
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Arabic language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['ar'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'rtl',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'شفرة المصدر',\r
+       newPage                 : 'صفحة جديدة',\r
+       save                    : 'حفظ',\r
+       preview                 : 'معاينة الصفحة',\r
+       cut                             : 'قص',\r
+       copy                    : 'نسخ',\r
+       paste                   : 'لصق',\r
+       print                   : 'طباعة',\r
+       underline               : 'تسطير',\r
+       bold                    : 'غامق',\r
+       italic                  : 'مائل',\r
+       selectAll               : 'تحديد الكل',\r
+       removeFormat    : 'إزالة التنسيقات',\r
+       strike                  : 'يتوسطه خط',\r
+       subscript               : 'منخفض',\r
+       superscript             : 'مرتفع',\r
+       horizontalrule  : 'إدراج خط فاصل',\r
+       pagebreak               : 'إدخال صفحة جديدة',\r
+       unlink                  : 'إزالة رابط',\r
+       undo                    : 'تراجع',\r
+       redo                    : 'إعادة',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'تصفح الخادم',\r
+               url                             : 'موقع الصورة',\r
+               protocol                : 'البروتوكول',\r
+               upload                  : 'رفع',\r
+               uploadSubmit    : 'أرسلها للخادم',\r
+               image                   : 'صورة',\r
+               flash                   : 'فلاش',\r
+               form                    : 'نموذج',\r
+               checkbox                : 'خانة إختيار',\r
+               radio           : 'زر خيار',\r
+               textField               : 'مربع نص',\r
+               textarea                : 'ناحية نص',\r
+               hiddenField             : 'إدراج حقل خفي',\r
+               button                  : 'زر ضغط',\r
+               select  : 'قائمة منسدلة',\r
+               imageButton             : 'زر صورة',\r
+               notSet                  : '<بدون تحديد>',\r
+               id                              : 'الرقم',\r
+               name                    : 'الاسم',\r
+               langDir                 : 'إتجاه النص',\r
+               langDirLtr              : 'اليسار لليمين (LTR)',\r
+               langDirRtl              : 'اليمين لليسار (RTL)',\r
+               langCode                : 'رمز اللغة',\r
+               longDescr               : 'عنوان الوصف المفصّل',\r
+               cssClass                : 'فئات التنسيق',\r
+               advisoryTitle   : 'تلميح الشاشة',\r
+               cssStyle                : 'نمط',\r
+               ok                              : 'موافق',\r
+               cancel                  : 'إلغاء الأمر',\r
+               generalTab              : 'عام',\r
+               advancedTab             : 'متقدم',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'إدراج  رموز..ِ',\r
+               title           : 'إدراج رمز'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'إدراج/تحرير رابط',\r
+               menu            : 'تحرير رابط',\r
+               title           : 'إرتباط تشعبي',\r
+               info            : 'معلومات الرابط',\r
+               target          : 'الهدف',\r
+               upload          : 'رفع',\r
+               advanced        : 'متقدم',\r
+               type            : 'نوع الربط',\r
+               toAnchor        : 'مكان في هذا المستند',\r
+               toEmail         : 'بريد إلكتروني',\r
+               target          : 'الهدف',\r
+               targetNotSet    : '<بدون تحديد>',\r
+               targetFrame     : '<إطار>',\r
+               targetPopup     : '<نافذة منبثقة>',\r
+               targetNew       : 'إطار جديد (_blank)',\r
+               targetTop       : 'صفحة كاملة (_top)',\r
+               targetSelf      : 'نفس الإطار (_self)',\r
+               targetParent    : 'الإطار الأصل (_parent)',\r
+               targetFrameName : 'اسم الإطار الهدف',\r
+               targetPopupName : 'تسمية النافذة المنبثقة',\r
+               popupFeatures   : 'خصائص النافذة المنبثقة',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'شريط الحالة السفلي',\r
+               popupLocationBar        : 'شريط العنوان',\r
+               popupToolbar    : 'شريط الأدوات',\r
+               popupMenuBar    : 'القوائم الرئيسية',\r
+               popupFullScreen : 'ملئ الشاشة (IE)',\r
+               popupScrollBars : 'أشرطة التمرير',\r
+               popupDependent  : 'تابع (Netscape)',\r
+               popupWidth              : 'العرض',\r
+               popupLeft               : 'التمركز لليسار',\r
+               popupHeight             : 'الإرتفاع',\r
+               popupTop                : 'التمركز للأعلى',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'إتجاه النص',\r
+               langDirNotSet   : '<بدون تحديد>',\r
+               langDirLTR              : 'اليسار لليمين (LTR)',\r
+               langDirRTL              : 'اليمين لليسار (RTL)',\r
+               acccessKey              : 'مفاتيح الإختصار',\r
+               name                    : 'الاسم',\r
+               langCode                : 'إتجاه النص',\r
+               tabIndex                : 'الترتيب',\r
+               advisoryTitle   : 'تلميح الشاشة',\r
+               advisoryContentType     : 'نوع التلميح',\r
+               cssClasses              : 'فئات التنسيق',\r
+               charset                 : 'ترميز المادة المطلوبة',\r
+               styles                  : 'نمط',\r
+               selectAnchor    : 'اختر علامة مرجعية',\r
+               anchorName              : 'حسب اسم العلامة',\r
+               anchorId                : 'حسب تعريف العنصر',\r
+               emailAddress    : 'عنوان بريد إلكتروني',\r
+               emailSubject    : 'موضوع الرسالة',\r
+               emailBody               : 'محتوى الرسالة',\r
+               noAnchors               : '(لا يوجد علامات مرجعية في هذا المستند)',\r
+               noUrl                   : 'فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط',\r
+               noEmail                 : 'فضلاً أدخل عنوان البريد الإلكتروني'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'إدراج/تحرير إشارة مرجعية',\r
+               menu            : 'خصائص الإشارة المرجعية',\r
+               title           : 'خصائص الإشارة المرجعية',\r
+               name            : 'اسم الإشارة المرجعية',\r
+               errorName       : 'الرجاء كتابة اسم الإشارة المرجعية'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'بحث واستبدال',\r
+               find                            : 'بحث',\r
+               replace                         : 'إستبدال',\r
+               findWhat                        : 'البحث عن:',\r
+               replaceWith                     : 'إستبدال بـ:',\r
+               notFoundMsg                     : 'لم يتم العثور على النص المحدد.',\r
+               matchCase                       : 'مطابقة حالة الأحرف',\r
+               matchWord                       : 'الكلمة بالكامل فقط',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'إستبدال الكل',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'جدول',\r
+               title           : 'إدراج جدول',\r
+               menu            : 'إدراج جدول',\r
+               deleteTable     : 'حذف الجدول',\r
+               rows            : 'صفوف',\r
+               columns         : 'أعمدة',\r
+               border          : 'سمك الحدود',\r
+               align           : 'المحاذاة',\r
+               alignNotSet     : '<بدون تحديد>',\r
+               alignLeft       : 'يسار',\r
+               alignCenter     : 'وسط',\r
+               alignRight      : 'يمين',\r
+               width           : 'العرض',\r
+               widthPx         : 'بكسل',\r
+               widthPc         : 'بالمئة',\r
+               height          : 'الإرتفاع',\r
+               cellSpace       : 'تباعد الخلايا',\r
+               cellPad         : 'المسافة البادئة',\r
+               caption         : 'الوصف',\r
+               summary         : 'الخلاصة',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'خلية',\r
+                       insertBefore    : 'إدراج خلية قبل',\r
+                       insertAfter             : 'إدراج خلية بعد',\r
+                       deleteCell              : 'حذف خلايا',\r
+                       merge                   : 'دمج خلايا',\r
+                       mergeRight              : 'دمج لليمين',\r
+                       mergeDown               : 'دمج للأسفل',\r
+                       splitHorizontal : 'تقسيم الخلية أفقياً',\r
+                       splitVertical   : 'تقسيم الخلية عمودياً',\r
+                       title                   : 'خصائص الخلية',\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'صف',\r
+                       insertBefore    : 'إدراج صف قبل',\r
+                       insertAfter             : 'إدراج صف بعد',\r
+                       deleteRow               : 'حذف صفوف'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'عمود',\r
+                       insertBefore    : 'إدراج عمود قبل',\r
+                       insertAfter             : 'إدراج عمود بعد',\r
+                       deleteColumn    : 'حذف أعمدة'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'خصائص زر الضغط',\r
+               text            : 'القيمة/التسمية',\r
+               type            : 'نوع الزر',\r
+               typeBtn         : 'زر',\r
+               typeSbm         : 'إرسال',\r
+               typeRst         : 'إعادة تعيين'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'خصائص خانة الإختيار',\r
+               radioTitle      : 'خصائص زر الخيار',\r
+               value           : 'القيمة',\r
+               selected        : 'محدد'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'خصائص النموذج',\r
+               menu            : 'خصائص النموذج',\r
+               action          : 'اسم الملف',\r
+               method          : 'الأسلوب',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'الهدف',\r
+               targetNotSet    : '<بدون تحديد>',\r
+               targetNew       : 'إطار جديد (_blank)',\r
+               targetTop       : 'صفحة كاملة (_top)',\r
+               targetSelf      : 'نفس الإطار (_self)',\r
+               targetParent    : 'الإطار الأصل (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'خصائص القائمة المنسدلة',\r
+               selectInfo      : 'معلومات',\r
+               opAvail         : 'الخيارات المتاحة',\r
+               value           : 'القيمة',\r
+               size            : 'الحجم',\r
+               lines           : 'الأسطر',\r
+               chkMulti        : 'السماح بتحديدات متعددة',\r
+               opText          : 'النص',\r
+               opValue         : 'القيمة',\r
+               btnAdd          : 'إضافة',\r
+               btnModify       : 'تعديل',\r
+               btnUp           : 'تحريك لأعلى',\r
+               btnDown         : 'تحريك لأسفل',\r
+               btnSetValue : 'إجعلها محددة',\r
+               btnDelete       : 'إزالة'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'خصائص ناحية النص',\r
+               cols            : 'الأعمدة',\r
+               rows            : 'الصفوف'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'خصائص مربع النص',\r
+               name            : 'الاسم',\r
+               value           : 'القيمة',\r
+               charWidth       : 'العرض بالأحرف',\r
+               maxChars        : 'عدد الحروف الأقصى',\r
+               type            : 'نوع المحتوى',\r
+               typeText        : 'نص',\r
+               typePass        : 'كلمة مرور'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'خصائص الحقل الخفي',\r
+               name    : 'الاسم',\r
+               value   : 'القيمة'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'خصائص الصورة',\r
+               titleButton     : 'خصائص زر الصورة',\r
+               menu            : 'خصائص الصورة',\r
+               infoTab : 'معلومات الصورة',\r
+               btnUpload       : 'أرسلها للخادم',\r
+               url             : 'موقع الصورة',\r
+               upload  : 'رفع',\r
+               alt             : 'الوصف',\r
+               width           : 'العرض',\r
+               height  : 'الإرتفاع',\r
+               lockRatio       : 'تناسق الحجم',\r
+               resetSize       : 'إستعادة الحجم الأصلي',\r
+               border  : 'سمك الحدود',\r
+               hSpace  : 'تباعد أفقي',\r
+               vSpace  : 'تباعد عمودي',\r
+               align           : 'محاذاة',\r
+               alignLeft       : 'يسار',\r
+               alignAbsBottom: 'أسفل النص',\r
+               alignAbsMiddle: 'وسط السطر',\r
+               alignBaseline   : 'على السطر',\r
+               alignBottom     : 'أسفل',\r
+               alignMiddle     : 'وسط',\r
+               alignRight      : 'يمين',\r
+               alignTextTop    : 'أعلى النص',\r
+               alignTop        : 'أعلى',\r
+               preview : 'معاينة',\r
+               alertUrl        : 'فضلاً أكتب الموقع الذي توجد عليه هذه الصورة.',\r
+               linkTab : 'الرابط',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'خصائص فيلم الفلاش',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'خصائص فيلم الفلاش',\r
+               chkPlay         : 'تشغيل تلقائي',\r
+               chkLoop         : 'تكرار',\r
+               chkMenu         : 'تمكين قائمة فيلم الفلاش',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'الحجم',\r
+               scaleAll                : 'إظهار الكل',\r
+               scaleNoBorder   : 'بلا حدود',\r
+               scaleFit                : 'ضبط تام',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'محاذاة',\r
+               alignLeft       : 'يسار',\r
+               alignAbsBottom: 'أسفل النص',\r
+               alignAbsMiddle: 'وسط السطر',\r
+               alignBaseline   : 'على السطر',\r
+               alignBottom     : 'أسفل',\r
+               alignMiddle     : 'وسط',\r
+               alignRight      : 'يمين',\r
+               alignTextTop    : 'أعلى النص',\r
+               alignTop        : 'أعلى',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'لون الخلفية',\r
+               width   : 'العرض',\r
+               height  : 'الإرتفاع',\r
+               hSpace  : 'تباعد أفقي',\r
+               vSpace  : 'تباعد عمودي',\r
+               validateSrc : 'فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'تدقيق إملائي',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'ليست في القاموس',\r
+               changeTo                : 'التغيير إلى',\r
+               btnIgnore               : 'تجاهل',\r
+               btnIgnoreAll    : 'تجاهل الكل',\r
+               btnReplace              : 'تغيير',\r
+               btnReplaceAll   : 'تغيير الكل',\r
+               btnUndo                 : 'تراجع',\r
+               noSuggestions   : '- لا توجد إقتراحات -',\r
+               progress                : 'جاري التدقيق إملائياً',\r
+               noMispell               : 'تم إكمال التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية',\r
+               noChanges               : 'تم إكمال التدقيق الإملائي: لم يتم تغيير أي كلمة',\r
+               oneChange               : 'تم إكمال التدقيق الإملائي: تم تغيير كلمة واحدة فقط',\r
+               manyChanges             : 'تم إكمال التدقيق الإملائي: تم تغيير %1 كلماتكلمة',\r
+               ieSpellDownload : 'المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'ابتسامات',\r
+               title   : 'إدراج إبتسامات '\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'تعداد رقمي',\r
+       bulletedlist : 'تعداد نقطي',\r
+       indent : 'زيادة المسافة البادئة',\r
+       outdent : 'إنقاص المسافة البادئة',\r
+\r
+       justify :\r
+       {\r
+               left : 'محاذاة إلى اليسار',\r
+               center : 'توسيط',\r
+               right : 'محاذاة إلى اليمين',\r
+               block : 'ضبط'\r
+       },\r
+\r
+       blockquote : 'اقتباس',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'لصق',\r
+               cutError        : 'الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+X).',\r
+               copyError       : 'الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+C).',\r
+               pasteMsg        : 'الصق داخل الصندوق بإستخدام زرّي (<STRONG>Ctrl+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر  <STRONG>موافق</STRONG>.',\r
+               securityMsg     : 'نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذا وجب عليك لصق المحتوى مرة أخرى في هذه النافذة.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'لصق من وورد',\r
+               title : 'لصق من وورد',\r
+               advice : 'الصق داخل الصندوق بإستخدام زرّي (<STRONG>Ctrl+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر  <STRONG>موافق</STRONG>.',\r
+               ignoreFontFace : 'تجاهل تعريفات أسماء الخطوط',\r
+               removeStyle : 'إزالة تعريفات الأنماط'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'لصق كنص بسيط',\r
+               title : 'لصق كنص بسيط'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'القوالب',\r
+               title : 'قوالب المحتوى',\r
+               insertOption: 'استبدال المحتوى',\r
+               selectPromptMsg: 'اختر القالب الذي تود وضعه في المحرر <br>(سيتم فقدان المحتوى الحالي):',\r
+               emptyListMsg : '(لم يتم تعريف أي قالب)'\r
+       },\r
+\r
+       showBlocks : 'مخطط تفصيلي',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'نمط',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'تنسيق',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'تنسيق',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'عادي',\r
+               tag_pre : 'منسّق',\r
+               tag_address : 'دوس',\r
+               tag_h1 : 'العنوان 1',\r
+               tag_h2 : 'العنوان  2',\r
+               tag_h3 : 'العنوان  3',\r
+               tag_h4 : 'العنوان  4',\r
+               tag_h5 : 'العنوان  5',\r
+               tag_h6 : 'العنوان  6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'خط',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'خط',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'حجم الخط',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'حجم الخط',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'لون النص',\r
+               bgColorTitle : 'لون الخلفية',\r
+               auto : 'تلقائي',\r
+               more : 'ألوان إضافية...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'حول CKEditor',\r
+               dlgTitle : 'حول rotidEKC',\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/bg.js b/_source/lang/bg.js
new file mode 100644 (file)
index 0000000..f79c874
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Bulgarian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['bg'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Код',\r
+       newPage                 : 'Нова страница',\r
+       save                    : 'Запази',\r
+       preview                 : 'Предварителен изглед',\r
+       cut                             : 'Изрежи',\r
+       copy                    : 'Запамети',\r
+       paste                   : 'Вмъкни',\r
+       print                   : 'Печат',\r
+       underline               : 'Подчертан',\r
+       bold                    : 'Удебелен',\r
+       italic                  : 'Курсив',\r
+       selectAll               : 'Селектирай всичко',\r
+       removeFormat    : 'Изтрий форматирането',\r
+       strike                  : 'Зачертан',\r
+       subscript               : 'Индекс за база',\r
+       superscript             : 'Индекс за степен',\r
+       horizontalrule  : 'Вмъкни хоризонтална линия',\r
+       pagebreak               : 'Вмъкни нов ред',\r
+       unlink                  : 'Изтрий връзка',\r
+       undo                    : 'Отмени',\r
+       redo                    : 'Повтори',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Разгледай сървъра',\r
+               url                             : 'Пълен път (URL)',\r
+               protocol                : 'Протокол',\r
+               upload                  : 'Качи',\r
+               uploadSubmit    : 'Прати към сървъра',\r
+               image                   : 'Изображение',\r
+               flash                   : 'Flash',\r
+               form                    : 'Формуляр',\r
+               checkbox                : 'Поле за отметка',\r
+               radio           : 'Поле за опция',\r
+               textField               : 'Текстово поле',\r
+               textarea                : 'Текстова област',\r
+               hiddenField             : 'Скрито поле',\r
+               button                  : 'Бутон',\r
+               select  : 'Падащо меню с опции',\r
+               imageButton             : 'Бутон-изображение',\r
+               notSet                  : '<не е настроен>',\r
+               id                              : 'Идентификатор',\r
+               name                    : 'Име',\r
+               langDir                 : 'посока на речта',\r
+               langDirLtr              : 'От ляво на дясно',\r
+               langDirRtl              : 'От дясно на ляво',\r
+               langCode                : 'Код на езика',\r
+               longDescr               : 'Описание на връзката',\r
+               cssClass                : 'Клас от стиловите таблици',\r
+               advisoryTitle   : 'Препоръчително заглавие',\r
+               cssStyle                : 'Стил',\r
+               ok                              : 'ОК',\r
+               cancel                  : 'Отказ',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Подробности...',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Вмъкни специален символ',\r
+               title           : 'Изберете специален символ'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Добави/Редактирай връзка',\r
+               menu            : 'Редактирай връзка',\r
+               title           : 'Връзка',\r
+               info            : 'Информация за връзката',\r
+               target          : 'Цел',\r
+               upload          : 'Качи',\r
+               advanced        : 'Подробности...',\r
+               type            : 'Вид на връзката',\r
+               toAnchor        : 'Котва в текущата страница',\r
+               toEmail         : 'Е-поща',\r
+               target          : 'Цел',\r
+               targetNotSet    : '<не е настроен>',\r
+               targetFrame     : '<рамка>',\r
+               targetPopup     : '<дъщерен прозорец>',\r
+               targetNew       : 'Нов прозорец (_blank)',\r
+               targetTop       : 'Целия прозорец (_top)',\r
+               targetSelf      : 'Активния прозорец (_self)',\r
+               targetParent    : 'Родителски прозорец (_parent)',\r
+               targetFrameName : 'Име на целевия прозорец',\r
+               targetPopupName : 'Име на дъщерния прозорец',\r
+               popupFeatures   : 'Параметри на дъщерния прозорец',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Поле за статус',\r
+               popupLocationBar        : 'Поле за адрес',\r
+               popupToolbar    : 'Панел с бутони',\r
+               popupMenuBar    : 'Меню',\r
+               popupFullScreen : 'Голям екран (MS IE)',\r
+               popupScrollBars : 'Плъзгач',\r
+               popupDependent  : 'Зависим (Netscape)',\r
+               popupWidth              : 'Ширина',\r
+               popupLeft               : 'Координати - X',\r
+               popupHeight             : 'Височина',\r
+               popupTop                : 'Координати - Y',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'посока на речта',\r
+               langDirNotSet   : '<не е настроен>',\r
+               langDirLTR              : 'От ляво на дясно',\r
+               langDirRTL              : 'От дясно на ляво',\r
+               acccessKey              : 'Бърз клавиш',\r
+               name                    : 'Име',\r
+               langCode                : 'посока на речта',\r
+               tabIndex                : 'Ред на достъп',\r
+               advisoryTitle   : 'Препоръчително заглавие',\r
+               advisoryContentType     : 'Препоръчителен тип на съдържанието',\r
+               cssClasses              : 'Клас от стиловите таблици',\r
+               charset                 : 'Тип на свързания ресурс',\r
+               styles                  : 'Стил',\r
+               selectAnchor    : 'Изберете котва',\r
+               anchorName              : 'По име на котвата',\r
+               anchorId                : 'По идентификатор на елемент',\r
+               emailAddress    : 'Адрес за е-поща',\r
+               emailSubject    : 'Тема на писмото',\r
+               emailBody               : 'Текст на писмото',\r
+               noAnchors               : '(Няма котви в текущия документ)',\r
+               noUrl                   : 'Моля, напишете пълния път (URL)',\r
+               noEmail                 : 'Моля, напишете адреса за е-поща'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Добави/Редактирай котва',\r
+               menu            : 'Параметри на котвата',\r
+               title           : 'Параметри на котвата',\r
+               name            : 'Име на котвата',\r
+               errorName       : 'Моля, въведете име на котвата'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'Търси',\r
+               replace                         : 'Замести',\r
+               findWhat                        : 'Търси:',\r
+               replaceWith                     : 'Замести с:',\r
+               notFoundMsg                     : 'Указания текст не беше намерен.',\r
+               matchCase                       : 'Със същия регистър',\r
+               matchWord                       : 'Търси същата дума',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Замести всички',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Таблица',\r
+               title           : 'Параметри на таблицата',\r
+               menu            : 'Параметри на таблицата',\r
+               deleteTable     : 'Изтрий таблицата',\r
+               rows            : 'Редове',\r
+               columns         : 'Колони',\r
+               border          : 'Размер на рамката',\r
+               align           : 'Подравняване',\r
+               alignNotSet     : '<Не е избрано>',\r
+               alignLeft       : 'Ляво',\r
+               alignCenter     : 'Център',\r
+               alignRight      : 'Дясно',\r
+               width           : 'Ширина',\r
+               widthPx         : 'пиксели',\r
+               widthPc         : 'проценти',\r
+               height          : 'Височина',\r
+               cellSpace       : 'Разстояние между клетките',\r
+               cellPad         : 'Отстъп на съдържанието в клетките',\r
+               caption         : 'Заглавие',\r
+               summary         : 'Резюме',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell', // MISSING\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'Изтрий клетките',\r
+                       merge                   : 'Обедини клетките',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Row', // MISSING\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'Изтрий редовете'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Column', // MISSING\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'Изтрий колоните'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Параметри на бутона',\r
+               text            : 'Текст (Стойност)',\r
+               type            : 'Тип',\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Параметри на полето за отметка',\r
+               radioTitle      : 'Параметри на полето за опция',\r
+               value           : 'Стойност',\r
+               selected        : 'Отметнато'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Параметри на формуляра',\r
+               menu            : 'Параметри на формуляра',\r
+               action          : 'Действие',\r
+               method          : 'Метод',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Цел',\r
+               targetNotSet    : '<не е настроен>',\r
+               targetNew       : 'Нов прозорец (_blank)',\r
+               targetTop       : 'Целия прозорец (_top)',\r
+               targetSelf      : 'Активния прозорец (_self)',\r
+               targetParent    : 'Родителски прозорец (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Параметри на падащото меню с опции',\r
+               selectInfo      : 'Информация',\r
+               opAvail         : 'Възможни опции',\r
+               value           : 'Стойност',\r
+               size            : 'Размер',\r
+               lines           : 'линии',\r
+               chkMulti        : 'Разрешено множествено селектиране',\r
+               opText          : 'Текст',\r
+               opValue         : 'Стойност',\r
+               btnAdd          : 'Добави',\r
+               btnModify       : 'Промени',\r
+               btnUp           : 'Нагоре',\r
+               btnDown         : 'Надолу',\r
+               btnSetValue : 'Настрой като избрана стойност',\r
+               btnDelete       : 'Изтрий'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Параметри на текстовата област',\r
+               cols            : 'Колони',\r
+               rows            : 'Редове'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Параметри на текстовото-поле',\r
+               name            : 'Име',\r
+               value           : 'Стойност',\r
+               charWidth       : 'Ширина на символите',\r
+               maxChars        : 'Максимум символи',\r
+               type            : 'Тип',\r
+               typeText        : 'Текст',\r
+               typePass        : 'Парола'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Параметри на скритото поле',\r
+               name    : 'Име',\r
+               value   : 'Стойност'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Параметри на изображението',\r
+               titleButton     : 'Параметри на бутона-изображение',\r
+               menu            : 'Параметри на изображението',\r
+               infoTab : 'Информация за изображението',\r
+               btnUpload       : 'Прати към сървъра',\r
+               url             : 'Пълен път (URL)',\r
+               upload  : 'Качи',\r
+               alt             : 'Алтернативен текст',\r
+               width           : 'Ширина',\r
+               height  : 'Височина',\r
+               lockRatio       : 'Запази пропорцията',\r
+               resetSize       : 'Възстанови размера',\r
+               border  : 'Рамка',\r
+               hSpace  : 'Хоризонтален отстъп',\r
+               vSpace  : 'Вертикален отстъп',\r
+               align           : 'Подравняване',\r
+               alignLeft       : 'Ляво',\r
+               alignAbsBottom: 'Най-долу',\r
+               alignAbsMiddle: 'Точно по средата',\r
+               alignBaseline   : 'По базовата линия',\r
+               alignBottom     : 'Долу',\r
+               alignMiddle     : 'По средата',\r
+               alignRight      : 'Дясно',\r
+               alignTextTop    : 'Върху текста',\r
+               alignTop        : 'Отгоре',\r
+               preview : 'Изглед',\r
+               alertUrl        : 'Моля, въведете пълния път до изображението',\r
+               linkTab : 'Връзка',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Параметри на Flash обекта',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Параметри на Flash обекта',\r
+               chkPlay         : 'Автоматично стартиране',\r
+               chkLoop         : 'Ново стартиране след завършването',\r
+               chkMenu         : 'Разрешено Flash меню',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Оразмеряване',\r
+               scaleAll                : 'Покажи целия обект',\r
+               scaleNoBorder   : 'Без рамка',\r
+               scaleFit                : 'Според мястото',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Подравняване',\r
+               alignLeft       : 'Ляво',\r
+               alignAbsBottom: 'Най-долу',\r
+               alignAbsMiddle: 'Точно по средата',\r
+               alignBaseline   : 'По базовата линия',\r
+               alignBottom     : 'Долу',\r
+               alignMiddle     : 'По средата',\r
+               alignRight      : 'Дясно',\r
+               alignTextTop    : 'Върху текста',\r
+               alignTop        : 'Отгоре',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Цвят на фона',\r
+               width   : 'Ширина',\r
+               height  : 'Височина',\r
+               hSpace  : 'Хоризонтален отстъп',\r
+               vSpace  : 'Вертикален отстъп',\r
+               validateSrc : 'Моля, напишете пълния път (URL)',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Провери правописа',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Липсва в речника',\r
+               changeTo                : 'Промени на',\r
+               btnIgnore               : 'Игнорирай',\r
+               btnIgnoreAll    : 'Игнорирай всички',\r
+               btnReplace              : 'Замести',\r
+               btnReplaceAll   : 'Замести всички',\r
+               btnUndo                 : 'Отмени',\r
+               noSuggestions   : '- Няма предложения -',\r
+               progress                : 'Извършване на проверката за правопис...',\r
+               noMispell               : 'Проверката за правопис завършена: не са открити правописни грешки',\r
+               noChanges               : 'Проверката за правопис завършена: няма променени думи',\r
+               oneChange               : 'Проверката за правопис завършена: една дума е променена',\r
+               manyChanges             : 'Проверката за правопис завършена: %1 думи са променени',\r
+               ieSpellDownload : 'Инструментът за проверка на правопис не е инсталиран. Желаете ли да го инсталирате ?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Усмивка',\r
+               title   : 'Добави усмивка'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Нумериран списък',\r
+       bulletedlist : 'Ненумериран списък',\r
+       indent : 'Увеличи отстъпа',\r
+       outdent : 'Намали отстъпа',\r
+\r
+       justify :\r
+       {\r
+               left : 'Подравняване в ляво',\r
+               center : 'Подравнявне в средата',\r
+               right : 'Подравняване в дясно',\r
+               block : 'Двустранно подравняване'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Вмъкни',\r
+               cutError        : 'Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни изрязването. За целта използвайте клавиатурата (Ctrl+X).',\r
+               copyError       : 'Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl+C).',\r
+               pasteMsg        : 'Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl+V</STRONG>) и натиснете <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Вмъкни от MS Word',\r
+               title : 'Вмъкни от MS Word',\r
+               advice : 'Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl+V</STRONG>) и натиснете <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Игнорирай шрифтовите дефиниции',\r
+               removeStyle : 'Изтрий стиловите дефиниции'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Вмъкни като чист текст',\r
+               title : 'Вмъкни като чист текст'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Шаблони',\r
+               title : 'Шаблони',\r
+               insertOption: 'Replace actual contents', // MISSING\r
+               selectPromptMsg: 'Изберете шаблон <br>(текущото съдържание на редактора ще бъде загубено):',\r
+               emptyListMsg : '(Няма дефинирани шаблони)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Стил',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Формат',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Формат',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Нормален',\r
+               tag_pre : 'Форматиран',\r
+               tag_address : 'Адрес',\r
+               tag_h1 : 'Заглавие 1',\r
+               tag_h2 : 'Заглавие 2',\r
+               tag_h3 : 'Заглавие 3',\r
+               tag_h4 : 'Заглавие 4',\r
+               tag_h5 : 'Заглавие 5',\r
+               tag_h6 : 'Заглавие 6',\r
+               tag_div : 'Параграф (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Шрифт',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Шрифт',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Размер',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Размер',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Цвят на текста',\r
+               bgColorTitle : 'Цвят на фона',\r
+               auto : 'По подразбиране',\r
+               more : 'Други цветове...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/bn.js b/_source/lang/bn.js
new file mode 100644 (file)
index 0000000..5b4f826
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Bengali/Bangla language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['bn'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'সোর্স',\r
+       newPage                 : 'নতুন পেজ',\r
+       save                    : 'সংরক্ষন কর',\r
+       preview                 : 'প্রিভিউ',\r
+       cut                             : 'কাট',\r
+       copy                    : 'কপি',\r
+       paste                   : 'পেস্ট',\r
+       print                   : 'প্রিন্ট',\r
+       underline               : 'আন্ডারলাইন',\r
+       bold                    : 'বোল্ড',\r
+       italic                  : 'ইটালিক',\r
+       selectAll               : 'সব সিলেক্ট কর',\r
+       removeFormat    : 'ফরমেট সরাও',\r
+       strike                  : 'স্ট্রাইক থ্রু',\r
+       subscript               : 'অধোলেখ',\r
+       superscript             : 'অভিলেখ',\r
+       horizontalrule  : 'রেখা যুক্ত কর',\r
+       pagebreak               : 'পেজ ব্রেক',\r
+       unlink                  : 'লিংক সরাও',\r
+       undo                    : 'আনডু',\r
+       redo                    : 'রি-ডু',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'ব্রাউজ সার্ভার',\r
+               url                             : 'URL',\r
+               protocol                : 'প্রোটোকল',\r
+               upload                  : 'আপলোড',\r
+               uploadSubmit    : 'ইহাকে সার্ভারে প্রেরন কর',\r
+               image                   : 'ছবির লেবেল যুক্ত কর',\r
+               flash                   : 'ফ্লাশ লেবেল যুক্ত কর',\r
+               form                    : 'ফর্ম',\r
+               checkbox                : 'চেক বাক্স',\r
+               radio           : 'রেডিও বাটন',\r
+               textField               : 'টেক্সট ফীল্ড',\r
+               textarea                : 'টেক্সট এরিয়া',\r
+               hiddenField             : 'গুপ্ত ফীল্ড',\r
+               button                  : 'বাটন',\r
+               select  : 'বাছাই ফীল্ড',\r
+               imageButton             : 'ছবির বাটন',\r
+               notSet                  : '<সেট নেই>',\r
+               id                              : 'আইডি',\r
+               name                    : 'নাম',\r
+               langDir                 : 'ভাষা লেখার দিক',\r
+               langDirLtr              : 'বাম থেকে ডান (LTR)',\r
+               langDirRtl              : 'ডান থেকে বাম (RTL)',\r
+               langCode                : 'ভাষা কোড',\r
+               longDescr               : 'URL এর লম্বা বর্ণনা',\r
+               cssClass                : 'স্টাইল-শীট ক্লাস',\r
+               advisoryTitle   : 'পরামর্শ শীর্ষক',\r
+               cssStyle                : 'স্টাইল',\r
+               ok                              : 'ওকে',\r
+               cancel                  : 'বাতিল',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'এডভান্সড',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'বিশেষ অক্ষর যুক্ত কর',\r
+               title           : 'বিশেষ ক্যারেক্টার বাছাই কর'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'লিংক যুক্ত কর',\r
+               menu            : 'লিংক সম্পাদন',\r
+               title           : 'লিংক',\r
+               info            : 'লিংক তথ্য',\r
+               target          : 'টার্গেট',\r
+               upload          : 'আপলোড',\r
+               advanced        : 'এডভান্সড',\r
+               type            : 'লিংক প্রকার',\r
+               toAnchor        : 'এই পেজে নোঙর কর',\r
+               toEmail         : 'ইমেইল',\r
+               target          : 'টার্গেট',\r
+               targetNotSet    : '<সেট নেই>',\r
+               targetFrame     : '<ফ্রেম>',\r
+               targetPopup     : '<পপআপ উইন্ডো>',\r
+               targetNew       : 'নতুন উইন্ডো (_blank)',\r
+               targetTop       : 'শীর্ষ উইন্ডো (_top)',\r
+               targetSelf      : 'এই উইন্ডো (_self)',\r
+               targetParent    : 'মূল উইন্ডো (_parent)',\r
+               targetFrameName : 'টার্গেট ফ্রেমের নাম',\r
+               targetPopupName : 'পপআপ উইন্ডোর নাম',\r
+               popupFeatures   : 'পপআপ উইন্ডো ফীচার সমূহ',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'স্ট্যাটাস বার',\r
+               popupLocationBar        : 'লোকেশন বার',\r
+               popupToolbar    : 'টুল বার',\r
+               popupMenuBar    : 'মেন্যু বার',\r
+               popupFullScreen : 'পূর্ণ পর্দা জুড়ে (IE)',\r
+               popupScrollBars : 'স্ক্রল বার',\r
+               popupDependent  : 'ডিপেন্ডেন্ট (Netscape)',\r
+               popupWidth              : 'প্রস্থ',\r
+               popupLeft               : 'বামের পজিশন',\r
+               popupHeight             : 'দৈর্ঘ্য',\r
+               popupTop                : 'ডানের পজিশন',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'ভাষা লেখার দিক',\r
+               langDirNotSet   : '<সেট নেই>',\r
+               langDirLTR              : 'বাম থেকে ডান (LTR)',\r
+               langDirRTL              : 'ডান থেকে বাম (RTL)',\r
+               acccessKey              : 'এক্সেস কী',\r
+               name                    : 'নাম',\r
+               langCode                : 'ভাষা লেখার দিক',\r
+               tabIndex                : 'ট্যাব ইন্ডেক্স',\r
+               advisoryTitle   : 'পরামর্শ শীর্ষক',\r
+               advisoryContentType     : 'পরামর্শ কন্টেন্টের প্রকার',\r
+               cssClasses              : 'স্টাইল-শীট ক্লাস',\r
+               charset                 : 'লিংক রিসোর্স ক্যারেক্টর সেট',\r
+               styles                  : 'স্টাইল',\r
+               selectAnchor    : 'নোঙর বাছাই',\r
+               anchorName              : 'নোঙরের নাম দিয়ে',\r
+               anchorId                : 'নোঙরের আইডি দিয়ে',\r
+               emailAddress    : 'ইমেইল ঠিকানা',\r
+               emailSubject    : 'মেসেজের বিষয়',\r
+               emailBody               : 'মেসেজের দেহ',\r
+               noAnchors               : '(No anchors available in the document)', // MISSING\r
+               noUrl                   : 'অনুগ্রহ করে URL লিংক টাইপ করুন',\r
+               noEmail                 : 'অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'নোঙ্গর',\r
+               menu            : 'নোঙর প্রোপার্টি',\r
+               title           : 'নোঙর প্রোপার্টি',\r
+               name            : 'নোঙরের নাম',\r
+               errorName       : 'নোঙরের নাম টাইপ করুন'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'খোজো',\r
+               replace                         : 'রিপ্লেস',\r
+               findWhat                        : 'যা খুঁজতে হবে:',\r
+               replaceWith                     : 'যার সাথে বদলাতে হবে:',\r
+               notFoundMsg                     : 'আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি',\r
+               matchCase                       : 'কেস মিলাও',\r
+               matchWord                       : 'পুরা শব্দ মেলাও',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'সব বদলে দাও',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'টেবিলের লেবেল যুক্ত কর',\r
+               title           : 'টেবিল প্রোপার্টি',\r
+               menu            : 'টেবিল প্রোপার্টি',\r
+               deleteTable     : 'টেবিল ডিলীট কর',\r
+               rows            : 'রো',\r
+               columns         : 'কলাম',\r
+               border          : 'বর্ডার সাইজ',\r
+               align           : 'এলাইনমেন্ট',\r
+               alignNotSet     : '<সেট নেই>',\r
+               alignLeft       : 'বামে',\r
+               alignCenter     : 'মাঝখানে',\r
+               alignRight      : 'ডানে',\r
+               width           : 'প্রস্থ',\r
+               widthPx         : 'পিক্সেল',\r
+               widthPc         : 'শতকরা',\r
+               height          : 'দৈর্ঘ্য',\r
+               cellSpace       : 'সেল স্পেস',\r
+               cellPad         : 'সেল প্যাডিং',\r
+               caption         : 'শীর্ষক',\r
+               summary         : 'সারাংশ',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'সেল',\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'সেল মুছে দাও',\r
+                       merge                   : 'সেল জোড়া দাও',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'রো',\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'রো মুছে দাও'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'কলাম',\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'কলাম মুছে দাও'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'বাটন প্রোপার্টি',\r
+               text            : 'টেক্সট (ভ্যালু)',\r
+               type            : 'প্রকার',\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'চেক বক্স প্রোপার্টি',\r
+               radioTitle      : 'রেডিও বাটন প্রোপার্টি',\r
+               value           : 'ভ্যালু',\r
+               selected        : 'সিলেক্টেড'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'ফর্ম প্রোপার্টি',\r
+               menu            : 'ফর্ম প্রোপার্টি',\r
+               action          : 'একশ্যন',\r
+               method          : 'পদ্ধতি',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'টার্গেট',\r
+               targetNotSet    : '<সেট নেই>',\r
+               targetNew       : 'নতুন উইন্ডো (_blank)',\r
+               targetTop       : 'শীর্ষ উইন্ডো (_top)',\r
+               targetSelf      : 'এই উইন্ডো (_self)',\r
+               targetParent    : 'মূল উইন্ডো (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'বাছাই ফীল্ড প্রোপার্টি',\r
+               selectInfo      : 'তথ্য',\r
+               opAvail         : 'অন্যান্য বিকল্প',\r
+               value           : 'ভ্যালু',\r
+               size            : 'সাইজ',\r
+               lines           : 'লাইন সমূহ',\r
+               chkMulti        : 'একাধিক সিলেকশন এলাউ কর',\r
+               opText          : 'টেক্সট',\r
+               opValue         : 'ভ্যালু',\r
+               btnAdd          : 'যুক্ত',\r
+               btnModify       : 'বদলে দাও',\r
+               btnUp           : 'উপর',\r
+               btnDown         : 'নীচে',\r
+               btnSetValue : 'বাছাই করা ভ্যালু হিসেবে সেট কর',\r
+               btnDelete       : 'ডিলীট'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'টেক্সট এরিয়া প্রোপার্টি',\r
+               cols            : 'কলাম',\r
+               rows            : 'রো'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'টেক্সট ফীল্ড প্রোপার্টি',\r
+               name            : 'নাম',\r
+               value           : 'ভ্যালু',\r
+               charWidth       : 'ক্যারেক্টার প্রশস্ততা',\r
+               maxChars        : 'সর্বাধিক ক্যারেক্টার',\r
+               type            : 'টাইপ',\r
+               typeText        : 'টেক্সট',\r
+               typePass        : 'পাসওয়ার্ড'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'গুপ্ত ফীল্ড প্রোপার্টি',\r
+               name    : 'নাম',\r
+               value   : 'ভ্যালু'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'ছবির প্রোপার্টি',\r
+               titleButton     : 'ছবি বাটন প্রোপার্টি',\r
+               menu            : 'ছবির প্রোপার্টি',\r
+               infoTab : 'ছবির তথ্য',\r
+               btnUpload       : 'ইহাকে সার্ভারে প্রেরন কর',\r
+               url             : 'URL',\r
+               upload  : 'আপলোড',\r
+               alt             : 'বিকল্প টেক্সট',\r
+               width           : 'প্রস্থ',\r
+               height  : 'দৈর্ঘ্য',\r
+               lockRatio       : 'অনুপাত লক কর',\r
+               resetSize       : 'সাইজ পূর্বাবস্থায় ফিরিয়ে দাও',\r
+               border  : 'বর্ডার',\r
+               hSpace  : 'হরাইজন্টাল স্পেস',\r
+               vSpace  : 'ভার্টিকেল স্পেস',\r
+               align           : 'এলাইন',\r
+               alignLeft       : 'বামে',\r
+               alignAbsBottom: 'Abs নীচে',\r
+               alignAbsMiddle: 'Abs উপর',\r
+               alignBaseline   : 'মূল রেখা',\r
+               alignBottom     : 'নীচে',\r
+               alignMiddle     : 'মধ্য',\r
+               alignRight      : 'ডানে',\r
+               alignTextTop    : 'টেক্সট উপর',\r
+               alignTop        : 'উপর',\r
+               preview : 'প্রীভিউ',\r
+               alertUrl        : 'অনুগ্রহক করে ছবির URL টাইপ করুন',\r
+               linkTab : 'লিংক',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'ফ্লাশ প্রোপার্টি',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'ফ্ল্যাশ প্রোপার্টি',\r
+               chkPlay         : 'অটো প্লে',\r
+               chkLoop         : 'লূপ',\r
+               chkMenu         : 'ফ্ল্যাশ মেনু এনাবল কর',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'স্কেল',\r
+               scaleAll                : 'সব দেখাও',\r
+               scaleNoBorder   : 'কোনো বর্ডার নেই',\r
+               scaleFit                : 'নিখুঁত ফিট',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'এলাইন',\r
+               alignLeft       : 'বামে',\r
+               alignAbsBottom: 'Abs নীচে',\r
+               alignAbsMiddle: 'Abs উপর',\r
+               alignBaseline   : 'মূল রেখা',\r
+               alignBottom     : 'নীচে',\r
+               alignMiddle     : 'মধ্য',\r
+               alignRight      : 'ডানে',\r
+               alignTextTop    : 'টেক্সট উপর',\r
+               alignTop        : 'উপর',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'বেকগ্রাউন্ড রং',\r
+               width   : 'প্রস্থ',\r
+               height  : 'দৈর্ঘ্য',\r
+               hSpace  : 'হরাইজন্টাল স্পেস',\r
+               vSpace  : 'ভার্টিকেল স্পেস',\r
+               validateSrc : 'অনুগ্রহ করে URL লিংক টাইপ করুন',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'বানান চেক',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'শব্দকোষে নেই',\r
+               changeTo                : 'এতে বদলাও',\r
+               btnIgnore               : 'ইগনোর কর',\r
+               btnIgnoreAll    : 'সব ইগনোর কর',\r
+               btnReplace              : 'বদলে দাও',\r
+               btnReplaceAll   : 'সব বদলে দাও',\r
+               btnUndo                 : 'আন্ডু',\r
+               noSuggestions   : '- কোন সাজেশন নেই -',\r
+               progress                : 'বানান পরীক্ষা চলছে...',\r
+               noMispell               : 'বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি',\r
+               noChanges               : 'বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি',\r
+               oneChange               : 'বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে',\r
+               manyChanges             : 'বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে',\r
+               ieSpellDownload : 'বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'স্মাইলী',\r
+               title   : 'স্মাইলী যুক্ত কর'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'সাংখ্যিক লিস্টের লেবেল',\r
+       bulletedlist : 'বুলেট লিস্ট লেবেল',\r
+       indent : 'ইনডেন্ট বাড়াও',\r
+       outdent : 'ইনডেন্ট কমাও',\r
+\r
+       justify :\r
+       {\r
+               left : 'বা দিকে ঘেঁষা',\r
+               center : 'মাঝ বরাবর ঘেষা',\r
+               right : 'ডান দিকে ঘেঁষা',\r
+               block : 'ব্লক জাস্টিফাই'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'পেস্ট',\r
+               cutError        : 'আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+X)।',\r
+               copyError       : 'আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+C)।',\r
+               pasteMsg        : 'অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'পেস্ট (শব্দ)',\r
+               title : 'পেস্ট (শব্দ)',\r
+               advice : 'অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন',\r
+               ignoreFontFace : 'ফন্ট ফেস ডেফিনেশন ইগনোর করুন',\r
+               removeStyle : 'স্টাইল ডেফিনেশন সরিয়ে দিন'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'সাদা টেক্সট হিসেবে পেস্ট কর',\r
+               title : 'সাদা টেক্সট হিসেবে পেস্ট কর'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'টেমপ্লেট',\r
+               title : 'কনটেন্ট টেমপ্লেট',\r
+               insertOption: 'Replace actual contents', // MISSING\r
+               selectPromptMsg: 'অনুগ্রহ করে এডিটরে ওপেন করার জন্য টেমপ্লেট বাছাই করুন<br>(আসল কনটেন্ট হারিয়ে যাবে):',\r
+               emptyListMsg : '(কোন টেমপ্লেট ডিফাইন করা নেই)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'স্টাইল',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'ফন্ট ফরমেট',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'ফন্ট ফরমেট',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'সাধারণ',\r
+               tag_pre : 'ফর্মেটেড',\r
+               tag_address : 'ঠিকানা',\r
+               tag_h1 : 'শীর্ষক ১',\r
+               tag_h2 : 'শীর্ষক ২',\r
+               tag_h3 : 'শীর্ষক ৩',\r
+               tag_h4 : 'শীর্ষক ৪',\r
+               tag_h5 : 'শীর্ষক ৫',\r
+               tag_h6 : 'শীর্ষক ৬',\r
+               tag_div : 'শীর্ষক (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'ফন্ট',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'ফন্ট',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'সাইজ',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'সাইজ',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'টেক্স্ট রং',\r
+               bgColorTitle : 'বেকগ্রাউন্ড রং',\r
+               auto : 'অটোমেটিক',\r
+               more : 'আরও রং...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/bs.js b/_source/lang/bs.js
new file mode 100644 (file)
index 0000000..60601b2
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Bosnian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['bs'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'HTML kôd',\r
+       newPage                 : 'Novi dokument',\r
+       save                    : 'Snimi',\r
+       preview                 : 'Prikaži',\r
+       cut                             : 'Izreži',\r
+       copy                    : 'Kopiraj',\r
+       paste                   : 'Zalijepi',\r
+       print                   : 'Štampaj',\r
+       underline               : 'Podvuci',\r
+       bold                    : 'Boldiraj',\r
+       italic                  : 'Ukosi',\r
+       selectAll               : 'Selektuj sve',\r
+       removeFormat    : 'Poništi format',\r
+       strike                  : 'Precrtaj',\r
+       subscript               : 'Subscript',\r
+       superscript             : 'Superscript',\r
+       horizontalrule  : 'Ubaci horizontalnu liniju',\r
+       pagebreak               : 'Insert Page Break for Printing', // MISSING\r
+       unlink                  : 'Izbriši link',\r
+       undo                    : 'Vrati',\r
+       redo                    : 'Ponovi',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Browse Server', // MISSING\r
+               url                             : 'URL',\r
+               protocol                : 'Protokol',\r
+               upload                  : 'Šalji',\r
+               uploadSubmit    : 'Šalji na server',\r
+               image                   : 'Slika',\r
+               flash                   : 'Flash', // MISSING\r
+               form                    : 'Form', // MISSING\r
+               checkbox                : 'Checkbox', // MISSING\r
+               radio           : 'Radio Button', // MISSING\r
+               textField               : 'Text Field', // MISSING\r
+               textarea                : 'Textarea', // MISSING\r
+               hiddenField             : 'Hidden Field', // MISSING\r
+               button                  : 'Button', // MISSING\r
+               select  : 'Selection Field', // MISSING\r
+               imageButton             : 'Image Button', // MISSING\r
+               notSet                  : '<nije podešeno>',\r
+               id                              : 'Id',\r
+               name                    : 'Naziv',\r
+               langDir                 : 'Smjer pisanja',\r
+               langDirLtr              : 'S lijeva na desno (LTR)',\r
+               langDirRtl              : 'S desna na lijevo (RTL)',\r
+               langCode                : 'Jezièni kôd',\r
+               longDescr               : 'Dugaèki opis URL-a',\r
+               cssClass                : 'Klase CSS stilova',\r
+               advisoryTitle   : 'Advisory title',\r
+               cssStyle                : 'Stil',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Odustani',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Naprednije',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Ubaci specijalni karater',\r
+               title           : 'Izaberi specijalni karakter'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Ubaci/Izmjeni link',\r
+               menu            : 'Izmjeni link',\r
+               title           : 'Link',\r
+               info            : 'Link info',\r
+               target          : 'Prozor',\r
+               upload          : 'Šalji',\r
+               advanced        : 'Naprednije',\r
+               type            : 'Tip linka',\r
+               toAnchor        : 'Sidro na ovoj stranici',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Prozor',\r
+               targetNotSet    : '<nije podešeno>',\r
+               targetFrame     : '<frejm>',\r
+               targetPopup     : '<popup prozor>',\r
+               targetNew       : 'Novi prozor (_blank)',\r
+               targetTop       : 'Najgornji prozor (_top)',\r
+               targetSelf      : 'Isti prozor (_self)',\r
+               targetParent    : 'Glavni prozor (_parent)',\r
+               targetFrameName : 'Target Frame Name', // MISSING\r
+               targetPopupName : 'Naziv popup prozora',\r
+               popupFeatures   : 'Moguænosti popup prozora',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Statusna traka',\r
+               popupLocationBar        : 'Traka za lokaciju',\r
+               popupToolbar    : 'Traka sa alatima',\r
+               popupMenuBar    : 'Izborna traka',\r
+               popupFullScreen : 'Cijeli ekran (IE)',\r
+               popupScrollBars : 'Scroll traka',\r
+               popupDependent  : 'Ovisno (Netscape)',\r
+               popupWidth              : 'Širina',\r
+               popupLeft               : 'Lijeva pozicija',\r
+               popupHeight             : 'Visina',\r
+               popupTop                : 'Gornja pozicija',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Smjer pisanja',\r
+               langDirNotSet   : '<nije podešeno>',\r
+               langDirLTR              : 'S lijeva na desno (LTR)',\r
+               langDirRTL              : 'S desna na lijevo (RTL)',\r
+               acccessKey              : 'Pristupna tipka',\r
+               name                    : 'Naziv',\r
+               langCode                : 'Smjer pisanja',\r
+               tabIndex                : 'Tab indeks',\r
+               advisoryTitle   : 'Advisory title',\r
+               advisoryContentType     : 'Advisory vrsta sadržaja',\r
+               cssClasses              : 'Klase CSS stilova',\r
+               charset                 : 'Linked Resource Charset',\r
+               styles                  : 'Stil',\r
+               selectAnchor    : 'Izaberi sidro',\r
+               anchorName              : 'Po nazivu sidra',\r
+               anchorId                : 'Po Id-u elementa',\r
+               emailAddress    : 'E-Mail Adresa',\r
+               emailSubject    : 'Subjekt poruke',\r
+               emailBody               : 'Poruka',\r
+               noAnchors               : '(Nema dostupnih sidra na stranici)',\r
+               noUrl                   : 'Molimo ukucajte URL link',\r
+               noEmail                 : 'Molimo ukucajte e-mail adresu'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Anchor', // MISSING\r
+               menu            : 'Edit Anchor', // MISSING\r
+               title           : 'Anchor Properties', // MISSING\r
+               name            : 'Anchor Name', // MISSING\r
+               errorName       : 'Please type the anchor name' // MISSING\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'Naði',\r
+               replace                         : 'Zamjeni',\r
+               findWhat                        : 'Naði šta:',\r
+               replaceWith                     : 'Zamjeni sa:',\r
+               notFoundMsg                     : 'Traženi tekst nije pronaðen.',\r
+               matchCase                       : 'Uporeðuj velika/mala slova',\r
+               matchWord                       : 'Uporeðuj samo cijelu rijeè',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Zamjeni sve',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabela',\r
+               title           : 'Svojstva tabele',\r
+               menu            : 'Svojstva tabele',\r
+               deleteTable     : 'Delete Table', // MISSING\r
+               rows            : 'Redova',\r
+               columns         : 'Kolona',\r
+               border          : 'Okvir',\r
+               align           : 'Poravnanje',\r
+               alignNotSet     : '<Nije podešeno>',\r
+               alignLeft       : 'Lijevo',\r
+               alignCenter     : 'Centar',\r
+               alignRight      : 'Desno',\r
+               width           : 'Širina',\r
+               widthPx         : 'piksela',\r
+               widthPc         : 'posto',\r
+               height          : 'Visina',\r
+               cellSpace       : 'Razmak æelija',\r
+               cellPad         : 'Uvod æelija',\r
+               caption         : 'Naslov',\r
+               summary         : 'Summary', // MISSING\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell', // MISSING\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'Briši æelije',\r
+                       merge                   : 'Spoji æelije',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Row', // MISSING\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'Briši redove'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Column', // MISSING\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'Briši kolone'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Button Properties', // MISSING\r
+               text            : 'Text (Value)', // MISSING\r
+               type            : 'Type', // MISSING\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Checkbox Properties', // MISSING\r
+               radioTitle      : 'Radio Button Properties', // MISSING\r
+               value           : 'Value', // MISSING\r
+               selected        : 'Selected' // MISSING\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Form Properties', // MISSING\r
+               menu            : 'Form Properties', // MISSING\r
+               action          : 'Action', // MISSING\r
+               method          : 'Method', // MISSING\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Prozor',\r
+               targetNotSet    : '<nije podešeno>',\r
+               targetNew       : 'Novi prozor (_blank)',\r
+               targetTop       : 'Najgornji prozor (_top)',\r
+               targetSelf      : 'Isti prozor (_self)',\r
+               targetParent    : 'Glavni prozor (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Selection Field Properties', // MISSING\r
+               selectInfo      : 'Select Info', // MISSING\r
+               opAvail         : 'Available Options', // MISSING\r
+               value           : 'Value', // MISSING\r
+               size            : 'Size', // MISSING\r
+               lines           : 'lines', // MISSING\r
+               chkMulti        : 'Allow multiple selections', // MISSING\r
+               opText          : 'Text', // MISSING\r
+               opValue         : 'Value', // MISSING\r
+               btnAdd          : 'Add', // MISSING\r
+               btnModify       : 'Modify', // MISSING\r
+               btnUp           : 'Up', // MISSING\r
+               btnDown         : 'Down', // MISSING\r
+               btnSetValue : 'Set as selected value', // MISSING\r
+               btnDelete       : 'Delete' // MISSING\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Textarea Properties', // MISSING\r
+               cols            : 'Columns', // MISSING\r
+               rows            : 'Rows' // MISSING\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Text Field Properties', // MISSING\r
+               name            : 'Name', // MISSING\r
+               value           : 'Value', // MISSING\r
+               charWidth       : 'Character Width', // MISSING\r
+               maxChars        : 'Maximum Characters', // MISSING\r
+               type            : 'Type', // MISSING\r
+               typeText        : 'Text', // MISSING\r
+               typePass        : 'Password' // MISSING\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Hidden Field Properties', // MISSING\r
+               name    : 'Name', // MISSING\r
+               value   : 'Value' // MISSING\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Svojstva slike',\r
+               titleButton     : 'Image Button Properties', // MISSING\r
+               menu            : 'Svojstva slike',\r
+               infoTab : 'Info slike',\r
+               btnUpload       : 'Šalji na server',\r
+               url             : 'URL',\r
+               upload  : 'Šalji',\r
+               alt             : 'Tekst na slici',\r
+               width           : 'Širina',\r
+               height  : 'Visina',\r
+               lockRatio       : 'Zakljuèaj odnos',\r
+               resetSize       : 'Resetuj dimenzije',\r
+               border  : 'Okvir',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Poravnanje',\r
+               alignLeft       : 'Lijevo',\r
+               alignAbsBottom: 'Abs dole',\r
+               alignAbsMiddle: 'Abs sredina',\r
+               alignBaseline   : 'Bazno',\r
+               alignBottom     : 'Dno',\r
+               alignMiddle     : 'Sredina',\r
+               alignRight      : 'Desno',\r
+               alignTextTop    : 'Vrh teksta',\r
+               alignTop        : 'Vrh',\r
+               preview : 'Prikaz',\r
+               alertUrl        : 'Molimo ukucajte URL od slike.',\r
+               linkTab : 'Link', // MISSING\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash Properties', // MISSING\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash Properties', // MISSING\r
+               chkPlay         : 'Auto Play', // MISSING\r
+               chkLoop         : 'Loop', // MISSING\r
+               chkMenu         : 'Enable Flash Menu', // MISSING\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Scale', // MISSING\r
+               scaleAll                : 'Show all', // MISSING\r
+               scaleNoBorder   : 'No Border', // MISSING\r
+               scaleFit                : 'Exact Fit', // MISSING\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Poravnanje',\r
+               alignLeft       : 'Lijevo',\r
+               alignAbsBottom: 'Abs dole',\r
+               alignAbsMiddle: 'Abs sredina',\r
+               alignBaseline   : 'Bazno',\r
+               alignBottom     : 'Dno',\r
+               alignMiddle     : 'Sredina',\r
+               alignRight      : 'Desno',\r
+               alignTextTop    : 'Vrh teksta',\r
+               alignTop        : 'Vrh',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Boja pozadine',\r
+               width   : 'Širina',\r
+               height  : 'Visina',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'Molimo ukucajte URL link',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Check Spelling', // MISSING\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Not in dictionary', // MISSING\r
+               changeTo                : 'Change to', // MISSING\r
+               btnIgnore               : 'Ignore', // MISSING\r
+               btnIgnoreAll    : 'Ignore All', // MISSING\r
+               btnReplace              : 'Replace', // MISSING\r
+               btnReplaceAll   : 'Replace All', // MISSING\r
+               btnUndo                 : 'Undo', // MISSING\r
+               noSuggestions   : '- No suggestions -', // MISSING\r
+               progress                : 'Spell check in progress...', // MISSING\r
+               noMispell               : 'Spell check complete: No misspellings found', // MISSING\r
+               noChanges               : 'Spell check complete: No words changed', // MISSING\r
+               oneChange               : 'Spell check complete: One word changed', // MISSING\r
+               manyChanges             : 'Spell check complete: %1 words changed', // MISSING\r
+               ieSpellDownload : 'Spell checker not installed. Do you want to download it now?' // MISSING\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smješko',\r
+               title   : 'Ubaci smješka'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Numerisana lista',\r
+       bulletedlist : 'Lista',\r
+       indent : 'Poveæaj uvod',\r
+       outdent : 'Smanji uvod',\r
+\r
+       justify :\r
+       {\r
+               left : 'Lijevo poravnanje',\r
+               center : 'Centralno poravnanje',\r
+               right : 'Desno poravnanje',\r
+               block : 'Puno poravnanje'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Zalijepi',\r
+               cutError        : 'Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl+X).',\r
+               copyError       : 'Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl+C).',\r
+               pasteMsg        : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK', // MISSING\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Zalijepi iz Word-a',\r
+               title : 'Zalijepi iz Word-a',\r
+               advice : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.', // MISSING\r
+               ignoreFontFace : 'Ignore Font Face definitions', // MISSING\r
+               removeStyle : 'Remove Styles definitions' // MISSING\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Zalijepi kao obièan tekst',\r
+               title : 'Zalijepi kao obièan tekst'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Templates', // MISSING\r
+               title : 'Content Templates', // MISSING\r
+               insertOption: 'Replace actual contents', // MISSING\r
+               selectPromptMsg: 'Please select the template to open in the editor', // MISSING\r
+               emptyListMsg : '(No templates defined)' // MISSING\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stil',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Format',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatted',\r
+               tag_address : 'Address',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Font',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Font',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Velièina',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Velièina',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Boja teksta',\r
+               bgColorTitle : 'Boja pozadine',\r
+               auto : 'Automatska',\r
+               more : 'Više boja...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/ca.js b/_source/lang/ca.js
new file mode 100644 (file)
index 0000000..8edd531
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Catalan language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['ca'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Editor de text enriquit, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Codi font',\r
+       newPage                 : 'Nova Pàgina',\r
+       save                    : 'Desa',\r
+       preview                 : 'Visualització prèvia',\r
+       cut                             : 'Retalla',\r
+       copy                    : 'Copia',\r
+       paste                   : 'Enganxa',\r
+       print                   : 'Imprimeix',\r
+       underline               : 'Subratllat',\r
+       bold                    : 'Negreta',\r
+       italic                  : 'Cursiva',\r
+       selectAll               : 'Selecciona-ho tot',\r
+       removeFormat    : 'Elimina Format',\r
+       strike                  : 'Barrat',\r
+       subscript               : 'Subíndex',\r
+       superscript             : 'Superíndex',\r
+       horizontalrule  : 'Insereix línia horitzontal',\r
+       pagebreak               : 'Insereix salt de pàgina',\r
+       unlink                  : 'Elimina l\'enllaç',\r
+       undo                    : 'Desfés',\r
+       redo                    : 'Refés',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Veure servidor',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocol',\r
+               upload                  : 'Puja',\r
+               uploadSubmit    : 'Envia-la al servidor',\r
+               image                   : 'Imatge',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formulari',\r
+               checkbox                : 'Casella de verificació',\r
+               radio           : 'Botó d\'opció',\r
+               textField               : 'Camp de text',\r
+               textarea                : 'Àrea de text',\r
+               hiddenField             : 'Camp ocult',\r
+               button                  : 'Botó',\r
+               select  : 'Camp de selecció',\r
+               imageButton             : 'Botó d\'imatge',\r
+               notSet                  : '<no definit>',\r
+               id                              : 'Id',\r
+               name                    : 'Nom',\r
+               langDir                 : 'Direcció de l\'idioma',\r
+               langDirLtr              : 'D\'esquerra a dreta (LTR)',\r
+               langDirRtl              : 'De dreta a esquerra (RTL)',\r
+               langCode                : 'Codi d\'idioma',\r
+               longDescr               : 'Descripció llarga de la URL',\r
+               cssClass                : 'Classes del full d\'estil',\r
+               advisoryTitle   : 'Títol consultiu',\r
+               cssStyle                : 'Estil',\r
+               ok                              : 'D\'acord',\r
+               cancel                  : 'Cancel·la',\r
+               generalTab              : 'General',\r
+               advancedTab             : 'Avançat',\r
+               validateNumberFailed    : 'Aquest valor no és un número.',\r
+               confirmNewPage  : 'Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?',\r
+               confirmCancel   : 'Algunes opcions s\'han canviat. Esteu segur que voleu tancar la finestra de diàleg?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, no disponible</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Insereix caràcter especial',\r
+               title           : 'Selecciona el caràcter especial'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Insereix/Edita enllaç',\r
+               menu            : 'Edita l\'enllaç',\r
+               title           : 'Enllaç',\r
+               info            : 'Informació de l\'enllaç',\r
+               target          : 'Destí',\r
+               upload          : 'Puja',\r
+               advanced        : 'Avançat',\r
+               type            : 'Tipus d\'enllaç',\r
+               toAnchor        : 'Àncora en aquesta pàgina',\r
+               toEmail         : 'Correu electrònic',\r
+               target          : 'Destí',\r
+               targetNotSet    : '<no definit>',\r
+               targetFrame     : '<marc>',\r
+               targetPopup     : '<finestra emergent>',\r
+               targetNew       : 'Nova finestra (_blank)',\r
+               targetTop       : 'Finestra Major (_top)',\r
+               targetSelf      : 'Mateixa finestra (_self)',\r
+               targetParent    : 'Finestra pare (_parent)',\r
+               targetFrameName : 'Nom del marc de destí',\r
+               targetPopupName : 'Nom finestra popup',\r
+               popupFeatures   : 'Característiques finestra popup',\r
+               popupResizable  : 'Redimensionable',\r
+               popupStatusBar  : 'Barra d\'estat',\r
+               popupLocationBar        : 'Barra d\'adreça',\r
+               popupToolbar    : 'Barra d\'eines',\r
+               popupMenuBar    : 'Barra de menú',\r
+               popupFullScreen : 'Pantalla completa (IE)',\r
+               popupScrollBars : 'Barres d\'scroll',\r
+               popupDependent  : 'Depenent (Netscape)',\r
+               popupWidth              : 'Amplada',\r
+               popupLeft               : 'Posició esquerra',\r
+               popupHeight             : 'Alçada',\r
+               popupTop                : 'Posició dalt',\r
+               id                              : 'Id',\r
+               langDir                 : 'Direcció de l\'idioma',\r
+               langDirNotSet   : '<no definit>',\r
+               langDirLTR              : 'D\'esquerra a dreta (LTR)',\r
+               langDirRTL              : 'De dreta a esquerra (RTL)',\r
+               acccessKey              : 'Clau d\'accés',\r
+               name                    : 'Nom',\r
+               langCode                : 'Direcció de l\'idioma',\r
+               tabIndex                : 'Index de Tab',\r
+               advisoryTitle   : 'Títol consultiu',\r
+               advisoryContentType     : 'Tipus de contingut consultiu',\r
+               cssClasses              : 'Classes del full d\'estil',\r
+               charset                 : 'Conjunt de caràcters font enllaçat',\r
+               styles                  : 'Estil',\r
+               selectAnchor    : 'Selecciona una àncora',\r
+               anchorName              : 'Per nom d\'àncora',\r
+               anchorId                : 'Per Id d\'element',\r
+               emailAddress    : 'Adreça de correu electrònic',\r
+               emailSubject    : 'Assumpte del missatge',\r
+               emailBody               : 'Cos del missatge',\r
+               noAnchors               : '(No hi ha àncores disponibles en aquest document)',\r
+               noUrl                   : 'Si us plau, escrigui l\'enllaç URL',\r
+               noEmail                 : 'Si us plau, escrigui l\'adreça correu electrònic'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Insereix/Edita àncora',\r
+               menu            : 'Propietats de l\'àncora',\r
+               title           : 'Propietats de l\'àncora',\r
+               name            : 'Nom de l\'àncora',\r
+               errorName       : 'Si us plau, escriviu el nom de l\'ancora'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Cerca i reemplaça',\r
+               find                            : 'Cerca',\r
+               replace                         : 'Reemplaça',\r
+               findWhat                        : 'Cerca:',\r
+               replaceWith                     : 'Remplaça amb:',\r
+               notFoundMsg                     : 'El text especificat no s\'ha trobat.',\r
+               matchCase                       : 'Distingeix majúscules/minúscules',\r
+               matchWord                       : 'Només paraules completes',\r
+               matchCyclic                     : 'Match cyclic',\r
+               replaceAll                      : 'Reemplaça-ho tot',\r
+               replaceSuccessMsg       : '%1 ocurrència/es reemplaçada/es.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Taula',\r
+               title           : 'Propietats de la taula',\r
+               menu            : 'Propietats de la taula',\r
+               deleteTable     : 'Suprimeix la taula',\r
+               rows            : 'Files',\r
+               columns         : 'Columnes',\r
+               border          : 'Mida vora',\r
+               align           : 'Alineació',\r
+               alignNotSet     : '<No Definit>',\r
+               alignLeft       : 'Esquerra',\r
+               alignCenter     : 'Centre',\r
+               alignRight      : 'Dreta',\r
+               width           : 'Amplada',\r
+               widthPx         : 'píxels',\r
+               widthPc         : 'percentatge',\r
+               height          : 'Alçada',\r
+               cellSpace       : 'Espaiat de cel·les',\r
+               cellPad         : 'Encoixinament de cel·les',\r
+               caption         : 'Títol',\r
+               summary         : 'Resum',\r
+               headers         : 'Capçaleres',\r
+               headersNone             : 'Cap',\r
+               headersColumn   : 'Primera columna',\r
+               headersRow              : 'Primera fila',\r
+               headersBoth             : 'Ambdues',\r
+               invalidRows             : 'El nombre de files ha de ser un nombre major que 0.',\r
+               invalidCols             : 'El nombre de columnes ha de ser un nombre major que 0.',\r
+               invalidBorder   : 'El gruix de la vora ha de ser un nombre.',\r
+               invalidWidth    : 'L\'amplada de la taula  ha de ser un nombre.',\r
+               invalidHeight   : 'L\'alçada de la taula  ha de ser un nombre.',\r
+               invalidCellSpacing      : 'L\'espaiat de cel·la  ha de ser un nombre.',\r
+               invalidCellPadding      : 'L\'encoixinament de cel·la  ha de ser un nombre.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cel·la',\r
+                       insertBefore    : 'Insereix cel·la abans de',\r
+                       insertAfter             : 'Insereix cel·la darrera',\r
+                       deleteCell              : 'Suprimeix les cel·les',\r
+                       merge                   : 'Fusiona les cel·les',\r
+                       mergeRight              : 'Fusiona cap a la dreta',\r
+                       mergeDown               : 'Fusiona cap avall',\r
+                       splitHorizontal : 'Divideix la cel·la horitzontalment',\r
+                       splitVertical   : 'Divideix la cel·la verticalment',\r
+                       title                   : 'Propertiat de la cel·la',\r
+                       cellType                : 'Tipus de cel·la',\r
+                       rowSpan                 : 'Expansió de files',\r
+                       colSpan                 : 'Expansió de columnes',\r
+                       wordWrap                : 'Ajustar al contingut',\r
+                       hAlign                  : 'Aliniació Horizontal',\r
+                       vAlign                  : 'Aliniació Vertical',\r
+                       alignTop                : 'A dalt',\r
+                       alignMiddle             : 'Al mig',\r
+                       alignBottom             : 'A baix',\r
+                       alignBaseline   : 'A la línia base',\r
+                       bgColor                 : 'Color de fons',\r
+                       borderColor             : 'Color de la vora',\r
+                       data                    : 'Data',\r
+                       header                  : 'Capçalera',\r
+                       yes                             : 'Sí',\r
+                       no                              : 'No',\r
+                       invalidWidth    : 'L\'amplada de cel·la ha de ser un nombre.',\r
+                       invalidHeight   : 'L\'alçada de cel·la ha de ser un nombre.',\r
+                       invalidRowSpan  : 'L\'expansió de files ha de ser un nombre enter.',\r
+                       invalidColSpan  : 'L\'expansió de columnes ha de ser un nombre enter.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Fila',\r
+                       insertBefore    : 'Insereix fila abans de',\r
+                       insertAfter             : 'Insereix fila darrera',\r
+                       deleteRow               : 'Suprimeix una fila'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Columna',\r
+                       insertBefore    : 'Insereix columna abans de',\r
+                       insertAfter             : 'Insereix columna darrera',\r
+                       deleteColumn    : 'Suprimeix una columna'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Propietats del botó',\r
+               text            : 'Text (Valor)',\r
+               type            : 'Tipus',\r
+               typeBtn         : 'Botó',\r
+               typeSbm         : 'Transmet formulari',\r
+               typeRst         : 'Reinicia formulari'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Propietats de la casella de verificació',\r
+               radioTitle      : 'Propietats del botó d\'opció',\r
+               value           : 'Valor',\r
+               selected        : 'Seleccionat'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Propietats del formulari',\r
+               menu            : 'Propietats del formulari',\r
+               action          : 'Acció',\r
+               method          : 'Mètode',\r
+               encoding        : 'Codificació',\r
+               target          : 'Destí',\r
+               targetNotSet    : '<no definit>',\r
+               targetNew       : 'Nova finestra (_blank)',\r
+               targetTop       : 'Finestra Major (_top)',\r
+               targetSelf      : 'Mateixa finestra (_self)',\r
+               targetParent    : 'Finestra pare (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Propietats del camp de selecció',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Opcions disponibles',\r
+               value           : 'Valor',\r
+               size            : 'Mida',\r
+               lines           : 'Línies',\r
+               chkMulti        : 'Permet múltiples seleccions',\r
+               opText          : 'Text',\r
+               opValue         : 'Valor',\r
+               btnAdd          : 'Afegeix',\r
+               btnModify       : 'Modifica',\r
+               btnUp           : 'Amunt',\r
+               btnDown         : 'Avall',\r
+               btnSetValue : 'Selecciona per defecte',\r
+               btnDelete       : 'Elimina'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Propietats de l\'àrea de text',\r
+               cols            : 'Columnes',\r
+               rows            : 'Files'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Propietats del camp de text',\r
+               name            : 'Nom',\r
+               value           : 'Valor',\r
+               charWidth       : 'Amplada',\r
+               maxChars        : 'Nombre màxim de caràcters',\r
+               type            : 'Tipus',\r
+               typeText        : 'Text',\r
+               typePass        : 'Contrasenya'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Propietats del camp ocult',\r
+               name    : 'Nom',\r
+               value   : 'Valor'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Propietats de la imatge',\r
+               titleButton     : 'Propietats del botó d\'imatge',\r
+               menu            : 'Propietats de la imatge',\r
+               infoTab : 'Informació de la imatge',\r
+               btnUpload       : 'Envia-la al servidor',\r
+               url             : 'URL',\r
+               upload  : 'Puja',\r
+               alt             : 'Text alternatiu',\r
+               width           : 'Amplada',\r
+               height  : 'Alçada',\r
+               lockRatio       : 'Bloqueja les proporcions',\r
+               resetSize       : 'Restaura la mida',\r
+               border  : 'Vora',\r
+               hSpace  : 'Espaiat horit.',\r
+               vSpace  : 'Espaiat vert.',\r
+               align           : 'Alineació',\r
+               alignLeft       : 'Ajusta a l\'esquerra',\r
+               alignAbsBottom: 'Abs Bottom',\r
+               alignAbsMiddle: 'Abs Middle',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Bottom',\r
+               alignMiddle     : 'Middle',\r
+               alignRight      : 'Ajusta a la dreta',\r
+               alignTextTop    : 'Text Top',\r
+               alignTop        : 'Top',\r
+               preview : 'Vista prèvia',\r
+               alertUrl        : 'Si us plau, escriviu la URL de la imatge',\r
+               linkTab : 'Enllaç',\r
+               button2Img      : 'Voleu transformar el botó d\'imatge seleccionat en una simple imatge?',\r
+               img2Button      : 'Voleu transformar la imatge seleccionada en un botó d\'imatge?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Propietats del Flash',\r
+               propertiesTab   : 'Propietats',\r
+               title           : 'Propietats del Flash',\r
+               chkPlay         : 'Reprodució automàtica',\r
+               chkLoop         : 'Bucle',\r
+               chkMenu         : 'Habilita menú Flash',\r
+               chkFull         : 'Permetre la pantalla completa',\r
+               scale           : 'Escala',\r
+               scaleAll                : 'Mostra-ho tot',\r
+               scaleNoBorder   : 'Sense vores',\r
+               scaleFit                : 'Mida exacta',\r
+               access                  : 'Accés a scripts',\r
+               accessAlways    : 'Sempre',\r
+               accessSameDomain        : 'El mateix domini',\r
+               accessNever     : 'Mai',\r
+               align           : 'Alineació',\r
+               alignLeft       : 'Ajusta a l\'esquerra',\r
+               alignAbsBottom: 'Abs Bottom',\r
+               alignAbsMiddle: 'Abs Middle',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Bottom',\r
+               alignMiddle     : 'Middle',\r
+               alignRight      : 'Ajusta a la dreta',\r
+               alignTextTop    : 'Text Top',\r
+               alignTop        : 'Top',\r
+               quality         : 'Qualitat',\r
+               qualityBest              : 'La millor',\r
+               qualityHigh              : 'Alta',\r
+               qualityAutoHigh  : 'Alta automàtica',\r
+               qualityMedium    : 'Mitjana',\r
+               qualityAutoLow   : 'Baixa automàtica',\r
+               qualityLow               : 'Baixa',\r
+               windowModeWindow         : 'Finestra',\r
+               windowModeOpaque         : 'Opaca',\r
+               windowModeTransparent    : 'Transparent',\r
+               windowMode      : 'Mode de la finestra',\r
+               flashvars       : 'Variables de Flash',\r
+               bgcolor : 'Color de Fons',\r
+               width   : 'Amplada',\r
+               height  : 'Alçada',\r
+               hSpace  : 'Espaiat horit.',\r
+               vSpace  : 'Espaiat vert.',\r
+               validateSrc : 'Si us plau, escrigui l\'enllaç URL',\r
+               validateWidth : 'L\'amplada ha de ser un nombre.',\r
+               validateHeight : 'L\'alçada ha de ser un nombre.',\r
+               validateHSpace : 'L\'espaiat horitzonatal ha de ser un nombre.',\r
+               validateVSpace : 'L\'espaiat vertical ha de ser un nombre.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Revisa l\'ortografia',\r
+               title                   : 'Comprova l\'ortografia',\r
+               notAvailable    : 'El servei no es troba disponible ara.',\r
+               errorLoading    : 'Error carregant el servidor: %s.',\r
+               notInDic                : 'No és al diccionari',\r
+               changeTo                : 'Reemplaça amb',\r
+               btnIgnore               : 'Ignora',\r
+               btnIgnoreAll    : 'Ignora-les totes',\r
+               btnReplace              : 'Canvia',\r
+               btnReplaceAll   : 'Canvia-les totes',\r
+               btnUndo                 : 'Desfés',\r
+               noSuggestions   : 'Cap suggeriment',\r
+               progress                : 'Verificació ortogràfica en curs...',\r
+               noMispell               : 'Verificació ortogràfica acabada: no hi ha cap paraula mal escrita',\r
+               noChanges               : 'Verificació ortogràfica: no s\'ha canviat cap paraula',\r
+               oneChange               : 'Verificació ortogràfica: s\'ha canviat una paraula',\r
+               manyChanges             : 'Verificació ortogràfica: s\'han canviat %1 paraules',\r
+               ieSpellDownload : 'Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Icona',\r
+               title   : 'Insereix una icona'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element'\r
+       },\r
+\r
+       numberedlist : 'Llista numerada',\r
+       bulletedlist : 'Llista de pics',\r
+       indent : 'Augmenta el sagnat',\r
+       outdent : 'Redueix el sagnat',\r
+\r
+       justify :\r
+       {\r
+               left : 'Alinia a l\'esquerra',\r
+               center : 'Centrat',\r
+               right : 'Alinia a la dreta',\r
+               block : 'Justificat'\r
+       },\r
+\r
+       blockquote : 'Bloc de cita',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Enganxa',\r
+               cutError        : 'La seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).',\r
+               copyError       : 'La seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).',\r
+               pasteMsg        : 'Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'A causa de la configuració de seguretat del vostre navegador, l\'editor no pot accedir al porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Enganxa des del Word',\r
+               title : 'Enganxa des del Word',\r
+               advice : 'Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignora definicions de font',\r
+               removeStyle : 'Elimina definicions d\'estil'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Enganxa com a text no formatat',\r
+               title : 'Enganxa com a text no formatat'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Plantilles',\r
+               title : 'Contingut plantilles',\r
+               insertOption: 'Reemplaça el contingut actual',\r
+               selectPromptMsg: 'Si us plau, seleccioneu la plantilla per obrir a l\'editor<br>(el contingut actual no serà enregistrat):',\r
+               emptyListMsg : '(No hi ha plantilles definides)'\r
+       },\r
+\r
+       showBlocks : 'Mostra els blocs',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Estil',\r
+               voiceLabel : 'Estils',\r
+               panelVoiceLabel : 'Seleccioneu un estil',\r
+               panelTitle1 : 'Estils de bloc',\r
+               panelTitle2 : 'Estils incrustats',\r
+               panelTitle3 : 'Estils d\'objecte'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format',\r
+               panelTitle : 'Format',\r
+               panelVoiceLabel : 'Seleccioneu un format de paràgraf',\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatejat',\r
+               tag_address : 'Adreça',\r
+               tag_h1 : 'Encapçalament 1',\r
+               tag_h2 : 'Encapçalament 2',\r
+               tag_h3 : 'Encapçalament 3',\r
+               tag_h4 : 'Encapçalament 4',\r
+               tag_h5 : 'Encapçalament 5',\r
+               tag_h6 : 'Encapçalament 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Tipus de lletra',\r
+               voiceLabel : 'Tipus de lletra',\r
+               panelTitle : 'Tipus de lletra',\r
+               panelVoiceLabel : 'Seleccioneu un tipus de lletra'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Mida',\r
+               voiceLabel : 'Mida de la lletra',\r
+               panelTitle : 'Mida',\r
+               panelVoiceLabel : 'Seleccioneu una mida de lletra'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Color de Text',\r
+               bgColorTitle : 'Color de Fons',\r
+               auto : 'Automàtic',\r
+               more : 'Més colors...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type',\r
+               enable : 'Habilitat l\'SCAYT',\r
+               disable : 'Deshabilita SCAYT',\r
+               about : 'Quant a l\'SCAYT',\r
+               toggle : 'Commuta l\'SCAYT',\r
+               options : 'Opcions',\r
+               langs : 'Idiomes',\r
+               moreSuggestions : 'Més suggerències',\r
+               ignore : 'Ignora',\r
+               ignoreAll : 'Ignora\'ls tots',\r
+               addWord : 'Afegeix una paraula',\r
+               emptyDic : 'El nom del diccionari no hauria d\'estar buit.',\r
+               optionsTab : 'Opcions',\r
+               languagesTab : 'Idiomes',\r
+               dictionariesTab : 'Diccionaris',\r
+               aboutTab : 'Quant a'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'Quan al CKEditor',\r
+               dlgTitle : 'Quan al CKEditor',\r
+               moreInfo : 'Per informació sobre llicències visiteu el web:',\r
+               copy : 'Copyright &copy; $1. All rights reserved.'\r
+       },\r
+\r
+       maximize : 'Maximiza',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Àncora',\r
+               flash : 'Animació Flash',\r
+               div : 'Salt de pàgina',\r
+               unknown : 'Objecte desconegut'\r
+       },\r
+\r
+       resize : 'Arrossegueu per redimensionar'\r
+};\r
diff --git a/_source/lang/cs.js b/_source/lang/cs.js
new file mode 100644 (file)
index 0000000..ccd7bbb
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Czech language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['cs'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Zdroj',\r
+       newPage                 : 'Nová stránka',\r
+       save                    : 'Uložit',\r
+       preview                 : 'Náhled',\r
+       cut                             : 'Vyjmout',\r
+       copy                    : 'Kopírovat',\r
+       paste                   : 'Vložit',\r
+       print                   : 'Tisk',\r
+       underline               : 'Podtržené',\r
+       bold                    : 'Tučné',\r
+       italic                  : 'Kurzíva',\r
+       selectAll               : 'Vybrat vše',\r
+       removeFormat    : 'Odstranit formátování',\r
+       strike                  : 'Přeškrtnuté',\r
+       subscript               : 'Dolní index',\r
+       superscript             : 'Horní index',\r
+       horizontalrule  : 'Vložit vodorovnou linku',\r
+       pagebreak               : 'Vložit konec stránky',\r
+       unlink                  : 'Odstranit odkaz',\r
+       undo                    : 'Zpět',\r
+       redo                    : 'Znovu',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Vybrat na serveru',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokol',\r
+               upload                  : 'Odeslat',\r
+               uploadSubmit    : 'Odeslat na server',\r
+               image                   : 'Obrázek',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formulář',\r
+               checkbox                : 'Zaškrtávací políčko',\r
+               radio           : 'Přepínač',\r
+               textField               : 'Textové pole',\r
+               textarea                : 'Textová oblast',\r
+               hiddenField             : 'Skryté pole',\r
+               button                  : 'Tlačítko',\r
+               select  : 'Seznam',\r
+               imageButton             : 'Obrázkové tlačítko',\r
+               notSet                  : '<nenastaveno>',\r
+               id                              : 'Id',\r
+               name                    : 'Jméno',\r
+               langDir                 : 'Orientace jazyka',\r
+               langDirLtr              : 'Zleva do prava (LTR)',\r
+               langDirRtl              : 'Zprava do leva (RTL)',\r
+               langCode                : 'Kód jazyka',\r
+               longDescr               : 'Dlouhý popis URL',\r
+               cssClass                : 'Třída stylu',\r
+               advisoryTitle   : 'Pomocný titulek',\r
+               cssStyle                : 'Styl',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Storno',\r
+               generalTab              : 'Obecné',\r
+               advancedTab             : 'Rozšířené',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Vložit speciální znaky',\r
+               title           : 'Výběr speciálního znaku'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Vložit/změnit odkaz',\r
+               menu            : 'Změnit odkaz',\r
+               title           : 'Odkaz',\r
+               info            : 'Informace o odkazu',\r
+               target          : 'Cíl',\r
+               upload          : 'Odeslat',\r
+               advanced        : 'Rozšířené',\r
+               type            : 'Typ odkazu',\r
+               toAnchor        : 'Kotva v této stránce',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Cíl',\r
+               targetNotSet    : '<nenastaveno>',\r
+               targetFrame     : '<rámec>',\r
+               targetPopup     : '<vyskakovací okno>',\r
+               targetNew       : 'Nové okno (_blank)',\r
+               targetTop       : 'Hlavní okno (_top)',\r
+               targetSelf      : 'Stejné okno (_self)',\r
+               targetParent    : 'Rodičovské okno (_parent)',\r
+               targetFrameName : 'Název cílového rámu',\r
+               targetPopupName : 'Název vyskakovacího okna',\r
+               popupFeatures   : 'Vlastnosti vyskakovacího okna',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Stavový řádek',\r
+               popupLocationBar        : 'Panel umístění',\r
+               popupToolbar    : 'Panel nástrojů',\r
+               popupMenuBar    : 'Panel nabídky',\r
+               popupFullScreen : 'Celá obrazovka (IE)',\r
+               popupScrollBars : 'Posuvníky',\r
+               popupDependent  : 'Závislost (Netscape)',\r
+               popupWidth              : 'Šířka',\r
+               popupLeft               : 'Levý okraj',\r
+               popupHeight             : 'Výška',\r
+               popupTop                : 'Horní okraj',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Orientace jazyka',\r
+               langDirNotSet   : '<nenastaveno>',\r
+               langDirLTR              : 'Zleva do prava (LTR)',\r
+               langDirRTL              : 'Zprava do leva (RTL)',\r
+               acccessKey              : 'Přístupový klíč',\r
+               name                    : 'Jméno',\r
+               langCode                : 'Orientace jazyka',\r
+               tabIndex                : 'Pořadí prvku',\r
+               advisoryTitle   : 'Pomocný titulek',\r
+               advisoryContentType     : 'Pomocný typ obsahu',\r
+               cssClasses              : 'Třída stylu',\r
+               charset                 : 'Přiřazená znaková sada',\r
+               styles                  : 'Styl',\r
+               selectAnchor    : 'Vybrat kotvu',\r
+               anchorName              : 'Podle jména kotvy',\r
+               anchorId                : 'Podle Id objektu',\r
+               emailAddress    : 'E-Mailová adresa',\r
+               emailSubject    : 'Předmět zprávy',\r
+               emailBody               : 'Tělo zprávy',\r
+               noAnchors               : '(Ve stránce není definována žádná kotva!)',\r
+               noUrl                   : 'Zadejte prosím URL odkazu',\r
+               noEmail                 : 'Zadejte prosím e-mailovou adresu'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Vložít/změnit záložku',\r
+               menu            : 'Vlastnosti záložky',\r
+               title           : 'Vlastnosti záložky',\r
+               name            : 'Název záložky',\r
+               errorName       : 'Zadejte prosím název záložky'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Najít a nahradit',\r
+               find                            : 'Hledat',\r
+               replace                         : 'Nahradit',\r
+               findWhat                        : 'Co hledat:',\r
+               replaceWith                     : 'Čím nahradit:',\r
+               notFoundMsg                     : 'Hledaný text nebyl nalezen.',\r
+               matchCase                       : 'Rozlišovat velikost písma',\r
+               matchWord                       : 'Pouze celá slova',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Nahradit vše',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabulka',\r
+               title           : 'Vlastnosti tabulky',\r
+               menu            : 'Vlastnosti tabulky',\r
+               deleteTable     : 'Smazat tabulku',\r
+               rows            : 'Řádky',\r
+               columns         : 'Sloupce',\r
+               border          : 'Ohraničení',\r
+               align           : 'Zarovnání',\r
+               alignNotSet     : '<nenastaveno>',\r
+               alignLeft       : 'Vlevo',\r
+               alignCenter     : 'Na střed',\r
+               alignRight      : 'Vpravo',\r
+               width           : 'Šířka',\r
+               widthPx         : 'bodů',\r
+               widthPc         : 'procent',\r
+               height          : 'Výška',\r
+               cellSpace       : 'Vzdálenost buněk',\r
+               cellPad         : 'Odsazení obsahu',\r
+               caption         : 'Popis',\r
+               summary         : 'Souhrn',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Buňka',\r
+                       insertBefore    : 'Vložit buňku před',\r
+                       insertAfter             : 'Vložit buňku za',\r
+                       deleteCell              : 'Smazat buňky',\r
+                       merge                   : 'Sloučit buňky',\r
+                       mergeRight              : 'Sloučit doprava',\r
+                       mergeDown               : 'Sloučit dolů',\r
+                       splitHorizontal : 'Rozdělit buňky vodorovně',\r
+                       splitVertical   : 'Rozdělit buňky svisle',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Řádek',\r
+                       insertBefore    : 'Vložit řádek před',\r
+                       insertAfter             : 'Vložit řádek za',\r
+                       deleteRow               : 'Smazat řádky'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Sloupec',\r
+                       insertBefore    : 'Vložit sloupec před',\r
+                       insertAfter             : 'Vložit sloupec za',\r
+                       deleteColumn    : 'Smazat sloupec'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Vlastnosti tlačítka',\r
+               text            : 'Popisek',\r
+               type            : 'Typ',\r
+               typeBtn         : 'Tlačítko',\r
+               typeSbm         : 'Odeslat',\r
+               typeRst         : 'Obnovit'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Vlastnosti zaškrtávacího políčka',\r
+               radioTitle      : 'Vlastnosti přepínače',\r
+               value           : 'Hodnota',\r
+               selected        : 'Zaškrtnuto'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Vlastnosti formuláře',\r
+               menu            : 'Vlastnosti formuláře',\r
+               action          : 'Akce',\r
+               method          : 'Metoda',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Cíl',\r
+               targetNotSet    : '<nenastaveno>',\r
+               targetNew       : 'Nové okno (_blank)',\r
+               targetTop       : 'Hlavní okno (_top)',\r
+               targetSelf      : 'Stejné okno (_self)',\r
+               targetParent    : 'Rodičovské okno (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Vlastnosti seznamu',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Dostupná nastavení',\r
+               value           : 'Hodnota',\r
+               size            : 'Velikost',\r
+               lines           : 'Řádků',\r
+               chkMulti        : 'Povolit mnohonásobné výběry',\r
+               opText          : 'Text',\r
+               opValue         : 'Hodnota',\r
+               btnAdd          : 'Přidat',\r
+               btnModify       : 'Změnit',\r
+               btnUp           : 'Nahoru',\r
+               btnDown         : 'Dolů',\r
+               btnSetValue : 'Nastavit jako vybranou hodnotu',\r
+               btnDelete       : 'Smazat'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Vlastnosti textové oblasti',\r
+               cols            : 'Sloupců',\r
+               rows            : 'Řádků'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Vlastnosti textového pole',\r
+               name            : 'Název',\r
+               value           : 'Hodnota',\r
+               charWidth       : 'Šířka ve znacích',\r
+               maxChars        : 'Maximální počet znaků',\r
+               type            : 'Typ',\r
+               typeText        : 'Text',\r
+               typePass        : 'Heslo'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Vlastnosti skrytého pole',\r
+               name    : 'Název',\r
+               value   : 'Hodnota'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Vlastnosti obrázku',\r
+               titleButton     : 'Vlastností obrázkového tlačítka',\r
+               menu            : 'Vlastnosti obrázku',\r
+               infoTab : 'Informace o obrázku',\r
+               btnUpload       : 'Odeslat na server',\r
+               url             : 'URL',\r
+               upload  : 'Odeslat',\r
+               alt             : 'Alternativní text',\r
+               width           : 'Šířka',\r
+               height  : 'Výška',\r
+               lockRatio       : 'Zámek',\r
+               resetSize       : 'Původní velikost',\r
+               border  : 'Okraje',\r
+               hSpace  : 'H-mezera',\r
+               vSpace  : 'V-mezera',\r
+               align           : 'Zarovnání',\r
+               alignLeft       : 'Vlevo',\r
+               alignAbsBottom: 'Zcela dolů',\r
+               alignAbsMiddle: 'Doprostřed',\r
+               alignBaseline   : 'Na účaří',\r
+               alignBottom     : 'Dolů',\r
+               alignMiddle     : 'Na střed',\r
+               alignRight      : 'Vpravo',\r
+               alignTextTop    : 'Na horní okraj textu',\r
+               alignTop        : 'Nahoru',\r
+               preview : 'Náhled',\r
+               alertUrl        : 'Zadejte prosím URL obrázku',\r
+               linkTab : 'Odkaz',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Vlastnosti Flashe',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Vlastnosti Flashe',\r
+               chkPlay         : 'Automatické spuštění',\r
+               chkLoop         : 'Opakování',\r
+               chkMenu         : 'Nabídka Flash',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Zobrazit',\r
+               scaleAll                : 'Zobrazit vše',\r
+               scaleNoBorder   : 'Bez okraje',\r
+               scaleFit                : 'Přizpůsobit',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Zarovnání',\r
+               alignLeft       : 'Vlevo',\r
+               alignAbsBottom: 'Zcela dolů',\r
+               alignAbsMiddle: 'Doprostřed',\r
+               alignBaseline   : 'Na účaří',\r
+               alignBottom     : 'Dolů',\r
+               alignMiddle     : 'Na střed',\r
+               alignRight      : 'Vpravo',\r
+               alignTextTop    : 'Na horní okraj textu',\r
+               alignTop        : 'Nahoru',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Barva pozadí',\r
+               width   : 'Šířka',\r
+               height  : 'Výška',\r
+               hSpace  : 'H-mezera',\r
+               vSpace  : 'V-mezera',\r
+               validateSrc : 'Zadejte prosím URL odkazu',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Zkontrolovat pravopis',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Není ve slovníku',\r
+               changeTo                : 'Změnit na',\r
+               btnIgnore               : 'Přeskočit',\r
+               btnIgnoreAll    : 'Přeskakovat vše',\r
+               btnReplace              : 'Zaměnit',\r
+               btnReplaceAll   : 'Zaměňovat vše',\r
+               btnUndo                 : 'Zpět',\r
+               noSuggestions   : '- žádné návrhy -',\r
+               progress                : 'Probíhá kontrola pravopisu...',\r
+               noMispell               : 'Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny',\r
+               noChanges               : 'Kontrola pravopisu dokončena: Beze změn',\r
+               oneChange               : 'Kontrola pravopisu dokončena: Jedno slovo změněno',\r
+               manyChanges             : 'Kontrola pravopisu dokončena: %1 slov změněno',\r
+               ieSpellDownload : 'Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smajlíky',\r
+               title   : 'Vkládání smajlíků'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Číslování',\r
+       bulletedlist : 'Odrážky',\r
+       indent : 'Zvětšit odsazení',\r
+       outdent : 'Zmenšit odsazení',\r
+\r
+       justify :\r
+       {\r
+               left : 'Zarovnat vlevo',\r
+               center : 'Zarovnat na střed',\r
+               right : 'Zarovnat vpravo',\r
+               block : 'Zarovnat do bloku'\r
+       },\r
+\r
+       blockquote : 'Citace',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Vložit',\r
+               cutError        : 'Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl+X).',\r
+               copyError       : 'Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl+C).',\r
+               pasteMsg        : 'Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Z důvodů nastavení bezpečnosti Vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Vložit z Wordu',\r
+               title : 'Vložit z Wordu',\r
+               advice : 'Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignorovat písmo',\r
+               removeStyle : 'Odstranit styly'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Vložit jako čistý text',\r
+               title : 'Vložit jako čistý text'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Šablony',\r
+               title : 'Šablony obsahu',\r
+               insertOption: 'Nahradit aktuální obsah',\r
+               selectPromptMsg: 'Prosím zvolte šablonu pro otevření v editoru<br>(aktuální obsah editoru bude ztracen):',\r
+               emptyListMsg : '(Není definována žádná šablona)'\r
+       },\r
+\r
+       showBlocks : 'Ukázat bloky',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Styl',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formát',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Formát',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normální',\r
+               tag_pre : 'Naformátováno',\r
+               tag_address : 'Adresa',\r
+               tag_h1 : 'Nadpis 1',\r
+               tag_h2 : 'Nadpis 2',\r
+               tag_h3 : 'Nadpis 3',\r
+               tag_h4 : 'Nadpis 4',\r
+               tag_h5 : 'Nadpis 5',\r
+               tag_h6 : 'Nadpis 6',\r
+               tag_div : 'Normální (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Písmo',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Písmo',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Velikost',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Velikost',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Barva textu',\r
+               bgColorTitle : 'Barva pozadí',\r
+               auto : 'Automaticky',\r
+               more : 'Více barev...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/da.js b/_source/lang/da.js
new file mode 100644 (file)
index 0000000..04e5acf
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Danish language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['da'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Kilde',\r
+       newPage                 : 'Ny side',\r
+       save                    : 'Gem',\r
+       preview                 : 'Vis eksempel',\r
+       cut                             : 'Klip',\r
+       copy                    : 'Kopier',\r
+       paste                   : 'Indsæt',\r
+       print                   : 'Udskriv',\r
+       underline               : 'Understreget',\r
+       bold                    : 'Fed',\r
+       italic                  : 'Kursiv',\r
+       selectAll               : 'Vælg alt',\r
+       removeFormat    : 'Fjern formatering',\r
+       strike                  : 'Overstreget',\r
+       subscript               : 'Sænket skrift',\r
+       superscript             : 'Hævet skrift',\r
+       horizontalrule  : 'Indsæt vandret linie',\r
+       pagebreak               : 'Indsæt sideskift',\r
+       unlink                  : 'Fjern hyperlink',\r
+       undo                    : 'Fortryd',\r
+       redo                    : 'Annuller fortryd',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Gennemse...',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokol',\r
+               upload                  : 'Upload',\r
+               uploadSubmit    : 'Upload',\r
+               image                   : 'Indsæt billede',\r
+               flash                   : 'Flash',\r
+               form                    : 'Indsæt formular',\r
+               checkbox                : 'Indsæt afkrydsningsfelt',\r
+               radio           : 'Indsæt alternativknap',\r
+               textField               : 'Indsæt tekstfelt',\r
+               textarea                : 'Indsæt tekstboks',\r
+               hiddenField             : 'Indsæt skjult felt',\r
+               button                  : 'Indsæt knap',\r
+               select  : 'Indsæt liste',\r
+               imageButton             : 'Indsæt billedknap',\r
+               notSet                  : '<intet valgt>',\r
+               id                              : 'Id',\r
+               name                    : 'Navn',\r
+               langDir                 : 'Tekstretning',\r
+               langDirLtr              : 'Fra venstre mod højre (LTR)',\r
+               langDirRtl              : 'Fra højre mod venstre (RTL)',\r
+               langCode                : 'Sprogkode',\r
+               longDescr               : 'Udvidet beskrivelse',\r
+               cssClass                : 'Typografiark',\r
+               advisoryTitle   : 'Titel',\r
+               cssStyle                : 'Typografi',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Annuller',\r
+               generalTab              : 'Generelt',\r
+               advancedTab             : 'Avanceret',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Indsæt symbol',\r
+               title           : 'Vælg symbol'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Indsæt/rediger hyperlink',\r
+               menu            : 'Rediger hyperlink',\r
+               title           : 'Egenskaber for hyperlink',\r
+               info            : 'Generelt',\r
+               target          : 'Mål',\r
+               upload          : 'Upload',\r
+               advanced        : 'Avanceret',\r
+               type            : 'Hyperlink type',\r
+               toAnchor        : 'Bogmærke på denne side',\r
+               toEmail         : 'E-mail',\r
+               target          : 'Mål',\r
+               targetNotSet    : '<intet valgt>',\r
+               targetFrame     : '<ramme>',\r
+               targetPopup     : '<popup vindue>',\r
+               targetNew       : 'Nyt vindue (_blank)',\r
+               targetTop       : 'Hele vinduet (_top)',\r
+               targetSelf      : 'Samme vindue (_self)',\r
+               targetParent    : 'Overordnet ramme (_parent)',\r
+               targetFrameName : 'Destinationsvinduets navn',\r
+               targetPopupName : 'Pop-up vinduets navn',\r
+               popupFeatures   : 'Egenskaber for pop-up',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Statuslinje',\r
+               popupLocationBar        : 'Adresselinje',\r
+               popupToolbar    : 'Værktøjslinje',\r
+               popupMenuBar    : 'Menulinje',\r
+               popupFullScreen : 'Fuld skærm (IE)',\r
+               popupScrollBars : 'Scrollbars',\r
+               popupDependent  : 'Koblet/dependent (Netscape)',\r
+               popupWidth              : 'Bredde',\r
+               popupLeft               : 'Position fra venstre',\r
+               popupHeight             : 'Højde',\r
+               popupTop                : 'Position fra toppen',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Tekstretning',\r
+               langDirNotSet   : '<intet valgt>',\r
+               langDirLTR              : 'Fra venstre mod højre (LTR)',\r
+               langDirRTL              : 'Fra højre mod venstre (RTL)',\r
+               acccessKey              : 'Genvejstast',\r
+               name                    : 'Navn',\r
+               langCode                : 'Tekstretning',\r
+               tabIndex                : 'Tabulator indeks',\r
+               advisoryTitle   : 'Titel',\r
+               advisoryContentType     : 'Indholdstype',\r
+               cssClasses              : 'Typografiark',\r
+               charset                 : 'Tegnsæt',\r
+               styles                  : 'Typografi',\r
+               selectAnchor    : 'Vælg et anker',\r
+               anchorName              : 'Efter anker navn',\r
+               anchorId                : 'Efter element Id',\r
+               emailAddress    : 'E-mailadresse',\r
+               emailSubject    : 'Emne',\r
+               emailBody               : 'Brødtekst',\r
+               noAnchors               : '(Ingen bogmærker dokumentet)',\r
+               noUrl                   : 'Indtast hyperlink URL!',\r
+               noEmail                 : 'Indtast e-mailaddresse!'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Indsæt/rediger bogmærke',\r
+               menu            : 'Egenskaber for bogmærke',\r
+               title           : 'Egenskaber for bogmærke',\r
+               name            : 'Bogmærke navn',\r
+               errorName       : 'Indtast bogmærke navn!'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Søg og erstat',\r
+               find                            : 'Søg',\r
+               replace                         : 'Erstat',\r
+               findWhat                        : 'Søg efter:',\r
+               replaceWith                     : 'Erstat med:',\r
+               notFoundMsg                     : 'Søgeteksten blev ikke fundet!',\r
+               matchCase                       : 'Forskel på store og små bogstaver',\r
+               matchWord                       : 'Kun hele ord',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Erstat alle',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Table',\r
+               title           : 'Egenskaber for tabel',\r
+               menu            : 'Egenskaber for tabel',\r
+               deleteTable     : 'Slet tabel',\r
+               rows            : 'Rækker',\r
+               columns         : 'Kolonner',\r
+               border          : 'Rammebredde',\r
+               align           : 'Justering',\r
+               alignNotSet     : '<intet valgt>',\r
+               alignLeft       : 'Venstrestillet',\r
+               alignCenter     : 'Centreret',\r
+               alignRight      : 'Højrestillet',\r
+               width           : 'Bredde',\r
+               widthPx         : 'pixels',\r
+               widthPc         : 'procent',\r
+               height          : 'Højde',\r
+               cellSpace       : 'Celleafstand',\r
+               cellPad         : 'Cellemargen',\r
+               caption         : 'Titel',\r
+               summary         : 'Resume',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Celle',\r
+                       insertBefore    : 'Indsæt celle før',\r
+                       insertAfter             : 'Indsæt celle efter',\r
+                       deleteCell              : 'Slet celle',\r
+                       merge                   : 'Flet celler',\r
+                       mergeRight              : 'Flet til højre',\r
+                       mergeDown               : 'Flet nedad',\r
+                       splitHorizontal : 'Del celle vandret',\r
+                       splitVertical   : 'Del celle lodret',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Række',\r
+                       insertBefore    : 'Indsæt række før',\r
+                       insertAfter             : 'Indsæt række efter',\r
+                       deleteRow               : 'Slet række'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Kolonne',\r
+                       insertBefore    : 'Indsæt kolonne før',\r
+                       insertAfter             : 'Indsæt kolonne efter',\r
+                       deleteColumn    : 'Slet kolonne'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Egenskaber for knap',\r
+               text            : 'Tekst',\r
+               type            : 'Type',\r
+               typeBtn         : 'Knap',\r
+               typeSbm         : 'Send',\r
+               typeRst         : 'Nulstil'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Egenskaber for afkrydsningsfelt',\r
+               radioTitle      : 'Egenskaber for alternativknap',\r
+               value           : 'Værdi',\r
+               selected        : 'Valgt'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Egenskaber for formular',\r
+               menu            : 'Egenskaber for formular',\r
+               action          : 'Handling',\r
+               method          : 'Metod',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Mål',\r
+               targetNotSet    : '<intet valgt>',\r
+               targetNew       : 'Nyt vindue (_blank)',\r
+               targetTop       : 'Hele vinduet (_top)',\r
+               targetSelf      : 'Samme vindue (_self)',\r
+               targetParent    : 'Overordnet ramme (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Egenskaber for liste',\r
+               selectInfo      : 'Generelt',\r
+               opAvail         : 'Valgmuligheder',\r
+               value           : 'Værdi',\r
+               size            : 'Størrelse',\r
+               lines           : 'linier',\r
+               chkMulti        : 'Tillad flere valg',\r
+               opText          : 'Tekst',\r
+               opValue         : 'Værdi',\r
+               btnAdd          : 'Tilføj',\r
+               btnModify       : 'Rediger',\r
+               btnUp           : 'Op',\r
+               btnDown         : 'Ned',\r
+               btnSetValue : 'Sæt som valgt',\r
+               btnDelete       : 'Slet'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Egenskaber for tekstboks',\r
+               cols            : 'Kolonner',\r
+               rows            : 'Rækker'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Egenskaber for tekstfelt',\r
+               name            : 'Navn',\r
+               value           : 'Værdi',\r
+               charWidth       : 'Bredde (tegn)',\r
+               maxChars        : 'Max antal tegn',\r
+               type            : 'Type',\r
+               typeText        : 'Tekst',\r
+               typePass        : 'Adgangskode'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Egenskaber for skjult felt',\r
+               name    : 'Navn',\r
+               value   : 'Værdi'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Egenskaber for billede',\r
+               titleButton     : 'Egenskaber for billedknap',\r
+               menu            : 'Egenskaber for billede',\r
+               infoTab : 'Generelt',\r
+               btnUpload       : 'Upload',\r
+               url             : 'URL',\r
+               upload  : 'Upload',\r
+               alt             : 'Alternativ tekst',\r
+               width           : 'Bredde',\r
+               height  : 'Højde',\r
+               lockRatio       : 'Lås størrelsesforhold',\r
+               resetSize       : 'Nulstil størrelse',\r
+               border  : 'Ramme',\r
+               hSpace  : 'HMargen',\r
+               vSpace  : 'VMargen',\r
+               align           : 'Justering',\r
+               alignLeft       : 'Venstre',\r
+               alignAbsBottom: 'Absolut nederst',\r
+               alignAbsMiddle: 'Absolut centreret',\r
+               alignBaseline   : 'Grundlinje',\r
+               alignBottom     : 'Nederst',\r
+               alignMiddle     : 'Centreret',\r
+               alignRight      : 'Højre',\r
+               alignTextTop    : 'Toppen af teksten',\r
+               alignTop        : 'Øverst',\r
+               preview : 'Vis eksempel',\r
+               alertUrl        : 'Indtast stien til billedet',\r
+               linkTab : 'Hyperlink',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Egenskaber for Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Egenskaber for Flash',\r
+               chkPlay         : 'Automatisk afspilning',\r
+               chkLoop         : 'Gentagelse',\r
+               chkMenu         : 'Vis Flash menu',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Skalér',\r
+               scaleAll                : 'Vis alt',\r
+               scaleNoBorder   : 'Ingen ramme',\r
+               scaleFit                : 'Tilpas størrelse',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Justering',\r
+               alignLeft       : 'Venstre',\r
+               alignAbsBottom: 'Absolut nederst',\r
+               alignAbsMiddle: 'Absolut centreret',\r
+               alignBaseline   : 'Grundlinje',\r
+               alignBottom     : 'Nederst',\r
+               alignMiddle     : 'Centreret',\r
+               alignRight      : 'Højre',\r
+               alignTextTop    : 'Toppen af teksten',\r
+               alignTop        : 'Øverst',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Baggrundsfarve',\r
+               width   : 'Bredde',\r
+               height  : 'Højde',\r
+               hSpace  : 'HMargen',\r
+               vSpace  : 'VMargen',\r
+               validateSrc : 'Indtast hyperlink URL!',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Stavekontrol',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Ikke i ordbogen',\r
+               changeTo                : 'Forslag',\r
+               btnIgnore               : 'Ignorer',\r
+               btnIgnoreAll    : 'Ignorer alle',\r
+               btnReplace              : 'Erstat',\r
+               btnReplaceAll   : 'Erstat alle',\r
+               btnUndo                 : 'Tilbage',\r
+               noSuggestions   : '- ingen forslag -',\r
+               progress                : 'Stavekontrolen arbejder...',\r
+               noMispell               : 'Stavekontrol færdig: Ingen fejl fundet',\r
+               noChanges               : 'Stavekontrol færdig: Ingen ord ændret',\r
+               oneChange               : 'Stavekontrol færdig: Et ord ændret',\r
+               manyChanges             : 'Stavekontrol færdig: %1 ord ændret',\r
+               ieSpellDownload : 'Stavekontrol ikke installeret.<br>Vil du hente den nu?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Vælg smiley'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Talopstilling',\r
+       bulletedlist : 'Punktopstilling',\r
+       indent : 'Forøg indrykning',\r
+       outdent : 'Formindsk indrykning',\r
+\r
+       justify :\r
+       {\r
+               left : 'Venstrestillet',\r
+               center : 'Centreret',\r
+               right : 'Højrestillet',\r
+               block : 'Lige margener'\r
+       },\r
+\r
+       blockquote : 'Blokcitat',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Indsæt',\r
+               cutError        : 'Din browsers sikkerhedsindstillinger tillader ikke editoren at klippe tekst automatisk!<br>Brug i stedet tastaturet til at klippe teksten (Ctrl+X).',\r
+               copyError       : 'Din browsers sikkerhedsindstillinger tillader ikke editoren at kopiere tekst automatisk!<br>Brug i stedet tastaturet til at kopiere teksten (Ctrl+C).',\r
+               pasteMsg        : 'Indsæt i feltet herunder (<STRONG>Ctrl+V</STRONG>) og klik <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'På grund af browserens sikkerhedsindstillinger kan editoren ikke tilgå udklipsholderen direkte. Du skal indsætte udklipsholderens indhold i dette vindue igen.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Indsæt fra Word',\r
+               title : 'Indsæt fra Word',\r
+               advice : 'Indsæt i feltet herunder (<STRONG>Ctrl+V</STRONG>) og klik <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignorer font definitioner',\r
+               removeStyle : 'Ignorer typografi'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Indsæt som ikke-formateret tekst',\r
+               title : 'Indsæt som ikke-formateret tekst'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Skabeloner',\r
+               title : 'Indholdsskabeloner',\r
+               insertOption: 'Erstat det faktiske indhold',\r
+               selectPromptMsg: 'Vælg den skabelon, som skal åbnes i editoren.<br>(Nuværende indhold vil blive overskrevet!):',\r
+               emptyListMsg : '(Der er ikke defineret nogen skabelon!)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Typografi',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formatering',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Formatering',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formateret',\r
+               tag_address : 'Adresse',\r
+               tag_h1 : 'Overskrift 1',\r
+               tag_h2 : 'Overskrift 2',\r
+               tag_h3 : 'Overskrift 3',\r
+               tag_h4 : 'Overskrift 4',\r
+               tag_h5 : 'Overskrift 5',\r
+               tag_h6 : 'Overskrift 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Skrifttype',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Skrifttype',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Skriftstørrelse',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Skriftstørrelse',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Tekstfarve',\r
+               bgColorTitle : 'Baggrundsfarve',\r
+               auto : 'Automatisk',\r
+               more : 'Flere farver...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/de.js b/_source/lang/de.js
new file mode 100644 (file)
index 0000000..3c14518
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * German language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['de'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Quellcode',\r
+       newPage                 : 'Neue Seite',\r
+       save                    : 'Speichern',\r
+       preview                 : 'Vorschau',\r
+       cut                             : 'Ausschneiden',\r
+       copy                    : 'Kopieren',\r
+       paste                   : 'Einfügen',\r
+       print                   : 'Drucken',\r
+       underline               : 'Unterstrichen',\r
+       bold                    : 'Fett',\r
+       italic                  : 'Kursiv',\r
+       selectAll               : 'Alles auswählen',\r
+       removeFormat    : 'Formatierungen entfernen',\r
+       strike                  : 'Durchgestrichen',\r
+       subscript               : 'Tiefgestellt',\r
+       superscript             : 'Hochgestellt',\r
+       horizontalrule  : 'Horizontale Linie einfügen',\r
+       pagebreak               : 'Seitenumbruch einfügen',\r
+       unlink                  : 'Link entfernen',\r
+       undo                    : 'Rückgängig',\r
+       redo                    : 'Wiederherstellen',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Server durchsuchen',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokoll',\r
+               upload                  : 'Upload',\r
+               uploadSubmit    : 'Zum Server senden',\r
+               image                   : 'Bild',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formular',\r
+               checkbox                : 'Checkbox',\r
+               radio           : 'Radiobutton',\r
+               textField               : 'Textfeld einzeilig',\r
+               textarea                : 'Textfeld mehrzeilig',\r
+               hiddenField             : 'verstecktes Feld',\r
+               button                  : 'Klickbutton',\r
+               select  : 'Auswahlfeld',\r
+               imageButton             : 'Bildbutton',\r
+               notSet                  : '<nichts>',\r
+               id                              : 'ID',\r
+               name                    : 'Name',\r
+               langDir                 : 'Schreibrichtung',\r
+               langDirLtr              : 'Links nach Rechts (LTR)',\r
+               langDirRtl              : 'Rechts nach Links (RTL)',\r
+               langCode                : 'Sprachenkürzel',\r
+               longDescr               : 'Langform URL',\r
+               cssClass                : 'Stylesheet Klasse',\r
+               advisoryTitle   : 'Titel Beschreibung',\r
+               cssStyle                : 'Style',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Abbrechen',\r
+               generalTab              : 'Allgemein',\r
+               advancedTab             : 'Erweitert',\r
+               validateNumberFailed    : 'Dieser Wert ist keine Nummer.',\r
+               confirmNewPage  : 'Alle nicht gespeicherten Änderungen gehen verlohren. Sind sie sicher die neue Seite zu laden?',\r
+               confirmCancel   : 'Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, nicht verfügbar</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Sonderzeichen einfügen/editieren',\r
+               title           : 'Sonderzeichen auswählen'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Link einfügen/editieren',\r
+               menu            : 'Link editieren',\r
+               title           : 'Link',\r
+               info            : 'Link-Info',\r
+               target          : 'Zielseite',\r
+               upload          : 'Upload',\r
+               advanced        : 'Erweitert',\r
+               type            : 'Link-Typ',\r
+               toAnchor        : 'Anker in dieser Seite',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Zielseite',\r
+               targetNotSet    : '<nichts>',\r
+               targetFrame     : '<Frame>',\r
+               targetPopup     : '<Pop-up Fenster>',\r
+               targetNew       : 'Neues Fenster (_blank)',\r
+               targetTop       : 'Oberstes Fenster (_top)',\r
+               targetSelf      : 'Gleiches Fenster (_self)',\r
+               targetParent    : 'Oberes Fenster (_parent)',\r
+               targetFrameName : 'Ziel-Fenster-Name',\r
+               targetPopupName : 'Pop-up Fenster-Name',\r
+               popupFeatures   : 'Pop-up Fenster-Eigenschaften',\r
+               popupResizable  : 'Größe änderbar',\r
+               popupStatusBar  : 'Statusleiste',\r
+               popupLocationBar        : 'Adress-Leiste',\r
+               popupToolbar    : 'Werkzeugleiste',\r
+               popupMenuBar    : 'Menü-Leiste',\r
+               popupFullScreen : 'Vollbild (IE)',\r
+               popupScrollBars : 'Rollbalken',\r
+               popupDependent  : 'Abhängig (Netscape)',\r
+               popupWidth              : 'Breite',\r
+               popupLeft               : 'Linke Position',\r
+               popupHeight             : 'Höhe',\r
+               popupTop                : 'Obere Position',\r
+               id                              : 'Id',\r
+               langDir                 : 'Schreibrichtung',\r
+               langDirNotSet   : '<nichts>',\r
+               langDirLTR              : 'Links nach Rechts (LTR)',\r
+               langDirRTL              : 'Rechts nach Links (RTL)',\r
+               acccessKey              : 'Zugriffstaste',\r
+               name                    : 'Name',\r
+               langCode                : 'Schreibrichtung',\r
+               tabIndex                : 'Tab-Index',\r
+               advisoryTitle   : 'Titel Beschreibung',\r
+               advisoryContentType     : 'Inhaltstyp',\r
+               cssClasses              : 'Stylesheet Klasse',\r
+               charset                 : 'Ziel-Zeichensatz',\r
+               styles                  : 'Style',\r
+               selectAnchor    : 'Anker auswählen',\r
+               anchorName              : 'nach Anker Name',\r
+               anchorId                : 'nach Element Id',\r
+               emailAddress    : 'E-Mail Addresse',\r
+               emailSubject    : 'Betreffzeile',\r
+               emailBody               : 'Nachrichtentext',\r
+               noAnchors               : '(keine Anker im Dokument vorhanden)',\r
+               noUrl                   : 'Bitte geben Sie die Link-URL an',\r
+               noEmail                 : 'Bitte geben Sie e-Mail Adresse an'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Anker einfügen/editieren',\r
+               menu            : 'Anker-Eigenschaften',\r
+               title           : 'Anker-Eigenschaften',\r
+               name            : 'Anker Name',\r
+               errorName       : 'Bitte geben Sie den Namen des Ankers ein'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Suchen und Ersetzen',\r
+               find                            : 'Suchen',\r
+               replace                         : 'Ersetzen',\r
+               findWhat                        : 'Suche nach:',\r
+               replaceWith                     : 'Ersetze mit:',\r
+               notFoundMsg                     : 'Der gesuchte Text wurde nicht gefunden.',\r
+               matchCase                       : 'Groß-Kleinschreibung beachten',\r
+               matchWord                       : 'Nur ganze Worte suchen',\r
+               matchCyclic                     : 'zyklische suche',\r
+               replaceAll                      : 'Alle Ersetzen',\r
+               replaceSuccessMsg       : '%1 vorkommen ersetzt.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabelle',\r
+               title           : 'Tabellen-Eigenschaften',\r
+               menu            : 'Tabellen-Eigenschaften',\r
+               deleteTable     : 'Tabelle löschen',\r
+               rows            : 'Zeile',\r
+               columns         : 'Spalte',\r
+               border          : 'Rahmen',\r
+               align           : 'Ausrichtung',\r
+               alignNotSet     : '<keine>',\r
+               alignLeft       : 'Links',\r
+               alignCenter     : 'Zentriert',\r
+               alignRight      : 'Rechts',\r
+               width           : 'Breite',\r
+               widthPx         : 'Pixel',\r
+               widthPc         : '%',\r
+               height          : 'Höhe',\r
+               cellSpace       : 'Zellenabstand außen',\r
+               cellPad         : 'Zellenabstand innen',\r
+               caption         : 'Überschrift',\r
+               summary         : 'Inhaltsübersicht',\r
+               headers         : 'Überschriften',\r
+               headersNone             : 'keine',\r
+               headersColumn   : 'Erste Spalte',\r
+               headersRow              : 'Erste Zeile',\r
+               headersBoth             : 'keine',\r
+               invalidRows             : 'Die Anzahl der Zeilen muß größer als 0 sein.',\r
+               invalidCols             : 'Die Anzahl der Spalten muß größer als 0 sein..',\r
+               invalidBorder   : 'Die Rahmenbreite muß eine Zahl sein.',\r
+               invalidWidth    : 'Die Tabellenbreite muss eine Zahl sein.',\r
+               invalidHeight   : 'Die Tabellenbreite muß eine Zahl sein.',\r
+               invalidCellSpacing      : 'Der Zellenabstand außen muß eine Zahl sein.',\r
+               invalidCellPadding      : 'Der Zellenabstand innen muß eine Zahl sein.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Zelle',\r
+                       insertBefore    : 'Zelle davor einfügen',\r
+                       insertAfter             : 'Zelle danach einfügen',\r
+                       deleteCell              : 'Zelle löschen',\r
+                       merge                   : 'Zellen verbinden',\r
+                       mergeRight              : 'nach rechts verbinden',\r
+                       mergeDown               : 'nach unten verbinden',\r
+                       splitHorizontal : 'Zelle horizontal teilen',\r
+                       splitVertical   : 'Zelle vertikal teilen',\r
+                       title                   : 'Zellen Eigenschaften',\r
+                       cellType                : 'Zellart',\r
+                       rowSpan                 : 'Anzahl Zeilen verbinden',\r
+                       colSpan                 : 'Anzahl Spalten verbinden',\r
+                       wordWrap                : 'Zeilenumbruch',\r
+                       hAlign                  : 'Horizontale Ausrichtung',\r
+                       vAlign                  : 'Vertikale Ausrichtung',\r
+                       alignTop                : 'Oben',\r
+                       alignMiddle             : 'Mitte',\r
+                       alignBottom             : 'Unten',\r
+                       alignBaseline   : 'Grundlinie',\r
+                       bgColor                 : 'Hintergrundfarbe',\r
+                       borderColor             : 'Rahmenfarbe',\r
+                       data                    : 'Daten',\r
+                       header                  : 'Überschrift',\r
+                       yes                             : 'Ja',\r
+                       no                              : 'Nein',\r
+                       invalidWidth    : 'Zellenbreite muß eine Zahl sein.',\r
+                       invalidHeight   : 'Zellenhöhe muß eine Zahl sein.',\r
+                       invalidRowSpan  : '"Anzahl Zeilen verbinden" muss eine Ganzzahl sein.',\r
+                       invalidColSpan  : '"Anzahl Spalten verbinden" muss eine Ganzzahl sein.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Zeile',\r
+                       insertBefore    : 'Zeile oberhalb einfügen',\r
+                       insertAfter             : 'Zeile unterhalb einfügen',\r
+                       deleteRow               : 'Zeile entfernen'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Spalte',\r
+                       insertBefore    : 'Spalte links davor einfügen',\r
+                       insertAfter             : 'Spalte rechts danach einfügen',\r
+                       deleteColumn    : 'Spalte löschen'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Button-Eigenschaften',\r
+               text            : 'Text (Wert)',\r
+               type            : 'Typ',\r
+               typeBtn         : 'Button',\r
+               typeSbm         : 'Absenden',\r
+               typeRst         : 'Zurücksetzen'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Checkbox-Eigenschaften',\r
+               radioTitle      : 'Optionsfeld-Eigenschaften',\r
+               value           : 'Wert',\r
+               selected        : 'ausgewählt'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Formular-Eigenschaften',\r
+               menu            : 'Formular-Eigenschaften',\r
+               action          : 'Action',\r
+               method          : 'Method',\r
+               encoding        : 'Zeichenkodierung',\r
+               target          : 'Zielseite',\r
+               targetNotSet    : '<keins>',\r
+               targetNew       : 'Neues Fenster (_blank)',\r
+               targetTop       : 'Oberstes Fenster (_top)',\r
+               targetSelf      : 'Gleiches Fenster (_self)',\r
+               targetParent    : 'Oberes Fenster (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Auswahlfeld-Eigenschaften',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Mögliche Optionen',\r
+               value           : 'Wert',\r
+               size            : 'Größe',\r
+               lines           : 'Linien',\r
+               chkMulti        : 'Erlaube Mehrfachauswahl',\r
+               opText          : 'Text',\r
+               opValue         : 'Wert',\r
+               btnAdd          : 'Hinzufügen',\r
+               btnModify       : 'Ändern',\r
+               btnUp           : 'Hoch',\r
+               btnDown         : 'Runter',\r
+               btnSetValue : 'Setze als Standardwert',\r
+               btnDelete       : 'Entfernen'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Textfeld (mehrzeilig) Eigenschaften',\r
+               cols            : 'Spalten',\r
+               rows            : 'Reihen'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Textfeld (einzeilig) Eigenschaften',\r
+               name            : 'Name',\r
+               value           : 'Wert',\r
+               charWidth       : 'Zeichenbreite',\r
+               maxChars        : 'Max. Zeichen',\r
+               type            : 'Typ',\r
+               typeText        : 'Text',\r
+               typePass        : 'Passwort'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Verstecktes Feld-Eigenschaften',\r
+               name    : 'Name',\r
+               value   : 'Wert'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Bild-Eigenschaften',\r
+               titleButton     : 'Bildbutton-Eigenschaften',\r
+               menu            : 'Bild-Eigenschaften',\r
+               infoTab : 'Bild-Info',\r
+               btnUpload       : 'Zum Server senden',\r
+               url             : 'URL',\r
+               upload  : 'Hochladen',\r
+               alt             : 'Alternativer Text',\r
+               width           : 'Breite',\r
+               height  : 'Höhe',\r
+               lockRatio       : 'Größenverhältnis beibehalten',\r
+               resetSize       : 'Größe zurücksetzen',\r
+               border  : 'Rahmen',\r
+               hSpace  : 'Horizontal-Abstand',\r
+               vSpace  : 'Vertikal-Abstand',\r
+               align           : 'Ausrichtung',\r
+               alignLeft       : 'Links',\r
+               alignAbsBottom: 'Abs Unten',\r
+               alignAbsMiddle: 'Abs Mitte',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Unten',\r
+               alignMiddle     : 'Mitte',\r
+               alignRight      : 'Rechts',\r
+               alignTextTop    : 'Text Oben',\r
+               alignTop        : 'Oben',\r
+               preview : 'Vorschau',\r
+               alertUrl        : 'Bitte geben Sie die Bild-URL an',\r
+               linkTab : 'Link',\r
+               button2Img      : 'Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?',\r
+               img2Button      : 'Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash-Eigenschaften',\r
+               propertiesTab   : 'Eigenschaften',\r
+               title           : 'Flash-Eigenschaften',\r
+               chkPlay         : 'autom. Abspielen',\r
+               chkLoop         : 'Endlosschleife',\r
+               chkMenu         : 'Flash-Menü aktivieren',\r
+               chkFull         : 'Vollbildmodus erlauben',\r
+               scale           : 'Skalierung',\r
+               scaleAll                : 'Alles anzeigen',\r
+               scaleNoBorder   : 'ohne Rand',\r
+               scaleFit                : 'Passgenau',\r
+               access                  : 'Skript Zugang',\r
+               accessAlways    : 'Immer',\r
+               accessSameDomain        : 'Gleiche Domain',\r
+               accessNever     : 'Nie',\r
+               align           : 'Ausrichtung',\r
+               alignLeft       : 'Links',\r
+               alignAbsBottom: 'Abs Unten',\r
+               alignAbsMiddle: 'Abs Mitte',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Unten',\r
+               alignMiddle     : 'Mitte',\r
+               alignRight      : 'Rechts',\r
+               alignTextTop    : 'Text Oben',\r
+               alignTop        : 'Oben',\r
+               quality         : 'Qualität',\r
+               qualityBest              : 'Beste',\r
+               qualityHigh              : 'Hoch',\r
+               qualityAutoHigh  : 'Auto Hoch',\r
+               qualityMedium    : 'Medium',\r
+               qualityAutoLow   : 'Auto Niedrig',\r
+               qualityLow               : 'Niedrig',\r
+               windowModeWindow         : 'Fenster',\r
+               windowModeOpaque         : 'Deckend',\r
+               windowModeTransparent    : 'Transparent',\r
+               windowMode      : 'Fenster Modus',\r
+               flashvars       : 'Variablen für Flash',\r
+               bgcolor : 'Hintergrundfarbe',\r
+               width   : 'Breite',\r
+               height  : 'Höhe',\r
+               hSpace  : 'Horizontal-Abstand',\r
+               vSpace  : 'Vertikal-Abstand',\r
+               validateSrc : 'Bitte geben Sie die Link-URL an',\r
+               validateWidth : 'Breite muss eine Zahl sein.',\r
+               validateHeight : 'Höhe muss eine Zahl sein.',\r
+               validateHSpace : 'HSpace muss eine Zahl sein.',\r
+               validateVSpace : 'VSpace muss eine Zahl sein.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Rechtschreibprüfung',\r
+               title                   : 'Rechtschreibprüfung',\r
+               notAvailable    : 'Entschuldigung, aber dieser Dienst steht im Moment nicht zur verfügung.',\r
+               errorLoading    : 'Fehler beim laden des Dienstanbieters: %s.',\r
+               notInDic                : 'Nicht im Wörterbuch',\r
+               changeTo                : 'Ändern in',\r
+               btnIgnore               : 'Ignorieren',\r
+               btnIgnoreAll    : 'Alle Ignorieren',\r
+               btnReplace              : 'Ersetzen',\r
+               btnReplaceAll   : 'Alle Ersetzen',\r
+               btnUndo                 : 'Rückgängig',\r
+               noSuggestions   : ' - keine Vorschläge - ',\r
+               progress                : 'Rechtschreibprüfung läuft...',\r
+               noMispell               : 'Rechtschreibprüfung abgeschlossen - keine Fehler gefunden',\r
+               noChanges               : 'Rechtschreibprüfung abgeschlossen - keine Worte geändert',\r
+               oneChange               : 'Rechtschreibprüfung abgeschlossen - ein Wort geändert',\r
+               manyChanges             : 'Rechtschreibprüfung abgeschlossen - %1 Wörter geändert',\r
+               ieSpellDownload : 'Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Smiley auswählen'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 Element'\r
+       },\r
+\r
+       numberedlist : 'Nummerierte Liste',\r
+       bulletedlist : 'Liste',\r
+       indent : 'Einzug erhöhen',\r
+       outdent : 'Einzug verringern',\r
+\r
+       justify :\r
+       {\r
+               left : 'Linksbündig',\r
+               center : 'Zentriert',\r
+               right : 'Rechtsbündig',\r
+               block : 'Blocksatz'\r
+       },\r
+\r
+       blockquote : 'Zitatblock',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Einfügen',\r
+               cutError        : 'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).',\r
+               copyError       : 'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).',\r
+               pasteMsg        : 'Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'aus MS-Word einfügen',\r
+               title : 'aus MS-Word einfügen',\r
+               advice : 'Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignoriere Schriftart-Definitionen',\r
+               removeStyle : 'Entferne Style-Definitionen'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Als Text einfügen',\r
+               title : 'Als Text einfügen'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Vorlagen',\r
+               title : 'Vorlagen',\r
+               insertOption: 'Aktuellen Inhalt ersetzen',\r
+               selectPromptMsg: 'Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):',\r
+               emptyListMsg : '(keine Vorlagen definiert)'\r
+       },\r
+\r
+       showBlocks : 'Blöcke anzeigen',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stil',\r
+               voiceLabel : 'Stilarten',\r
+               panelVoiceLabel : 'Stilart auswahl',\r
+               panelTitle1 : 'Block Stilart',\r
+               panelTitle2 : 'Inline Stilart',\r
+               panelTitle3 : 'Objekt Stilart'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format',\r
+               panelTitle : 'Format',\r
+               panelVoiceLabel : 'Wählen Sie einen Absatzformat',\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatiert',\r
+               tag_address : 'Addresse',\r
+               tag_h1 : 'Überschrift 1',\r
+               tag_h2 : 'Überschrift 2',\r
+               tag_h3 : 'Überschrift 3',\r
+               tag_h4 : 'Überschrift 4',\r
+               tag_h5 : 'Überschrift 5',\r
+               tag_h6 : 'Überschrift 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Schriftart',\r
+               voiceLabel : 'Schriftart',\r
+               panelTitle : 'Schriftart',\r
+               panelVoiceLabel : 'Wählen Sie eine Schriftart'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Größe',\r
+               voiceLabel : 'Schrifgröße',\r
+               panelTitle : 'Größe',\r
+               panelVoiceLabel : 'Wählen Sie eine Schriftgröße'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Textfarbe',\r
+               bgColorTitle : 'Hintergrundfarbe',\r
+               auto : 'Automatisch',\r
+               more : 'Weitere Farben...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Schwarz',\r
+               '800000' : 'Kastanienbraun',\r
+               '8B4513' : 'Braun',\r
+               '2F4F4F' : 'Dunkles Schiefergrau',\r
+               '008080' : 'Blaugrün',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dunkelgrau',\r
+               'B22222' : 'Ziegelrot',\r
+               'A52A2A' : 'Braun',\r
+               'DAA520' : 'Goldgelb',\r
+               '006400' : 'Dunkelgrün',\r
+               '40E0D0' : 'Türkis',\r
+               '0000CD' : 'Medium Blau',\r
+               '800080' : 'Lila',\r
+               '808080' : 'Grau',\r
+               'F00' : 'Rot',\r
+               'FF8C00' : 'Dunkelorange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Grün',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blau',\r
+               'EE82EE' : 'Hellviolett',\r
+               'A9A9A9' : 'Dunkelgrau',\r
+               'FFA07A' : 'Helles Lachsrosa',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Gelb',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Blaß-Türkis',\r
+               'ADD8E6' : 'Hellblau',\r
+               'DDA0DD' : 'Pflaumenblau',\r
+               'D3D3D3' : 'Hellgrau',\r
+               'FFF0F5' : 'Lavendel',\r
+               'FAEBD7' : 'Antik Weiß',\r
+               'FFFFE0' : 'Hellgelb',\r
+               'F0FFF0' : 'Honigtau',\r
+               'F0FFFF' : 'Azurblau',\r
+               'F0F8FF' : 'Alice Blau',\r
+               'E6E6FA' : 'Lavendel',\r
+               'FFF' : 'Weiß'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Rechtschreibprüfung während der Texteingabe',\r
+               enable : 'SCAYT einschalten',\r
+               disable : 'SCAYT ausschalten',\r
+               about : 'Über SCAYT',\r
+               toggle : 'SCAYT umschalten',\r
+               options : 'Optionen',\r
+               langs : 'Sprachen',\r
+               moreSuggestions : 'Mehr Vorschläge',\r
+               ignore : 'Ignorieren',\r
+               ignoreAll : 'Alle ignorieren',\r
+               addWord : 'Wort hinzufügen',\r
+               emptyDic : 'Wörterbuchname sollte leer sein.',\r
+               optionsTab : 'Optionen',\r
+               languagesTab : 'Sprachen',\r
+               dictionariesTab : 'Wörterbücher',\r
+               aboutTab : 'Über'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'Über CKEditor',\r
+               dlgTitle : 'Über CKEditor',\r
+               moreInfo : 'Für Informationen Liztenzbestimmungen besuchen sie bitte unsere Webseite:',\r
+               copy : 'Copyright &copy; $1. Alle Rechte vorbehalten.'\r
+       },\r
+\r
+       maximize : 'Maximieren',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anker',\r
+               flash : 'Flash Animation',\r
+               div : 'Seitenumbruch',\r
+               unknown : 'Unbekanntes Objekt'\r
+       },\r
+\r
+       resize : 'Zum Vergrößern ziehen'\r
+};\r
diff --git a/_source/lang/el.js b/_source/lang/el.js
new file mode 100644 (file)
index 0000000..56c1e1a
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Greek language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['el'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'HTML κώδικας',\r
+       newPage                 : 'Νέα Σελίδα',\r
+       save                    : 'Αποθήκευση',\r
+       preview                 : 'Προεπισκόπιση',\r
+       cut                             : 'Αποκοπή',\r
+       copy                    : 'Αντιγραφή',\r
+       paste                   : 'Επικόλληση',\r
+       print                   : 'Εκτύπωση',\r
+       underline               : 'Υπογράμμιση',\r
+       bold                    : 'Έντονα',\r
+       italic                  : 'Πλάγια',\r
+       selectAll               : 'Επιλογή όλων',\r
+       removeFormat    : 'Αφαίρεση Μορφοποίησης',\r
+       strike                  : 'Διαγράμμιση',\r
+       subscript               : 'Δείκτης',\r
+       superscript             : 'Εκθέτης',\r
+       horizontalrule  : 'Εισαγωγή Οριζόντιας Γραμμής',\r
+       pagebreak               : 'Εισαγωγή τέλους σελίδας',\r
+       unlink                  : 'Αφαίρεση Συνδέσμου (Link)',\r
+       undo                    : 'Αναίρεση',\r
+       redo                    : 'Επαναφορά',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Εξερεύνηση διακομιστή',\r
+               url                             : 'URL',\r
+               protocol                : 'Προτόκολο',\r
+               upload                  : 'Αποστολή',\r
+               uploadSubmit    : 'Αποστολή στον Διακομιστή',\r
+               image                   : 'Εικόνα',\r
+               flash                   : 'Εισαγωγή Flash',\r
+               form                    : 'Φόρμα',\r
+               checkbox                : 'Κουτί επιλογής',\r
+               radio           : 'Κουμπί Radio',\r
+               textField               : 'Πεδίο κειμένου',\r
+               textarea                : 'Περιοχή κειμένου',\r
+               hiddenField             : 'Κρυφό πεδίο',\r
+               button                  : 'Κουμπί',\r
+               select  : 'Πεδίο επιλογής',\r
+               imageButton             : 'Κουμπί εικόνας',\r
+               notSet                  : '<χωρίς>',\r
+               id                              : 'Id',\r
+               name                    : 'Όνομα',\r
+               langDir                 : 'Κατεύθυνση κειμένου',\r
+               langDirLtr              : 'Αριστερά προς Δεξιά (LTR)',\r
+               langDirRtl              : 'Δεξιά προς Αριστερά (RTL)',\r
+               langCode                : 'Κωδικός Γλώσσας',\r
+               longDescr               : 'Αναλυτική περιγραφή URL',\r
+               cssClass                : 'Stylesheet Classes',\r
+               advisoryTitle   : 'Συμβουλευτικός τίτλος',\r
+               cssStyle                : 'Στύλ',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Ακύρωση',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Για προχωρημένους',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Εισαγωγή Ειδικού Συμβόλου',\r
+               title           : 'Επιλέξτε ένα Ειδικό Σύμβολο'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Εισαγωγή/Μεταβολή Συνδέσμου (Link)',\r
+               menu            : 'Μεταβολή Συνδέσμου (Link)',\r
+               title           : 'Σύνδεσμος (Link)',\r
+               info            : 'Link',\r
+               target          : 'Παράθυρο Στόχος (Target)',\r
+               upload          : 'Αποστολή',\r
+               advanced        : 'Για προχωρημένους',\r
+               type            : 'Τύπος συνδέσμου (Link)',\r
+               toAnchor        : 'Άγκυρα σε αυτή τη σελίδα',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Παράθυρο Στόχος (Target)',\r
+               targetNotSet    : '<χωρίς>',\r
+               targetFrame     : '<πλαίσιο>',\r
+               targetPopup     : '<παράθυρο popup>',\r
+               targetNew       : 'Νέο Παράθυρο (_blank)',\r
+               targetTop       : 'Ανώτατο Παράθυρο (_top)',\r
+               targetSelf      : 'Ίδιο Παράθυρο (_self)',\r
+               targetParent    : 'Γονικό Παράθυρο (_parent)',\r
+               targetFrameName : 'Όνομα πλαισίου στόχου',\r
+               targetPopupName : 'Όνομα Popup Window',\r
+               popupFeatures   : 'Επιλογές Popup Window',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Μπάρα Status',\r
+               popupLocationBar        : 'Μπάρα Τοποθεσίας',\r
+               popupToolbar    : 'Μπάρα Εργαλείων',\r
+               popupMenuBar    : 'Μπάρα Menu',\r
+               popupFullScreen : 'Ολόκληρη η Οθόνη (IE)',\r
+               popupScrollBars : 'Μπάρες Κύλισης',\r
+               popupDependent  : 'Dependent (Netscape)',\r
+               popupWidth              : 'Πλάτος',\r
+               popupLeft               : 'Τοποθεσία Αριστερής Άκρης',\r
+               popupHeight             : 'Ύψος',\r
+               popupTop                : 'Τοποθεσία Πάνω Άκρης',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Κατεύθυνση κειμένου',\r
+               langDirNotSet   : '<χωρίς>',\r
+               langDirLTR              : 'Αριστερά προς Δεξιά (LTR)',\r
+               langDirRTL              : 'Δεξιά προς Αριστερά (RTL)',\r
+               acccessKey              : 'Συντόμευση (Access Key)',\r
+               name                    : 'Όνομα',\r
+               langCode                : 'Κατεύθυνση κειμένου',\r
+               tabIndex                : 'Tab Index',\r
+               advisoryTitle   : 'Συμβουλευτικός τίτλος',\r
+               advisoryContentType     : 'Συμβουλευτικός τίτλος περιεχομένου',\r
+               cssClasses              : 'Stylesheet Classes',\r
+               charset                 : 'Linked Resource Charset',\r
+               styles                  : 'Στύλ',\r
+               selectAnchor    : 'Επιλέξτε μια άγκυρα',\r
+               anchorName              : 'Βάσει του Ονόματος (Name) της άγκυρας',\r
+               anchorId                : 'Βάσει του Element Id',\r
+               emailAddress    : 'Διεύθυνση Ηλεκτρονικού Ταχυδρομείου',\r
+               emailSubject    : 'Θέμα Μηνύματος',\r
+               emailBody               : 'Κείμενο Μηνύματος',\r
+               noAnchors               : '(Δεν υπάρχουν άγκυρες στο κείμενο)',\r
+               noUrl                   : 'Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)',\r
+               noEmail                 : 'Εισάγετε την διεύθυνση ηλεκτρονικού ταχυδρομείου'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Εισαγωγή/επεξεργασία Anchor',\r
+               menu            : 'Ιδιότητες άγκυρας',\r
+               title           : 'Ιδιότητες άγκυρας',\r
+               name            : 'Όνομα άγκυρας',\r
+               errorName       : 'Παρακαλούμε εισάγετε όνομα άγκυρας'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'Αναζήτηση',\r
+               replace                         : 'Αντικατάσταση',\r
+               findWhat                        : 'Αναζήτηση:',\r
+               replaceWith                     : 'Αντικατάσταση με:',\r
+               notFoundMsg                     : 'Το κείμενο δεν βρέθηκε.',\r
+               matchCase                       : 'Έλεγχος πεζών/κεφαλαίων',\r
+               matchWord                       : 'Εύρεση πλήρους λέξης',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Αντικατάσταση Όλων',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Πίνακας',\r
+               title           : 'Ιδιότητες Πίνακα',\r
+               menu            : 'Ιδιότητες Πίνακα',\r
+               deleteTable     : 'Διαγραφή πίνακα',\r
+               rows            : 'Γραμμές',\r
+               columns         : 'Κολώνες',\r
+               border          : 'Μέγεθος Περιθωρίου',\r
+               align           : 'Στοίχιση',\r
+               alignNotSet     : '<χωρίς>',\r
+               alignLeft       : 'Αριστερά',\r
+               alignCenter     : 'Κέντρο',\r
+               alignRight      : 'Δεξιά',\r
+               width           : 'Πλάτος',\r
+               widthPx         : 'pixels',\r
+               widthPc         : '%',\r
+               height          : 'Ύψος',\r
+               cellSpace       : 'Απόσταση κελιών',\r
+               cellPad         : 'Γέμισμα κελιών',\r
+               caption         : 'Υπέρτιτλος',\r
+               summary         : 'Περίληψη',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Κελί',\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'Διαγραφή Κελιών',\r
+                       merge                   : 'Ενοποίηση Κελιών',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Σειρά',\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'Διαγραφή Γραμμών'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Στήλη',\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'Διαγραφή Κολωνών'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Ιδιότητες κουμπιού',\r
+               text            : 'Κείμενο (Τιμή)',\r
+               type            : 'Τύπος',\r
+               typeBtn         : 'Κουμπί',\r
+               typeSbm         : 'Καταχώρηση',\r
+               typeRst         : 'Επαναφορά'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Ιδιότητες κουμπιού επιλογής',\r
+               radioTitle      : 'Ιδιότητες κουμπιού radio',\r
+               value           : 'Τιμή',\r
+               selected        : 'Επιλεγμένο'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Ιδιότητες φόρμας',\r
+               menu            : 'Ιδιότητες φόρμας',\r
+               action          : 'Δράση',\r
+               method          : 'Μάθοδος',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Παράθυρο Στόχος (Target)',\r
+               targetNotSet    : '<χωρίς>',\r
+               targetNew       : 'Νέο Παράθυρο (_blank)',\r
+               targetTop       : 'Ανώτατο Παράθυρο (_top)',\r
+               targetSelf      : 'Ίδιο Παράθυρο (_self)',\r
+               targetParent    : 'Γονικό Παράθυρο (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Ιδιότητες πεδίου επιλογής',\r
+               selectInfo      : 'Πληροφορίες',\r
+               opAvail         : 'Διαθέσιμες επιλογές',\r
+               value           : 'Τιμή',\r
+               size            : 'Μέγεθος',\r
+               lines           : 'γραμμές',\r
+               chkMulti        : 'Πολλαπλές επιλογές',\r
+               opText          : 'Κείμενο',\r
+               opValue         : 'Τιμή',\r
+               btnAdd          : 'Προσθήκη',\r
+               btnModify       : 'Αλλαγή',\r
+               btnUp           : 'Πάνω',\r
+               btnDown         : 'Κάτω',\r
+               btnSetValue : 'Προεπιλεγμένη επιλογή',\r
+               btnDelete       : 'Διαγραφή'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Ιδιότητες περιοχής κειμένου',\r
+               cols            : 'Στήλες',\r
+               rows            : 'Σειρές'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Ιδιότητες πεδίου κειμένου',\r
+               name            : 'Όνομα',\r
+               value           : 'Τιμή',\r
+               charWidth       : 'Μήκος χαρακτήρων',\r
+               maxChars        : 'Μέγιστοι χαρακτήρες',\r
+               type            : 'Τύπος',\r
+               typeText        : 'Κείμενο',\r
+               typePass        : 'Κωδικός'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Ιδιότητες κρυφού πεδίου',\r
+               name    : 'Όνομα',\r
+               value   : 'Τιμή'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Ιδιότητες Εικόνας',\r
+               titleButton     : 'Ιδιότητες κουμπιού εικόνας',\r
+               menu            : 'Ιδιότητες Εικόνας',\r
+               infoTab : 'Πληροφορίες Εικόνας',\r
+               btnUpload       : 'Αποστολή στον Διακομιστή',\r
+               url             : 'URL',\r
+               upload  : 'Αποστολή',\r
+               alt             : 'Εναλλακτικό Κείμενο (ALT)',\r
+               width           : 'Πλάτος',\r
+               height  : 'Ύψος',\r
+               lockRatio       : 'Κλείδωμα Αναλογίας',\r
+               resetSize       : 'Επαναφορά Αρχικού Μεγέθους',\r
+               border  : 'Περιθώριο',\r
+               hSpace  : 'Οριζόντιος Χώρος (HSpace)',\r
+               vSpace  : 'Κάθετος Χώρος (VSpace)',\r
+               align           : 'Ευθυγράμμιση (Align)',\r
+               alignLeft       : 'Αριστερά',\r
+               alignAbsBottom: 'Απόλυτα Κάτω (Abs Bottom)',\r
+               alignAbsMiddle: 'Απόλυτα στη Μέση (Abs Middle)',\r
+               alignBaseline   : 'Γραμμή Βάσης (Baseline)',\r
+               alignBottom     : 'Κάτω (Bottom)',\r
+               alignMiddle     : 'Μέση (Middle)',\r
+               alignRight      : 'Δεξιά (Right)',\r
+               alignTextTop    : 'Κορυφή Κειμένου (Text Top)',\r
+               alignTop        : 'Πάνω (Top)',\r
+               preview : 'Προεπισκόπιση',\r
+               alertUrl        : 'Εισάγετε την τοποθεσία (URL) της εικόνας',\r
+               linkTab : 'Σύνδεσμος',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Ιδιότητες Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Ιδιότητες flash',\r
+               chkPlay         : 'Αυτόματη έναρξη',\r
+               chkLoop         : 'Επανάληψη',\r
+               chkMenu         : 'Ενεργοποίηση Flash Menu',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Κλίμακα',\r
+               scaleAll                : 'Εμφάνιση όλων',\r
+               scaleNoBorder   : 'Χωρίς όρια',\r
+               scaleFit                : 'Ακριβής εφαρμογή',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Ευθυγράμμιση (Align)',\r
+               alignLeft       : 'Αριστερά',\r
+               alignAbsBottom: 'Απόλυτα Κάτω (Abs Bottom)',\r
+               alignAbsMiddle: 'Απόλυτα στη Μέση (Abs Middle)',\r
+               alignBaseline   : 'Γραμμή Βάσης (Baseline)',\r
+               alignBottom     : 'Κάτω (Bottom)',\r
+               alignMiddle     : 'Μέση (Middle)',\r
+               alignRight      : 'Δεξιά (Right)',\r
+               alignTextTop    : 'Κορυφή Κειμένου (Text Top)',\r
+               alignTop        : 'Πάνω (Top)',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Χρώμα Υποβάθρου',\r
+               width   : 'Πλάτος',\r
+               height  : 'Ύψος',\r
+               hSpace  : 'Οριζόντιος Χώρος (HSpace)',\r
+               vSpace  : 'Κάθετος Χώρος (VSpace)',\r
+               validateSrc : 'Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Ορθογραφικός έλεγχος',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Δεν υπάρχει στο λεξικό',\r
+               changeTo                : 'Αλλαγή σε',\r
+               btnIgnore               : 'Αγνόηση',\r
+               btnIgnoreAll    : 'Αγνόηση όλων',\r
+               btnReplace              : 'Αντικατάσταση',\r
+               btnReplaceAll   : 'Αντικατάσταση όλων',\r
+               btnUndo                 : 'Αναίρεση',\r
+               noSuggestions   : '- Δεν υπάρχουν προτάσεις -',\r
+               progress                : 'Ορθογραφικός έλεγχος σε εξέλιξη...',\r
+               noMispell               : 'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη',\r
+               noChanges               : 'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις',\r
+               oneChange               : 'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Μια λέξη άλλαξε',\r
+               manyChanges             : 'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: %1 λέξεις άλλαξαν',\r
+               ieSpellDownload : 'Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Επιλέξτε ένα Smiley'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Λίστα με Αριθμούς',\r
+       bulletedlist : 'Λίστα με Bullets',\r
+       indent : 'Αύξηση Εσοχής',\r
+       outdent : 'Μείωση Εσοχής',\r
+\r
+       justify :\r
+       {\r
+               left : 'Στοίχιση Αριστερά',\r
+               center : 'Στοίχιση στο Κέντρο',\r
+               right : 'Στοίχιση Δεξιά',\r
+               block : 'Πλήρης Στοίχιση (Block)'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Επικόλληση',\r
+               cutError        : 'Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+X).',\r
+               copyError       : 'Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+C).',\r
+               pasteMsg        : 'Παρακαλώ επικολήστε στο ακόλουθο κουτί χρησιμοποιόντας το πληκτρολόγιο (<STRONG>Ctrl+V</STRONG>) και πατήστε <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Επικόλληση από το Word',\r
+               title : 'Επικόλληση από το Word',\r
+               advice : 'Παρακαλώ επικολήστε στο ακόλουθο κουτί χρησιμοποιόντας το πληκτρολόγιο (<STRONG>Ctrl+V</STRONG>) και πατήστε <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Αγνόηση προδιαγραφών γραμματοσειράς',\r
+               removeStyle : 'Αφαίρεση προδιαγραφών στύλ'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Επικόλληση ως Απλό Κείμενο',\r
+               title : 'Επικόλληση ως Απλό Κείμενο'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Πρότυπα',\r
+               title : 'Πρότυπα περιεχομένου',\r
+               insertOption: 'Αντικατάσταση υπάρχοντων περιεχομένων',\r
+               selectPromptMsg: 'Παρακαλώ επιλέξτε πρότυπο για εισαγωγή στο πρόγραμμα<br>(τα υπάρχοντα περιεχόμενα θα χαθούν):',\r
+               emptyListMsg : '(Δεν έχουν καθοριστεί πρότυπα)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Στυλ',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Μορφή Γραμματοσειράς',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Μορφή Γραμματοσειράς',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Κανονικό',\r
+               tag_pre : 'Μορφοποιημένο',\r
+               tag_address : 'Διεύθυνση',\r
+               tag_h1 : 'Επικεφαλίδα 1',\r
+               tag_h2 : 'Επικεφαλίδα 2',\r
+               tag_h3 : 'Επικεφαλίδα 3',\r
+               tag_h4 : 'Επικεφαλίδα 4',\r
+               tag_h5 : 'Επικεφαλίδα 5',\r
+               tag_h6 : 'Επικεφαλίδα 6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Γραμματοσειρά',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Γραμματοσειρά',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Μέγεθος',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Μέγεθος',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Χρώμα Γραμμάτων',\r
+               bgColorTitle : 'Χρώμα Υποβάθρου',\r
+               auto : 'Αυτόματο',\r
+               more : 'Περισσότερα χρώματα...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/en-au.js b/_source/lang/en-au.js
new file mode 100644 (file)
index 0000000..cb7fce7
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * English (Australia) language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['en-au'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Source',\r
+       newPage                 : 'New Page',\r
+       save                    : 'Save',\r
+       preview                 : 'Preview',\r
+       cut                             : 'Cut',\r
+       copy                    : 'Copy',\r
+       paste                   : 'Paste',\r
+       print                   : 'Print',\r
+       underline               : 'Underline',\r
+       bold                    : 'Bold',\r
+       italic                  : 'Italic',\r
+       selectAll               : 'Select All',\r
+       removeFormat    : 'Remove Format',\r
+       strike                  : 'Strike Through',\r
+       subscript               : 'Subscript',\r
+       superscript             : 'Superscript',\r
+       horizontalrule  : 'Insert Horizontal Line',\r
+       pagebreak               : 'Insert Page Break for Printing',\r
+       unlink                  : 'Unlink',\r
+       undo                    : 'Undo',\r
+       redo                    : 'Redo',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Browse Server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocol',\r
+               upload                  : 'Upload',\r
+               uploadSubmit    : 'Send it to the Server',\r
+               image                   : 'Image',\r
+               flash                   : 'Flash',\r
+               form                    : 'Form',\r
+               checkbox                : 'Checkbox',\r
+               radio           : 'Radio Button',\r
+               textField               : 'Text Field',\r
+               textarea                : 'Textarea',\r
+               hiddenField             : 'Hidden Field',\r
+               button                  : 'Button',\r
+               select  : 'Selection Field',\r
+               imageButton             : 'Image Button',\r
+               notSet                  : '<not set>',\r
+               id                              : 'Id',\r
+               name                    : 'Name',\r
+               langDir                 : 'Language Direction',\r
+               langDirLtr              : 'Left to Right (LTR)',\r
+               langDirRtl              : 'Right to Left (RTL)',\r
+               langCode                : 'Language Code',\r
+               longDescr               : 'Long Description URL',\r
+               cssClass                : 'Stylesheet Classes',\r
+               advisoryTitle   : 'Advisory Title',\r
+               cssStyle                : 'Style',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Cancel',\r
+               generalTab              : 'General',\r
+               advancedTab             : 'Advanced',\r
+               validateNumberFailed    : 'This value is not a number.',\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Insert Special Character',\r
+               title           : 'Select Special Character'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Link',\r
+               menu            : 'Edit Link',\r
+               title           : 'Link',\r
+               info            : 'Link Info',\r
+               target          : 'Target',\r
+               upload          : 'Upload',\r
+               advanced        : 'Advanced',\r
+               type            : 'Link Type',\r
+               toAnchor        : 'Link to anchor in the text',\r
+               toEmail         : 'E-mail',\r
+               target          : 'Target',\r
+               targetNotSet    : '<not set>',\r
+               targetFrame     : '<frame>',\r
+               targetPopup     : '<popup window>',\r
+               targetNew       : 'New Window (_blank)',\r
+               targetTop       : 'Topmost Window (_top)',\r
+               targetSelf      : 'Same Window (_self)',\r
+               targetParent    : 'Parent Window (_parent)',\r
+               targetFrameName : 'Target Frame Name',\r
+               targetPopupName : 'Popup Window Name',\r
+               popupFeatures   : 'Popup Window Features',\r
+               popupResizable  : 'Resizable',\r
+               popupStatusBar  : 'Status Bar',\r
+               popupLocationBar        : 'Location Bar',\r
+               popupToolbar    : 'Toolbar',\r
+               popupMenuBar    : 'Menu Bar',\r
+               popupFullScreen : 'Full Screen (IE)',\r
+               popupScrollBars : 'Scroll Bars',\r
+               popupDependent  : 'Dependent (Netscape)',\r
+               popupWidth              : 'Width',\r
+               popupLeft               : 'Left Position',\r
+               popupHeight             : 'Height',\r
+               popupTop                : 'Top Position',\r
+               id                              : 'Id',\r
+               langDir                 : 'Language Direction',\r
+               langDirNotSet   : '<not set>',\r
+               langDirLTR              : 'Left to Right (LTR)',\r
+               langDirRTL              : 'Right to Left (RTL)',\r
+               acccessKey              : 'Access Key',\r
+               name                    : 'Name',\r
+               langCode                : 'Language Code',\r
+               tabIndex                : 'Tab Index',\r
+               advisoryTitle   : 'Advisory Title',\r
+               advisoryContentType     : 'Advisory Content Type',\r
+               cssClasses              : 'Stylesheet Classes',\r
+               charset                 : 'Linked Resource Charset',\r
+               styles                  : 'Style',\r
+               selectAnchor    : 'Select an Anchor',\r
+               anchorName              : 'By Anchor Name',\r
+               anchorId                : 'By Element Id',\r
+               emailAddress    : 'E-Mail Address',\r
+               emailSubject    : 'Message Subject',\r
+               emailBody               : 'Message Body',\r
+               noAnchors               : '(No anchors available in the document)',\r
+               noUrl                   : 'Please type the link URL',\r
+               noEmail                 : 'Please type the e-mail address'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Anchor',\r
+               menu            : 'Edit Anchor',\r
+               title           : 'Anchor Properties',\r
+               name            : 'Anchor Name',\r
+               errorName       : 'Please type the anchor name'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace',\r
+               find                            : 'Find',\r
+               replace                         : 'Replace',\r
+               findWhat                        : 'Find what:',\r
+               replaceWith                     : 'Replace with:',\r
+               notFoundMsg                     : 'The specified text was not found.',\r
+               matchCase                       : 'Match case',\r
+               matchWord                       : 'Match whole word',\r
+               matchCyclic                     : 'Match cyclic',\r
+               replaceAll                      : 'Replace All',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Table',\r
+               title           : 'Table Properties',\r
+               menu            : 'Table Properties',\r
+               deleteTable     : 'Delete Table',\r
+               rows            : 'Rows',\r
+               columns         : 'Columns',\r
+               border          : 'Border size',\r
+               align           : 'Alignment',\r
+               alignNotSet     : '<Not set>',\r
+               alignLeft       : 'Left',\r
+               alignCenter     : 'Centre',\r
+               alignRight      : 'Right',\r
+               width           : 'Width',\r
+               widthPx         : 'pixels',\r
+               widthPc         : 'percent',\r
+               height          : 'Height',\r
+               cellSpace       : 'Cell spacing',\r
+               cellPad         : 'Cell padding',\r
+               caption         : 'Caption',\r
+               summary         : 'Summary',\r
+               headers         : 'Headers',\r
+               headersNone             : 'None',\r
+               headersColumn   : 'First column',\r
+               headersRow              : 'First Row',\r
+               headersBoth             : 'Both',\r
+               invalidRows             : 'Number of rows must be a number greater than 0.',\r
+               invalidCols             : 'Number of columns must be a number greater than 0.',\r
+               invalidBorder   : 'Border size must be a number.',\r
+               invalidWidth    : 'Table width must be a number.',\r
+               invalidHeight   : 'Table height must be a number.',\r
+               invalidCellSpacing      : 'Cell spacing must be a number.',\r
+               invalidCellPadding      : 'Cell padding must be a number.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell',\r
+                       insertBefore    : 'Insert Cell Before',\r
+                       insertAfter             : 'Insert Cell After',\r
+                       deleteCell              : 'Delete Cells',\r
+                       merge                   : 'Merge Cells',\r
+                       mergeRight              : 'Merge Right',\r
+                       mergeDown               : 'Merge Down',\r
+                       splitHorizontal : 'Split Cell Horizontally',\r
+                       splitVertical   : 'Split Cell Vertically',\r
+                       title                   : 'Cell Properties',\r
+                       cellType                : 'Cell Type',\r
+                       rowSpan                 : 'Rows Span',\r
+                       colSpan                 : 'Columns Span',\r
+                       wordWrap                : 'Word Wrap',\r
+                       hAlign                  : 'Horizontal Alignment',\r
+                       vAlign                  : 'Vertical Alignment',\r
+                       alignTop                : 'Top',\r
+                       alignMiddle             : 'Middle',\r
+                       alignBottom             : 'Bottom',\r
+                       alignBaseline   : 'Baseline',\r
+                       bgColor                 : 'Background Color',\r
+                       borderColor             : 'Border Color',\r
+                       data                    : 'Data',\r
+                       header                  : 'Header',\r
+                       yes                             : 'Yes',\r
+                       no                              : 'No',\r
+                       invalidWidth    : 'Cell width must be a number.',\r
+                       invalidHeight   : 'Cell height must be a number.',\r
+                       invalidRowSpan  : 'Rows span must be a whole number.',\r
+                       invalidColSpan  : 'Columns span must be a whole number.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Row',\r
+                       insertBefore    : 'Insert Row Before',\r
+                       insertAfter             : 'Insert Row After',\r
+                       deleteRow               : 'Delete Rows'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Column',\r
+                       insertBefore    : 'Insert Column Before',\r
+                       insertAfter             : 'Insert Column After',\r
+                       deleteColumn    : 'Delete Columns'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Button Properties',\r
+               text            : 'Text (Value)',\r
+               type            : 'Type',\r
+               typeBtn         : 'Button',\r
+               typeSbm         : 'Submit',\r
+               typeRst         : 'Reset'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Checkbox Properties',\r
+               radioTitle      : 'Radio Button Properties',\r
+               value           : 'Value',\r
+               selected        : 'Selected'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Form Properties',\r
+               menu            : 'Form Properties',\r
+               action          : 'Action',\r
+               method          : 'Method',\r
+               encoding        : 'Encoding',\r
+               target          : 'Target',\r
+               targetNotSet    : '<not set>',\r
+               targetNew       : 'New Window (_blank)',\r
+               targetTop       : 'Topmost Window (_top)',\r
+               targetSelf      : 'Same Window (_self)',\r
+               targetParent    : 'Parent Window (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Selection Field Properties',\r
+               selectInfo      : 'Select Info',\r
+               opAvail         : 'Available Options',\r
+               value           : 'Value',\r
+               size            : 'Size',\r
+               lines           : 'lines',\r
+               chkMulti        : 'Allow multiple selections',\r
+               opText          : 'Text',\r
+               opValue         : 'Value',\r
+               btnAdd          : 'Add',\r
+               btnModify       : 'Modify',\r
+               btnUp           : 'Up',\r
+               btnDown         : 'Down',\r
+               btnSetValue : 'Set as selected value',\r
+               btnDelete       : 'Delete'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Textarea Properties',\r
+               cols            : 'Columns',\r
+               rows            : 'Rows'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Text Field Properties',\r
+               name            : 'Name',\r
+               value           : 'Value',\r
+               charWidth       : 'Character Width',\r
+               maxChars        : 'Maximum Characters',\r
+               type            : 'Type',\r
+               typeText        : 'Text',\r
+               typePass        : 'Password'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Hidden Field Properties',\r
+               name    : 'Name',\r
+               value   : 'Value'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Image Properties',\r
+               titleButton     : 'Image Button Properties',\r
+               menu            : 'Image Properties',\r
+               infoTab : 'Image Info',\r
+               btnUpload       : 'Send it to the Server',\r
+               url             : 'URL',\r
+               upload  : 'Upload',\r
+               alt             : 'Alternative Text',\r
+               width           : 'Width',\r
+               height  : 'Height',\r
+               lockRatio       : 'Lock Ratio',\r
+               resetSize       : 'Reset Size',\r
+               border  : 'Border',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Align',\r
+               alignLeft       : 'Left',\r
+               alignAbsBottom: 'Abs Bottom',\r
+               alignAbsMiddle: 'Abs Middle',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Bottom',\r
+               alignMiddle     : 'Middle',\r
+               alignRight      : 'Right',\r
+               alignTextTop    : 'Text Top',\r
+               alignTop        : 'Top',\r
+               preview : 'Preview',\r
+               alertUrl        : 'Please type the image URL',\r
+               linkTab : 'Link',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?',\r
+               img2Button      : 'Do you want to transform the selected image on a image button?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash Properties',\r
+               propertiesTab   : 'Properties',\r
+               title           : 'Flash Properties',\r
+               chkPlay         : 'Auto Play',\r
+               chkLoop         : 'Loop',\r
+               chkMenu         : 'Enable Flash Menu',\r
+               chkFull         : 'Allow Fullscreen',\r
+               scale           : 'Scale',\r
+               scaleAll                : 'Show all',\r
+               scaleNoBorder   : 'No Border',\r
+               scaleFit                : 'Exact Fit',\r
+               access                  : 'Script Access',\r
+               accessAlways    : 'Always',\r
+               accessSameDomain        : 'Same domain',\r
+               accessNever     : 'Never',\r
+               align           : 'Align',\r
+               alignLeft       : 'Left',\r
+               alignAbsBottom: 'Abs Bottom',\r
+               alignAbsMiddle: 'Abs Middle',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Bottom',\r
+               alignMiddle     : 'Middle',\r
+               alignRight      : 'Right',\r
+               alignTextTop    : 'Text Top',\r
+               alignTop        : 'Top',\r
+               quality         : 'Quality',\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode',\r
+               flashvars       : 'Variables for Flash',\r
+               bgcolor : 'Background colour',\r
+               width   : 'Width',\r
+               height  : 'Height',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'URL must not be empty.',\r
+               validateWidth : 'Width must be a number.',\r
+               validateHeight : 'Height must be a number.',\r
+               validateHSpace : 'HSpace must be a number.',\r
+               validateVSpace : 'VSpace must be a number.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Check Spelling',\r
+               title                   : 'Spell Check',\r
+               notAvailable    : 'Sorry, but service is unavailable now.',\r
+               errorLoading    : 'Error loading application service host: %s.',\r
+               notInDic                : 'Not in dictionary',\r
+               changeTo                : 'Change to',\r
+               btnIgnore               : 'Ignore',\r
+               btnIgnoreAll    : 'Ignore All',\r
+               btnReplace              : 'Replace',\r
+               btnReplaceAll   : 'Replace All',\r
+               btnUndo                 : 'Undo',\r
+               noSuggestions   : '- No suggestions -',\r
+               progress                : 'Spell check in progress...',\r
+               noMispell               : 'Spell check complete: No misspellings found',\r
+               noChanges               : 'Spell check complete: No words changed',\r
+               oneChange               : 'Spell check complete: One word changed',\r
+               manyChanges             : 'Spell check complete: %1 words changed',\r
+               ieSpellDownload : 'Spell checker not installed. Do you want to download it now?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Insert a Smiley'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element'\r
+       },\r
+\r
+       numberedlist : 'Insert/Remove Numbered List',\r
+       bulletedlist : 'Insert/Remove Bulleted List',\r
+       indent : 'Increase Indent',\r
+       outdent : 'Decrease Indent',\r
+\r
+       justify :\r
+       {\r
+               left : 'Left Justify',\r
+               center : 'Centre Justify',\r
+               right : 'Right Justify',\r
+               block : 'Block Justify'\r
+       },\r
+\r
+       blockquote : 'Blockquote',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Paste',\r
+               cutError        : 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).',\r
+               copyError       : 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).',\r
+               pasteMsg        : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Paste from Word',\r
+               title : 'Paste from Word',\r
+               advice : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.',\r
+               ignoreFontFace : 'Ignore Font Face definitions',\r
+               removeStyle : 'Remove Styles definitions'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Paste as plain text',\r
+               title : 'Paste as Plain Text'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Templates',\r
+               title : 'Content Templates',\r
+               insertOption: 'Replace actual contents',\r
+               selectPromptMsg: 'Please select the template to open in the editor',\r
+               emptyListMsg : '(No templates defined)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Styles',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles',\r
+               panelTitle2 : 'Inline Styles',\r
+               panelTitle3 : 'Object Styles'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Paragraph Format',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatted',\r
+               tag_address : 'Address',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Font',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Font Name',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Size',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Font Size',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Text Colour',\r
+               bgColorTitle : 'Background Colour',\r
+               auto : 'Automatic',\r
+               more : 'More Colours...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor',\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:',\r
+               copy : 'Copyright &copy; $1. All rights reserved.'\r
+       },\r
+\r
+       maximize : 'Maximize',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/en-ca.js b/_source/lang/en-ca.js
new file mode 100644 (file)
index 0000000..26d32ac
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * English (Australia) language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['en-ca'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Source',\r
+       newPage                 : 'New Page',\r
+       save                    : 'Save',\r
+       preview                 : 'Preview',\r
+       cut                             : 'Cut',\r
+       copy                    : 'Copy',\r
+       paste                   : 'Paste',\r
+       print                   : 'Print',\r
+       underline               : 'Underline',\r
+       bold                    : 'Bold',\r
+       italic                  : 'Italic',\r
+       selectAll               : 'Select All',\r
+       removeFormat    : 'Remove Format',\r
+       strike                  : 'Strike Through',\r
+       subscript               : 'Subscript',\r
+       superscript             : 'Superscript',\r
+       horizontalrule  : 'Insert Horizontal Line',\r
+       pagebreak               : 'Insert Page Break for Printing',\r
+       unlink                  : 'Unlink',\r
+       undo                    : 'Undo',\r
+       redo                    : 'Redo',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Browse Server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocol',\r
+               upload                  : 'Upload',\r
+               uploadSubmit    : 'Send it to the Server',\r
+               image                   : 'Image',\r
+               flash                   : 'Flash',\r
+               form                    : 'Form',\r
+               checkbox                : 'Checkbox',\r
+               radio           : 'Radio Button',\r
+               textField               : 'Text Field',\r
+               textarea                : 'Textarea',\r
+               hiddenField             : 'Hidden Field',\r
+               button                  : 'Button',\r
+               select  : 'Selection Field',\r
+               imageButton             : 'Image Button',\r
+               notSet                  : '<not set>',\r
+               id                              : 'Id',\r
+               name                    : 'Name',\r
+               langDir                 : 'Language Direction',\r
+               langDirLtr              : 'Left to Right (LTR)',\r
+               langDirRtl              : 'Right to Left (RTL)',\r
+               langCode                : 'Language Code',\r
+               longDescr               : 'Long Description URL',\r
+               cssClass                : 'Stylesheet Classes',\r
+               advisoryTitle   : 'Advisory Title',\r
+               cssStyle                : 'Style',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Cancel',\r
+               generalTab              : 'General',\r
+               advancedTab             : 'Advanced',\r
+               validateNumberFailed    : 'This value is not a number.',\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Insert Special Character',\r
+               title           : 'Select Special Character'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Link',\r
+               menu            : 'Edit Link',\r
+               title           : 'Link',\r
+               info            : 'Link Info',\r
+               target          : 'Target',\r
+               upload          : 'Upload',\r
+               advanced        : 'Advanced',\r
+               type            : 'Link Type',\r
+               toAnchor        : 'Link to anchor in the text',\r
+               toEmail         : 'E-mail',\r
+               target          : 'Target',\r
+               targetNotSet    : '<not set>',\r
+               targetFrame     : '<frame>',\r
+               targetPopup     : '<popup window>',\r
+               targetNew       : 'New Window (_blank)',\r
+               targetTop       : 'Topmost Window (_top)',\r
+               targetSelf      : 'Same Window (_self)',\r
+               targetParent    : 'Parent Window (_parent)',\r
+               targetFrameName : 'Target Frame Name',\r
+               targetPopupName : 'Popup Window Name',\r
+               popupFeatures   : 'Popup Window Features',\r
+               popupResizable  : 'Resizable',\r
+               popupStatusBar  : 'Status Bar',\r
+               popupLocationBar        : 'Location Bar',\r
+               popupToolbar    : 'Toolbar',\r
+               popupMenuBar    : 'Menu Bar',\r
+               popupFullScreen : 'Full Screen (IE)',\r
+               popupScrollBars : 'Scroll Bars',\r
+               popupDependent  : 'Dependent (Netscape)',\r
+               popupWidth              : 'Width',\r
+               popupLeft               : 'Left Position',\r
+               popupHeight             : 'Height',\r
+               popupTop                : 'Top Position',\r
+               id                              : 'Id',\r
+               langDir                 : 'Language Direction',\r
+               langDirNotSet   : '<not set>',\r
+               langDirLTR              : 'Left to Right (LTR)',\r
+               langDirRTL              : 'Right to Left (RTL)',\r
+               acccessKey              : 'Access Key',\r
+               name                    : 'Name',\r
+               langCode                : 'Language Code',\r
+               tabIndex                : 'Tab Index',\r
+               advisoryTitle   : 'Advisory Title',\r
+               advisoryContentType     : 'Advisory Content Type',\r
+               cssClasses              : 'Stylesheet Classes',\r
+               charset                 : 'Linked Resource Charset',\r
+               styles                  : 'Style',\r
+               selectAnchor    : 'Select an Anchor',\r
+               anchorName              : 'By Anchor Name',\r
+               anchorId                : 'By Element Id',\r
+               emailAddress    : 'E-Mail Address',\r
+               emailSubject    : 'Message Subject',\r
+               emailBody               : 'Message Body',\r
+               noAnchors               : '(No anchors available in the document)',\r
+               noUrl                   : 'Please type the link URL',\r
+               noEmail                 : 'Please type the e-mail address'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Anchor',\r
+               menu            : 'Edit Anchor',\r
+               title           : 'Anchor Properties',\r
+               name            : 'Anchor Name',\r
+               errorName       : 'Please type the anchor name'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace',\r
+               find                            : 'Find',\r
+               replace                         : 'Replace',\r
+               findWhat                        : 'Find what:',\r
+               replaceWith                     : 'Replace with:',\r
+               notFoundMsg                     : 'The specified text was not found.',\r
+               matchCase                       : 'Match case',\r
+               matchWord                       : 'Match whole word',\r
+               matchCyclic                     : 'Match cyclic',\r
+               replaceAll                      : 'Replace All',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Table',\r
+               title           : 'Table Properties',\r
+               menu            : 'Table Properties',\r
+               deleteTable     : 'Delete Table',\r
+               rows            : 'Rows',\r
+               columns         : 'Columns',\r
+               border          : 'Border size',\r
+               align           : 'Alignment',\r
+               alignNotSet     : '<Not set>',\r
+               alignLeft       : 'Left',\r
+               alignCenter     : 'Centre',\r
+               alignRight      : 'Right',\r
+               width           : 'Width',\r
+               widthPx         : 'pixels',\r
+               widthPc         : 'percent',\r
+               height          : 'Height',\r
+               cellSpace       : 'Cell spacing',\r
+               cellPad         : 'Cell padding',\r
+               caption         : 'Caption',\r
+               summary         : 'Summary',\r
+               headers         : 'Headers',\r
+               headersNone             : 'None',\r
+               headersColumn   : 'First column',\r
+               headersRow              : 'First Row',\r
+               headersBoth             : 'Both',\r
+               invalidRows             : 'Number of rows must be a number greater than 0.',\r
+               invalidCols             : 'Number of columns must be a number greater than 0.',\r
+               invalidBorder   : 'Border size must be a number.',\r
+               invalidWidth    : 'Table width must be a number.',\r
+               invalidHeight   : 'Table height must be a number.',\r
+               invalidCellSpacing      : 'Cell spacing must be a number.',\r
+               invalidCellPadding      : 'Cell padding must be a number.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell',\r
+                       insertBefore    : 'Insert Cell Before',\r
+                       insertAfter             : 'Insert Cell After',\r
+                       deleteCell              : 'Delete Cells',\r
+                       merge                   : 'Merge Cells',\r
+                       mergeRight              : 'Merge Right',\r
+                       mergeDown               : 'Merge Down',\r
+                       splitHorizontal : 'Split Cell Horizontally',\r
+                       splitVertical   : 'Split Cell Vertically',\r
+                       title                   : 'Cell Properties',\r
+                       cellType                : 'Cell Type',\r
+                       rowSpan                 : 'Rows Span',\r
+                       colSpan                 : 'Columns Span',\r
+                       wordWrap                : 'Word Wrap',\r
+                       hAlign                  : 'Horizontal Alignment',\r
+                       vAlign                  : 'Vertical Alignment',\r
+                       alignTop                : 'Top',\r
+                       alignMiddle             : 'Middle',\r
+                       alignBottom             : 'Bottom',\r
+                       alignBaseline   : 'Baseline',\r
+                       bgColor                 : 'Background Color',\r
+                       borderColor             : 'Border Color',\r
+                       data                    : 'Data',\r
+                       header                  : 'Header',\r
+                       yes                             : 'Yes',\r
+                       no                              : 'No',\r
+                       invalidWidth    : 'Cell width must be a number.',\r
+                       invalidHeight   : 'Cell height must be a number.',\r
+                       invalidRowSpan  : 'Rows span must be a whole number.',\r
+                       invalidColSpan  : 'Columns span must be a whole number.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Row',\r
+                       insertBefore    : 'Insert Row Before',\r
+                       insertAfter             : 'Insert Row After',\r
+                       deleteRow               : 'Delete Rows'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Column',\r
+                       insertBefore    : 'Insert Column Before',\r
+                       insertAfter             : 'Insert Column After',\r
+                       deleteColumn    : 'Delete Columns'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Button Properties',\r
+               text            : 'Text (Value)',\r
+               type            : 'Type',\r
+               typeBtn         : 'Button',\r
+               typeSbm         : 'Submit',\r
+               typeRst         : 'Reset'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Checkbox Properties',\r
+               radioTitle      : 'Radio Button Properties',\r
+               value           : 'Value',\r
+               selected        : 'Selected'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Form Properties',\r
+               menu            : 'Form Properties',\r
+               action          : 'Action',\r
+               method          : 'Method',\r
+               encoding        : 'Encoding',\r
+               target          : 'Target',\r
+               targetNotSet    : '<not set>',\r
+               targetNew       : 'New Window (_blank)',\r
+               targetTop       : 'Topmost Window (_top)',\r
+               targetSelf      : 'Same Window (_self)',\r
+               targetParent    : 'Parent Window (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Selection Field Properties',\r
+               selectInfo      : 'Select Info',\r
+               opAvail         : 'Available Options',\r
+               value           : 'Value',\r
+               size            : 'Size',\r
+               lines           : 'lines',\r
+               chkMulti        : 'Allow multiple selections',\r
+               opText          : 'Text',\r
+               opValue         : 'Value',\r
+               btnAdd          : 'Add',\r
+               btnModify       : 'Modify',\r
+               btnUp           : 'Up',\r
+               btnDown         : 'Down',\r
+               btnSetValue : 'Set as selected value',\r
+               btnDelete       : 'Delete'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Textarea Properties',\r
+               cols            : 'Columns',\r
+               rows            : 'Rows'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Text Field Properties',\r
+               name            : 'Name',\r
+               value           : 'Value',\r
+               charWidth       : 'Character Width',\r
+               maxChars        : 'Maximum Characters',\r
+               type            : 'Type',\r
+               typeText        : 'Text',\r
+               typePass        : 'Password'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Hidden Field Properties',\r
+               name    : 'Name',\r
+               value   : 'Value'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Image Properties',\r
+               titleButton     : 'Image Button Properties',\r
+               menu            : 'Image Properties',\r
+               infoTab : 'Image Info',\r
+               btnUpload       : 'Send it to the Server',\r
+               url             : 'URL',\r
+               upload  : 'Upload',\r
+               alt             : 'Alternative Text',\r
+               width           : 'Width',\r
+               height  : 'Height',\r
+               lockRatio       : 'Lock Ratio',\r
+               resetSize       : 'Reset Size',\r
+               border  : 'Border',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Align',\r
+               alignLeft       : 'Left',\r
+               alignAbsBottom: 'Abs Bottom',\r
+               alignAbsMiddle: 'Abs Middle',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Bottom',\r
+               alignMiddle     : 'Middle',\r
+               alignRight      : 'Right',\r
+               alignTextTop    : 'Text Top',\r
+               alignTop        : 'Top',\r
+               preview : 'Preview',\r
+               alertUrl        : 'Please type the image URL',\r
+               linkTab : 'Link',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?',\r
+               img2Button      : 'Do you want to transform the selected image on a image button?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash Properties',\r
+               propertiesTab   : 'Properties',\r
+               title           : 'Flash Properties',\r
+               chkPlay         : 'Auto Play',\r
+               chkLoop         : 'Loop',\r
+               chkMenu         : 'Enable Flash Menu',\r
+               chkFull         : 'Allow Fullscreen',\r
+               scale           : 'Scale',\r
+               scaleAll                : 'Show all',\r
+               scaleNoBorder   : 'No Border',\r
+               scaleFit                : 'Exact Fit',\r
+               access                  : 'Script Access',\r
+               accessAlways    : 'Always',\r
+               accessSameDomain        : 'Same domain',\r
+               accessNever     : 'Never',\r
+               align           : 'Align',\r
+               alignLeft       : 'Left',\r
+               alignAbsBottom: 'Abs Bottom',\r
+               alignAbsMiddle: 'Abs Middle',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Bottom',\r
+               alignMiddle     : 'Middle',\r
+               alignRight      : 'Right',\r
+               alignTextTop    : 'Text Top',\r
+               alignTop        : 'Top',\r
+               quality         : 'Quality',\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode',\r
+               flashvars       : 'Variables for Flash',\r
+               bgcolor : 'Background colour',\r
+               width   : 'Width',\r
+               height  : 'Height',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'URL must not be empty.',\r
+               validateWidth : 'Width must be a number.',\r
+               validateHeight : 'Height must be a number.',\r
+               validateHSpace : 'HSpace must be a number.',\r
+               validateVSpace : 'VSpace must be a number.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Check Spelling',\r
+               title                   : 'Spell Check',\r
+               notAvailable    : 'Sorry, but service is unavailable now.',\r
+               errorLoading    : 'Error loading application service host: %s.',\r
+               notInDic                : 'Not in dictionary',\r
+               changeTo                : 'Change to',\r
+               btnIgnore               : 'Ignore',\r
+               btnIgnoreAll    : 'Ignore All',\r
+               btnReplace              : 'Replace',\r
+               btnReplaceAll   : 'Replace All',\r
+               btnUndo                 : 'Undo',\r
+               noSuggestions   : '- No suggestions -',\r
+               progress                : 'Spell check in progress...',\r
+               noMispell               : 'Spell check complete: No misspellings found',\r
+               noChanges               : 'Spell check complete: No words changed',\r
+               oneChange               : 'Spell check complete: One word changed',\r
+               manyChanges             : 'Spell check complete: %1 words changed',\r
+               ieSpellDownload : 'Spell checker not installed. Do you want to download it now?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Insert a Smiley'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element'\r
+       },\r
+\r
+       numberedlist : 'Insert/Remove Numbered List',\r
+       bulletedlist : 'Insert/Remove Bulleted List',\r
+       indent : 'Increase Indent',\r
+       outdent : 'Decrease Indent',\r
+\r
+       justify :\r
+       {\r
+               left : 'Left Justify',\r
+               center : 'Centre Justify',\r
+               right : 'Right Justify',\r
+               block : 'Block Justify'\r
+       },\r
+\r
+       blockquote : 'Blockquote',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Paste',\r
+               cutError        : 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).',\r
+               copyError       : 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).',\r
+               pasteMsg        : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Paste from Word',\r
+               title : 'Paste from Word',\r
+               advice : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.',\r
+               ignoreFontFace : 'Ignore Font Face definitions',\r
+               removeStyle : 'Remove Styles definitions'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Paste as plain text',\r
+               title : 'Paste as Plain Text'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Templates',\r
+               title : 'Content Templates',\r
+               insertOption: 'Replace actual contents',\r
+               selectPromptMsg: 'Please select the template to open in the editor',\r
+               emptyListMsg : '(No templates defined)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Styles',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles',\r
+               panelTitle2 : 'Inline Styles',\r
+               panelTitle3 : 'Object Styles'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Paragraph Format',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatted',\r
+               tag_address : 'Address',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Font',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Font Name',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Size',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Font Size',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Text Colour',\r
+               bgColorTitle : 'Background Colour',\r
+               auto : 'Automatic',\r
+               more : 'More Colours...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor',\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:',\r
+               copy : 'Copyright &copy; $1. All rights reserved.'\r
+       },\r
+\r
+       maximize : 'Maximize',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/en-uk.js b/_source/lang/en-uk.js
new file mode 100644 (file)
index 0000000..45e163b
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * English (Australia) language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['en-uk'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Source',\r
+       newPage                 : 'New Page',\r
+       save                    : 'Save',\r
+       preview                 : 'Preview',\r
+       cut                             : 'Cut',\r
+       copy                    : 'Copy',\r
+       paste                   : 'Paste',\r
+       print                   : 'Print',\r
+       underline               : 'Underline',\r
+       bold                    : 'Bold',\r
+       italic                  : 'Italic',\r
+       selectAll               : 'Select All',\r
+       removeFormat    : 'Remove Format',\r
+       strike                  : 'Strike Through',\r
+       subscript               : 'Subscript',\r
+       superscript             : 'Superscript',\r
+       horizontalrule  : 'Insert Horizontal Line',\r
+       pagebreak               : 'Insert Page Break for Printing',\r
+       unlink                  : 'Unlink',\r
+       undo                    : 'Undo',\r
+       redo                    : 'Redo',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Browse Server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocol',\r
+               upload                  : 'Upload',\r
+               uploadSubmit    : 'Send it to the Server',\r
+               image                   : 'Image',\r
+               flash                   : 'Flash',\r
+               form                    : 'Form',\r
+               checkbox                : 'Checkbox',\r
+               radio           : 'Radio Button',\r
+               textField               : 'Text Field',\r
+               textarea                : 'Textarea',\r
+               hiddenField             : 'Hidden Field',\r
+               button                  : 'Button',\r
+               select  : 'Selection Field',\r
+               imageButton             : 'Image Button',\r
+               notSet                  : '<not set>',\r
+               id                              : 'Id',\r
+               name                    : 'Name',\r
+               langDir                 : 'Language Direction',\r
+               langDirLtr              : 'Left to Right (LTR)',\r
+               langDirRtl              : 'Right to Left (RTL)',\r
+               langCode                : 'Language Code',\r
+               longDescr               : 'Long Description URL',\r
+               cssClass                : 'Stylesheet Classes',\r
+               advisoryTitle   : 'Advisory Title',\r
+               cssStyle                : 'Style',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Cancel',\r
+               generalTab              : 'General',\r
+               advancedTab             : 'Advanced',\r
+               validateNumberFailed    : 'This value is not a number.',\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Insert Special Character',\r
+               title           : 'Select Special Character'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Link',\r
+               menu            : 'Edit Link',\r
+               title           : 'Link',\r
+               info            : 'Link Info',\r
+               target          : 'Target',\r
+               upload          : 'Upload',\r
+               advanced        : 'Advanced',\r
+               type            : 'Link Type',\r
+               toAnchor        : 'Link to anchor in the text',\r
+               toEmail         : 'E-mail',\r
+               target          : 'Target',\r
+               targetNotSet    : '<not set>',\r
+               targetFrame     : '<frame>',\r
+               targetPopup     : '<popup window>',\r
+               targetNew       : 'New Window (_blank)',\r
+               targetTop       : 'Topmost Window (_top)',\r
+               targetSelf      : 'Same Window (_self)',\r
+               targetParent    : 'Parent Window (_parent)',\r
+               targetFrameName : 'Target Frame Name',\r
+               targetPopupName : 'Popup Window Name',\r
+               popupFeatures   : 'Popup Window Features',\r
+               popupResizable  : 'Resizable',\r
+               popupStatusBar  : 'Status Bar',\r
+               popupLocationBar        : 'Location Bar',\r
+               popupToolbar    : 'Toolbar',\r
+               popupMenuBar    : 'Menu Bar',\r
+               popupFullScreen : 'Full Screen (IE)',\r
+               popupScrollBars : 'Scroll Bars',\r
+               popupDependent  : 'Dependent (Netscape)',\r
+               popupWidth              : 'Width',\r
+               popupLeft               : 'Left Position',\r
+               popupHeight             : 'Height',\r
+               popupTop                : 'Top Position',\r
+               id                              : 'Id',\r
+               langDir                 : 'Language Direction',\r
+               langDirNotSet   : '<not set>',\r
+               langDirLTR              : 'Left to Right (LTR)',\r
+               langDirRTL              : 'Right to Left (RTL)',\r
+               acccessKey              : 'Access Key',\r
+               name                    : 'Name',\r
+               langCode                : 'Language Code',\r
+               tabIndex                : 'Tab Index',\r
+               advisoryTitle   : 'Advisory Title',\r
+               advisoryContentType     : 'Advisory Content Type',\r
+               cssClasses              : 'Stylesheet Classes',\r
+               charset                 : 'Linked Resource Charset',\r
+               styles                  : 'Style',\r
+               selectAnchor    : 'Select an Anchor',\r
+               anchorName              : 'By Anchor Name',\r
+               anchorId                : 'By Element Id',\r
+               emailAddress    : 'E-Mail Address',\r
+               emailSubject    : 'Message Subject',\r
+               emailBody               : 'Message Body',\r
+               noAnchors               : '(No anchors available in the document)',\r
+               noUrl                   : 'Please type the link URL',\r
+               noEmail                 : 'Please type the e-mail address'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Anchor',\r
+               menu            : 'Edit Anchor',\r
+               title           : 'Anchor Properties',\r
+               name            : 'Anchor Name',\r
+               errorName       : 'Please type the anchor name'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace',\r
+               find                            : 'Find',\r
+               replace                         : 'Replace',\r
+               findWhat                        : 'Find what:',\r
+               replaceWith                     : 'Replace with:',\r
+               notFoundMsg                     : 'The specified text was not found.',\r
+               matchCase                       : 'Match case',\r
+               matchWord                       : 'Match whole word',\r
+               matchCyclic                     : 'Match cyclic',\r
+               replaceAll                      : 'Replace All',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Table',\r
+               title           : 'Table Properties',\r
+               menu            : 'Table Properties',\r
+               deleteTable     : 'Delete Table',\r
+               rows            : 'Rows',\r
+               columns         : 'Columns',\r
+               border          : 'Border size',\r
+               align           : 'Alignment',\r
+               alignNotSet     : '<Not set>',\r
+               alignLeft       : 'Left',\r
+               alignCenter     : 'Centre',\r
+               alignRight      : 'Right',\r
+               width           : 'Width',\r
+               widthPx         : 'pixels',\r
+               widthPc         : 'percent',\r
+               height          : 'Height',\r
+               cellSpace       : 'Cell spacing',\r
+               cellPad         : 'Cell padding',\r
+               caption         : 'Caption',\r
+               summary         : 'Summary',\r
+               headers         : 'Headers',\r
+               headersNone             : 'None',\r
+               headersColumn   : 'First column',\r
+               headersRow              : 'First Row',\r
+               headersBoth             : 'Both',\r
+               invalidRows             : 'Number of rows must be a number greater than 0.',\r
+               invalidCols             : 'Number of columns must be a number greater than 0.',\r
+               invalidBorder   : 'Border size must be a number.',\r
+               invalidWidth    : 'Table width must be a number.',\r
+               invalidHeight   : 'Table height must be a number.',\r
+               invalidCellSpacing      : 'Cell spacing must be a number.',\r
+               invalidCellPadding      : 'Cell padding must be a number.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell',\r
+                       insertBefore    : 'Insert Cell Before',\r
+                       insertAfter             : 'Insert Cell After',\r
+                       deleteCell              : 'Delete Cells',\r
+                       merge                   : 'Merge Cells',\r
+                       mergeRight              : 'Merge Right',\r
+                       mergeDown               : 'Merge Down',\r
+                       splitHorizontal : 'Split Cell Horizontally',\r
+                       splitVertical   : 'Split Cell Vertically',\r
+                       title                   : 'Cell Properties',\r
+                       cellType                : 'Cell Type',\r
+                       rowSpan                 : 'Rows Span',\r
+                       colSpan                 : 'Columns Span',\r
+                       wordWrap                : 'Word Wrap',\r
+                       hAlign                  : 'Horizontal Alignment',\r
+                       vAlign                  : 'Vertical Alignment',\r
+                       alignTop                : 'Top',\r
+                       alignMiddle             : 'Middle',\r
+                       alignBottom             : 'Bottom',\r
+                       alignBaseline   : 'Baseline',\r
+                       bgColor                 : 'Background Color',\r
+                       borderColor             : 'Border Color',\r
+                       data                    : 'Data',\r
+                       header                  : 'Header',\r
+                       yes                             : 'Yes',\r
+                       no                              : 'No',\r
+                       invalidWidth    : 'Cell width must be a number.',\r
+                       invalidHeight   : 'Cell height must be a number.',\r
+                       invalidRowSpan  : 'Rows span must be a whole number.',\r
+                       invalidColSpan  : 'Columns span must be a whole number.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Row',\r
+                       insertBefore    : 'Insert Row Before',\r
+                       insertAfter             : 'Insert Row After',\r
+                       deleteRow               : 'Delete Rows'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Column',\r
+                       insertBefore    : 'Insert Column Before',\r
+                       insertAfter             : 'Insert Column After',\r
+                       deleteColumn    : 'Delete Columns'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Button Properties',\r
+               text            : 'Text (Value)',\r
+               type            : 'Type',\r
+               typeBtn         : 'Button',\r
+               typeSbm         : 'Submit',\r
+               typeRst         : 'Reset'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Checkbox Properties',\r
+               radioTitle      : 'Radio Button Properties',\r
+               value           : 'Value',\r
+               selected        : 'Selected'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Form Properties',\r
+               menu            : 'Form Properties',\r
+               action          : 'Action',\r
+               method          : 'Method',\r
+               encoding        : 'Encoding',\r
+               target          : 'Target',\r
+               targetNotSet    : '<not set>',\r
+               targetNew       : 'New Window (_blank)',\r
+               targetTop       : 'Topmost Window (_top)',\r
+               targetSelf      : 'Same Window (_self)',\r
+               targetParent    : 'Parent Window (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Selection Field Properties',\r
+               selectInfo      : 'Select Info',\r
+               opAvail         : 'Available Options',\r
+               value           : 'Value',\r
+               size            : 'Size',\r
+               lines           : 'lines',\r
+               chkMulti        : 'Allow multiple selections',\r
+               opText          : 'Text',\r
+               opValue         : 'Value',\r
+               btnAdd          : 'Add',\r
+               btnModify       : 'Modify',\r
+               btnUp           : 'Up',\r
+               btnDown         : 'Down',\r
+               btnSetValue : 'Set as selected value',\r
+               btnDelete       : 'Delete'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Textarea Properties',\r
+               cols            : 'Columns',\r
+               rows            : 'Rows'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Text Field Properties',\r
+               name            : 'Name',\r
+               value           : 'Value',\r
+               charWidth       : 'Character Width',\r
+               maxChars        : 'Maximum Characters',\r
+               type            : 'Type',\r
+               typeText        : 'Text',\r
+               typePass        : 'Password'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Hidden Field Properties',\r
+               name    : 'Name',\r
+               value   : 'Value'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Image Properties',\r
+               titleButton     : 'Image Button Properties',\r
+               menu            : 'Image Properties',\r
+               infoTab : 'Image Info',\r
+               btnUpload       : 'Send it to the Server',\r
+               url             : 'URL',\r
+               upload  : 'Upload',\r
+               alt             : 'Alternative Text',\r
+               width           : 'Width',\r
+               height  : 'Height',\r
+               lockRatio       : 'Lock Ratio',\r
+               resetSize       : 'Reset Size',\r
+               border  : 'Border',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Align',\r
+               alignLeft       : 'Left',\r
+               alignAbsBottom: 'Abs Bottom',\r
+               alignAbsMiddle: 'Abs Middle',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Bottom',\r
+               alignMiddle     : 'Middle',\r
+               alignRight      : 'Right',\r
+               alignTextTop    : 'Text Top',\r
+               alignTop        : 'Top',\r
+               preview : 'Preview',\r
+               alertUrl        : 'Please type the image URL',\r
+               linkTab : 'Link',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?',\r
+               img2Button      : 'Do you want to transform the selected image on a image button?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash Properties',\r
+               propertiesTab   : 'Properties',\r
+               title           : 'Flash Properties',\r
+               chkPlay         : 'Auto Play',\r
+               chkLoop         : 'Loop',\r
+               chkMenu         : 'Enable Flash Menu',\r
+               chkFull         : 'Allow Fullscreen',\r
+               scale           : 'Scale',\r
+               scaleAll                : 'Show all',\r
+               scaleNoBorder   : 'No Border',\r
+               scaleFit                : 'Exact Fit',\r
+               access                  : 'Script Access',\r
+               accessAlways    : 'Always',\r
+               accessSameDomain        : 'Same domain',\r
+               accessNever     : 'Never',\r
+               align           : 'Align',\r
+               alignLeft       : 'Left',\r
+               alignAbsBottom: 'Abs Bottom',\r
+               alignAbsMiddle: 'Abs Middle',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Bottom',\r
+               alignMiddle     : 'Middle',\r
+               alignRight      : 'Right',\r
+               alignTextTop    : 'Text Top',\r
+               alignTop        : 'Top',\r
+               quality         : 'Quality',\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode',\r
+               flashvars       : 'Variables for Flash',\r
+               bgcolor : 'Background colour',\r
+               width   : 'Width',\r
+               height  : 'Height',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'URL must not be empty.',\r
+               validateWidth : 'Width must be a number.',\r
+               validateHeight : 'Height must be a number.',\r
+               validateHSpace : 'HSpace must be a number.',\r
+               validateVSpace : 'VSpace must be a number.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Check Spelling',\r
+               title                   : 'Spell Check',\r
+               notAvailable    : 'Sorry, but service is unavailable now.',\r
+               errorLoading    : 'Error loading application service host: %s.',\r
+               notInDic                : 'Not in dictionary',\r
+               changeTo                : 'Change to',\r
+               btnIgnore               : 'Ignore',\r
+               btnIgnoreAll    : 'Ignore All',\r
+               btnReplace              : 'Replace',\r
+               btnReplaceAll   : 'Replace All',\r
+               btnUndo                 : 'Undo',\r
+               noSuggestions   : '- No suggestions -',\r
+               progress                : 'Spell check in progress...',\r
+               noMispell               : 'Spell check complete: No misspellings found',\r
+               noChanges               : 'Spell check complete: No words changed',\r
+               oneChange               : 'Spell check complete: One word changed',\r
+               manyChanges             : 'Spell check complete: %1 words changed',\r
+               ieSpellDownload : 'Spell checker not installed. Do you want to download it now?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Insert a Smiley'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element'\r
+       },\r
+\r
+       numberedlist : 'Insert/Remove Numbered List',\r
+       bulletedlist : 'Insert/Remove Bulleted List',\r
+       indent : 'Increase Indent',\r
+       outdent : 'Decrease Indent',\r
+\r
+       justify :\r
+       {\r
+               left : 'Left Justify',\r
+               center : 'Centre Justify',\r
+               right : 'Right Justify',\r
+               block : 'Block Justify'\r
+       },\r
+\r
+       blockquote : 'Blockquote',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Paste',\r
+               cutError        : 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).',\r
+               copyError       : 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).',\r
+               pasteMsg        : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Paste from Word',\r
+               title : 'Paste from Word',\r
+               advice : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.',\r
+               ignoreFontFace : 'Ignore Font Face definitions',\r
+               removeStyle : 'Remove Styles definitions'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Paste as plain text',\r
+               title : 'Paste as Plain Text'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Templates',\r
+               title : 'Content Templates',\r
+               insertOption: 'Replace actual contents',\r
+               selectPromptMsg: 'Please select the template to open in the editor',\r
+               emptyListMsg : '(No templates defined)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Styles',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles',\r
+               panelTitle2 : 'Inline Styles',\r
+               panelTitle3 : 'Object Styles'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Paragraph Format',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatted',\r
+               tag_address : 'Address',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Font',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Font Name',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Size',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Font Size',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Text Colour',\r
+               bgColorTitle : 'Background Colour',\r
+               auto : 'Automatic',\r
+               more : 'More Colours...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor',\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:',\r
+               copy : 'Copyright &copy; $1. All rights reserved.'\r
+       },\r
+\r
+       maximize : 'Maximize',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/en.js b/_source/lang/en.js
new file mode 100644 (file)
index 0000000..5941249
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the English\r
+ *             language. This is the base file for all translations.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['en'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Source',\r
+       newPage                 : 'New Page',\r
+       save                    : 'Save',\r
+       preview                 : 'Preview',\r
+       cut                             : 'Cut',\r
+       copy                    : 'Copy',\r
+       paste                   : 'Paste',\r
+       print                   : 'Print',\r
+       underline               : 'Underline',\r
+       bold                    : 'Bold',\r
+       italic                  : 'Italic',\r
+       selectAll               : 'Select All',\r
+       removeFormat    : 'Remove Format',\r
+       strike                  : 'Strike Through',\r
+       subscript               : 'Subscript',\r
+       superscript             : 'Superscript',\r
+       horizontalrule  : 'Insert Horizontal Line',\r
+       pagebreak               : 'Insert Page Break for Printing',\r
+       unlink                  : 'Unlink',\r
+       undo                    : 'Undo',\r
+       redo                    : 'Redo',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Browse Server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocol',\r
+               upload                  : 'Upload',\r
+               uploadSubmit    : 'Send it to the Server',\r
+               image                   : 'Image',\r
+               flash                   : 'Flash',\r
+               form                    : 'Form',\r
+               checkbox                : 'Checkbox',\r
+               radio           : 'Radio Button',\r
+               textField               : 'Text Field',\r
+               textarea                : 'Textarea',\r
+               hiddenField             : 'Hidden Field',\r
+               button                  : 'Button',\r
+               select  : 'Selection Field',\r
+               imageButton             : 'Image Button',\r
+               notSet                  : '<not set>',\r
+               id                              : 'Id',\r
+               name                    : 'Name',\r
+               langDir                 : 'Language Direction',\r
+               langDirLtr              : 'Left to Right (LTR)',\r
+               langDirRtl              : 'Right to Left (RTL)',\r
+               langCode                : 'Language Code',\r
+               longDescr               : 'Long Description URL',\r
+               cssClass                : 'Stylesheet Classes',\r
+               advisoryTitle   : 'Advisory Title',\r
+               cssStyle                : 'Style',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Cancel',\r
+               generalTab              : 'General',\r
+               advancedTab             : 'Advanced',\r
+               validateNumberFailed    : 'This value is not a number.',\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Insert Special Character',\r
+               title           : 'Select Special Character'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Link',\r
+               menu            : 'Edit Link',\r
+               title           : 'Link',\r
+               info            : 'Link Info',\r
+               target          : 'Target',\r
+               upload          : 'Upload',\r
+               advanced        : 'Advanced',\r
+               type            : 'Link Type',\r
+               toAnchor        : 'Link to anchor in the text',\r
+               toEmail         : 'E-mail',\r
+               target          : 'Target',\r
+               targetNotSet    : '<not set>',\r
+               targetFrame     : '<frame>',\r
+               targetPopup     : '<popup window>',\r
+               targetNew       : 'New Window (_blank)',\r
+               targetTop       : 'Topmost Window (_top)',\r
+               targetSelf      : 'Same Window (_self)',\r
+               targetParent    : 'Parent Window (_parent)',\r
+               targetFrameName : 'Target Frame Name',\r
+               targetPopupName : 'Popup Window Name',\r
+               popupFeatures   : 'Popup Window Features',\r
+               popupResizable  : 'Resizable',\r
+               popupStatusBar  : 'Status Bar',\r
+               popupLocationBar        : 'Location Bar',\r
+               popupToolbar    : 'Toolbar',\r
+               popupMenuBar    : 'Menu Bar',\r
+               popupFullScreen : 'Full Screen (IE)',\r
+               popupScrollBars : 'Scroll Bars',\r
+               popupDependent  : 'Dependent (Netscape)',\r
+               popupWidth              : 'Width',\r
+               popupLeft               : 'Left Position',\r
+               popupHeight             : 'Height',\r
+               popupTop                : 'Top Position',\r
+               id                              : 'Id',\r
+               langDir                 : 'Language Direction',\r
+               langDirNotSet   : '<not set>',\r
+               langDirLTR              : 'Left to Right (LTR)',\r
+               langDirRTL              : 'Right to Left (RTL)',\r
+               acccessKey              : 'Access Key',\r
+               name                    : 'Name',\r
+               langCode                : 'Language Code',\r
+               tabIndex                : 'Tab Index',\r
+               advisoryTitle   : 'Advisory Title',\r
+               advisoryContentType     : 'Advisory Content Type',\r
+               cssClasses              : 'Stylesheet Classes',\r
+               charset                 : 'Linked Resource Charset',\r
+               styles                  : 'Style',\r
+               selectAnchor    : 'Select an Anchor',\r
+               anchorName              : 'By Anchor Name',\r
+               anchorId                : 'By Element Id',\r
+               emailAddress    : 'E-Mail Address',\r
+               emailSubject    : 'Message Subject',\r
+               emailBody               : 'Message Body',\r
+               noAnchors               : '(No anchors available in the document)',\r
+               noUrl                   : 'Please type the link URL',\r
+               noEmail                 : 'Please type the e-mail address'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Anchor',\r
+               menu            : 'Edit Anchor',\r
+               title           : 'Anchor Properties',\r
+               name            : 'Anchor Name',\r
+               errorName       : 'Please type the anchor name'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace',\r
+               find                            : 'Find',\r
+               replace                         : 'Replace',\r
+               findWhat                        : 'Find what:',\r
+               replaceWith                     : 'Replace with:',\r
+               notFoundMsg                     : 'The specified text was not found.',\r
+               matchCase                       : 'Match case',\r
+               matchWord                       : 'Match whole word',\r
+               matchCyclic                     : 'Match cyclic',\r
+               replaceAll                      : 'Replace All',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Table',\r
+               title           : 'Table Properties',\r
+               menu            : 'Table Properties',\r
+               deleteTable     : 'Delete Table',\r
+               rows            : 'Rows',\r
+               columns         : 'Columns',\r
+               border          : 'Border size',\r
+               align           : 'Alignment',\r
+               alignNotSet     : '<Not set>',\r
+               alignLeft       : 'Left',\r
+               alignCenter     : 'Center',\r
+               alignRight      : 'Right',\r
+               width           : 'Width',\r
+               widthPx         : 'pixels',\r
+               widthPc         : 'percent',\r
+               height          : 'Height',\r
+               cellSpace       : 'Cell spacing',\r
+               cellPad         : 'Cell padding',\r
+               caption         : 'Caption',\r
+               summary         : 'Summary',\r
+               headers         : 'Headers',\r
+               headersNone             : 'None',\r
+               headersColumn   : 'First column',\r
+               headersRow              : 'First Row',\r
+               headersBoth             : 'Both',\r
+               invalidRows             : 'Number of rows must be a number greater than 0.',\r
+               invalidCols             : 'Number of columns must be a number greater than 0.',\r
+               invalidBorder   : 'Border size must be a number.',\r
+               invalidWidth    : 'Table width must be a number.',\r
+               invalidHeight   : 'Table height must be a number.',\r
+               invalidCellSpacing      : 'Cell spacing must be a number.',\r
+               invalidCellPadding      : 'Cell padding must be a number.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell',\r
+                       insertBefore    : 'Insert Cell Before',\r
+                       insertAfter             : 'Insert Cell After',\r
+                       deleteCell              : 'Delete Cells',\r
+                       merge                   : 'Merge Cells',\r
+                       mergeRight              : 'Merge Right',\r
+                       mergeDown               : 'Merge Down',\r
+                       splitHorizontal : 'Split Cell Horizontally',\r
+                       splitVertical   : 'Split Cell Vertically',\r
+                       title                   : 'Cell Properties',\r
+                       cellType                : 'Cell Type',\r
+                       rowSpan                 : 'Rows Span',\r
+                       colSpan                 : 'Columns Span',\r
+                       wordWrap                : 'Word Wrap',\r
+                       hAlign                  : 'Horizontal Alignment',\r
+                       vAlign                  : 'Vertical Alignment',\r
+                       alignTop                : 'Top',\r
+                       alignMiddle             : 'Middle',\r
+                       alignBottom             : 'Bottom',\r
+                       alignBaseline   : 'Baseline',\r
+                       bgColor                 : 'Background Color',\r
+                       borderColor             : 'Border Color',\r
+                       data                    : 'Data',\r
+                       header                  : 'Header',\r
+                       yes                             : 'Yes',\r
+                       no                              : 'No',\r
+                       invalidWidth    : 'Cell width must be a number.',\r
+                       invalidHeight   : 'Cell height must be a number.',\r
+                       invalidRowSpan  : 'Rows span must be a whole number.',\r
+                       invalidColSpan  : 'Columns span must be a whole number.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Row',\r
+                       insertBefore    : 'Insert Row Before',\r
+                       insertAfter             : 'Insert Row After',\r
+                       deleteRow               : 'Delete Rows'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Column',\r
+                       insertBefore    : 'Insert Column Before',\r
+                       insertAfter             : 'Insert Column After',\r
+                       deleteColumn    : 'Delete Columns'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Button Properties',\r
+               text            : 'Text (Value)',\r
+               type            : 'Type',\r
+               typeBtn         : 'Button',\r
+               typeSbm         : 'Submit',\r
+               typeRst         : 'Reset'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Checkbox Properties',\r
+               radioTitle      : 'Radio Button Properties',\r
+               value           : 'Value',\r
+               selected        : 'Selected'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Form Properties',\r
+               menu            : 'Form Properties',\r
+               action          : 'Action',\r
+               method          : 'Method',\r
+               encoding        : 'Encoding',\r
+               target          : 'Target',\r
+               targetNotSet    : '<not set>',\r
+               targetNew       : 'New Window (_blank)',\r
+               targetTop       : 'Topmost Window (_top)',\r
+               targetSelf      : 'Same Window (_self)',\r
+               targetParent    : 'Parent Window (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Selection Field Properties',\r
+               selectInfo      : 'Select Info',\r
+               opAvail         : 'Available Options',\r
+               value           : 'Value',\r
+               size            : 'Size',\r
+               lines           : 'lines',\r
+               chkMulti        : 'Allow multiple selections',\r
+               opText          : 'Text',\r
+               opValue         : 'Value',\r
+               btnAdd          : 'Add',\r
+               btnModify       : 'Modify',\r
+               btnUp           : 'Up',\r
+               btnDown         : 'Down',\r
+               btnSetValue : 'Set as selected value',\r
+               btnDelete       : 'Delete'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Textarea Properties',\r
+               cols            : 'Columns',\r
+               rows            : 'Rows'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Text Field Properties',\r
+               name            : 'Name',\r
+               value           : 'Value',\r
+               charWidth       : 'Character Width',\r
+               maxChars        : 'Maximum Characters',\r
+               type            : 'Type',\r
+               typeText        : 'Text',\r
+               typePass        : 'Password'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Hidden Field Properties',\r
+               name    : 'Name',\r
+               value   : 'Value'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Image Properties',\r
+               titleButton     : 'Image Button Properties',\r
+               menu            : 'Image Properties',\r
+               infoTab : 'Image Info',\r
+               btnUpload       : 'Send it to the Server',\r
+               url             : 'URL',\r
+               upload  : 'Upload',\r
+               alt             : 'Alternative Text',\r
+               width           : 'Width',\r
+               height  : 'Height',\r
+               lockRatio       : 'Lock Ratio',\r
+               resetSize       : 'Reset Size',\r
+               border  : 'Border',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Align',\r
+               alignLeft       : 'Left',\r
+               alignAbsBottom: 'Abs Bottom',\r
+               alignAbsMiddle: 'Abs Middle',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Bottom',\r
+               alignMiddle     : 'Middle',\r
+               alignRight      : 'Right',\r
+               alignTextTop    : 'Text Top',\r
+               alignTop        : 'Top',\r
+               preview : 'Preview',\r
+               alertUrl        : 'Please type the image URL',\r
+               linkTab : 'Link',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?',\r
+               img2Button      : 'Do you want to transform the selected image on a image button?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash Properties',\r
+               propertiesTab   : 'Properties',\r
+               title           : 'Flash Properties',\r
+               chkPlay         : 'Auto Play',\r
+               chkLoop         : 'Loop',\r
+               chkMenu         : 'Enable Flash Menu',\r
+               chkFull         : 'Allow Fullscreen',\r
+               scale           : 'Scale',\r
+               scaleAll                : 'Show all',\r
+               scaleNoBorder   : 'No Border',\r
+               scaleFit                : 'Exact Fit',\r
+               access                  : 'Script Access',\r
+               accessAlways    : 'Always',\r
+               accessSameDomain        : 'Same domain',\r
+               accessNever     : 'Never',\r
+               align           : 'Align',\r
+               alignLeft       : 'Left',\r
+               alignAbsBottom: 'Abs Bottom',\r
+               alignAbsMiddle: 'Abs Middle',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Bottom',\r
+               alignMiddle     : 'Middle',\r
+               alignRight      : 'Right',\r
+               alignTextTop    : 'Text Top',\r
+               alignTop        : 'Top',\r
+               quality         : 'Quality',\r
+               qualityBest              : 'Best',\r
+               qualityHigh              : 'High',\r
+               qualityAutoHigh  : 'Auto High',\r
+               qualityMedium    : 'Medium',\r
+               qualityAutoLow   : 'Auto Low',\r
+               qualityLow               : 'Low',\r
+               windowModeWindow         : 'Window',\r
+               windowModeOpaque         : 'Opaque',\r
+               windowModeTransparent    : 'Transparent',\r
+               windowMode      : 'Window mode',\r
+               flashvars       : 'Variables for Flash',\r
+               bgcolor : 'Background color',\r
+               width   : 'Width',\r
+               height  : 'Height',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'URL must not be empty.',\r
+               validateWidth : 'Width must be a number.',\r
+               validateHeight : 'Height must be a number.',\r
+               validateHSpace : 'HSpace must be a number.',\r
+               validateVSpace : 'VSpace must be a number.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Check Spelling',\r
+               title                   : 'Spell Check',\r
+               notAvailable    : 'Sorry, but service is unavailable now.',\r
+               errorLoading    : 'Error loading application service host: %s.',\r
+               notInDic                : 'Not in dictionary',\r
+               changeTo                : 'Change to',\r
+               btnIgnore               : 'Ignore',\r
+               btnIgnoreAll    : 'Ignore All',\r
+               btnReplace              : 'Replace',\r
+               btnReplaceAll   : 'Replace All',\r
+               btnUndo                 : 'Undo',\r
+               noSuggestions   : '- No suggestions -',\r
+               progress                : 'Spell check in progress...',\r
+               noMispell               : 'Spell check complete: No misspellings found',\r
+               noChanges               : 'Spell check complete: No words changed',\r
+               oneChange               : 'Spell check complete: One word changed',\r
+               manyChanges             : 'Spell check complete: %1 words changed',\r
+               ieSpellDownload : 'Spell checker not installed. Do you want to download it now?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Insert a Smiley'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element'\r
+       },\r
+\r
+       numberedlist : 'Insert/Remove Numbered List',\r
+       bulletedlist : 'Insert/Remove Bulleted List',\r
+       indent : 'Increase Indent',\r
+       outdent : 'Decrease Indent',\r
+\r
+       justify :\r
+       {\r
+               left : 'Left Justify',\r
+               center : 'Center Justify',\r
+               right : 'Right Justify',\r
+               block : 'Block Justify'\r
+       },\r
+\r
+       blockquote : 'Blockquote',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Paste',\r
+               cutError        : 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).',\r
+               copyError       : 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).',\r
+               pasteMsg        : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Paste from Word',\r
+               title : 'Paste from Word',\r
+               advice : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.',\r
+               ignoreFontFace : 'Ignore Font Face definitions',\r
+               removeStyle : 'Remove Styles definitions'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Paste as plain text',\r
+               title : 'Paste as Plain Text'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Templates',\r
+               title : 'Content Templates',\r
+               insertOption: 'Replace actual contents',\r
+               selectPromptMsg: 'Please select the template to open in the editor',\r
+               emptyListMsg : '(No templates defined)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Styles',\r
+               voiceLabel : 'Styles',\r
+               panelVoiceLabel : 'Select a style',\r
+               panelTitle1 : 'Block Styles',\r
+               panelTitle2 : 'Inline Styles',\r
+               panelTitle3 : 'Object Styles'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format',\r
+               panelTitle : 'Paragraph Format',\r
+               panelVoiceLabel : 'Select a paragraph format',\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatted',\r
+               tag_address : 'Address',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Font',\r
+               voiceLabel : 'Font',\r
+               panelTitle : 'Font Name',\r
+               panelVoiceLabel : 'Select a font'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Size',\r
+               voiceLabel : 'Font Size',\r
+               panelTitle : 'Font Size',\r
+               panelVoiceLabel : 'Select a font size'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Text Color',\r
+               bgColorTitle : 'Background Color',\r
+               auto : 'Automatic',\r
+               more : 'More Colors...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type',\r
+               enable : 'Enable SCAYT',\r
+               disable : 'Disable SCAYT',\r
+               about : 'About SCAYT',\r
+               toggle : 'Toggle SCAYT',\r
+               options : 'Options',\r
+               langs : 'Languages',\r
+               moreSuggestions : 'More suggestions',\r
+               ignore : 'Ignore',\r
+               ignoreAll : 'Ignore All',\r
+               addWord : 'Add Word',\r
+               emptyDic : 'Dictionary name should not be empty.',\r
+               optionsTab : 'Options',\r
+               languagesTab : 'Languages',\r
+               dictionariesTab : 'Dictionaries',\r
+               aboutTab : 'About'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor',\r
+               dlgTitle : 'About CKEditor',\r
+               moreInfo : 'For licensing information please visit our web site:',\r
+               copy : 'Copyright &copy; $1. All rights reserved.'\r
+       },\r
+\r
+       maximize : 'Maximize',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor',\r
+               flash : 'Flash Animation',\r
+               div : 'Page Break',\r
+               unknown : 'Unknown Object'\r
+       },\r
+\r
+       resize : 'Drag to resize'\r
+};\r
diff --git a/_source/lang/eo.js b/_source/lang/eo.js
new file mode 100644 (file)
index 0000000..ddcff12
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Esperanto language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['eo'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Fonto',\r
+       newPage                 : 'Nova Paĝo',\r
+       save                    : 'Sekurigi',\r
+       preview                 : 'Vidigi Aspekton',\r
+       cut                             : 'Eltondi',\r
+       copy                    : 'Kopii',\r
+       paste                   : 'Interglui',\r
+       print                   : 'Presi',\r
+       underline               : 'Substreko',\r
+       bold                    : 'Grasa',\r
+       italic                  : 'Kursiva',\r
+       selectAll               : 'Elekti ĉion',\r
+       removeFormat    : 'Forigi Formaton',\r
+       strike                  : 'Trastreko',\r
+       subscript               : 'Subskribo',\r
+       superscript             : 'Superskribo',\r
+       horizontalrule  : 'Enmeti Horizonta Linio',\r
+       pagebreak               : 'Insert Page Break for Printing', // MISSING\r
+       unlink                  : 'Forigi Ligilon',\r
+       undo                    : 'Malfari',\r
+       redo                    : 'Refari',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Foliumi en la Servilo',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokolo',\r
+               upload                  : 'Alŝuti',\r
+               uploadSubmit    : 'Sendu al Servilo',\r
+               image                   : 'Bildo',\r
+               flash                   : 'Flash', // MISSING\r
+               form                    : 'Formularo',\r
+               checkbox                : 'Markobutono',\r
+               radio           : 'Radiobutono',\r
+               textField               : 'Teksta kampo',\r
+               textarea                : 'Teksta Areo',\r
+               hiddenField             : 'Kaŝita Kampo',\r
+               button                  : 'Butono',\r
+               select  : 'Elekta Kampo',\r
+               imageButton             : 'Bildbutono',\r
+               notSet                  : '<Defaŭlta>',\r
+               id                              : 'Id',\r
+               name                    : 'Nomo',\r
+               langDir                 : 'Skribdirekto',\r
+               langDirLtr              : 'De maldekstro dekstren (LTR)',\r
+               langDirRtl              : 'De dekstro maldekstren (RTL)',\r
+               langCode                : 'Lingva Kodo',\r
+               longDescr               : 'URL de Longa Priskribo',\r
+               cssClass                : 'Klasoj de Stilfolioj',\r
+               advisoryTitle   : 'Indika Titolo',\r
+               cssStyle                : 'Stilo',\r
+               ok                              : 'Akcepti',\r
+               cancel                  : 'Rezigni',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Speciala',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Enmeti Specialan Signon',\r
+               title           : 'Enmeti Specialan Signon'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Enmeti/Ŝanĝi Ligilon',\r
+               menu            : 'Modifier Ligilon',\r
+               title           : 'Ligilo',\r
+               info            : 'Informoj pri la Ligilo',\r
+               target          : 'Celo',\r
+               upload          : 'Alŝuti',\r
+               advanced        : 'Speciala',\r
+               type            : 'Tipo de Ligilo',\r
+               toAnchor        : 'Ankri en tiu ĉi paĝo',\r
+               toEmail         : 'Retpoŝto',\r
+               target          : 'Celo',\r
+               targetNotSet    : '<Defaŭlta>',\r
+               targetFrame     : '<kadro>',\r
+               targetPopup     : '<ŝprucfenestro>',\r
+               targetNew       : 'Nova Fenestro (_blank)',\r
+               targetTop       : 'Plej Supra Fenestro (_top)',\r
+               targetSelf      : 'Sama Fenestro (_self)',\r
+               targetParent    : 'Gepatra Fenestro (_parent)',\r
+               targetFrameName : 'Nomo de Kadro',\r
+               targetPopupName : 'Nomo de Ŝprucfenestro',\r
+               popupFeatures   : 'Atributoj de la Ŝprucfenestro',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Statobreto',\r
+               popupLocationBar        : 'Adresobreto',\r
+               popupToolbar    : 'Ilobreto',\r
+               popupMenuBar    : 'Menubreto',\r
+               popupFullScreen : 'Tutekrane (IE)',\r
+               popupScrollBars : 'Rulumlisteloj',\r
+               popupDependent  : 'Dependa (Netscape)',\r
+               popupWidth              : 'Larĝo',\r
+               popupLeft               : 'Pozicio de Maldekstro',\r
+               popupHeight             : 'Alto',\r
+               popupTop                : 'Pozicio de Supro',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Skribdirekto',\r
+               langDirNotSet   : '<Defaŭlta>',\r
+               langDirLTR              : 'De maldekstro dekstren (LTR)',\r
+               langDirRTL              : 'De dekstro maldekstren (RTL)',\r
+               acccessKey              : 'Fulmoklavo',\r
+               name                    : 'Nomo',\r
+               langCode                : 'Skribdirekto',\r
+               tabIndex                : 'Taba Ordo',\r
+               advisoryTitle   : 'Indika Titolo',\r
+               advisoryContentType     : 'Indika Enhavotipo',\r
+               cssClasses              : 'Klasoj de Stilfolioj',\r
+               charset                 : 'Signaro de la Ligita Rimedo',\r
+               styles                  : 'Stilo',\r
+               selectAnchor    : 'Elekti Ankron',\r
+               anchorName              : 'Per Ankronomo',\r
+               anchorId                : 'Per Elementidentigilo',\r
+               emailAddress    : 'Retadreso',\r
+               emailSubject    : 'Temlinio',\r
+               emailBody               : 'Mesaĝa korpo',\r
+               noAnchors               : '<Ne disponeblas ankroj en la dokumento>',\r
+               noUrl                   : 'Bonvolu entajpi la URL-on',\r
+               noEmail                 : 'Bonvolu entajpi la retadreson'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Enmeti/Ŝanĝi Ankron',\r
+               menu            : 'Ankraj Atributoj',\r
+               title           : 'Ankraj Atributoj',\r
+               name            : 'Ankra Nomo',\r
+               errorName       : 'Bv tajpi la ankran nomon'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'Serĉi',\r
+               replace                         : 'Anstataŭigi',\r
+               findWhat                        : 'Serĉi:',\r
+               replaceWith                     : 'Anstataŭigi per:',\r
+               notFoundMsg                     : 'La celteksto ne estas trovita.',\r
+               matchCase                       : 'Kongruigi Usklecon',\r
+               matchWord                       : 'Tuta Vorto',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Anstataŭigi Ĉiun',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabelo',\r
+               title           : 'Atributoj de Tabelo',\r
+               menu            : 'Atributoj de Tabelo',\r
+               deleteTable     : 'Delete Table', // MISSING\r
+               rows            : 'Linioj',\r
+               columns         : 'Kolumnoj',\r
+               border          : 'Bordero',\r
+               align           : 'Ĝisrandigo',\r
+               alignNotSet     : '<Defaŭlte>',\r
+               alignLeft       : 'Maldekstre',\r
+               alignCenter     : 'Centre',\r
+               alignRight      : 'Dekstre',\r
+               width           : 'Larĝo',\r
+               widthPx         : 'Bitbilderoj',\r
+               widthPc         : 'elcentoj',\r
+               height          : 'Alto',\r
+               cellSpace       : 'Interspacigo de Ĉeloj',\r
+               cellPad         : 'Ĉirkaŭenhava Plenigado',\r
+               caption         : 'Titolo',\r
+               summary         : 'Summary', // MISSING\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell', // MISSING\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'Forigi Ĉelojn',\r
+                       merge                   : 'Kunfandi Ĉelojn',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Row', // MISSING\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'Forigi Liniojn'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Column', // MISSING\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'Forigi Kolumnojn'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Butonaj Atributoj',\r
+               text            : 'Teksto (Valoro)',\r
+               type            : 'Tipo',\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Markobutonaj Atributoj',\r
+               radioTitle      : 'Radiobutonaj Atributoj',\r
+               value           : 'Valoro',\r
+               selected        : 'Elektita'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Formularaj Atributoj',\r
+               menu            : 'Formularaj Atributoj',\r
+               action          : 'Ago',\r
+               method          : 'Metodo',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Celo',\r
+               targetNotSet    : '<Defaŭlta>',\r
+               targetNew       : 'Nova Fenestro (_blank)',\r
+               targetTop       : 'Plej Supra Fenestro (_top)',\r
+               targetSelf      : 'Sama Fenestro (_self)',\r
+               targetParent    : 'Gepatra Fenestro (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Atributoj de Elekta Kampo',\r
+               selectInfo      : 'Select Info', // MISSING\r
+               opAvail         : 'Elektoj Disponeblaj',\r
+               value           : 'Valoro',\r
+               size            : 'Grando',\r
+               lines           : 'Linioj',\r
+               chkMulti        : 'Permesi Plurajn Elektojn',\r
+               opText          : 'Teksto',\r
+               opValue         : 'Valoro',\r
+               btnAdd          : 'Aldoni',\r
+               btnModify       : 'Modifi',\r
+               btnUp           : 'Supren',\r
+               btnDown         : 'Malsupren',\r
+               btnSetValue : 'Agordi kiel Elektitan Valoron',\r
+               btnDelete       : 'Forigi'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Atributoj de Teksta Areo',\r
+               cols            : 'Kolumnoj',\r
+               rows            : 'Vicoj'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Atributoj de Teksta Kampo',\r
+               name            : 'Nomo',\r
+               value           : 'Valoro',\r
+               charWidth       : 'Signolarĝo',\r
+               maxChars        : 'Maksimuma Nombro da Signoj',\r
+               type            : 'Tipo',\r
+               typeText        : 'Teksto',\r
+               typePass        : 'Pasvorto'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Atributoj de Kaŝita Kampo',\r
+               name    : 'Nomo',\r
+               value   : 'Valoro'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Atributoj de Bildo',\r
+               titleButton     : 'Bildbutonaj Atributoj',\r
+               menu            : 'Atributoj de Bildo',\r
+               infoTab : 'Informoj pri Bildo',\r
+               btnUpload       : 'Sendu al Servilo',\r
+               url             : 'URL',\r
+               upload  : 'Alŝuti',\r
+               alt             : 'Anstataŭiga Teksto',\r
+               width           : 'Larĝo',\r
+               height  : 'Alto',\r
+               lockRatio       : 'Konservi Proporcion',\r
+               resetSize       : 'Origina Grando',\r
+               border  : 'Bordero',\r
+               hSpace  : 'HSpaco',\r
+               vSpace  : 'VSpaco',\r
+               align           : 'Ĝisrandigo',\r
+               alignLeft       : 'Maldekstre',\r
+               alignAbsBottom: 'Abs Malsupre',\r
+               alignAbsMiddle: 'Abs Centre',\r
+               alignBaseline   : 'Je Malsupro de Teksto',\r
+               alignBottom     : 'Malsupre',\r
+               alignMiddle     : 'Centre',\r
+               alignRight      : 'Dekstre',\r
+               alignTextTop    : 'Je Supro de Teksto',\r
+               alignTop        : 'Supre',\r
+               preview : 'Vidigi Aspekton',\r
+               alertUrl        : 'Bonvolu tajpi la URL de la bildo',\r
+               linkTab : 'Link', // MISSING\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash Properties', // MISSING\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash Properties', // MISSING\r
+               chkPlay         : 'Auto Play', // MISSING\r
+               chkLoop         : 'Loop', // MISSING\r
+               chkMenu         : 'Enable Flash Menu', // MISSING\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Scale', // MISSING\r
+               scaleAll                : 'Show all', // MISSING\r
+               scaleNoBorder   : 'No Border', // MISSING\r
+               scaleFit                : 'Exact Fit', // MISSING\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Ĝisrandigo',\r
+               alignLeft       : 'Maldekstre',\r
+               alignAbsBottom: 'Abs Malsupre',\r
+               alignAbsMiddle: 'Abs Centre',\r
+               alignBaseline   : 'Je Malsupro de Teksto',\r
+               alignBottom     : 'Malsupre',\r
+               alignMiddle     : 'Centre',\r
+               alignRight      : 'Dekstre',\r
+               alignTextTop    : 'Je Supro de Teksto',\r
+               alignTop        : 'Supre',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Fona Koloro',\r
+               width   : 'Larĝo',\r
+               height  : 'Alto',\r
+               hSpace  : 'HSpaco',\r
+               vSpace  : 'VSpaco',\r
+               validateSrc : 'Bonvolu entajpi la URL-on',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Literumada Kontrolilo',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Ne trovita en la vortaro',\r
+               changeTo                : 'Ŝanĝi al',\r
+               btnIgnore               : 'Malatenti',\r
+               btnIgnoreAll    : 'Malatenti Ĉiun',\r
+               btnReplace              : 'Anstataŭigi',\r
+               btnReplaceAll   : 'Anstataŭigi Ĉiun',\r
+               btnUndo                 : 'Malfari',\r
+               noSuggestions   : '- Neniu propono -',\r
+               progress                : 'Literumkontrolado daŭras...',\r
+               noMispell               : 'Literumkontrolado finita: neniu fuŝo trovita',\r
+               noChanges               : 'Literumkontrolado finita: neniu vorto ŝanĝita',\r
+               oneChange               : 'Literumkontrolado finita: unu vorto ŝanĝita',\r
+               manyChanges             : 'Literumkontrolado finita: %1 vortoj ŝanĝitaj',\r
+               ieSpellDownload : 'Literumada Kontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Mienvinjeto',\r
+               title   : 'Enmeti Mienvinjeton'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Numera Listo',\r
+       bulletedlist : 'Bula Listo',\r
+       indent : 'Pligrandigi Krommarĝenon',\r
+       outdent : 'Malpligrandigi Krommarĝenon',\r
+\r
+       justify :\r
+       {\r
+               left : 'Maldekstrigi',\r
+               center : 'Centrigi',\r
+               right : 'Dekstrigi',\r
+               block : 'Ĝisrandigi Ambaŭflanke'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Interglui',\r
+               cutError        : 'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-X).',\r
+               copyError       : 'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-C).',\r
+               pasteMsg        : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK', // MISSING\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Interglui el Word',\r
+               title : 'Interglui el Word',\r
+               advice : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.', // MISSING\r
+               ignoreFontFace : 'Ignore Font Face definitions', // MISSING\r
+               removeStyle : 'Remove Styles definitions' // MISSING\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Interglui kiel Tekston',\r
+               title : 'Interglui kiel Tekston'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Templates', // MISSING\r
+               title : 'Content Templates', // MISSING\r
+               insertOption: 'Replace actual contents', // MISSING\r
+               selectPromptMsg: 'Please select the template to open in the editor', // MISSING\r
+               emptyListMsg : '(No templates defined)' // MISSING\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stilo',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formato',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Formato',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normala',\r
+               tag_pre : 'Formatita',\r
+               tag_address : 'Adreso',\r
+               tag_h1 : 'Titolo 1',\r
+               tag_h2 : 'Titolo 2',\r
+               tag_h3 : 'Titolo 3',\r
+               tag_h4 : 'Titolo 4',\r
+               tag_h5 : 'Titolo 5',\r
+               tag_h6 : 'Titolo 6',\r
+               tag_div : 'Paragrafo (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Tiparo',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Tiparo',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Grando',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Grando',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Teksta Koloro',\r
+               bgColorTitle : 'Fona Koloro',\r
+               auto : 'Aŭtomata',\r
+               more : 'Pli da Koloroj...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/es.js b/_source/lang/es.js
new file mode 100644 (file)
index 0000000..9993723
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Spanish language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['es'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Editor de texto enriquecido, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Fuente HTML',\r
+       newPage                 : 'Nueva Página',\r
+       save                    : 'Guardar',\r
+       preview                 : 'Vista Previa',\r
+       cut                             : 'Cortar',\r
+       copy                    : 'Copiar',\r
+       paste                   : 'Pegar',\r
+       print                   : 'Imprimir',\r
+       underline               : 'Subrayado',\r
+       bold                    : 'Negrita',\r
+       italic                  : 'Cursiva',\r
+       selectAll               : 'Seleccionar Todo',\r
+       removeFormat    : 'Eliminar Formato',\r
+       strike                  : 'Tachado',\r
+       subscript               : 'Subíndice',\r
+       superscript             : 'Superíndice',\r
+       horizontalrule  : 'Insertar Línea Horizontal',\r
+       pagebreak               : 'Insertar Salto de Página',\r
+       unlink                  : 'Eliminar Vínculo',\r
+       undo                    : 'Deshacer',\r
+       redo                    : 'Rehacer',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Ver Servidor',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocolo',\r
+               upload                  : 'Cargar',\r
+               uploadSubmit    : 'Enviar al Servidor',\r
+               image                   : 'Imagen',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formulario',\r
+               checkbox                : 'Casilla de Verificación',\r
+               radio           : 'Botones de Radio',\r
+               textField               : 'Campo de Texto',\r
+               textarea                : 'Area de Texto',\r
+               hiddenField             : 'Campo Oculto',\r
+               button                  : 'Botón',\r
+               select  : 'Campo de Selección',\r
+               imageButton             : 'Botón Imagen',\r
+               notSet                  : '<No definido>',\r
+               id                              : 'Id',\r
+               name                    : 'Nombre',\r
+               langDir                 : 'Orientación',\r
+               langDirLtr              : 'Izquierda a Derecha (LTR)',\r
+               langDirRtl              : 'Derecha a Izquierda (RTL)',\r
+               langCode                : 'Cód. de idioma',\r
+               longDescr               : 'Descripción larga URL',\r
+               cssClass                : 'Clases de hojas de estilo',\r
+               advisoryTitle   : 'Título',\r
+               cssStyle                : 'Estilo',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Cancelar',\r
+               generalTab              : 'General',\r
+               advancedTab             : 'Avanzado',\r
+               validateNumberFailed    : 'El valor no es un número.',\r
+               confirmNewPage  : 'Cualquier cambio que no se haya guardado se perderá. ¿Está seguro de querer crear una nueva página?',\r
+               confirmCancel   : 'Algunas de las opciones se han cambiado. ¿Está seguro de querer cerrar el diálogo?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, no disponible</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Insertar Caracter Especial',\r
+               title           : 'Seleccione un caracter especial'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Insertar/Editar Vínculo',\r
+               menu            : 'Editar Vínculo',\r
+               title           : 'Vínculo',\r
+               info            : 'Información de Vínculo',\r
+               target          : 'Destino',\r
+               upload          : 'Cargar',\r
+               advanced        : 'Avanzado',\r
+               type            : 'Tipo de vínculo',\r
+               toAnchor        : 'Referencia en esta página',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Destino',\r
+               targetNotSet    : '<No definido>',\r
+               targetFrame     : '<marco>',\r
+               targetPopup     : '<ventana emergente>',\r
+               targetNew       : 'Nueva Ventana(_blank)',\r
+               targetTop       : 'Ventana primaria (_top)',\r
+               targetSelf      : 'Misma Ventana (_self)',\r
+               targetParent    : 'Ventana Padre (_parent)',\r
+               targetFrameName : 'Nombre del Marco Destino',\r
+               targetPopupName : 'Nombre de Ventana Emergente',\r
+               popupFeatures   : 'Características de Ventana Emergente',\r
+               popupResizable  : 'Redimensionable',\r
+               popupStatusBar  : 'Barra de Estado',\r
+               popupLocationBar        : 'Barra de ubicación',\r
+               popupToolbar    : 'Barra de Herramientas',\r
+               popupMenuBar    : 'Barra de Menú',\r
+               popupFullScreen : 'Pantalla Completa (IE)',\r
+               popupScrollBars : 'Barras de desplazamiento',\r
+               popupDependent  : 'Dependiente (Netscape)',\r
+               popupWidth              : 'Anchura',\r
+               popupLeft               : 'Posición Izquierda',\r
+               popupHeight             : 'Altura',\r
+               popupTop                : 'Posición Derecha',\r
+               id                              : 'Id',\r
+               langDir                 : 'Orientación',\r
+               langDirNotSet   : '<No definido>',\r
+               langDirLTR              : 'Izquierda a Derecha (LTR)',\r
+               langDirRTL              : 'Derecha a Izquierda (RTL)',\r
+               acccessKey              : 'Clave de Acceso',\r
+               name                    : 'Nombre',\r
+               langCode                : 'Orientación',\r
+               tabIndex                : 'Indice de tabulación',\r
+               advisoryTitle   : 'Título',\r
+               advisoryContentType     : 'Tipo de Contenido',\r
+               cssClasses              : 'Clases de hojas de estilo',\r
+               charset                 : 'Fuente de caracteres vinculado',\r
+               styles                  : 'Estilo',\r
+               selectAnchor    : 'Seleccionar una referencia',\r
+               anchorName              : 'Por Nombre de Referencia',\r
+               anchorId                : 'Por ID de elemento',\r
+               emailAddress    : 'Dirección de E-Mail',\r
+               emailSubject    : 'Título del Mensaje',\r
+               emailBody               : 'Cuerpo del Mensaje',\r
+               noAnchors               : '(No hay referencias disponibles en el documento)',\r
+               noUrl                   : 'Por favor tipee el vínculo URL',\r
+               noEmail                 : 'Por favor tipee la dirección de e-mail'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Referencia',\r
+               menu            : 'Propiedades de Referencia',\r
+               title           : 'Propiedades de Referencia',\r
+               name            : 'Nombre de la Referencia',\r
+               errorName       : 'Por favor, complete el nombre de la Referencia'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Buscar y Reemplazar',\r
+               find                            : 'Buscar',\r
+               replace                         : 'Reemplazar',\r
+               findWhat                        : 'Texto a buscar:',\r
+               replaceWith                     : 'Reemplazar con:',\r
+               notFoundMsg                     : 'El texto especificado no ha sido encontrado.',\r
+               matchCase                       : 'Coincidir may/min',\r
+               matchWord                       : 'Coincidir toda la palabra',\r
+               matchCyclic                     : 'Buscar en todo el contenido',\r
+               replaceAll                      : 'Reemplazar Todo',\r
+               replaceSuccessMsg       : 'La expresión buscada ha sido reemplazada %1 veces.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabla',\r
+               title           : 'Propiedades de Tabla',\r
+               menu            : 'Propiedades de Tabla',\r
+               deleteTable     : 'Eliminar Tabla',\r
+               rows            : 'Filas',\r
+               columns         : 'Columnas',\r
+               border          : 'Tamaño de Borde',\r
+               align           : 'Alineación',\r
+               alignNotSet     : '<No establecido>',\r
+               alignLeft       : 'Izquierda',\r
+               alignCenter     : 'Centrado',\r
+               alignRight      : 'Derecha',\r
+               width           : 'Anchura',\r
+               widthPx         : 'pixeles',\r
+               widthPc         : 'porcentaje',\r
+               height          : 'Altura',\r
+               cellSpace       : 'Esp. e/celdas',\r
+               cellPad         : 'Esp. interior',\r
+               caption         : 'Título',\r
+               summary         : 'Síntesis',\r
+               headers         : 'Encabezados',\r
+               headersNone             : 'Ninguno',\r
+               headersColumn   : 'Primera columna',\r
+               headersRow              : 'Primera fila',\r
+               headersBoth             : 'Ambas',\r
+               invalidRows             : 'El número de filas debe ser un número mayor que 0.',\r
+               invalidCols             : 'El número de columnas debe ser un número mayor que 0.',\r
+               invalidBorder   : 'El tamaño del borde debe ser un número.',\r
+               invalidWidth    : 'La anchura de tabla debe ser un número.',\r
+               invalidHeight   : 'La altura de tabla debe ser un número.',\r
+               invalidCellSpacing      : 'El espaciado entre celdas debe ser un número.',\r
+               invalidCellPadding      : 'El espaciado interior debe ser un número.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Celda',\r
+                       insertBefore    : 'Insertar celda a la izquierda',\r
+                       insertAfter             : 'Insertar celda a la derecha',\r
+                       deleteCell              : 'Eliminar Celdas',\r
+                       merge                   : 'Combinar Celdas',\r
+                       mergeRight              : 'Combinar a la derecha',\r
+                       mergeDown               : 'Combinar hacia abajo',\r
+                       splitHorizontal : 'Dividir la celda horizontalmente',\r
+                       splitVertical   : 'Dividir la celda verticalmente',\r
+                       title                   : 'Propiedades de celda',\r
+                       cellType                : 'Tipo de Celda',\r
+                       rowSpan                 : 'Expandir filas',\r
+                       colSpan                 : 'Expandir columnas',\r
+                       wordWrap                : 'Ajustar al contenido',\r
+                       hAlign                  : 'Alineación Horizontal',\r
+                       vAlign                  : 'Alineación Vertical',\r
+                       alignTop                : 'Arriba',\r
+                       alignMiddle             : 'Medio',\r
+                       alignBottom             : 'Abajo',\r
+                       alignBaseline   : 'Linea de base',\r
+                       bgColor                 : 'Color de fondo',\r
+                       borderColor             : 'Color de borde',\r
+                       data                    : 'Datos',\r
+                       header                  : 'Encabezado',\r
+                       yes                             : 'Sí',\r
+                       no                              : 'No',\r
+                       invalidWidth    : 'La anchura de celda debe ser un número.',\r
+                       invalidHeight   : 'La altura de celda debe ser un número.',\r
+                       invalidRowSpan  : 'La expansión de filas debe ser un número entero.',\r
+                       invalidColSpan  : 'La expansión de columnas debe ser un número entero.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Fila',\r
+                       insertBefore    : 'Insertar fila en la parte superior',\r
+                       insertAfter             : 'Insertar fila en la parte inferior',\r
+                       deleteRow               : 'Eliminar Filas'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Columna',\r
+                       insertBefore    : 'Insertar columna a la izquierda',\r
+                       insertAfter             : 'Insertar columna a la derecha',\r
+                       deleteColumn    : 'Eliminar Columnas'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Propiedades de Botón',\r
+               text            : 'Texto (Valor)',\r
+               type            : 'Tipo',\r
+               typeBtn         : 'Boton',\r
+               typeSbm         : 'Enviar',\r
+               typeRst         : 'Reestablecer'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Propiedades de Casilla',\r
+               radioTitle      : 'Propiedades de Botón de Radio',\r
+               value           : 'Valor',\r
+               selected        : 'Seleccionado'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Propiedades de Formulario',\r
+               menu            : 'Propiedades de Formulario',\r
+               action          : 'Acción',\r
+               method          : 'Método',\r
+               encoding        : 'Codificación',\r
+               target          : 'Destino',\r
+               targetNotSet    : '<No definido>',\r
+               targetNew       : 'Nueva Ventana(_blank)',\r
+               targetTop       : 'Ventana primaria (_top)',\r
+               targetSelf      : 'Misma Ventana (_self)',\r
+               targetParent    : 'Ventana Padre (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Propiedades de Campo de Selección',\r
+               selectInfo      : 'Información',\r
+               opAvail         : 'Opciones disponibles',\r
+               value           : 'Valor',\r
+               size            : 'Tamaño',\r
+               lines           : 'Lineas',\r
+               chkMulti        : 'Permitir múltiple selección',\r
+               opText          : 'Texto',\r
+               opValue         : 'Valor',\r
+               btnAdd          : 'Agregar',\r
+               btnModify       : 'Modificar',\r
+               btnUp           : 'Subir',\r
+               btnDown         : 'Bajar',\r
+               btnSetValue : 'Establecer como predeterminado',\r
+               btnDelete       : 'Eliminar'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Propiedades de Area de Texto',\r
+               cols            : 'Columnas',\r
+               rows            : 'Filas'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Propiedades de Campo de Texto',\r
+               name            : 'Nombre',\r
+               value           : 'Valor',\r
+               charWidth       : 'Caracteres de ancho',\r
+               maxChars        : 'Máximo caracteres',\r
+               type            : 'Tipo',\r
+               typeText        : 'Texto',\r
+               typePass        : 'Contraseña'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Propiedades de Campo Oculto',\r
+               name    : 'Nombre',\r
+               value   : 'Valor'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Propiedades de Imagen',\r
+               titleButton     : 'Propiedades de Botón de Imagen',\r
+               menu            : 'Propiedades de Imagen',\r
+               infoTab : 'Información de Imagen',\r
+               btnUpload       : 'Enviar al Servidor',\r
+               url             : 'URL',\r
+               upload  : 'Cargar',\r
+               alt             : 'Texto Alternativo',\r
+               width           : 'Anchura',\r
+               height  : 'Altura',\r
+               lockRatio       : 'Proporcional',\r
+               resetSize       : 'Tamaño Original',\r
+               border  : 'Borde',\r
+               hSpace  : 'Esp.Horiz',\r
+               vSpace  : 'Esp.Vert',\r
+               align           : 'Alineación',\r
+               alignLeft       : 'Izquierda',\r
+               alignAbsBottom: 'Abs inferior',\r
+               alignAbsMiddle: 'Abs centro',\r
+               alignBaseline   : 'Línea de base',\r
+               alignBottom     : 'Pie',\r
+               alignMiddle     : 'Centro',\r
+               alignRight      : 'Derecha',\r
+               alignTextTop    : 'Tope del texto',\r
+               alignTop        : 'Tope',\r
+               preview : 'Vista Previa',\r
+               alertUrl        : 'Por favor escriba la URL de la imagen',\r
+               linkTab : 'Vínculo',\r
+               button2Img      : '¿Desea convertir el botón de imagen en una simple imagen?',\r
+               img2Button      : '¿Desea convertir la imagen en un botón de imagen?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Propiedades de Flash',\r
+               propertiesTab   : 'Propiedades',\r
+               title           : 'Propiedades de Flash',\r
+               chkPlay         : 'Autoejecución',\r
+               chkLoop         : 'Repetir',\r
+               chkMenu         : 'Activar Menú Flash',\r
+               chkFull         : 'Permitir pantalla completa',\r
+               scale           : 'Escala',\r
+               scaleAll                : 'Mostrar todo',\r
+               scaleNoBorder   : 'Sin Borde',\r
+               scaleFit                : 'Ajustado',\r
+               access                  : 'Acceso de scripts',\r
+               accessAlways    : 'Siempre',\r
+               accessSameDomain        : 'Mismo dominio',\r
+               accessNever     : 'Nunca',\r
+               align           : 'Alineación',\r
+               alignLeft       : 'Izquierda',\r
+               alignAbsBottom: 'Abs inferior',\r
+               alignAbsMiddle: 'Abs centro',\r
+               alignBaseline   : 'Línea de base',\r
+               alignBottom     : 'Pie',\r
+               alignMiddle     : 'Centro',\r
+               alignRight      : 'Derecha',\r
+               alignTextTop    : 'Tope del texto',\r
+               alignTop        : 'Tope',\r
+               quality         : 'Calidad',\r
+               qualityBest              : 'La mejor',\r
+               qualityHigh              : 'Alta',\r
+               qualityAutoHigh  : 'Auto Alta',\r
+               qualityMedium    : 'Media',\r
+               qualityAutoLow   : 'Auto Baja',\r
+               qualityLow               : 'Baja',\r
+               windowModeWindow         : 'Ventana',\r
+               windowModeOpaque         : 'Opaco',\r
+               windowModeTransparent    : 'Transparente',\r
+               windowMode      : 'WindowMode',\r
+               flashvars       : 'FlashVars',\r
+               bgcolor : 'Color de Fondo',\r
+               width   : 'Anchura',\r
+               height  : 'Altura',\r
+               hSpace  : 'Esp.Horiz',\r
+               vSpace  : 'Esp.Vert',\r
+               validateSrc : 'Por favor escriba el vínculo URL',\r
+               validateWidth : 'Anchura debe ser un número.',\r
+               validateHeight : 'Altura debe ser un número.',\r
+               validateHSpace : 'Esp.Horiz debe ser un número.',\r
+               validateVSpace : 'Esp.Vert debe ser un número.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Ortografía',\r
+               title                   : 'Comprobar ortografía',\r
+               notAvailable    : 'Lo sentimos pero el servicio no está disponible.',\r
+               errorLoading    : 'Error cargando la aplicación del servidor: %s.',\r
+               notInDic                : 'No se encuentra en el Diccionario',\r
+               changeTo                : 'Cambiar a',\r
+               btnIgnore               : 'Ignorar',\r
+               btnIgnoreAll    : 'Ignorar Todo',\r
+               btnReplace              : 'Reemplazar',\r
+               btnReplaceAll   : 'Reemplazar Todo',\r
+               btnUndo                 : 'Deshacer',\r
+               noSuggestions   : '- No hay sugerencias -',\r
+               progress                : 'Control de Ortografía en progreso...',\r
+               noMispell               : 'Control finalizado: no se encontraron errores',\r
+               noChanges               : 'Control finalizado: no se ha cambiado ninguna palabra',\r
+               oneChange               : 'Control finalizado: se ha cambiado una palabra',\r
+               manyChanges             : 'Control finalizado: se ha cambiado %1 palabras',\r
+               ieSpellDownload : 'Módulo de Control de Ortografía no instalado. ¿Desea descargarlo ahora?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Emoticons',\r
+               title   : 'Insertar un Emoticon'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 elemento'\r
+       },\r
+\r
+       numberedlist : 'Numeración',\r
+       bulletedlist : 'Viñetas',\r
+       indent : 'Aumentar Sangría',\r
+       outdent : 'Disminuir Sangría',\r
+\r
+       justify :\r
+       {\r
+               left : 'Alinear a Izquierda',\r
+               center : 'Centrar',\r
+               right : 'Alinear a Derecha',\r
+               block : 'Justificado'\r
+       },\r
+\r
+       blockquote : 'Cita',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Pegar',\r
+               cutError        : 'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado. Por favor use el teclado (Ctrl+X).',\r
+               copyError       : 'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado. Por favor use el teclado (Ctrl+C).',\r
+               pasteMsg        : 'Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl+V</STRONG>); luego presione <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles. Es necesario que lo pegue de nuevo en esta ventana.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Pegar desde Word',\r
+               title : 'Pegar desde Word',\r
+               advice : 'Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl+V</STRONG>); luego presione <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignorar definiciones de fuentes',\r
+               removeStyle : 'Remover definiciones de estilo'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Pegar como Texto Plano',\r
+               title : 'Pegar como Texto Plano'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Plantillas',\r
+               title : 'Contenido de Plantillas',\r
+               insertOption: 'Reemplazar el contenido actual',\r
+               selectPromptMsg: 'Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):',\r
+               emptyListMsg : '(No hay plantillas definidas)'\r
+       },\r
+\r
+       showBlocks : 'Mostrar bloques',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Estilo',\r
+               voiceLabel : 'Estilos',\r
+               panelVoiceLabel : 'Elija un estilo',\r
+               panelTitle1 : 'Estilos de párrafo',\r
+               panelTitle2 : 'Estilos de carácter',\r
+               panelTitle3 : 'Estilos de objeto'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formato',\r
+               voiceLabel : 'Formato',\r
+               panelTitle : 'Formato',\r
+               panelVoiceLabel : 'Elija un formato de párrafo',\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Con formato',\r
+               tag_address : 'Dirección',\r
+               tag_h1 : 'Encabezado 1',\r
+               tag_h2 : 'Encabezado 2',\r
+               tag_h3 : 'Encabezado 3',\r
+               tag_h4 : 'Encabezado 4',\r
+               tag_h5 : 'Encabezado 5',\r
+               tag_h6 : 'Encabezado 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Fuente',\r
+               voiceLabel : 'Fuente',\r
+               panelTitle : 'Fuente',\r
+               panelVoiceLabel : 'Elija una fuente'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Tamaño',\r
+               voiceLabel : 'Tamaño de fuente',\r
+               panelTitle : 'Tamaño',\r
+               panelVoiceLabel : 'Elija un tamaño de fuente'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Color de Texto',\r
+               bgColorTitle : 'Color de Fondo',\r
+               auto : 'Automático',\r
+               more : 'Más Colores...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Comprobar Ortografía Mientras Escribe',\r
+               enable : 'Activar COME',\r
+               disable : 'Desactivar COME',\r
+               about : 'Acerca de COME',\r
+               toggle : 'Cambiar COME',\r
+               options : 'Opciones',\r
+               langs : 'Idiomas',\r
+               moreSuggestions : 'Más sugerencias',\r
+               ignore : 'Ignorar',\r
+               ignoreAll : 'Ignorar Todas',\r
+               addWord : 'Añadir palabra',\r
+               emptyDic : 'El nombre del diccionario no puede estar en blanco.',\r
+               optionsTab : 'Opciones',\r
+               languagesTab : 'Idiomas',\r
+               dictionariesTab : 'Diccionarios',\r
+               aboutTab : 'Acerca de'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'Acerca de CKEditor',\r
+               dlgTitle : 'Acerca de CKEditor',\r
+               moreInfo : 'Para información de licencia, por favor visite nuestro sitio web:',\r
+               copy : 'Copyright &copy; $1. Todos los derechos reservados.'\r
+       },\r
+\r
+       maximize : 'Maximizar',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Ancla',\r
+               flash : 'Animación flash',\r
+               div : 'Salto de página',\r
+               unknown : 'Objeto desconocido'\r
+       },\r
+\r
+       resize : 'Arrastre para redimensionar'\r
+};\r
diff --git a/_source/lang/et.js b/_source/lang/et.js
new file mode 100644 (file)
index 0000000..4030a1c
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Estonian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['et'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Lähtekood',\r
+       newPage                 : 'Uus leht',\r
+       save                    : 'Salvesta',\r
+       preview                 : 'Eelvaade',\r
+       cut                             : 'Lõika',\r
+       copy                    : 'Kopeeri',\r
+       paste                   : 'Kleebi',\r
+       print                   : 'Prindi',\r
+       underline               : 'Allajoonitud',\r
+       bold                    : 'Paks',\r
+       italic                  : 'Kursiiv',\r
+       selectAll               : 'Vali kõik',\r
+       removeFormat    : 'Eemalda vorming',\r
+       strike                  : 'Läbijoonitud',\r
+       subscript               : 'Allindeks',\r
+       superscript             : 'Ülaindeks',\r
+       horizontalrule  : 'Sisesta horisontaaljoon',\r
+       pagebreak               : 'Sisesta lehevahetuskoht',\r
+       unlink                  : 'Eemalda link',\r
+       undo                    : 'Võta tagasi',\r
+       redo                    : 'Korda toimingut',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Sirvi serverit',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokoll',\r
+               upload                  : 'Lae üles',\r
+               uploadSubmit    : 'Saada serverissee',\r
+               image                   : 'Pilt',\r
+               flash                   : 'Flash',\r
+               form                    : 'Vorm',\r
+               checkbox                : 'Märkeruut',\r
+               radio           : 'Raadionupp',\r
+               textField               : 'Tekstilahter',\r
+               textarea                : 'Tekstiala',\r
+               hiddenField             : 'Varjatud lahter',\r
+               button                  : 'Nupp',\r
+               select  : 'Valiklahter',\r
+               imageButton             : 'Piltnupp',\r
+               notSet                  : '<määramata>',\r
+               id                              : 'Id',\r
+               name                    : 'Nimi',\r
+               langDir                 : 'Keele suund',\r
+               langDirLtr              : 'Vasakult paremale (LTR)',\r
+               langDirRtl              : 'Paremalt vasakule (RTL)',\r
+               langCode                : 'Keele kood',\r
+               longDescr               : 'Pikk kirjeldus URL',\r
+               cssClass                : 'Stiilistiku klassid',\r
+               advisoryTitle   : 'Juhendav tiitel',\r
+               cssStyle                : 'Laad',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Loobu',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Täpsemalt',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Sisesta erimärk',\r
+               title           : 'Vali erimärk'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Sisesta link / Muuda linki',\r
+               menu            : 'Muuda linki',\r
+               title           : 'Link',\r
+               info            : 'Lingi info',\r
+               target          : 'Sihtkoht',\r
+               upload          : 'Lae üles',\r
+               advanced        : 'Täpsemalt',\r
+               type            : 'Lingi tüüp',\r
+               toAnchor        : 'Ankur sellel lehel',\r
+               toEmail         : 'E-post',\r
+               target          : 'Sihtkoht',\r
+               targetNotSet    : '<määramata>',\r
+               targetFrame     : '<raam>',\r
+               targetPopup     : '<hüpikaken>',\r
+               targetNew       : 'Uus aken (_blank)',\r
+               targetTop       : 'Pealmine aken (_top)',\r
+               targetSelf      : 'Sama aken (_self)',\r
+               targetParent    : 'Esivanem aken (_parent)',\r
+               targetFrameName : 'Sihtmärk raami nimi',\r
+               targetPopupName : 'Hüpikakna nimi',\r
+               popupFeatures   : 'Hüpikakna omadused',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Olekuriba',\r
+               popupLocationBar        : 'Aadressiriba',\r
+               popupToolbar    : 'Tööriistariba',\r
+               popupMenuBar    : 'Menüüriba',\r
+               popupFullScreen : 'Täisekraan (IE)',\r
+               popupScrollBars : 'Kerimisribad',\r
+               popupDependent  : 'Sõltuv (Netscape)',\r
+               popupWidth              : 'Laius',\r
+               popupLeft               : 'Vasak asukoht',\r
+               popupHeight             : 'Kõrgus',\r
+               popupTop                : 'Ülemine asukoht',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Keele suund',\r
+               langDirNotSet   : '<määramata>',\r
+               langDirLTR              : 'Vasakult paremale (LTR)',\r
+               langDirRTL              : 'Paremalt vasakule (RTL)',\r
+               acccessKey              : 'Juurdepääsu võti',\r
+               name                    : 'Nimi',\r
+               langCode                : 'Keele suund',\r
+               tabIndex                : 'Tab indeks',\r
+               advisoryTitle   : 'Juhendav tiitel',\r
+               advisoryContentType     : 'Juhendava sisu tüüp',\r
+               cssClasses              : 'Stiilistiku klassid',\r
+               charset                 : 'Lingitud ressurssi märgistik',\r
+               styles                  : 'Laad',\r
+               selectAnchor    : 'Vali ankur',\r
+               anchorName              : 'Ankru nime järgi',\r
+               anchorId                : 'Elemendi id järgi',\r
+               emailAddress    : 'E-posti aadress',\r
+               emailSubject    : 'Sõnumi teema',\r
+               emailBody               : 'Sõnumi tekst',\r
+               noAnchors               : '(Selles dokumendis ei ole ankruid)',\r
+               noUrl                   : 'Palun kirjuta lingi URL',\r
+               noEmail                 : 'Palun kirjuta E-Posti aadress'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Sisesta ankur / Muuda ankrut',\r
+               menu            : 'Ankru omadused',\r
+               title           : 'Ankru omadused',\r
+               name            : 'Ankru nimi',\r
+               errorName       : 'Palun sisest ankru nimi'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Otsi ja asenda',\r
+               find                            : 'Otsi',\r
+               replace                         : 'Asenda',\r
+               findWhat                        : 'Leia mida:',\r
+               replaceWith                     : 'Asenda millega:',\r
+               notFoundMsg                     : 'Valitud teksti ei leitud.',\r
+               matchCase                       : 'Erista suur- ja väiketähti',\r
+               matchWord                       : 'Otsi terviklike sõnu',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Asenda kõik',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabel',\r
+               title           : 'Tabeli atribuudid',\r
+               menu            : 'Tabeli atribuudid',\r
+               deleteTable     : 'Kustuta tabel',\r
+               rows            : 'Read',\r
+               columns         : 'Veerud',\r
+               border          : 'Joone suurus',\r
+               align           : 'Joondus',\r
+               alignNotSet     : '<Määramata>',\r
+               alignLeft       : 'Vasak',\r
+               alignCenter     : 'Kesk',\r
+               alignRight      : 'Parem',\r
+               width           : 'Laius',\r
+               widthPx         : 'pikslit',\r
+               widthPc         : 'protsenti',\r
+               height          : 'Kõrgus',\r
+               cellSpace       : 'Lahtri vahe',\r
+               cellPad         : 'Lahtri täidis',\r
+               caption         : 'Tabeli tiitel',\r
+               summary         : 'Kokkuvõte',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Lahter',\r
+                       insertBefore    : 'Sisesta lahter enne',\r
+                       insertAfter             : 'Sisesta lahter peale',\r
+                       deleteCell              : 'Eemalda lahtrid',\r
+                       merge                   : 'Ühenda lahtrid',\r
+                       mergeRight              : 'Ühenda paremale',\r
+                       mergeDown               : 'Ühenda alla',\r
+                       splitHorizontal : 'Poolita lahter horisontaalselt',\r
+                       splitVertical   : 'Poolita lahter vertikaalselt',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Rida',\r
+                       insertBefore    : 'Sisesta rida enne',\r
+                       insertAfter             : 'Sisesta rida peale',\r
+                       deleteRow               : 'Eemalda read'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Veerg',\r
+                       insertBefore    : 'Sisesta veerg enne',\r
+                       insertAfter             : 'Sisesta veerg peale',\r
+                       deleteColumn    : 'Eemalda veerud'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Nupu omadused',\r
+               text            : 'Tekst (väärtus)',\r
+               type            : 'Tüüp',\r
+               typeBtn         : 'Nupp',\r
+               typeSbm         : 'Saada',\r
+               typeRst         : 'Lähtesta'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Märkeruudu omadused',\r
+               radioTitle      : 'Raadionupu omadused',\r
+               value           : 'Väärtus',\r
+               selected        : 'Valitud'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Vormi omadused',\r
+               menu            : 'Vormi omadused',\r
+               action          : 'Toiming',\r
+               method          : 'Meetod',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Sihtkoht',\r
+               targetNotSet    : '<määramata>',\r
+               targetNew       : 'Uus aken (_blank)',\r
+               targetTop       : 'Pealmine aken (_top)',\r
+               targetSelf      : 'Sama aken (_self)',\r
+               targetParent    : 'Esivanem aken (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Valiklahtri omadused',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Võimalikud valikud',\r
+               value           : 'Väärtus',\r
+               size            : 'Suurus',\r
+               lines           : 'ridu',\r
+               chkMulti        : 'Võimalda mitu valikut',\r
+               opText          : 'Tekst',\r
+               opValue         : 'Väärtus',\r
+               btnAdd          : 'Lisa',\r
+               btnModify       : 'Muuda',\r
+               btnUp           : 'Üles',\r
+               btnDown         : 'Alla',\r
+               btnSetValue : 'Sea valitud olekuna',\r
+               btnDelete       : 'Kustuta'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Tekstiala omadused',\r
+               cols            : 'Veerge',\r
+               rows            : 'Ridu'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Tekstilahtri omadused',\r
+               name            : 'Nimi',\r
+               value           : 'Väärtus',\r
+               charWidth       : 'Laius (tähemärkides)',\r
+               maxChars        : 'Maksimaalselt tähemärke',\r
+               type            : 'Tüüp',\r
+               typeText        : 'Tekst',\r
+               typePass        : 'Parool'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Varjatud lahtri omadused',\r
+               name    : 'Nimi',\r
+               value   : 'Väärtus'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Pildi atribuudid',\r
+               titleButton     : 'Piltnupu omadused',\r
+               menu            : 'Pildi atribuudid',\r
+               infoTab : 'Pildi info',\r
+               btnUpload       : 'Saada serverissee',\r
+               url             : 'URL',\r
+               upload  : 'Lae üles',\r
+               alt             : 'Alternatiivne tekst',\r
+               width           : 'Laius',\r
+               height  : 'Kõrgus',\r
+               lockRatio       : 'Lukusta kuvasuhe',\r
+               resetSize       : 'Lähtesta suurus',\r
+               border  : 'Joon',\r
+               hSpace  : 'H. vaheruum',\r
+               vSpace  : 'V. vaheruum',\r
+               align           : 'Joondus',\r
+               alignLeft       : 'Vasak',\r
+               alignAbsBottom: 'Abs alla',\r
+               alignAbsMiddle: 'Abs keskele',\r
+               alignBaseline   : 'Baasjoonele',\r
+               alignBottom     : 'Alla',\r
+               alignMiddle     : 'Keskele',\r
+               alignRight      : 'Paremale',\r
+               alignTextTop    : 'Tekstit üles',\r
+               alignTop        : 'Üles',\r
+               preview : 'Eelvaade',\r
+               alertUrl        : 'Palun kirjuta pildi URL',\r
+               linkTab : 'Link',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash omadused',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash omadused',\r
+               chkPlay         : 'Automaatne start ',\r
+               chkLoop         : 'Korduv',\r
+               chkMenu         : 'Võimalda flash menüü',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Mastaap',\r
+               scaleAll                : 'Näita kõike',\r
+               scaleNoBorder   : 'Äärist ei ole',\r
+               scaleFit                : 'Täpne sobivus',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Joondus',\r
+               alignLeft       : 'Vasak',\r
+               alignAbsBottom: 'Abs alla',\r
+               alignAbsMiddle: 'Abs keskele',\r
+               alignBaseline   : 'Baasjoonele',\r
+               alignBottom     : 'Alla',\r
+               alignMiddle     : 'Keskele',\r
+               alignRight      : 'Paremale',\r
+               alignTextTop    : 'Tekstit üles',\r
+               alignTop        : 'Üles',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Tausta värv',\r
+               width   : 'Laius',\r
+               height  : 'Kõrgus',\r
+               hSpace  : 'H. vaheruum',\r
+               vSpace  : 'V. vaheruum',\r
+               validateSrc : 'Palun kirjuta lingi URL',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Kontrolli õigekirja',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Puudub sõnastikust',\r
+               changeTo                : 'Muuda',\r
+               btnIgnore               : 'Ignoreeri',\r
+               btnIgnoreAll    : 'Ignoreeri kõiki',\r
+               btnReplace              : 'Asenda',\r
+               btnReplaceAll   : 'Asenda kõik',\r
+               btnUndo                 : 'Võta tagasi',\r
+               noSuggestions   : '- Soovitused puuduvad -',\r
+               progress                : 'Toimub õigekirja kontroll...',\r
+               noMispell               : 'Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud',\r
+               noChanges               : 'Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud',\r
+               oneChange               : 'Õigekirja kontroll sooritatud: üks sõna muudeti',\r
+               manyChanges             : 'Õigekirja kontroll sooritatud: %1 sõna muudetud',\r
+               ieSpellDownload : 'Õigekirja kontrollija ei ole installeeritud. Soovid sa selle alla laadida?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Emotikon',\r
+               title   : 'Sisesta emotikon'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Nummerdatud loetelu',\r
+       bulletedlist : 'Punktiseeritud loetelu',\r
+       indent : 'Suurenda taanet',\r
+       outdent : 'Vähenda taanet',\r
+\r
+       justify :\r
+       {\r
+               left : 'Vasakjoondus',\r
+               center : 'Keskjoondus',\r
+               right : 'Paremjoondus',\r
+               block : 'Rööpjoondus'\r
+       },\r
+\r
+       blockquote : 'Blokktsitaat',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Kleebi',\r
+               cutError        : 'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+X).',\r
+               copyError       : 'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+C).',\r
+               pasteMsg        : 'Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Sinu veebisirvija turvaseadete tõttu, ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead kleepima need uuesti siia aknasse.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Kleebi Wordist',\r
+               title : 'Kleebi Wordist',\r
+               advice : 'Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignoreeri kirja definitsioone',\r
+               removeStyle : 'Eemalda stiilide definitsioonid'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Kleebi tavalise tekstina',\r
+               title : 'Kleebi tavalise tekstina'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Šabloon',\r
+               title : 'Sisu šabloonid',\r
+               insertOption: 'Asenda tegelik sisu',\r
+               selectPromptMsg: 'Palun vali šabloon, et avada see redaktoris<br />(praegune sisu läheb kaotsi):',\r
+               emptyListMsg : '(Ühtegi šablooni ei ole defineeritud)'\r
+       },\r
+\r
+       showBlocks : 'Näita blokke',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Laad',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Vorming',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Vorming',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Tavaline',\r
+               tag_pre : 'Vormindatud',\r
+               tag_address : 'Aadress',\r
+               tag_h1 : 'Pealkiri 1',\r
+               tag_h2 : 'Pealkiri 2',\r
+               tag_h3 : 'Pealkiri 3',\r
+               tag_h4 : 'Pealkiri 4',\r
+               tag_h5 : 'Pealkiri 5',\r
+               tag_h6 : 'Pealkiri 6',\r
+               tag_div : 'Tavaline (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Kiri',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Kiri',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Suurus',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Suurus',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Teksti värv',\r
+               bgColorTitle : 'Tausta värv',\r
+               auto : 'Automaatne',\r
+               more : 'Rohkem värve...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/eu.js b/_source/lang/eu.js
new file mode 100644 (file)
index 0000000..c535ea6
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Basque language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['eu'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Testu aberastuentzako editorea, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'HTML Iturburua',\r
+       newPage                 : 'Orrialde Berria',\r
+       save                    : 'Gorde',\r
+       preview                 : 'Aurrebista',\r
+       cut                             : 'Ebaki',\r
+       copy                    : 'Kopiatu',\r
+       paste                   : 'Itsatsi',\r
+       print                   : 'Inprimatu',\r
+       underline               : 'Azpimarratu',\r
+       bold                    : 'Lodia',\r
+       italic                  : 'Etzana',\r
+       selectAll               : 'Hautatu dena',\r
+       removeFormat    : 'Kendu Formatua',\r
+       strike                  : 'Marratua',\r
+       subscript               : 'Azpi-indize',\r
+       superscript             : 'Goi-indize',\r
+       horizontalrule  : 'Txertatu Marra Horizontala',\r
+       pagebreak               : 'Txertatu Orrialde-jauzia',\r
+       unlink                  : 'Kendu Esteka',\r
+       undo                    : 'Desegin',\r
+       redo                    : 'Berregin',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Zerbitzaria arakatu',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokoloa',\r
+               upload                  : 'Gora kargatu',\r
+               uploadSubmit    : 'Zerbitzarira bidalia',\r
+               image                   : 'Irudia',\r
+               flash                   : 'Flasha',\r
+               form                    : 'Formularioa',\r
+               checkbox                : 'Kontrol-laukia',\r
+               radio           : 'Aukera-botoia',\r
+               textField               : 'Testu Eremua',\r
+               textarea                : 'Testu-area',\r
+               hiddenField             : 'Ezkutuko Eremua',\r
+               button                  : 'Botoia',\r
+               select  : 'Hautespen Eremua',\r
+               imageButton             : 'Irudi Botoia',\r
+               notSet                  : '<Ezarri gabe>',\r
+               id                              : 'Id',\r
+               name                    : 'Izena',\r
+               langDir                 : 'Hizkuntzaren Norabidea',\r
+               langDirLtr              : 'Ezkerretik Eskumara(LTR)',\r
+               langDirRtl              : 'Eskumatik Ezkerrera (RTL)',\r
+               langCode                : 'Hizkuntza Kodea',\r
+               longDescr               : 'URL Deskribapen Luzea',\r
+               cssClass                : 'Estilo-orriko Klaseak',\r
+               advisoryTitle   : 'Izenburua',\r
+               cssStyle                : 'Estiloa',\r
+               ok                              : 'Ados',\r
+               cancel                  : 'Utzi',\r
+               generalTab              : 'Orokorra',\r
+               advancedTab             : 'Aurreratua',\r
+               validateNumberFailed    : 'Balio hau ez da zenbaki bat.',\r
+               confirmNewPage  : 'Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?',\r
+               confirmCancel   : 'Aukera batzuk aldatu egin dira. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, erabilezina</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Txertatu Karaktere Berezia',\r
+               title           : 'Karaktere Berezia Aukeratu'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Txertatu/Editatu Esteka',\r
+               menu            : 'Aldatu Esteka',\r
+               title           : 'Esteka',\r
+               info            : 'Estekaren Informazioa',\r
+               target          : 'Target (Helburua)',\r
+               upload          : 'Gora kargatu',\r
+               advanced        : 'Aurreratua',\r
+               type            : 'Esteka Mota',\r
+               toAnchor        : 'Aingura orrialde honetan',\r
+               toEmail         : 'ePosta',\r
+               target          : 'Target (Helburua)',\r
+               targetNotSet    : '<Ezarri gabe>',\r
+               targetFrame     : '<marko>',\r
+               targetPopup     : '<popup leihoa>',\r
+               targetNew       : 'Leiho Berria (_blank)',\r
+               targetTop       : 'Goiko Leihoa (_top)',\r
+               targetSelf      : 'Leiho Berdina (_self)',\r
+               targetParent    : 'Leiho Gurasoa (_parent)',\r
+               targetFrameName : 'Marko Helburuaren Izena',\r
+               targetPopupName : 'Popup Leihoaren Izena',\r
+               popupFeatures   : 'Popup Leihoaren Ezaugarriak',\r
+               popupResizable  : 'Tamaina Aldakorra',\r
+               popupStatusBar  : 'Egoera Barra',\r
+               popupLocationBar        : 'Kokaleku Barra',\r
+               popupToolbar    : 'Tresna Barra',\r
+               popupMenuBar    : 'Menu Barra',\r
+               popupFullScreen : 'Pantaila Osoa (IE)',\r
+               popupScrollBars : 'Korritze Barrak',\r
+               popupDependent  : 'Menpekoa (Netscape)',\r
+               popupWidth              : 'Zabalera',\r
+               popupLeft               : 'Ezkerreko  Posizioa',\r
+               popupHeight             : 'Altuera',\r
+               popupTop                : 'Goiko Posizioa',\r
+               id                              : 'Id',\r
+               langDir                 : 'Hizkuntzaren Norabidea',\r
+               langDirNotSet   : '<Ezarri gabe>',\r
+               langDirLTR              : 'Ezkerretik Eskumara(LTR)',\r
+               langDirRTL              : 'Eskumatik Ezkerrera (RTL)',\r
+               acccessKey              : 'Sarbide-gakoa',\r
+               name                    : 'Izena',\r
+               langCode                : 'Hizkuntzaren Norabidea',\r
+               tabIndex                : 'Tabulazio Indizea',\r
+               advisoryTitle   : 'Izenburua',\r
+               advisoryContentType     : 'Eduki Mota (Content Type)',\r
+               cssClasses              : 'Estilo-orriko Klaseak',\r
+               charset                 : 'Estekatutako Karaktere Multzoa',\r
+               styles                  : 'Estiloa',\r
+               selectAnchor    : 'Aingura bat hautatu',\r
+               anchorName              : 'Aingura izenagatik',\r
+               anchorId                : 'Elementuaren ID-gatik',\r
+               emailAddress    : 'ePosta Helbidea',\r
+               emailSubject    : 'Mezuaren Gaia',\r
+               emailBody               : 'Mezuaren Gorputza',\r
+               noAnchors               : '(Ez daude aingurak eskuragarri dokumentuan)',\r
+               noUrl                   : 'Mesedez URL esteka idatzi',\r
+               noEmail                 : 'Mesedez ePosta helbidea idatzi'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Aingura',\r
+               menu            : 'Ainguraren Ezaugarriak',\r
+               title           : 'Ainguraren Ezaugarriak',\r
+               name            : 'Ainguraren Izena',\r
+               errorName       : 'Idatzi ainguraren izena'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Bilatu eta Ordeztu',\r
+               find                            : 'Bilatu',\r
+               replace                         : 'Ordezkatu',\r
+               findWhat                        : 'Zer bilatu:',\r
+               replaceWith                     : 'Zerekin ordeztu:',\r
+               notFoundMsg                     : 'Idatzitako testua ez da topatu.',\r
+               matchCase                       : 'Maiuskula/minuskula',\r
+               matchWord                       : 'Esaldi osoa bilatu',\r
+               matchCyclic                     : 'Bilaketa ziklikoa',\r
+               replaceAll                      : 'Ordeztu Guztiak',\r
+               replaceSuccessMsg       : 'Zenbat aldiz ordeztua: %1'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Taula',\r
+               title           : 'Taularen Ezaugarriak',\r
+               menu            : 'Taularen Ezaugarriak',\r
+               deleteTable     : 'Ezabatu Taula',\r
+               rows            : 'Lerroak',\r
+               columns         : 'Zutabeak',\r
+               border          : 'Ertzaren Zabalera',\r
+               align           : 'Lerrokatu',\r
+               alignNotSet     : '<Ezarri gabe>',\r
+               alignLeft       : 'Ezkerrean',\r
+               alignCenter     : 'Erdian',\r
+               alignRight      : 'Eskuman',\r
+               width           : 'Zabalera',\r
+               widthPx         : 'pixel',\r
+               widthPc         : 'ehuneko',\r
+               height          : 'Altuera',\r
+               cellSpace       : 'Gelaxka arteko tartea',\r
+               cellPad         : 'Gelaxken betegarria',\r
+               caption         : 'Epigrafea',\r
+               summary         : 'Laburpena',\r
+               headers         : 'Goiburuak',\r
+               headersNone             : 'Bat ere ez',\r
+               headersColumn   : 'Lehen zutabea',\r
+               headersRow              : 'Lehen lerroa',\r
+               headersBoth             : 'Biak',\r
+               invalidRows             : 'Lerro kopurua 0 baino handiagoa den zenbakia izan behar da.',\r
+               invalidCols             : 'Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.',\r
+               invalidBorder   : 'Ertzaren tamaina zenbaki bat izan behar da.',\r
+               invalidWidth    : 'Taularen zabalera zenbaki bat izan behar da.',\r
+               invalidHeight   : 'Taularen altuera zenbaki bat izan behar da.',\r
+               invalidCellSpacing      : 'Gelaxka arteko tartea zenbaki bat izan behar da.',\r
+               invalidCellPadding      : 'Gelaxken betegarria zenbaki bat izan behar da.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Gelaxka',\r
+                       insertBefore    : 'Txertatu Gelaxka Aurretik',\r
+                       insertAfter             : 'Txertatu Gelaxka Ostean',\r
+                       deleteCell              : 'Kendu Gelaxkak',\r
+                       merge                   : 'Batu Gelaxkak',\r
+                       mergeRight              : 'Elkartu Eskumara',\r
+                       mergeDown               : 'Elkartu Behera',\r
+                       splitHorizontal : 'Banatu Gelaxkak Horizontalki',\r
+                       splitVertical   : 'Banatu Gelaxkak Bertikalki',\r
+                       title                   : 'Gelaxken Ezaugarriak',\r
+                       cellType                : 'Gelaxka Mota',\r
+                       rowSpan                 : 'Hedatutako Lerroak',\r
+                       colSpan                 : 'Hedatutako Zutabeak',\r
+                       wordWrap                : 'Itzulbira',\r
+                       hAlign                  : 'Lerrokatze Horizontala',\r
+                       vAlign                  : 'Lerrokatze Bertikala',\r
+                       alignTop                : 'Goian',\r
+                       alignMiddle             : 'Erdian',\r
+                       alignBottom             : 'Behean',\r
+                       alignBaseline   : 'Oinarri-lerroan',\r
+                       bgColor                 : 'Fondoaren Kolorea',\r
+                       borderColor             : 'Ertzaren Kolorea',\r
+                       data                    : 'Data',\r
+                       header                  : 'Goiburua',\r
+                       yes                             : 'Bai',\r
+                       no                              : 'Ez',\r
+                       invalidWidth    : 'Gelaxkaren zabalera zenbaki bat izan behar da.',\r
+                       invalidHeight   : 'Gelaxkaren altuera zenbaki bat izan behar da.',\r
+                       invalidRowSpan  : 'Lerroen hedapena zenbaki osoa izan behar da.',\r
+                       invalidColSpan  : 'Zutabeen hedapena zenbaki osoa izan behar da.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Lerroa',\r
+                       insertBefore    : 'Txertatu Lerroa Aurretik',\r
+                       insertAfter             : 'Txertatu Lerroa Ostean',\r
+                       deleteRow               : 'Ezabatu Lerroak'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Zutabea',\r
+                       insertBefore    : 'Txertatu Zutabea Aurretik',\r
+                       insertAfter             : 'Txertatu Zutabea Ostean',\r
+                       deleteColumn    : 'Ezabatu Zutabeak'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Botoiaren Ezaugarriak',\r
+               text            : 'Testua (Balorea)',\r
+               type            : 'Mota',\r
+               typeBtn         : 'Botoia',\r
+               typeSbm         : 'Bidali',\r
+               typeRst         : 'Garbitu'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Kontrol-laukiko Ezaugarriak',\r
+               radioTitle      : 'Aukera-botoiaren Ezaugarriak',\r
+               value           : 'Balorea',\r
+               selected        : 'Hautatuta'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Formularioaren Ezaugarriak',\r
+               menu            : 'Formularioaren Ezaugarriak',\r
+               action          : 'Ekintza',\r
+               method          : 'Metodoa',\r
+               encoding        : 'Kodeketa',\r
+               target          : 'Target (Helburua)',\r
+               targetNotSet    : '<Ezarri gabe>',\r
+               targetNew       : 'Leiho Berria (_blank)',\r
+               targetTop       : 'Goiko Leihoa (_top)',\r
+               targetSelf      : 'Leiho Berdina (_self)',\r
+               targetParent    : 'Leiho Gurasoa (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Hautespen Eremuaren Ezaugarriak',\r
+               selectInfo      : 'Informazioa',\r
+               opAvail         : 'Aukera Eskuragarriak',\r
+               value           : 'Balorea',\r
+               size            : 'Tamaina',\r
+               lines           : 'lerro kopurura',\r
+               chkMulti        : 'Hautaketa anitzak baimendu',\r
+               opText          : 'Testua',\r
+               opValue         : 'Balorea',\r
+               btnAdd          : 'Gehitu',\r
+               btnModify       : 'Aldatu',\r
+               btnUp           : 'Gora',\r
+               btnDown         : 'Behera',\r
+               btnSetValue : 'Aukeratutako balorea ezarri',\r
+               btnDelete       : 'Ezabatu'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Testu-arearen Ezaugarriak',\r
+               cols            : 'Zutabeak',\r
+               rows            : 'Lerroak'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Testu Eremuaren Ezaugarriak',\r
+               name            : 'Izena',\r
+               value           : 'Balorea',\r
+               charWidth       : 'Zabalera',\r
+               maxChars        : 'Zenbat karaktere gehienez',\r
+               type            : 'Mota',\r
+               typeText        : 'Testua',\r
+               typePass        : 'Pasahitza'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Ezkutuko Eremuaren Ezaugarriak',\r
+               name    : 'Izena',\r
+               value   : 'Balorea'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Irudi Ezaugarriak',\r
+               titleButton     : 'Irudi Botoiaren Ezaugarriak',\r
+               menu            : 'Irudi Ezaugarriak',\r
+               infoTab : 'Irudi informazioa',\r
+               btnUpload       : 'Zerbitzarira bidalia',\r
+               url             : 'URL',\r
+               upload  : 'Gora Kargatu',\r
+               alt             : 'Ordezko Testua',\r
+               width           : 'Zabalera',\r
+               height  : 'Altuera',\r
+               lockRatio       : 'Erlazioa Blokeatu',\r
+               resetSize       : 'Tamaina Berrezarri',\r
+               border  : 'Ertza',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Lerrokatu',\r
+               alignLeft       : 'Ezkerrera',\r
+               alignAbsBottom: 'Abs Behean',\r
+               alignAbsMiddle: 'Abs Erdian',\r
+               alignBaseline   : 'Oinan',\r
+               alignBottom     : 'Behean',\r
+               alignMiddle     : 'Erdian',\r
+               alignRight      : 'Eskuman',\r
+               alignTextTop    : 'Testua Goian',\r
+               alignTop        : 'Goian',\r
+               preview : 'Aurrebista',\r
+               alertUrl        : 'Mesedez Irudiaren URLa idatzi',\r
+               linkTab : 'Esteka',\r
+               button2Img      : 'Aukeratutako irudi botoia, irudi normal batean eraldatu nahi duzu?',\r
+               img2Button      : 'Aukeratutako irudia, irudi botoi batean eraldatu nahi duzu?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flasharen Ezaugarriak',\r
+               propertiesTab   : 'Ezaugarriak',\r
+               title           : 'Flasharen Ezaugarriak',\r
+               chkPlay         : 'Automatikoki Erreproduzitu',\r
+               chkLoop         : 'Begizta',\r
+               chkMenu         : 'Flasharen Menua Gaitu',\r
+               chkFull         : 'Onartu Pantaila osoa',\r
+               scale           : 'Eskalatu',\r
+               scaleAll                : 'Dena erakutsi',\r
+               scaleNoBorder   : 'Ertzik gabe',\r
+               scaleFit                : 'Doitu',\r
+               access                  : 'Scriptak baimendu',\r
+               accessAlways    : 'Beti',\r
+               accessSameDomain        : 'Domeinu berdinekoak',\r
+               accessNever     : 'Inoiz ere ez',\r
+               align           : 'Lerrokatu',\r
+               alignLeft       : 'Ezkerrera',\r
+               alignAbsBottom: 'Abs Behean',\r
+               alignAbsMiddle: 'Abs Erdian',\r
+               alignBaseline   : 'Oinan',\r
+               alignBottom     : 'Behean',\r
+               alignMiddle     : 'Erdian',\r
+               alignRight      : 'Eskuman',\r
+               alignTextTop    : 'Testua Goian',\r
+               alignTop        : 'Goian',\r
+               quality         : 'Kalitatea',\r
+               qualityBest              : 'Hoberena',\r
+               qualityHigh              : 'Altua',\r
+               qualityAutoHigh  : 'Auto Altua',\r
+               qualityMedium    : 'Ertaina',\r
+               qualityAutoLow   : 'Auto Baxua',\r
+               qualityLow               : 'Baxua',\r
+               windowModeWindow         : 'Leihoa',\r
+               windowModeOpaque         : 'Opakoa',\r
+               windowModeTransparent    : 'Gardena',\r
+               windowMode      : 'Leihoaren modua',\r
+               flashvars       : 'Flash Aldagaiak',\r
+               bgcolor : 'Atzeko kolorea',\r
+               width   : 'Zabalera',\r
+               height  : 'Altuera',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'Mesedez URL esteka idatzi',\r
+               validateWidth : 'Zabalera zenbaki bat izan behar da.',\r
+               validateHeight : 'Altuera zenbaki bat izan behar da.',\r
+               validateHSpace : 'HSpace zenbaki bat izan behar da.',\r
+               validateVSpace : 'VSpace zenbaki bat izan behar da.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Ortografia',\r
+               title                   : 'Ortografia zuzenketa',\r
+               notAvailable    : 'Barkatu baina momentu honetan zerbitzua ez dago erabilgarri.',\r
+               errorLoading    : 'Errorea gertatu da aplikazioa zerbitzaritik kargatzean: %s.',\r
+               notInDic                : 'Ez dago hiztegian',\r
+               changeTo                : 'Honekin ordezkatu',\r
+               btnIgnore               : 'Ezikusi',\r
+               btnIgnoreAll    : 'Denak Ezikusi',\r
+               btnReplace              : 'Ordezkatu',\r
+               btnReplaceAll   : 'Denak Ordezkatu',\r
+               btnUndo                 : 'Desegin',\r
+               noSuggestions   : '- Iradokizunik ez -',\r
+               progress                : 'Zuzenketa ortografikoa martxan...',\r
+               noMispell               : 'Zuzenketa ortografikoa bukatuta: Akatsik ez',\r
+               noChanges               : 'Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu',\r
+               oneChange               : 'Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da',\r
+               manyChanges             : 'Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira',\r
+               ieSpellDownload : 'Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Aurpegierak',\r
+               title   : 'Aurpegiera Sartu'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 elementua'\r
+       },\r
+\r
+       numberedlist : 'Zenbakidun Zerrenda',\r
+       bulletedlist : 'Buletdun Zerrenda',\r
+       indent : 'Handitu Koska',\r
+       outdent : 'Txikitu Koska',\r
+\r
+       justify :\r
+       {\r
+               left : 'Lerrokatu Ezkerrean',\r
+               center : 'Lerrokatu Erdian',\r
+               right : 'Lerrokatu Eskuman',\r
+               block : 'Justifikatu'\r
+       },\r
+\r
+       blockquote : 'Aipamen blokea',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Itsatsi',\r
+               cutError        : 'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+X).',\r
+               copyError       : 'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+C).',\r
+               pasteMsg        : 'Mesedez teklatua erabilita (<STRONG>Ctrl+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.',\r
+               securityMsg     : 'Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Itsatsi Word-etik',\r
+               title : 'Itsatsi Word-etik',\r
+               advice : 'Mesedez teklatua erabilita (<STRONG>Ctrl+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.',\r
+               ignoreFontFace : 'Letra Motaren definizioa ezikusi',\r
+               removeStyle : 'Estilo definizioak kendu'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Testu Arrunta bezala Itsatsi',\r
+               title : 'Testu Arrunta bezala Itsatsi'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Txantiloiak',\r
+               title : 'Eduki Txantiloiak',\r
+               insertOption: 'Ordeztu oraingo edukiak',\r
+               selectPromptMsg: 'Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):',\r
+               emptyListMsg : '(Ez dago definitutako txantiloirik)'\r
+       },\r
+\r
+       showBlocks : 'Blokeak erakutsi',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Estiloa',\r
+               voiceLabel : 'Estiloak',\r
+               panelVoiceLabel : 'Estilo bat aukeratu',\r
+               panelTitle1 : 'Bloke Estiloak',\r
+               panelTitle2 : 'Inline Estiloak',\r
+               panelTitle3 : 'Objektu Estiloak'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formatua',\r
+               voiceLabel : 'Formatua',\r
+               panelTitle : 'Formatua',\r
+               panelVoiceLabel : 'Aukeratu paragrafo formatu bat',\r
+\r
+               tag_p : 'Arrunta',\r
+               tag_pre : 'Formateatua',\r
+               tag_address : 'Helbidea',\r
+               tag_h1 : 'Izenburua 1',\r
+               tag_h2 : 'Izenburua 2',\r
+               tag_h3 : 'Izenburua 3',\r
+               tag_h4 : 'Izenburua 4',\r
+               tag_h5 : 'Izenburua 5',\r
+               tag_h6 : 'Izenburua 6',\r
+               tag_div : 'Paragrafoa (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Letra-tipoa',\r
+               voiceLabel : 'Letra-tipoa',\r
+               panelTitle : 'Letra-tipoa',\r
+               panelVoiceLabel : 'Aukeratu letra-tipoa'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Tamaina',\r
+               voiceLabel : 'Tamaina',\r
+               panelTitle : 'Tamaina',\r
+               panelVoiceLabel : 'Aukeratu letraren tamaina'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Testu Kolorea',\r
+               bgColorTitle : 'Atzeko kolorea',\r
+               auto : 'Automatikoa',\r
+               more : 'Kolore gehiago...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Ortografia Zuzenketa Idatzi Ahala (SCAYT)',\r
+               enable : 'Gaitu SCAYT',\r
+               disable : 'Desgaitu SCAYT',\r
+               about : 'SCAYTi buruz',\r
+               toggle : 'SCAYT aldatu',\r
+               options : 'Aukerak',\r
+               langs : 'Hizkuntzak',\r
+               moreSuggestions : 'Iradokizun gehiago',\r
+               ignore : 'Baztertu',\r
+               ignoreAll : 'Denak baztertu',\r
+               addWord : 'Hitza Gehitu',\r
+               emptyDic : 'Hiztegiaren izena ezin da hutsik egon.',\r
+               optionsTab : 'Aukerak',\r
+               languagesTab : 'Hizkuntzak',\r
+               dictionariesTab : 'Hiztegiak',\r
+               aboutTab : 'Honi buruz'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'CKEditor(r)i buruz',\r
+               dlgTitle : 'CKEditor(r)i buruz',\r
+               moreInfo : 'Lizentziari buruzko informazioa gure webgunean:',\r
+               copy : 'Copyright &copy; $1. Eskubide guztiak erreserbaturik.'\r
+       },\r
+\r
+       maximize : 'Maximizatu',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Aingura',\r
+               flash : 'Flash Animazioa',\r
+               div : 'Orrialde Saltoa',\r
+               unknown : 'Objektu ezezaguna'\r
+       },\r
+\r
+       resize : 'Arrastatu tamaina aldatzeko'\r
+};\r
diff --git a/_source/lang/fa.js b/_source/lang/fa.js
new file mode 100644 (file)
index 0000000..4910818
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Persian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['fa'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'rtl',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'منبع',\r
+       newPage                 : 'برگهٴ تازه',\r
+       save                    : 'ذخیره',\r
+       preview                 : 'پیشنمایش',\r
+       cut                             : 'برش',\r
+       copy                    : 'کپی',\r
+       paste                   : 'چسباندن',\r
+       print                   : 'چاپ',\r
+       underline               : 'خطزیردار',\r
+       bold                    : 'درشت',\r
+       italic                  : 'خمیده',\r
+       selectAll               : 'گزینش همه',\r
+       removeFormat    : 'برداشتن فرمت',\r
+       strike                  : 'میانخط',\r
+       subscript               : 'زیرنویس',\r
+       superscript             : 'بالانویس',\r
+       horizontalrule  : 'گنجاندن خط ِافقی',\r
+       pagebreak               : 'گنجاندن شکستگی ِپایان ِبرگه',\r
+       unlink                  : 'برداشتن پیوند',\r
+       undo                    : 'واچیدن',\r
+       redo                    : 'بازچیدن',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'فهرستنمایی سرور',\r
+               url                             : 'URL',\r
+               protocol                : 'پروتکل',\r
+               upload                  : 'انتقال به سرور',\r
+               uploadSubmit    : 'به سرور بفرست',\r
+               image                   : 'تصویر',\r
+               flash                   : 'Flash',\r
+               form                    : 'فرم',\r
+               checkbox                : 'خانهٴ گزینهای',\r
+               radio           : 'دکمهٴ رادیویی',\r
+               textField               : 'فیلد متنی',\r
+               textarea                : 'ناحیهٴ متنی',\r
+               hiddenField             : 'فیلد پنهان',\r
+               button                  : 'دکمه',\r
+               select  : 'فیلد چندگزینهای',\r
+               imageButton             : 'دکمهٴ تصویری',\r
+               notSet                  : '<تعیننشده>',\r
+               id                              : 'شناسه',\r
+               name                    : 'نام',\r
+               langDir                 : 'جهتنمای زبان',\r
+               langDirLtr              : 'چپ به راست (LTR)',\r
+               langDirRtl              : 'راست به چپ (RTL)',\r
+               langCode                : 'کد زبان',\r
+               longDescr               : 'URL توصیف طولانی',\r
+               cssClass                : 'کلاسهای شیوهنامه(Stylesheet)',\r
+               advisoryTitle   : 'عنوان کمکی',\r
+               cssStyle                : 'شیوه(style)',\r
+               ok                              : 'پذیرش',\r
+               cancel                  : 'انصراف',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'پیشرفته',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'گنجاندن نویسهٴ ویژه',\r
+               title           : 'گزینش نویسهٴویژه'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'گنجاندن/ویرایش ِپیوند',\r
+               menu            : 'ویرایش پیوند',\r
+               title           : 'پیوند',\r
+               info            : 'اطلاعات پیوند',\r
+               target          : 'مقصد',\r
+               upload          : 'انتقال به سرور',\r
+               advanced        : 'پیشرفته',\r
+               type            : 'نوع پیوند',\r
+               toAnchor        : 'لنگر در همین صفحه',\r
+               toEmail         : 'پست الکترونیکی',\r
+               target          : 'مقصد',\r
+               targetNotSet    : '<تعیننشده>',\r
+               targetFrame     : '<فریم>',\r
+               targetPopup     : '<پنجرهٴ پاپاپ>',\r
+               targetNew       : 'پنجرهٴ دیگر (_blank)',\r
+               targetTop       : 'بالاترین پنجره (_top)',\r
+               targetSelf      : 'همان پنجره (_self)',\r
+               targetParent    : 'پنجرهٴ والد (_parent)',\r
+               targetFrameName : 'نام فریم مقصد',\r
+               targetPopupName : 'نام پنجرهٴ پاپاپ',\r
+               popupFeatures   : 'ویژگیهای پنجرهٴ پاپاپ',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'نوار وضعیت',\r
+               popupLocationBar        : 'نوار موقعیت',\r
+               popupToolbar    : 'نوارابزار',\r
+               popupMenuBar    : 'نوار منو',\r
+               popupFullScreen : 'تمامصفحه (IE)',\r
+               popupScrollBars : 'میلههای پیمایش',\r
+               popupDependent  : 'وابسته (Netscape)',\r
+               popupWidth              : 'پهنا',\r
+               popupLeft               : 'موقعیت ِچپ',\r
+               popupHeight             : 'درازا',\r
+               popupTop                : 'موقعیت ِبالا',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'جهتنمای زبان',\r
+               langDirNotSet   : '<تعیننشده>',\r
+               langDirLTR              : 'چپ به راست (LTR)',\r
+               langDirRTL              : 'راست به چپ (RTL)',\r
+               acccessKey              : 'کلید دستیابی',\r
+               name                    : 'نام',\r
+               langCode                : 'جهتنمای زبان',\r
+               tabIndex                : 'نمایهٴ دسترسی با Tab',\r
+               advisoryTitle   : 'عنوان کمکی',\r
+               advisoryContentType     : 'نوع محتوای کمکی',\r
+               cssClasses              : 'کلاسهای شیوهنامه(Stylesheet)',\r
+               charset                 : 'نویسهگان منبع ِپیوندشده',\r
+               styles                  : 'شیوه(style)',\r
+               selectAnchor    : 'یک لنگر برگزینید',\r
+               anchorName              : 'با نام لنگر',\r
+               anchorId                : 'با شناسهٴ المان',\r
+               emailAddress    : 'نشانی پست الکترونیکی',\r
+               emailSubject    : 'موضوع پیام',\r
+               emailBody               : 'متن پیام',\r
+               noAnchors               : '(در این سند لنگری دردسترس نیست)',\r
+               noUrl                   : 'لطفا URL پیوند را بنویسید',\r
+               noEmail                 : 'لطفا نشانی پست الکترونیکی را بنویسید'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'گنجاندن/ویرایش ِلنگر',\r
+               menu            : 'ویژگیهای لنگر',\r
+               title           : 'ویژگیهای لنگر',\r
+               name            : 'نام لنگر',\r
+               errorName       : 'لطفا نام لنگر را بنویسید'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'جستجو و جایگزینی',\r
+               find                            : 'جستجو',\r
+               replace                         : 'جایگزینی',\r
+               findWhat                        : 'چهچیز را مییابید:',\r
+               replaceWith                     : 'جایگزینی با:',\r
+               notFoundMsg                     : 'متن موردنظر یافت نشد.',\r
+               matchCase                       : 'همسانی در بزرگی و کوچکی نویسهها',\r
+               matchWord                       : 'همسانی با واژهٴ کامل',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'جایگزینی همهٴ یافتهها',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'جدول',\r
+               title           : 'ویژگیهای جدول',\r
+               menu            : 'ویژگیهای جدول',\r
+               deleteTable     : 'پاککردن جدول',\r
+               rows            : 'سطرها',\r
+               columns         : 'ستونها',\r
+               border          : 'اندازهٴ لبه',\r
+               align           : 'چینش',\r
+               alignNotSet     : '<تعیننشده>',\r
+               alignLeft       : 'چپ',\r
+               alignCenter     : 'وسط',\r
+               alignRight      : 'راست',\r
+               width           : 'پهنا',\r
+               widthPx         : 'پیکسل',\r
+               widthPc         : 'درصد',\r
+               height          : 'درازا',\r
+               cellSpace       : 'فاصلهٴ میان سلولها',\r
+               cellPad         : 'فاصلهٴ پرشده در سلول',\r
+               caption         : 'عنوان',\r
+               summary         : 'خلاصه',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'سلول',\r
+                       insertBefore    : 'افزودن سلول قبل از',\r
+                       insertAfter             : 'افزودن سلول بعد از',\r
+                       deleteCell              : 'حذف سلولها',\r
+                       merge                   : 'ادغام سلولها',\r
+                       mergeRight              : 'ادغام به راست',\r
+                       mergeDown               : 'ادغام به پایین',\r
+                       splitHorizontal : 'جدا کردن افقی سلول',\r
+                       splitVertical   : 'جدا کردن عمودی سلول',\r
+                       title                   : 'ویژگیهای سلول',\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'سطر',\r
+                       insertBefore    : 'افزودن سطر قبل از',\r
+                       insertAfter             : 'افزودن سطر بعد از',\r
+                       deleteRow               : 'حذف سطرها'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'ستون',\r
+                       insertBefore    : 'افزودن ستون قبل از',\r
+                       insertAfter             : 'افزودن ستون بعد از',\r
+                       deleteColumn    : 'حذف ستونها'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'ویژگیهای دکمه',\r
+               text            : 'متن (مقدار)',\r
+               type            : 'نوع',\r
+               typeBtn         : 'دکمه',\r
+               typeSbm         : 'Submit',\r
+               typeRst         : 'بازنشانی (Reset)'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'ویژگیهای خانهٴ گزینهای',\r
+               radioTitle      : 'ویژگیهای دکمهٴ رادیویی',\r
+               value           : 'مقدار',\r
+               selected        : 'برگزیده'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'ویژگیهای فرم',\r
+               menu            : 'ویژگیهای فرم',\r
+               action          : 'رویداد',\r
+               method          : 'متد',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'مقصد',\r
+               targetNotSet    : '<تعیننشده>',\r
+               targetNew       : 'پنجرهٴ دیگر (_blank)',\r
+               targetTop       : 'بالاترین پنجره (_top)',\r
+               targetSelf      : 'همان پنجره (_self)',\r
+               targetParent    : 'پنجرهٴ والد (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'ویژگیهای فیلد چندگزینهای',\r
+               selectInfo      : 'اطلاعات',\r
+               opAvail         : 'گزینههای دردسترس',\r
+               value           : 'مقدار',\r
+               size            : 'اندازه',\r
+               lines           : 'خطوط',\r
+               chkMulti        : 'گزینش چندگانه فراهم باشد',\r
+               opText          : 'متن',\r
+               opValue         : 'مقدار',\r
+               btnAdd          : 'افزودن',\r
+               btnModify       : 'ویرایش',\r
+               btnUp           : 'بالا',\r
+               btnDown         : 'پائین',\r
+               btnSetValue : 'تنظیم به عنوان مقدار ِبرگزیده',\r
+               btnDelete       : 'پاککردن'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'ویژگیهای ناحیهٴ متنی',\r
+               cols            : 'ستونها',\r
+               rows            : 'سطرها'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'ویژگیهای فیلد متنی',\r
+               name            : 'نام',\r
+               value           : 'مقدار',\r
+               charWidth       : 'پهنای نویسه',\r
+               maxChars        : 'بیشینهٴ نویسهها',\r
+               type            : 'نوع',\r
+               typeText        : 'متن',\r
+               typePass        : 'گذرواژه'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'ویژگیهای فیلد پنهان',\r
+               name    : 'نام',\r
+               value   : 'مقدار'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'ویژگیهای تصویر',\r
+               titleButton     : 'ویژگیهای دکمهٴ تصویری',\r
+               menu            : 'ویژگیهای تصویر',\r
+               infoTab : 'اطلاعات تصویر',\r
+               btnUpload       : 'به سرور بفرست',\r
+               url             : 'URL',\r
+               upload  : 'انتقال به سرور',\r
+               alt             : 'متن جایگزین',\r
+               width           : 'پهنا',\r
+               height  : 'درازا',\r
+               lockRatio       : 'قفلکردن ِنسبت',\r
+               resetSize       : 'بازنشانی اندازه',\r
+               border  : 'لبه',\r
+               hSpace  : 'فاصلهٴ افقی',\r
+               vSpace  : 'فاصلهٴ عمودی',\r
+               align           : 'چینش',\r
+               alignLeft       : 'چپ',\r
+               alignAbsBottom: 'پائین مطلق',\r
+               alignAbsMiddle: 'وسط مطلق',\r
+               alignBaseline   : 'خطپایه',\r
+               alignBottom     : 'پائین',\r
+               alignMiddle     : 'وسط',\r
+               alignRight      : 'راست',\r
+               alignTextTop    : 'متن بالا',\r
+               alignTop        : 'بالا',\r
+               preview : 'پیشنمایش',\r
+               alertUrl        : 'لطفا URL تصویر را بنویسید',\r
+               linkTab : 'پیوند',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'ویژگیهای Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'ویژگیهای Flash',\r
+               chkPlay         : 'آغاز ِخودکار',\r
+               chkLoop         : 'اجرای پیاپی',\r
+               chkMenu         : 'دردسترسبودن منوی Flash',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'مقیاس',\r
+               scaleAll                : 'نمایش همه',\r
+               scaleNoBorder   : 'بدون کران',\r
+               scaleFit                : 'جایگیری کامل',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'چینش',\r
+               alignLeft       : 'چپ',\r
+               alignAbsBottom: 'پائین مطلق',\r
+               alignAbsMiddle: 'وسط مطلق',\r
+               alignBaseline   : 'خطپایه',\r
+               alignBottom     : 'پائین',\r
+               alignMiddle     : 'وسط',\r
+               alignRight      : 'راست',\r
+               alignTextTop    : 'متن بالا',\r
+               alignTop        : 'بالا',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'رنگ پسزمینه',\r
+               width   : 'پهنا',\r
+               height  : 'درازا',\r
+               hSpace  : 'فاصلهٴ افقی',\r
+               vSpace  : 'فاصلهٴ عمودی',\r
+               validateSrc : 'لطفا URL پیوند را بنویسید',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'بررسی املا',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'در واژهنامه یافت نشد',\r
+               changeTo                : 'تغییر به',\r
+               btnIgnore               : 'چشمپوشی',\r
+               btnIgnoreAll    : 'چشمپوشی همه',\r
+               btnReplace              : 'جایگزینی',\r
+               btnReplaceAll   : 'جایگزینی همه',\r
+               btnUndo                 : 'واچینش',\r
+               noSuggestions   : '- پیشنهادی نیست -',\r
+               progress                : 'بررسی املا در حال انجام...',\r
+               noMispell               : 'بررسی املا انجام شد. هیچ غلطاملائی یافت نشد',\r
+               noChanges               : 'بررسی املا انجام شد. هیچ واژهای تغییر نیافت',\r
+               oneChange               : 'بررسی املا انجام شد. یک واژه تغییر یافت',\r
+               manyChanges             : 'بررسی املا انجام شد. %1 واژه تغییر یافت',\r
+               ieSpellDownload : 'بررسیکنندهٴ املا نصب نشده است. آیا میخواهید آن را هماکنون دریافت کنید؟'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'خندانک',\r
+               title   : 'گنجاندن خندانک'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'فهرست شمارهدار',\r
+       bulletedlist : 'فهرست نقطهای',\r
+       indent : 'افزایش تورفتگی',\r
+       outdent : 'کاهش تورفتگی',\r
+\r
+       justify :\r
+       {\r
+               left : 'چپچین',\r
+               center : 'میانچین',\r
+               right : 'راستچین',\r
+               block : 'بلوکچین'\r
+       },\r
+\r
+       blockquote : 'بلوک نقل قول',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'چسباندن',\r
+               cutError        : 'تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحهکلید این کار را انجام دهید (Ctrl+X).',\r
+               copyError       : 'تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپیکردن را انجام دهد. لطفا با دکمههای صفحهکلید این کار را انجام دهید (Ctrl+C).',\r
+               pasteMsg        : 'لطفا متن را با کلیدهای (<STRONG>Ctrl+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.',\r
+               securityMsg     : 'به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمیتواند دسترسی مستقیم به دادههای clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'چسباندن از Word',\r
+               title : 'چسباندن از Word',\r
+               advice : 'لطفا متن را با کلیدهای (<STRONG>Ctrl+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.',\r
+               ignoreFontFace : 'چشمپوشی از تعاریف نوع قلم',\r
+               removeStyle : 'چشمپوشی از تعاریف سبک (style)'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'چسباندن به عنوان متن ِساده',\r
+               title : 'چسباندن به عنوان متن ِساده'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'الگوها',\r
+               title : 'الگوهای محتویات',\r
+               insertOption: 'محتویات کنونی جایگزین شوند',\r
+               selectPromptMsg: 'لطفا الگوی موردنظر را برای بازکردن در ویرایشگر برگزینید<br>(محتویات کنونی از دست خواهند رفت):',\r
+               emptyListMsg : '(الگوئی تعریف نشده است)'\r
+       },\r
+\r
+       showBlocks : 'نمایش بلوکها',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'سبک',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'فرمت',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'فرمت',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'نرمال',\r
+               tag_pre : 'فرمتشده',\r
+               tag_address : 'آدرس',\r
+               tag_h1 : 'سرنویس 1',\r
+               tag_h2 : 'سرنویس 2',\r
+               tag_h3 : 'سرنویس 3',\r
+               tag_h4 : 'سرنویس 4',\r
+               tag_h5 : 'سرنویس 5',\r
+               tag_h6 : 'سرنویس 6',\r
+               tag_div : 'بند'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'قلم',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'قلم',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'اندازه',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'اندازه',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'رنگ متن',\r
+               bgColorTitle : 'رنگ پسزمینه',\r
+               auto : 'خودکار',\r
+               more : 'رنگهای بیشتر...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/fi.js b/_source/lang/fi.js
new file mode 100644 (file)
index 0000000..d353c4a
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Finnish language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['fi'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Koodi',\r
+       newPage                 : 'Tyhjennä',\r
+       save                    : 'Tallenna',\r
+       preview                 : 'Esikatsele',\r
+       cut                             : 'Leikkaa',\r
+       copy                    : 'Kopioi',\r
+       paste                   : 'Liitä',\r
+       print                   : 'Tulosta',\r
+       underline               : 'Alleviivattu',\r
+       bold                    : 'Lihavoitu',\r
+       italic                  : 'Kursivoitu',\r
+       selectAll               : 'Valitse kaikki',\r
+       removeFormat    : 'Poista muotoilu',\r
+       strike                  : 'Yliviivattu',\r
+       subscript               : 'Alaindeksi',\r
+       superscript             : 'Yläindeksi',\r
+       horizontalrule  : 'Lisää murtoviiva',\r
+       pagebreak               : 'Lisää sivun vaihto',\r
+       unlink                  : 'Poista linkki',\r
+       undo                    : 'Kumoa',\r
+       redo                    : 'Toista',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Selaa palvelinta',\r
+               url                             : 'Osoite',\r
+               protocol                : 'Protokolla',\r
+               upload                  : 'Lisää tiedosto',\r
+               uploadSubmit    : 'Lähetä palvelimelle',\r
+               image                   : 'Kuva',\r
+               flash                   : 'Flash',\r
+               form                    : 'Lomake',\r
+               checkbox                : 'Valintaruutu',\r
+               radio           : 'Radiopainike',\r
+               textField               : 'Tekstikenttä',\r
+               textarea                : 'Tekstilaatikko',\r
+               hiddenField             : 'Piilokenttä',\r
+               button                  : 'Painike',\r
+               select  : 'Valintakenttä',\r
+               imageButton             : 'Kuvapainike',\r
+               notSet                  : '<ei asetettu>',\r
+               id                              : 'Tunniste',\r
+               name                    : 'Nimi',\r
+               langDir                 : 'Kielen suunta',\r
+               langDirLtr              : 'Vasemmalta oikealle (LTR)',\r
+               langDirRtl              : 'Oikealta vasemmalle (RTL)',\r
+               langCode                : 'Kielikoodi',\r
+               longDescr               : 'Pitkän kuvauksen URL',\r
+               cssClass                : 'Tyyliluokat',\r
+               advisoryTitle   : 'Avustava otsikko',\r
+               cssStyle                : 'Tyyli',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Peruuta',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Lisäominaisuudet',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Lisää erikoismerkki',\r
+               title           : 'Valitse erikoismerkki'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Lisää linkki/muokkaa linkkiä',\r
+               menu            : 'Muokkaa linkkiä',\r
+               title           : 'Linkki',\r
+               info            : 'Linkin tiedot',\r
+               target          : 'Kohde',\r
+               upload          : 'Lisää tiedosto',\r
+               advanced        : 'Lisäominaisuudet',\r
+               type            : 'Linkkityyppi',\r
+               toAnchor        : 'Ankkuri tässä sivussa',\r
+               toEmail         : 'Sähköposti',\r
+               target          : 'Kohde',\r
+               targetNotSet    : '<ei asetettu>',\r
+               targetFrame     : '<kehys>',\r
+               targetPopup     : '<popup ikkuna>',\r
+               targetNew       : 'Uusi ikkuna (_blank)',\r
+               targetTop       : 'Päällimmäisin ikkuna (_top)',\r
+               targetSelf      : 'Sama ikkuna (_self)',\r
+               targetParent    : 'Emoikkuna (_parent)',\r
+               targetFrameName : 'Kohdekehyksen nimi',\r
+               targetPopupName : 'Popup ikkunan nimi',\r
+               popupFeatures   : 'Popup ikkunan ominaisuudet',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Tilarivi',\r
+               popupLocationBar        : 'Osoiterivi',\r
+               popupToolbar    : 'Vakiopainikkeet',\r
+               popupMenuBar    : 'Valikkorivi',\r
+               popupFullScreen : 'Täysi ikkuna (IE)',\r
+               popupScrollBars : 'Vierityspalkit',\r
+               popupDependent  : 'Riippuva (Netscape)',\r
+               popupWidth              : 'Leveys',\r
+               popupLeft               : 'Vasemmalta (px)',\r
+               popupHeight             : 'Korkeus',\r
+               popupTop                : 'Ylhäältä (px)',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Kielen suunta',\r
+               langDirNotSet   : '<ei asetettu>',\r
+               langDirLTR              : 'Vasemmalta oikealle (LTR)',\r
+               langDirRTL              : 'Oikealta vasemmalle (RTL)',\r
+               acccessKey              : 'Pikanäppäin',\r
+               name                    : 'Nimi',\r
+               langCode                : 'Kielen suunta',\r
+               tabIndex                : 'Tabulaattori indeksi',\r
+               advisoryTitle   : 'Avustava otsikko',\r
+               advisoryContentType     : 'Avustava sisällön tyyppi',\r
+               cssClasses              : 'Tyyliluokat',\r
+               charset                 : 'Linkitetty kirjaimisto',\r
+               styles                  : 'Tyyli',\r
+               selectAnchor    : 'Valitse ankkuri',\r
+               anchorName              : 'Ankkurin nimen mukaan',\r
+               anchorId                : 'Ankkurin ID:n mukaan',\r
+               emailAddress    : 'Sähköpostiosoite',\r
+               emailSubject    : 'Aihe',\r
+               emailBody               : 'Viesti',\r
+               noAnchors               : '(Ei ankkureita tässä dokumentissa)',\r
+               noUrl                   : 'Linkille on kirjoitettava URL',\r
+               noEmail                 : 'Kirjoita sähköpostiosoite'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Lisää ankkuri/muokkaa ankkuria',\r
+               menu            : 'Ankkurin ominaisuudet',\r
+               title           : 'Ankkurin ominaisuudet',\r
+               name            : 'Nimi',\r
+               errorName       : 'Ankkurille on kirjoitettava nimi'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Etsi ja korvaa',\r
+               find                            : 'Etsi',\r
+               replace                         : 'Korvaa',\r
+               findWhat                        : 'Etsi mitä:',\r
+               replaceWith                     : 'Korvaa tällä:',\r
+               notFoundMsg                     : 'Etsittyä tekstiä ei löytynyt.',\r
+               matchCase                       : 'Sama kirjainkoko',\r
+               matchWord                       : 'Koko sana',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Korvaa kaikki',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Taulu',\r
+               title           : 'Taulun ominaisuudet',\r
+               menu            : 'Taulun ominaisuudet',\r
+               deleteTable     : 'Poista taulu',\r
+               rows            : 'Rivit',\r
+               columns         : 'Sarakkeet',\r
+               border          : 'Rajan paksuus',\r
+               align           : 'Kohdistus',\r
+               alignNotSet     : '<ei asetettu>',\r
+               alignLeft       : 'Vasemmalle',\r
+               alignCenter     : 'Keskelle',\r
+               alignRight      : 'Oikealle',\r
+               width           : 'Leveys',\r
+               widthPx         : 'pikseliä',\r
+               widthPc         : 'prosenttia',\r
+               height          : 'Korkeus',\r
+               cellSpace       : 'Solujen väli',\r
+               cellPad         : 'Solujen sisennys',\r
+               caption         : 'Otsikko',\r
+               summary         : 'Yhteenveto',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Solu',\r
+                       insertBefore    : 'Lisää solu eteen',\r
+                       insertAfter             : 'Lisää solu perään',\r
+                       deleteCell              : 'Poista solut',\r
+                       merge                   : 'Yhdistä solut',\r
+                       mergeRight              : 'Yhdistä oikealla olevan kanssa',\r
+                       mergeDown               : 'Yhdistä alla olevan kanssa',\r
+                       splitHorizontal : 'Jaa solu vaakasuunnassa',\r
+                       splitVertical   : 'Jaa solu pystysuunnassa',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Rivi',\r
+                       insertBefore    : 'Lisää rivi yläpuolelle',\r
+                       insertAfter             : 'Lisää rivi alapuolelle',\r
+                       deleteRow               : 'Poista rivit'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Sarake',\r
+                       insertBefore    : 'Lisää sarake vasemmalle',\r
+                       insertAfter             : 'Lisää sarake oikealle',\r
+                       deleteColumn    : 'Poista sarakkeet'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Painikkeen ominaisuudet',\r
+               text            : 'Teksti (arvo)',\r
+               type            : 'Tyyppi',\r
+               typeBtn         : 'Painike',\r
+               typeSbm         : 'Lähetä',\r
+               typeRst         : 'Tyhjennä'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Valintaruudun ominaisuudet',\r
+               radioTitle      : 'Radiopainikkeen ominaisuudet',\r
+               value           : 'Arvo',\r
+               selected        : 'Valittu'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Lomakkeen ominaisuudet',\r
+               menu            : 'Lomakkeen ominaisuudet',\r
+               action          : 'Toiminto',\r
+               method          : 'Tapa',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Kohde',\r
+               targetNotSet    : '<ei asetettu>',\r
+               targetNew       : 'Uusi ikkuna (_blank)',\r
+               targetTop       : 'Päällimmäisin ikkuna (_top)',\r
+               targetSelf      : 'Sama ikkuna (_self)',\r
+               targetParent    : 'Emoikkuna (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Valintakentän ominaisuudet',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Ominaisuudet',\r
+               value           : 'Arvo',\r
+               size            : 'Koko',\r
+               lines           : 'Rivit',\r
+               chkMulti        : 'Salli usea valinta',\r
+               opText          : 'Teksti',\r
+               opValue         : 'Arvo',\r
+               btnAdd          : 'Lisää',\r
+               btnModify       : 'Muuta',\r
+               btnUp           : 'Ylös',\r
+               btnDown         : 'Alas',\r
+               btnSetValue : 'Aseta valituksi',\r
+               btnDelete       : 'Poista'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Tekstilaatikon ominaisuudet',\r
+               cols            : 'Sarakkeita',\r
+               rows            : 'Rivejä'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Tekstikentän ominaisuudet',\r
+               name            : 'Nimi',\r
+               value           : 'Arvo',\r
+               charWidth       : 'Leveys',\r
+               maxChars        : 'Maksimi merkkimäärä',\r
+               type            : 'Tyyppi',\r
+               typeText        : 'Teksti',\r
+               typePass        : 'Salasana'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Piilokentän ominaisuudet',\r
+               name    : 'Nimi',\r
+               value   : 'Arvo'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Kuvan ominaisuudet',\r
+               titleButton     : 'Kuvapainikkeen ominaisuudet',\r
+               menu            : 'Kuvan ominaisuudet',\r
+               infoTab : 'Kuvan tiedot',\r
+               btnUpload       : 'Lähetä palvelimelle',\r
+               url             : 'Osoite',\r
+               upload  : 'Lisää kuva',\r
+               alt             : 'Vaihtoehtoinen teksti',\r
+               width           : 'Leveys',\r
+               height  : 'Korkeus',\r
+               lockRatio       : 'Lukitse suhteet',\r
+               resetSize       : 'Alkuperäinen koko',\r
+               border  : 'Raja',\r
+               hSpace  : 'Vaakatila',\r
+               vSpace  : 'Pystytila',\r
+               align           : 'Kohdistus',\r
+               alignLeft       : 'Vasemmalle',\r
+               alignAbsBottom: 'Aivan alas',\r
+               alignAbsMiddle: 'Aivan keskelle',\r
+               alignBaseline   : 'Alas (teksti)',\r
+               alignBottom     : 'Alas',\r
+               alignMiddle     : 'Keskelle',\r
+               alignRight      : 'Oikealle',\r
+               alignTextTop    : 'Ylös (teksti)',\r
+               alignTop        : 'Ylös',\r
+               preview : 'Esikatselu',\r
+               alertUrl        : 'Kirjoita kuvan osoite (URL)',\r
+               linkTab : 'Linkki',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash ominaisuudet',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash ominaisuudet',\r
+               chkPlay         : 'Automaattinen käynnistys',\r
+               chkLoop         : 'Toisto',\r
+               chkMenu         : 'Näytä Flash-valikko',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Levitä',\r
+               scaleAll                : 'Näytä kaikki',\r
+               scaleNoBorder   : 'Ei rajaa',\r
+               scaleFit                : 'Tarkka koko',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Kohdistus',\r
+               alignLeft       : 'Vasemmalle',\r
+               alignAbsBottom: 'Aivan alas',\r
+               alignAbsMiddle: 'Aivan keskelle',\r
+               alignBaseline   : 'Alas (teksti)',\r
+               alignBottom     : 'Alas',\r
+               alignMiddle     : 'Keskelle',\r
+               alignRight      : 'Oikealle',\r
+               alignTextTop    : 'Ylös (teksti)',\r
+               alignTop        : 'Ylös',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Taustaväri',\r
+               width   : 'Leveys',\r
+               height  : 'Korkeus',\r
+               hSpace  : 'Vaakatila',\r
+               vSpace  : 'Pystytila',\r
+               validateSrc : 'Linkille on kirjoitettava URL',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Tarkista oikeinkirjoitus',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Ei sanakirjassa',\r
+               changeTo                : 'Vaihda',\r
+               btnIgnore               : 'Jätä huomioimatta',\r
+               btnIgnoreAll    : 'Jätä kaikki huomioimatta',\r
+               btnReplace              : 'Korvaa',\r
+               btnReplaceAll   : 'Korvaa kaikki',\r
+               btnUndo                 : 'Kumoa',\r
+               noSuggestions   : 'Ei ehdotuksia',\r
+               progress                : 'Tarkistus käynnissä...',\r
+               noMispell               : 'Tarkistus valmis: Ei virheitä',\r
+               noChanges               : 'Tarkistus valmis: Yhtään sanaa ei muutettu',\r
+               oneChange               : 'Tarkistus valmis: Yksi sana muutettiin',\r
+               manyChanges             : 'Tarkistus valmis: %1 sanaa muutettiin',\r
+               ieSpellDownload : 'Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Hymiö',\r
+               title   : 'Lisää hymiö'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Numerointi',\r
+       bulletedlist : 'Luottelomerkit',\r
+       indent : 'Suurenna sisennystä',\r
+       outdent : 'Pienennä sisennystä',\r
+\r
+       justify :\r
+       {\r
+               left : 'Tasaa vasemmat reunat',\r
+               center : 'Keskitä',\r
+               right : 'Tasaa oikeat reunat',\r
+               block : 'Tasaa molemmat reunat'\r
+       },\r
+\r
+       blockquote : 'Lainaus',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Liitä',\r
+               cutError        : 'Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).',\r
+               copyError       : 'Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).',\r
+               pasteMsg        : 'Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Liitä Wordista',\r
+               title : 'Liitä Wordista',\r
+               advice : 'Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Jätä huomioimatta fonttimääritykset',\r
+               removeStyle : 'Poista tyylimääritykset'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Liitä tekstinä',\r
+               title : 'Liitä tekstinä'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Pohjat',\r
+               title : 'Sisältöpohjat',\r
+               insertOption: 'Korvaa editorin koko sisältö',\r
+               selectPromptMsg: 'Valitse pohja editoriin<br>(aiempi sisältö menetetään):',\r
+               emptyListMsg : '(Ei määriteltyjä pohjia)'\r
+       },\r
+\r
+       showBlocks : 'Näytä elementit',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Tyyli',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Muotoilu',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Muotoilu',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normaali',\r
+               tag_pre : 'Muotoiltu',\r
+               tag_address : 'Osoite',\r
+               tag_h1 : 'Otsikko 1',\r
+               tag_h2 : 'Otsikko 2',\r
+               tag_h3 : 'Otsikko 3',\r
+               tag_h4 : 'Otsikko 4',\r
+               tag_h5 : 'Otsikko 5',\r
+               tag_h6 : 'Otsikko 6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Fontti',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Fontti',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Koko',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Koko',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Tekstiväri',\r
+               bgColorTitle : 'Taustaväri',\r
+               auto : 'Automaattinen',\r
+               more : 'Lisää värejä...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/fo.js b/_source/lang/fo.js
new file mode 100644 (file)
index 0000000..37b03f3
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Faroese language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['fo'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Kelda',\r
+       newPage                 : 'Nýggj síða',\r
+       save                    : 'Goym',\r
+       preview                 : 'Frumsýning',\r
+       cut                             : 'Kvett',\r
+       copy                    : 'Avrita',\r
+       paste                   : 'Innrita',\r
+       print                   : 'Prenta',\r
+       underline               : 'Undirstrikað',\r
+       bold                    : 'Feit skrift',\r
+       italic                  : 'Skráskrift',\r
+       selectAll               : 'Markera alt',\r
+       removeFormat    : 'Strika sniðgeving',\r
+       strike                  : 'Yvirstrikað',\r
+       subscript               : 'Lækkað skrift',\r
+       superscript             : 'Hækkað skrift',\r
+       horizontalrule  : 'Ger vatnrætta linju',\r
+       pagebreak               : 'Ger síðuskift',\r
+       unlink                  : 'Strika tilknýti',\r
+       undo                    : 'Angra',\r
+       redo                    : 'Vend aftur',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Ambætarakagi',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokoll',\r
+               upload                  : 'Send til ambætaran',\r
+               uploadSubmit    : 'Send til ambætaran',\r
+               image                   : 'Myndir',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formur',\r
+               checkbox                : 'Flugubein',\r
+               radio           : 'Radioknøttur',\r
+               textField               : 'Tekstteigur',\r
+               textarea                : 'Tekstumráði',\r
+               hiddenField             : 'Fjaldur teigur',\r
+               button                  : 'Knøttur',\r
+               select  : 'Valskrá',\r
+               imageButton             : 'Myndaknøttur',\r
+               notSet                  : '<ikki sett>',\r
+               id                              : 'Id',\r
+               name                    : 'Navn',\r
+               langDir                 : 'Tekstkós',\r
+               langDirLtr              : 'Frá vinstru til høgru (LTR)',\r
+               langDirRtl              : 'Frá høgru til vinstru (RTL)',\r
+               langCode                : 'Málkoda',\r
+               longDescr               : 'Víðkað URL frágreiðing',\r
+               cssClass                : 'Typografi klassar',\r
+               advisoryTitle   : 'Vegleiðandi heiti',\r
+               cssStyle                : 'Typografi',\r
+               ok                              : 'Góðkent',\r
+               cancel                  : 'Avlýst',\r
+               generalTab              : 'Generelt',\r
+               advancedTab             : 'Fjølbroytt',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Set inn sertekn',\r
+               title           : 'Vel sertekn'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Ger/broyt tilknýti',\r
+               menu            : 'Broyt tilknýti',\r
+               title           : 'Tilknýti',\r
+               info            : 'Tilknýtis upplýsingar',\r
+               target          : 'Mál',\r
+               upload          : 'Send til ambætaran',\r
+               advanced        : 'Fjølbroytt',\r
+               type            : 'Tilknýtisslag',\r
+               toAnchor        : 'Tilknýti til marknastein í tekstinum',\r
+               toEmail         : 'Teldupostur',\r
+               target          : 'Mál',\r
+               targetNotSet    : '<ikki sett>',\r
+               targetFrame     : '<ramma>',\r
+               targetPopup     : '<popup vindeyga>',\r
+               targetNew       : 'Nýtt vindeyga (_blank)',\r
+               targetTop       : 'Alt vindeygað (_top)',\r
+               targetSelf      : 'Sama vindeygað (_self)',\r
+               targetParent    : 'Upphavliga vindeygað (_parent)',\r
+               targetFrameName : 'Vís navn vindeygans',\r
+               targetPopupName : 'Popup vindeygans navn',\r
+               popupFeatures   : 'Popup vindeygans víðkaðu eginleikar',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Støðufrágreiðingarbjálki',\r
+               popupLocationBar        : 'Adressulinja',\r
+               popupToolbar    : 'Amboðsbjálki',\r
+               popupMenuBar    : 'Skrábjálki',\r
+               popupFullScreen : 'Fullur skermur (IE)',\r
+               popupScrollBars : 'Rullibjálki',\r
+               popupDependent  : 'Bundið (Netscape)',\r
+               popupWidth              : 'Breidd',\r
+               popupLeft               : 'Frástøða frá vinstru',\r
+               popupHeight             : 'Hædd',\r
+               popupTop                : 'Frástøða frá íerva',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Tekstkós',\r
+               langDirNotSet   : '<ikki sett>',\r
+               langDirLTR              : 'Frá vinstru til høgru (LTR)',\r
+               langDirRTL              : 'Frá høgru til vinstru (RTL)',\r
+               acccessKey              : 'Snarvegisknappur',\r
+               name                    : 'Navn',\r
+               langCode                : 'Tekstkós',\r
+               tabIndex                : 'Inntriv indeks',\r
+               advisoryTitle   : 'Vegleiðandi heiti',\r
+               advisoryContentType     : 'Vegleiðandi innihaldsslag',\r
+               cssClasses              : 'Typografi klassar',\r
+               charset                 : 'Atknýtt teknsett',\r
+               styles                  : 'Typografi',\r
+               selectAnchor    : 'Vel ein marknastein',\r
+               anchorName              : 'Eftir navni á marknasteini',\r
+               anchorId                : 'Eftir element Id',\r
+               emailAddress    : 'Teldupost-adressa',\r
+               emailSubject    : 'Evni',\r
+               emailBody               : 'Breyðtekstur',\r
+               noAnchors               : '(Eingir marknasteinar eru í hesum dokumentið)',\r
+               noUrl                   : 'Vinarliga skriva tilknýti (URL)',\r
+               noEmail                 : 'Vinarliga skriva teldupost-adressu'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Ger/broyt marknastein',\r
+               menu            : 'Eginleikar fyri marknastein',\r
+               title           : 'Eginleikar fyri marknastein',\r
+               name            : 'Heiti marknasteinsins',\r
+               errorName       : 'Vinarliga rita marknasteinsins heiti'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Finn og broyt',\r
+               find                            : 'Leita',\r
+               replace                         : 'Yvirskriva',\r
+               findWhat                        : 'Finn:',\r
+               replaceWith                     : 'Yvirskriva við:',\r
+               notFoundMsg                     : 'Leititeksturin varð ikki funnin',\r
+               matchCase                       : 'Munur á stórum og smáðum bókstavum',\r
+               matchWord                       : 'Bert heil orð',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Yvirskriva alt',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabell',\r
+               title           : 'Eginleikar fyri tabell',\r
+               menu            : 'Eginleikar fyri tabell',\r
+               deleteTable     : 'Strika tabell',\r
+               rows            : 'Røðir',\r
+               columns         : 'Kolonnur',\r
+               border          : 'Bordabreidd',\r
+               align           : 'Justering',\r
+               alignNotSet     : '<Einki valt>',\r
+               alignLeft       : 'Vinstrasett',\r
+               alignCenter     : 'Miðsett',\r
+               alignRight      : 'Høgrasett',\r
+               width           : 'Breidd',\r
+               widthPx         : 'pixels',\r
+               widthPc         : 'prosent',\r
+               height          : 'Hædd',\r
+               cellSpace       : 'Fjarstøða millum meskar',\r
+               cellPad         : 'Meskubreddi',\r
+               caption         : 'Tabellfrágreiðing',\r
+               summary         : 'Samandráttur',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Meski',\r
+                       insertBefore    : 'Set meska inn áðrenn',\r
+                       insertAfter             : 'Set meska inn aftaná',\r
+                       deleteCell              : 'Strika meskar',\r
+                       merge                   : 'Flætta meskar',\r
+                       mergeRight              : 'Flætta meskar til høgru',\r
+                       mergeDown               : 'Flætta saman',\r
+                       splitHorizontal : 'Kloyv meska vatnrætt',\r
+                       splitVertical   : 'Kloyv meska loddrætt',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Rað',\r
+                       insertBefore    : 'Set rað inn áðrenn',\r
+                       insertAfter             : 'Set rað inn aftaná',\r
+                       deleteRow               : 'Strika røðir'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Kolonna',\r
+                       insertBefore    : 'Set kolonnu inn áðrenn',\r
+                       insertAfter             : 'Set kolonnu inn aftaná',\r
+                       deleteColumn    : 'Strika kolonnur'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Eginleikar fyri knøtt',\r
+               text            : 'Tekstur',\r
+               type            : 'Slag',\r
+               typeBtn         : 'Knøttur',\r
+               typeSbm         : 'Send',\r
+               typeRst         : 'Nullstilla'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Eginleikar fyri flugubein',\r
+               radioTitle      : 'Eginleikar fyri radioknøtt',\r
+               value           : 'Virði',\r
+               selected        : 'Valt'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Eginleikar fyri Form',\r
+               menu            : 'Eginleikar fyri Form',\r
+               action          : 'Hending',\r
+               method          : 'Háttur',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Mál',\r
+               targetNotSet    : '<ikki sett>',\r
+               targetNew       : 'Nýtt vindeyga (_blank)',\r
+               targetTop       : 'Alt vindeygað (_top)',\r
+               targetSelf      : 'Sama vindeygað (_self)',\r
+               targetParent    : 'Upphavliga vindeygað (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Eginleikar fyri valskrá',\r
+               selectInfo      : 'Upplýsingar',\r
+               opAvail         : 'Tøkir møguleikar',\r
+               value           : 'Virði',\r
+               size            : 'Stødd',\r
+               lines           : 'Linjur',\r
+               chkMulti        : 'Loyv fleiri valmøguleikum samstundis',\r
+               opText          : 'Tekstur',\r
+               opValue         : 'Virði',\r
+               btnAdd          : 'Legg afturat',\r
+               btnModify       : 'Broyt',\r
+               btnUp           : 'Upp',\r
+               btnDown         : 'Niður',\r
+               btnSetValue : 'Set sum valt virði',\r
+               btnDelete       : 'Strika'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Eginleikar fyri tekstumráði',\r
+               cols            : 'kolonnur',\r
+               rows            : 'røðir'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Eginleikar fyri tekstteig',\r
+               name            : 'Navn',\r
+               value           : 'Virði',\r
+               charWidth       : 'Breidd (sjónlig tekn)',\r
+               maxChars        : 'Mest loyvdu tekn',\r
+               type            : 'Slag',\r
+               typeText        : 'Tekstur',\r
+               typePass        : 'Loyniorð'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Eginleikar fyri fjaldan teig',\r
+               name    : 'Navn',\r
+               value   : 'Virði'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Myndaeginleikar',\r
+               titleButton     : 'Eginleikar fyri myndaknøtt',\r
+               menu            : 'Myndaeginleikar',\r
+               infoTab : 'Myndaupplýsingar',\r
+               btnUpload       : 'Send til ambætaran',\r
+               url             : 'URL',\r
+               upload  : 'Send',\r
+               alt             : 'Alternativur tekstur',\r
+               width           : 'Breidd',\r
+               height  : 'Hædd',\r
+               lockRatio       : 'Læs lutfallið',\r
+               resetSize       : 'Upprunastødd',\r
+               border  : 'Bordi',\r
+               hSpace  : 'Høgri breddi',\r
+               vSpace  : 'Vinstri breddi',\r
+               align           : 'Justering',\r
+               alignLeft       : 'Vinstra',\r
+               alignAbsBottom: 'Abs botnur',\r
+               alignAbsMiddle: 'Abs miðja',\r
+               alignBaseline   : 'Basislinja',\r
+               alignBottom     : 'Botnur',\r
+               alignMiddle     : 'Miðja',\r
+               alignRight      : 'Høgra',\r
+               alignTextTop    : 'Tekst toppur',\r
+               alignTop        : 'Ovast',\r
+               preview : 'Frumsýning',\r
+               alertUrl        : 'Rita slóðina til myndina',\r
+               linkTab : 'Tilknýti',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash eginleikar',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash eginleikar',\r
+               chkPlay         : 'Avspælingin byrjar sjálv',\r
+               chkLoop         : 'Endurspæl',\r
+               chkMenu         : 'Ger Flash skrá virkna',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Skalering',\r
+               scaleAll                : 'Vís alt',\r
+               scaleNoBorder   : 'Eingin bordi',\r
+               scaleFit                : 'Neyv skalering',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Justering',\r
+               alignLeft       : 'Vinstra',\r
+               alignAbsBottom: 'Abs botnur',\r
+               alignAbsMiddle: 'Abs miðja',\r
+               alignBaseline   : 'Basislinja',\r
+               alignBottom     : 'Botnur',\r
+               alignMiddle     : 'Miðja',\r
+               alignRight      : 'Høgra',\r
+               alignTextTop    : 'Tekst toppur',\r
+               alignTop        : 'Ovast',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Bakgrundslitur',\r
+               width   : 'Breidd',\r
+               height  : 'Hædd',\r
+               hSpace  : 'Høgri breddi',\r
+               vSpace  : 'Vinstri breddi',\r
+               validateSrc : 'Vinarliga skriva tilknýti (URL)',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Kanna stavseting',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Finst ikki í orðabókini',\r
+               changeTo                : 'Broyt til',\r
+               btnIgnore               : 'Forfjóna',\r
+               btnIgnoreAll    : 'Forfjóna alt',\r
+               btnReplace              : 'Yvirskriva',\r
+               btnReplaceAll   : 'Yvirskriva alt',\r
+               btnUndo                 : 'Angra',\r
+               noSuggestions   : '- Einki uppskot -',\r
+               progress                : 'Rættstavarin arbeiðir...',\r
+               noMispell               : 'Rættstavarain liðugur: Eingin feilur funnin',\r
+               noChanges               : 'Rættstavarain liðugur: Einki orð varð broytt',\r
+               oneChange               : 'Rættstavarain liðugur: Eitt orð er broytt',\r
+               manyChanges             : 'Rættstavarain liðugur: %1 orð broytt',\r
+               ieSpellDownload : 'Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Vel Smiley'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Talmerktur listi',\r
+       bulletedlist : 'Punktmerktur listi',\r
+       indent : 'Økja reglubrotarinntriv',\r
+       outdent : 'Minka reglubrotarinntriv',\r
+\r
+       justify :\r
+       {\r
+               left : 'Vinstrasett',\r
+               center : 'Miðsett',\r
+               right : 'Høgrasett',\r
+               block : 'Javnir tekstkantar'\r
+       },\r
+\r
+       blockquote : 'Blockquote',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Innrita',\r
+               cutError        : 'Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (CTRL+X).',\r
+               copyError       : 'Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (CTRL+C).',\r
+               pasteMsg        : 'Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>CTRL+V</strong>) og klikk á <strong>Góðtak</strong>.',\r
+               securityMsg     : 'Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Innrita frá Word',\r
+               title : 'Innrita frá Word',\r
+               advice : 'Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>CTRL+V</strong>) og klikk á <strong>Góðtak</strong>.',\r
+               ignoreFontFace : 'Forfjóna Font definitiónirnar',\r
+               removeStyle : 'Strika typografi definitiónir'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Innrita som reinan tekst',\r
+               title : 'Innrita som reinan tekst'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Skabelónir',\r
+               title : 'Innihaldsskabelónir',\r
+               insertOption: 'Yvirskriva núverandi innihald',\r
+               selectPromptMsg: 'Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):',\r
+               emptyListMsg : '(Ongar skabelónir tøkar)'\r
+       },\r
+\r
+       showBlocks : 'Vís blokkar',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Typografi',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Skriftsnið',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Skriftsnið',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Vanligt',\r
+               tag_pre : 'Sniðgivið',\r
+               tag_address : 'Adressa',\r
+               tag_h1 : 'Yvirskrift 1',\r
+               tag_h2 : 'Yvirskrift 2',\r
+               tag_h3 : 'Yvirskrift 3',\r
+               tag_h4 : 'Yvirskrift 4',\r
+               tag_h5 : 'Yvirskrift 5',\r
+               tag_h6 : 'Yvirskrift 6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Skrift',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Skrift',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Skriftstødd',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Skriftstødd',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Tekstlitur',\r
+               bgColorTitle : 'Bakgrundslitur',\r
+               auto : 'Automatiskt',\r
+               more : 'Fleiri litir...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/fr-ca.js b/_source/lang/fr-ca.js
new file mode 100644 (file)
index 0000000..527f6a0
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Canadian French language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['fr-ca'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Source',\r
+       newPage                 : 'Nouvelle page',\r
+       save                    : 'Sauvegarder',\r
+       preview                 : 'Previsualiser',\r
+       cut                             : 'Couper',\r
+       copy                    : 'Copier',\r
+       paste                   : 'Coller',\r
+       print                   : 'Imprimer',\r
+       underline               : 'Souligné',\r
+       bold                    : 'Gras',\r
+       italic                  : 'Italique',\r
+       selectAll               : 'Tout sélectionner',\r
+       removeFormat    : 'Supprimer le formatage',\r
+       strike                  : 'Barrer',\r
+       subscript               : 'Indice',\r
+       superscript             : 'Exposant',\r
+       horizontalrule  : 'Insérer un séparateur',\r
+       pagebreak               : 'Insérer un saut de page',\r
+       unlink                  : 'Supprimer le lien',\r
+       undo                    : 'Annuler',\r
+       redo                    : 'Refaire',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Parcourir le serveur',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocole',\r
+               upload                  : 'Télécharger',\r
+               uploadSubmit    : 'Envoyer sur le serveur',\r
+               image                   : 'Image',\r
+               flash                   : 'Animation Flash',\r
+               form                    : 'Formulaire',\r
+               checkbox                : 'Case à cocher',\r
+               radio           : 'Bouton radio',\r
+               textField               : 'Champ texte',\r
+               textarea                : 'Zone de texte',\r
+               hiddenField             : 'Champ caché',\r
+               button                  : 'Bouton',\r
+               select  : 'Champ de sélection',\r
+               imageButton             : 'Bouton image',\r
+               notSet                  : '<Par défaut>',\r
+               id                              : 'Id',\r
+               name                    : 'Nom',\r
+               langDir                 : 'Sens d\'écriture',\r
+               langDirLtr              : 'De gauche à droite (LTR)',\r
+               langDirRtl              : 'De droite à gauche (RTL)',\r
+               langCode                : 'Code langue',\r
+               longDescr               : 'URL de description longue',\r
+               cssClass                : 'Classes de feuilles de style',\r
+               advisoryTitle   : 'Titre',\r
+               cssStyle                : 'Style',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Annuler',\r
+               generalTab              : 'Général',\r
+               advancedTab             : 'Avancée',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Insérer un caractère spécial',\r
+               title           : 'Insérer un caractère spécial'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Insérer/modifier le lien',\r
+               menu            : 'Modifier le lien',\r
+               title           : 'Propriétés du lien',\r
+               info            : 'Informations sur le lien',\r
+               target          : 'Destination',\r
+               upload          : 'Télécharger',\r
+               advanced        : 'Avancée',\r
+               type            : 'Type de lien',\r
+               toAnchor        : 'Ancre dans cette page',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Destination',\r
+               targetNotSet    : '<Par défaut>',\r
+               targetFrame     : '<Cadre>',\r
+               targetPopup     : '<fenêtre popup>',\r
+               targetNew       : 'Nouvelle fenêtre (_blank)',\r
+               targetTop       : 'Fenêtre supérieure (_top)',\r
+               targetSelf      : 'Même fenêtre (_self)',\r
+               targetParent    : 'Fenêtre mère (_parent)',\r
+               targetFrameName : 'Nom du cadre de destination',\r
+               targetPopupName : 'Nom de la fenêtre popup',\r
+               popupFeatures   : 'Caractéristiques de la fenêtre popup',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Barre d\'état',\r
+               popupLocationBar        : 'Barre d\'adresses',\r
+               popupToolbar    : 'Barre d\'outils',\r
+               popupMenuBar    : 'Barre de menu',\r
+               popupFullScreen : 'Plein écran (IE)',\r
+               popupScrollBars : 'Barres de défilement',\r
+               popupDependent  : 'Dépendante (Netscape)',\r
+               popupWidth              : 'Largeur',\r
+               popupLeft               : 'Position à partir de la gauche',\r
+               popupHeight             : 'Hauteur',\r
+               popupTop                : 'Position à partir du haut',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Sens d\'écriture',\r
+               langDirNotSet   : '<Par défaut>',\r
+               langDirLTR              : 'De gauche à droite (LTR)',\r
+               langDirRTL              : 'De droite à gauche (RTL)',\r
+               acccessKey              : 'Équivalent clavier',\r
+               name                    : 'Nom',\r
+               langCode                : 'Sens d\'écriture',\r
+               tabIndex                : 'Ordre de tabulation',\r
+               advisoryTitle   : 'Titre',\r
+               advisoryContentType     : 'Type de contenu',\r
+               cssClasses              : 'Classes de feuilles de style',\r
+               charset                 : 'Encodage de caractère',\r
+               styles                  : 'Style',\r
+               selectAnchor    : 'Sélectionner une ancre',\r
+               anchorName              : 'Par nom',\r
+               anchorId                : 'Par id',\r
+               emailAddress    : 'Adresse E-Mail',\r
+               emailSubject    : 'Sujet du message',\r
+               emailBody               : 'Corps du message',\r
+               noAnchors               : '(Pas d\'ancre disponible dans le document)',\r
+               noUrl                   : 'Veuillez saisir l\'URL',\r
+               noEmail                 : 'Veuillez saisir l\'adresse e-mail'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Insérer/modifier l\'ancre',\r
+               menu            : 'Propriétés de l\'ancre',\r
+               title           : 'Propriétés de l\'ancre',\r
+               name            : 'Nom de l\'ancre',\r
+               errorName       : 'Veuillez saisir le nom de l\'ancre'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Chercher et Remplacer',\r
+               find                            : 'Chercher',\r
+               replace                         : 'Remplacer',\r
+               findWhat                        : 'Rechercher:',\r
+               replaceWith                     : 'Remplacer par:',\r
+               notFoundMsg                     : 'Le texte indiqué est introuvable.',\r
+               matchCase                       : 'Respecter la casse',\r
+               matchWord                       : 'Mot entier',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Tout remplacer',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tableau',\r
+               title           : 'Propriétés du tableau',\r
+               menu            : 'Propriétés du tableau',\r
+               deleteTable     : 'Supprimer le tableau',\r
+               rows            : 'Lignes',\r
+               columns         : 'Colonnes',\r
+               border          : 'Taille de la bordure',\r
+               align           : 'Alignement',\r
+               alignNotSet     : '<Par défaut>',\r
+               alignLeft       : 'Gauche',\r
+               alignCenter     : 'Centré',\r
+               alignRight      : 'Droite',\r
+               width           : 'Largeur',\r
+               widthPx         : 'pixels',\r
+               widthPc         : 'pourcentage',\r
+               height          : 'Hauteur',\r
+               cellSpace       : 'Espacement',\r
+               cellPad         : 'Contour',\r
+               caption         : 'Titre',\r
+               summary         : 'Résumé',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cellule',\r
+                       insertBefore    : 'Insérer une cellule avant',\r
+                       insertAfter             : 'Insérer une cellule après',\r
+                       deleteCell              : 'Supprimer des cellules',\r
+                       merge                   : 'Fusionner les cellules',\r
+                       mergeRight              : 'Fusionner à droite',\r
+                       mergeDown               : 'Fusionner en bas',\r
+                       splitHorizontal : 'Scinder la cellule horizontalement',\r
+                       splitVertical   : 'Scinder la cellule verticalement',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Ligne',\r
+                       insertBefore    : 'Insérer une ligne avant',\r
+                       insertAfter             : 'Insérer une ligne après',\r
+                       deleteRow               : 'Supprimer des lignes'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Colonne',\r
+                       insertBefore    : 'Insérer une colonne avant',\r
+                       insertAfter             : 'Insérer une colonne après',\r
+                       deleteColumn    : 'Supprimer des colonnes'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Propriétés du bouton',\r
+               text            : 'Texte (Valeur)',\r
+               type            : 'Type',\r
+               typeBtn         : 'Bouton',\r
+               typeSbm         : 'Soumettre',\r
+               typeRst         : 'Réinitialiser'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Propriétés de la case à cocher',\r
+               radioTitle      : 'Propriétés du bouton radio',\r
+               value           : 'Valeur',\r
+               selected        : 'Sélectionné'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Propriétés du formulaire',\r
+               menu            : 'Propriétés du formulaire',\r
+               action          : 'Action',\r
+               method          : 'Méthode',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Destination',\r
+               targetNotSet    : '<Par défaut>',\r
+               targetNew       : 'Nouvelle fenêtre (_blank)',\r
+               targetTop       : 'Fenêtre supérieure (_top)',\r
+               targetSelf      : 'Même fenêtre (_self)',\r
+               targetParent    : 'Fenêtre mère (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Propriétés de la liste/du menu',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Options disponibles',\r
+               value           : 'Valeur',\r
+               size            : 'Taille',\r
+               lines           : 'lignes',\r
+               chkMulti        : 'Sélection multiple',\r
+               opText          : 'Texte',\r
+               opValue         : 'Valeur',\r
+               btnAdd          : 'Ajouter',\r
+               btnModify       : 'Modifier',\r
+               btnUp           : 'Monter',\r
+               btnDown         : 'Descendre',\r
+               btnSetValue : 'Valeur sélectionnée',\r
+               btnDelete       : 'Supprimer'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Propriétés de la zone de texte',\r
+               cols            : 'Colonnes',\r
+               rows            : 'Lignes'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Propriétés du champ texte',\r
+               name            : 'Nom',\r
+               value           : 'Valeur',\r
+               charWidth       : 'Largeur en caractères',\r
+               maxChars        : 'Nombre maximum de caractères',\r
+               type            : 'Type',\r
+               typeText        : 'Texte',\r
+               typePass        : 'Mot de passe'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Propriétés du champ caché',\r
+               name    : 'Nom',\r
+               value   : 'Valeur'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Propriétés de l\'image',\r
+               titleButton     : 'Propriétés du bouton image',\r
+               menu            : 'Propriétés de l\'image',\r
+               infoTab : 'Informations sur l\'image',\r
+               btnUpload       : 'Envoyer sur le serveur',\r
+               url             : 'URL',\r
+               upload  : 'Télécharger',\r
+               alt             : 'Texte de remplacement',\r
+               width           : 'Largeur',\r
+               height  : 'Hauteur',\r
+               lockRatio       : 'Garder les proportions',\r
+               resetSize       : 'Taille originale',\r
+               border  : 'Bordure',\r
+               hSpace  : 'Espacement horizontal',\r
+               vSpace  : 'Espacement vertical',\r
+               align           : 'Alignement',\r
+               alignLeft       : 'Gauche',\r
+               alignAbsBottom: 'Abs Bas',\r
+               alignAbsMiddle: 'Abs Milieu',\r
+               alignBaseline   : 'Bas du texte',\r
+               alignBottom     : 'Bas',\r
+               alignMiddle     : 'Milieu',\r
+               alignRight      : 'Droite',\r
+               alignTextTop    : 'Haut du texte',\r
+               alignTop        : 'Haut',\r
+               preview : 'Prévisualisation',\r
+               alertUrl        : 'Veuillez saisir l\'URL de l\'image',\r
+               linkTab : 'Lien',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Propriétés de l\'animation Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Propriétés de l\'animation Flash',\r
+               chkPlay         : 'Lecture automatique',\r
+               chkLoop         : 'Boucle',\r
+               chkMenu         : 'Activer le menu Flash',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Affichage',\r
+               scaleAll                : 'Par défaut (tout montrer)',\r
+               scaleNoBorder   : 'Sans bordure',\r
+               scaleFit                : 'Ajuster aux dimensions',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Alignement',\r
+               alignLeft       : 'Gauche',\r
+               alignAbsBottom: 'Abs Bas',\r
+               alignAbsMiddle: 'Abs Milieu',\r
+               alignBaseline   : 'Bas du texte',\r
+               alignBottom     : 'Bas',\r
+               alignMiddle     : 'Milieu',\r
+               alignRight      : 'Droite',\r
+               alignTextTop    : 'Haut du texte',\r
+               alignTop        : 'Haut',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Couleur de fond',\r
+               width   : 'Largeur',\r
+               height  : 'Hauteur',\r
+               hSpace  : 'Espacement horizontal',\r
+               vSpace  : 'Espacement vertical',\r
+               validateSrc : 'Veuillez saisir l\'URL',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Orthographe',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Pas dans le dictionnaire',\r
+               changeTo                : 'Changer en',\r
+               btnIgnore               : 'Ignorer',\r
+               btnIgnoreAll    : 'Ignorer tout',\r
+               btnReplace              : 'Remplacer',\r
+               btnReplaceAll   : 'Remplacer tout',\r
+               btnUndo                 : 'Annuler',\r
+               noSuggestions   : '- Pas de suggestion -',\r
+               progress                : 'Vérification d\'orthographe en cours...',\r
+               noMispell               : 'Vérification d\'orthographe terminée: pas d\'erreur trouvée',\r
+               noChanges               : 'Vérification d\'orthographe terminée: Pas de modifications',\r
+               oneChange               : 'Vérification d\'orthographe terminée: Un mot modifié',\r
+               manyChanges             : 'Vérification d\'orthographe terminée: %1 mots modifiés',\r
+               ieSpellDownload : 'Le Correcteur d\'orthographe n\'est pas installé. Souhaitez-vous le télécharger maintenant?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Emoticon',\r
+               title   : 'Insérer un Emoticon'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Liste numérotée',\r
+       bulletedlist : 'Liste à puces',\r
+       indent : 'Augmenter le retrait',\r
+       outdent : 'Diminuer le retrait',\r
+\r
+       justify :\r
+       {\r
+               left : 'Aligner à gauche',\r
+               center : 'Centrer',\r
+               right : 'Aligner à Droite',\r
+               block : 'Texte justifié'\r
+       },\r
+\r
+       blockquote : 'Citation',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Coller',\r
+               cutError        : 'Les paramètres de sécurité de votre navigateur empêchent l\'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).',\r
+               copyError       : 'Les paramètres de sécurité de votre navigateur empêchent l\'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).',\r
+               pasteMsg        : 'Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'A cause des paramètres de sécurité de votre navigateur, l\'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Coller en tant que Word (formaté)',\r
+               title : 'Coller en tant que Word (formaté)',\r
+               advice : 'Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignorer les polices de caractères',\r
+               removeStyle : 'Supprimer les styles'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Coller comme texte',\r
+               title : 'Coller comme texte'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Modèles',\r
+               title : 'Modèles de contenu',\r
+               insertOption: 'Remplacer tout le contenu actuel',\r
+               selectPromptMsg: 'Sélectionner le modèle à ouvrir dans l\'éditeur<br>(le contenu actuel sera remplacé):',\r
+               emptyListMsg : '(Aucun modèle disponible)'\r
+       },\r
+\r
+       showBlocks : 'Afficher les blocs',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Style',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Format',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formaté',\r
+               tag_address : 'Adresse',\r
+               tag_h1 : 'En-tête 1',\r
+               tag_h2 : 'En-tête 2',\r
+               tag_h3 : 'En-tête 3',\r
+               tag_h4 : 'En-tête 4',\r
+               tag_h5 : 'En-tête 5',\r
+               tag_h6 : 'En-tête 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Police',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Police',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Taille',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Taille',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Couleur de caractère',\r
+               bgColorTitle : 'Couleur de fond',\r
+               auto : 'Automatique',\r
+               more : 'Plus de couleurs...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/fr.js b/_source/lang/fr.js
new file mode 100644 (file)
index 0000000..53d5f10
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * French language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['fr'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Editeur de Texte Enrichi, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Source',\r
+       newPage                 : 'Nouvelle page',\r
+       save                    : 'Enregistrer',\r
+       preview                 : 'Aperçu',\r
+       cut                             : 'Couper',\r
+       copy                    : 'Copier',\r
+       paste                   : 'Coller',\r
+       print                   : 'Imprimer',\r
+       underline               : 'Souligné',\r
+       bold                    : 'Gras',\r
+       italic                  : 'Italique',\r
+       selectAll               : 'Tout sélectionner',\r
+       removeFormat    : 'Supprimer la mise en forme',\r
+       strike                  : 'Barré',\r
+       subscript               : 'Indice',\r
+       superscript             : 'Exposant',\r
+       horizontalrule  : 'Ligne horizontale',\r
+       pagebreak               : 'Saut de page',\r
+       unlink                  : 'Supprimer le lien',\r
+       undo                    : 'Annuler',\r
+       redo                    : 'Rétablir',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Explorer le serveur',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocole',\r
+               upload                  : 'Envoyer',\r
+               uploadSubmit    : 'Envoyer sur le serveur',\r
+               image                   : 'Image',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formulaire',\r
+               checkbox                : 'Case à cocher',\r
+               radio           : 'Bouton Radio',\r
+               textField               : 'Champ texte',\r
+               textarea                : 'Zone de texte',\r
+               hiddenField             : 'Champ caché',\r
+               button                  : 'Bouton',\r
+               select  : 'Liste déroulante',\r
+               imageButton             : 'Bouton image',\r
+               notSet                  : '<non défini>',\r
+               id                              : 'Id',\r
+               name                    : 'Nom',\r
+               langDir                 : 'Sens d\'écriture',\r
+               langDirLtr              : 'Gauche à droite (LTR)',\r
+               langDirRtl              : 'Droite à gauche (RTL)',\r
+               langCode                : 'Code de langue',\r
+               longDescr               : 'URL de description longue (longdesc => malvoyant)',\r
+               cssClass                : 'Classe CSS',\r
+               advisoryTitle   : 'Description (title)',\r
+               cssStyle                : 'Style',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Annuler',\r
+               generalTab              : 'Général',\r
+               advancedTab             : 'Avancé',\r
+               validateNumberFailed    : 'Cette valeur n\'est pas un nombre.',\r
+               confirmNewPage  : 'Les changements non sauvegardés seront perdus. Etes-vous sûr de vouloir charger une nouvelle page?',\r
+               confirmCancel   : 'Certaines options ont été modifiées. Etes-vous sûr de vouloir fermer?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, Indisponible</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Insérer un caractère spécial',\r
+               title           : 'Sélectionnez un caractère'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Lien',\r
+               menu            : 'Editer le lien',\r
+               title           : 'Lien',\r
+               info            : 'Infos sur le lien',\r
+               target          : 'Cible',\r
+               upload          : 'Envoyer',\r
+               advanced        : 'Avancé',\r
+               type            : 'Type de lien',\r
+               toAnchor        : 'Transformer le lien en ancre dans le texte',\r
+               toEmail         : 'E-mail',\r
+               target          : 'Cible',\r
+               targetNotSet    : '<non définie>',\r
+               targetFrame     : '<cadre>',\r
+               targetPopup     : '<fenêtre popup>',\r
+               targetNew       : 'Nouvelle fenêtre (_blank)',\r
+               targetTop       : 'Même fenêtre (_top)',\r
+               targetSelf      : 'Même Cadre (_self)',\r
+               targetParent    : 'Fenêtre parente (_parent)',\r
+               targetFrameName : 'Nom du Cadre destination',\r
+               targetPopupName : 'Nom de la fenêtre popup',\r
+               popupFeatures   : 'Options de la fenêtre popup',\r
+               popupResizable  : 'Redimensionnable',\r
+               popupStatusBar  : 'Barre de status',\r
+               popupLocationBar        : 'Barre d\'adresse',\r
+               popupToolbar    : 'Barre d\'outils',\r
+               popupMenuBar    : 'Barre de menu',\r
+               popupFullScreen : 'Plein écran (IE)',\r
+               popupScrollBars : 'Barres de défilement',\r
+               popupDependent  : 'Dépendante (Netscape)',\r
+               popupWidth              : 'Largeur',\r
+               popupLeft               : 'Position gauche',\r
+               popupHeight             : 'Hauteur',\r
+               popupTop                : 'Position haute',\r
+               id                              : 'Id',\r
+               langDir                 : 'Sens d\'écriture',\r
+               langDirNotSet   : '<non défini>',\r
+               langDirLTR              : 'Gauche à droite',\r
+               langDirRTL              : 'Droite à gauche',\r
+               acccessKey              : 'Touche d\'accessibilité',\r
+               name                    : 'Nom',\r
+               langCode                : 'Code de langue',\r
+               tabIndex                : 'Index de tabulation',\r
+               advisoryTitle   : 'Description (title)',\r
+               advisoryContentType     : 'Type de contenu (ex: text/html)',\r
+               cssClasses              : 'Classe du CSS',\r
+               charset                 : 'Charset de la cible',\r
+               styles                  : 'Style',\r
+               selectAnchor    : 'Sélectionner l\'ancre',\r
+               anchorName              : 'Par nom d\'ancre',\r
+               anchorId                : 'Par ID d\'élément',\r
+               emailAddress    : 'Adresse E-Mail',\r
+               emailSubject    : 'Sujet du message',\r
+               emailBody               : 'Corps du message',\r
+               noAnchors               : '(Aucune ancre disponible dans ce document)',\r
+               noUrl                   : 'Veuillez entrer l\'adresse du lien',\r
+               noEmail                 : 'Veuillez entrer l\'adresse e-mail'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Ancre',\r
+               menu            : 'Editer l\'ancre',\r
+               title           : 'Propriétés de l\'ancre',\r
+               name            : 'Nom de l\'ancre',\r
+               errorName       : 'Veuillez entrer le nom de l\'ancre'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Trouver et remplacer',\r
+               find                            : 'Trouver',\r
+               replace                         : 'Remplacer',\r
+               findWhat                        : 'Expression à trouver: ',\r
+               replaceWith                     : 'Remplacer par: ',\r
+               notFoundMsg                     : 'Le texte spécifié ne peut être trouvé.',\r
+               matchCase                       : 'Respecter la casse',\r
+               matchWord                       : 'Mot entier uniquement',\r
+               matchCyclic                     : 'Boucler',\r
+               replaceAll                      : 'Remplacer tout',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replacée(s).'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tableau',\r
+               title           : 'Propriétés du tableau',\r
+               menu            : 'Propriétés du tableau',\r
+               deleteTable     : 'Supprimer le tableau',\r
+               rows            : 'Lignes',\r
+               columns         : 'Colonnes',\r
+               border          : 'Taille de la bordure',\r
+               align           : 'Alignement du contenu',\r
+               alignNotSet     : '<non définie>',\r
+               alignLeft       : 'Gauche',\r
+               alignCenter     : 'Centré',\r
+               alignRight      : 'Droite',\r
+               width           : 'Largeur',\r
+               widthPx         : 'pixels',\r
+               widthPc         : '% pourcents',\r
+               height          : 'Hauteur',\r
+               cellSpace       : 'Espacement des cellules',\r
+               cellPad         : 'Marge interne des cellules',\r
+               caption         : 'Titre du tableau',\r
+               summary         : 'Résumé (description)',\r
+               headers         : 'En-Têtes',\r
+               headersNone             : 'Aucunes',\r
+               headersColumn   : 'Première colonne',\r
+               headersRow              : 'Première ligne',\r
+               headersBoth             : 'Les deux',\r
+               invalidRows             : 'Le nombre de lignes doit être supérieur à 0.',\r
+               invalidCols             : 'Le nombre de colonnes doit être supérieur à 0.',\r
+               invalidBorder   : 'La taille de la bordure doit être un nombre.',\r
+               invalidWidth    : 'La largeur du tableau doit être un nombre.',\r
+               invalidHeight   : 'La hauteur du tableau doit être un nombre.',\r
+               invalidCellSpacing      : 'L\'espacement des cellules doit être un nombre.',\r
+               invalidCellPadding      : 'La marge intérieure des cellules doit être un nombre.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cellule',\r
+                       insertBefore    : 'Insérer une cellule avant',\r
+                       insertAfter             : 'Insérer une cellule après',\r
+                       deleteCell              : 'Supprimer les cellules',\r
+                       merge                   : 'Fusionner les cellules',\r
+                       mergeRight              : 'Fusionner à droite',\r
+                       mergeDown               : 'Fusionner en bas',\r
+                       splitHorizontal : 'Fractionner horizontalement',\r
+                       splitVertical   : 'Fractionner verticalement',\r
+                       title                   : 'Propriétés de Cellule',\r
+                       cellType                : 'Type de Cellule',\r
+                       rowSpan                 : 'Fusion de Lignes',\r
+                       colSpan                 : 'Fusion de Colonnes',\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Alignement Horizontal',\r
+                       vAlign                  : 'Alignement Vertical',\r
+                       alignTop                : 'Haut',\r
+                       alignMiddle             : 'Milieu',\r
+                       alignBottom             : 'Bas',\r
+                       alignBaseline   : 'Bas du texte',\r
+                       bgColor                 : 'Couleur d\'arrière-plan',\r
+                       borderColor             : 'Couleur de Bordure',\r
+                       data                    : 'Données',\r
+                       header                  : 'Entête',\r
+                       yes                             : 'Oui',\r
+                       no                              : 'Non',\r
+                       invalidWidth    : 'La Largeur de Cellule doit être un nombre.',\r
+                       invalidHeight   : 'La Hauteur de Cellule doit être un nombre.',\r
+                       invalidRowSpan  : 'La fusion de lignes doit être un nombre entier.',\r
+                       invalidColSpan  : 'La fusion de colonnes doit être un nombre entier.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Ligne',\r
+                       insertBefore    : 'Insérer une ligne avant',\r
+                       insertAfter             : 'Insérer une ligne après',\r
+                       deleteRow               : 'Supprimer les lignes'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Colonnes',\r
+                       insertBefore    : 'Insérer une colonne avant',\r
+                       insertAfter             : 'Insérer une colonne après',\r
+                       deleteColumn    : 'Supprimer les colonnes'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Propriétés du bouton',\r
+               text            : 'Texte (Value)',\r
+               type            : 'Type',\r
+               typeBtn         : 'Bouton',\r
+               typeSbm         : 'Validation (submit)',\r
+               typeRst         : 'Remise à zéro'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Propriétés de la case à cocher',\r
+               radioTitle      : 'Propriétés du bouton Radio',\r
+               value           : 'Valeur',\r
+               selected        : 'Sélectionné'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Propriétés du formulaire',\r
+               menu            : 'Propriétés du formulaire',\r
+               action          : 'Action',\r
+               method          : 'Méthode',\r
+               encoding        : 'Encodage',\r
+               target          : 'Cible',\r
+               targetNotSet    : '<non définie>',\r
+               targetNew       : 'Nouvelle fenêtre (_blank)',\r
+               targetTop       : 'Même fenêtre (_top)',\r
+               targetSelf      : 'Même Cadre (_self)',\r
+               targetParent    : 'Fenêtre parente (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Propriétés du menu déroulant',\r
+               selectInfo      : 'Informations sur le menu déroulant',\r
+               opAvail         : 'Options disponibles',\r
+               value           : 'Valeur',\r
+               size            : 'Taille',\r
+               lines           : 'Lignes',\r
+               chkMulti        : 'Permettre les sélections multiples',\r
+               opText          : 'Texte',\r
+               opValue         : 'Valeur',\r
+               btnAdd          : 'Ajouter',\r
+               btnModify       : 'Modifier',\r
+               btnUp           : 'Haut',\r
+               btnDown         : 'Bas',\r
+               btnSetValue : 'Définir comme valeur sélectionnée',\r
+               btnDelete       : 'Supprimer'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Propriétés de la zone de texte',\r
+               cols            : 'Colonnes',\r
+               rows            : 'Lignes'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Propriétés du champ texte',\r
+               name            : 'Nom',\r
+               value           : 'Valeur',\r
+               charWidth       : 'Taille des caractères',\r
+               maxChars        : 'Nombre maximum de caractères',\r
+               type            : 'Type',\r
+               typeText        : 'Texte',\r
+               typePass        : 'Mot de passe'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Propriétés du champ caché',\r
+               name    : 'Nom',\r
+               value   : 'Valeur'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Propriétés de l\'image',\r
+               titleButton     : 'Propriétés du bouton image',\r
+               menu            : 'Propriétés de l\'image',\r
+               infoTab : 'Informations sur l\'image',\r
+               btnUpload       : 'Envoyer sur le serveur',\r
+               url             : 'URL',\r
+               upload  : 'Envoyer',\r
+               alt             : 'Texte de remplacement',\r
+               width           : 'Largeur',\r
+               height  : 'Hauteur',\r
+               lockRatio       : 'Garder les proportions',\r
+               resetSize       : 'Taille d\'origine',\r
+               border  : 'Bordure',\r
+               hSpace  : 'Espacement horizontal',\r
+               vSpace  : 'Espacement vertical',\r
+               align           : 'Alignement',\r
+               alignLeft       : 'Gauche',\r
+               alignAbsBottom: 'Bas absolu',\r
+               alignAbsMiddle: 'Milieu absolu',\r
+               alignBaseline   : 'Bas du texte',\r
+               alignBottom     : 'Bas',\r
+               alignMiddle     : 'Milieu',\r
+               alignRight      : 'Droite',\r
+               alignTextTop    : 'Haut du texte',\r
+               alignTop        : 'Haut',\r
+               preview : 'Aperçu',\r
+               alertUrl        : 'Veuillez entrer l\'adresse de l\'image',\r
+               linkTab : 'Lien',\r
+               button2Img      : 'Voulez-vous transformer le bouton image sélectionné en simple image?',\r
+               img2Button      : 'Voulez-vous transformer l\'image en bouton image?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Propriétés du Flash',\r
+               propertiesTab   : 'Propriétés',\r
+               title           : 'Propriétés du Flash',\r
+               chkPlay         : 'Jouer automatiquement',\r
+               chkLoop         : 'Boucle',\r
+               chkMenu         : 'Activer le menu Flash',\r
+               chkFull         : 'Permettre le plein écran',\r
+               scale           : 'Echelle',\r
+               scaleAll                : 'Afficher tout',\r
+               scaleNoBorder   : 'Pas de bordure',\r
+               scaleFit                : 'Taille d\'origine',\r
+               access                  : 'Accès aux scripts',\r
+               accessAlways    : 'Toujours',\r
+               accessSameDomain        : 'Même domaine',\r
+               accessNever     : 'Jamais',\r
+               align           : 'Alignement',\r
+               alignLeft       : 'Gauche',\r
+               alignAbsBottom: 'Bas absolu',\r
+               alignAbsMiddle: 'Milieu absolu',\r
+               alignBaseline   : 'Bas du texte',\r
+               alignBottom     : 'Bas',\r
+               alignMiddle     : 'Milieu',\r
+               alignRight      : 'Droite',\r
+               alignTextTop    : 'Haut du texte',\r
+               alignTop        : 'Haut',\r
+               quality         : 'Qualité',\r
+               qualityBest              : 'Meilleure',\r
+               qualityHigh              : 'Haute',\r
+               qualityAutoHigh  : 'Haute Auto',\r
+               qualityMedium    : 'Moyenne',\r
+               qualityAutoLow   : 'Basse Auto',\r
+               qualityLow               : 'Basse',\r
+               windowModeWindow         : 'Fenêtre',\r
+               windowModeOpaque         : 'Opaque',\r
+               windowModeTransparent    : 'Transparent',\r
+               windowMode      : 'Mode fenêtre',\r
+               flashvars       : 'Variables du Flash',\r
+               bgcolor : 'Couleur d\'arrière-plan',\r
+               width   : 'Largeur',\r
+               height  : 'Hauteur',\r
+               hSpace  : 'Espacement horizontal',\r
+               vSpace  : 'Espacement vertical',\r
+               validateSrc : 'L\'adresse ne doit pas être vide.',\r
+               validateWidth : 'La largeur doit être un nombre.',\r
+               validateHeight : 'La hauteur doit être un nombre.',\r
+               validateHSpace : 'L\'espacement horizontal doit être un nombre.',\r
+               validateVSpace : 'L\'espacement vertical doit être un nombre.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Vérifier l\'orthographe',\r
+               title                   : 'Vérifier l\'orthographe',\r
+               notAvailable    : 'Désolé, le service est indisponible actuellement.',\r
+               errorLoading    : 'Erreur du chargement du service depuis l\'hôte : %s.',\r
+               notInDic                : 'N\'existe pas dans le dictionnaire',\r
+               changeTo                : 'Modifier pour',\r
+               btnIgnore               : 'Ignorer',\r
+               btnIgnoreAll    : 'Ignorer tout',\r
+               btnReplace              : 'Remplacer',\r
+               btnReplaceAll   : 'Remplacer tout',\r
+               btnUndo                 : 'Annuler',\r
+               noSuggestions   : '- Aucune suggestion -',\r
+               progress                : 'Vérification de l\'orthographe en cours...',\r
+               noMispell               : 'Vérification de l\'orthographe terminée : aucune erreur trouvée',\r
+               noChanges               : 'Vérification de l\'orthographe terminée : Aucun mot corrigé',\r
+               oneChange               : 'Vérification de l\'orthographe terminée : Un seul mot corrigé',\r
+               manyChanges             : 'Vérification de l\'orthographe terminée : %1 mots corrigés',\r
+               ieSpellDownload : 'La vérification d\'orthographe n\'est pas installée. Voulez-vous la télécharger maintenant?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Emoticon',\r
+               title   : 'Insérer un émoticon'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 éléments'\r
+       },\r
+\r
+       numberedlist : 'Insérer/Supprimer la liste numérotée',\r
+       bulletedlist : 'Insérer/Supprimer la liste à puces',\r
+       indent : 'Augmenter le retrait (tabulation)',\r
+       outdent : 'Diminuer le retrait (tabulation)',\r
+\r
+       justify :\r
+       {\r
+               left : 'Aligner à gauche',\r
+               center : 'Centrer',\r
+               right : 'Aligner à droite',\r
+               block : 'Justifier'\r
+       },\r
+\r
+       blockquote : 'Citation',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Coller',\r
+               cutError        : 'Les paramètres de sécurité de votre navigateur ne permettent pas à l\'éditeur d\'exécuter automatiquement l\'opération "couper". Veuillez utiliser le raccourci clavier (Ctrl+X).',\r
+               copyError       : 'Les paramètres de sécurité de votre navigateur ne permettent pas à l\'éditeur d\'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl+C).',\r
+               pasteMsg        : 'Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl+V</strong>) et cliquez sur OK',\r
+               securityMsg     : 'A cause des paramètres de sécurité de votre navigateur, l\'éditeur n\'est pas en mesure d\'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Coller depuis Word',\r
+               title : 'Coller depuis Word',\r
+               advice : 'Veuillez coller le texte dans la zone suivante, en utilisant le raccourci clavier (<strong>Ctrl+V</strong>) et cliquez sur OK.',\r
+               ignoreFontFace : 'Supprimer la définition des polices',\r
+               removeStyle : 'Supprimer la définition des styles'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Coller comme texte sans mise en forme',\r
+               title : 'Coller comme texte sans mise en forme'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Modèles',\r
+               title : 'Contenu des modèles',\r
+               insertOption: 'Remplacer le contenu actuel',\r
+               selectPromptMsg: 'Veuillez sélectionner le modèle pour l\'ouvrir dans l\'éditeur',\r
+               emptyListMsg : '(Aucun modèle disponible)'\r
+       },\r
+\r
+       showBlocks : 'Afficher les blocs',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Styles',\r
+               voiceLabel : 'Styles',\r
+               panelVoiceLabel : 'Choisissez un style',\r
+               panelTitle1 : 'Styles de blocs',\r
+               panelTitle2 : 'Styles en ligne',\r
+               panelTitle3 : 'Styles d\'objet'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format',\r
+               panelTitle : 'Format de paragraphe',\r
+               panelVoiceLabel : 'Choisissez un format de paragraphe',\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formaté',\r
+               tag_address : 'Adresse',\r
+               tag_h1 : 'Titre 1',\r
+               tag_h2 : 'Titre 2',\r
+               tag_h3 : 'Titre 3',\r
+               tag_h4 : 'Titre 4',\r
+               tag_h5 : 'Titre 5',\r
+               tag_h6 : 'Titre 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Police',\r
+               voiceLabel : 'Police',\r
+               panelTitle : 'Style de police',\r
+               panelVoiceLabel : 'Choisissez une police'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Taille',\r
+               voiceLabel : 'Taille de police',\r
+               panelTitle : 'Taille de police',\r
+               panelVoiceLabel : 'Choisissez une taille de police'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Couleur de texte',\r
+               bgColorTitle : 'Couleur d\'arrière plan',\r
+               auto : 'Automatique',\r
+               more : 'Plus de couleurs...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Vérification d\'Orthographe en Cours de Frappe (SCAYT: Spell Check As You Type)',\r
+               enable : 'Activer SCAYT',\r
+               disable : 'Désactiver SCAYT',\r
+               about : 'A propos de SCAYT',\r
+               toggle : 'Activer/Désactiver SCAYT',\r
+               options : 'Options',\r
+               langs : 'Langues',\r
+               moreSuggestions : 'Plus de suggestions',\r
+               ignore : 'Ignorer',\r
+               ignoreAll : 'Ignorer Tout',\r
+               addWord : 'Ajouter le mot',\r
+               emptyDic : 'Le nom du dictionnaire ne devrait pas être vide.',\r
+               optionsTab : 'Options',\r
+               languagesTab : 'Langues',\r
+               dictionariesTab : 'Dictionnaires',\r
+               aboutTab : 'A propos de'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'A propos de CKEditor',\r
+               dlgTitle : 'A propos de CKEditor',\r
+               moreInfo : 'Pour les informations de licence, veuillez visiter notre site web:',\r
+               copy : 'Copyright &copy; $1. Tous droits réservés.'\r
+       },\r
+\r
+       maximize : 'Agrandir',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Ancre',\r
+               flash : 'Animation Flash',\r
+               div : 'Saut de Page',\r
+               unknown : 'Objet Inconnu'\r
+       },\r
+\r
+       resize : 'Glisser pour modifier la taille'\r
+};\r
diff --git a/_source/lang/gl.js b/_source/lang/gl.js
new file mode 100644 (file)
index 0000000..8ce9eb0
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Galician language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['gl'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Código Fonte',\r
+       newPage                 : 'Nova Páxina',\r
+       save                    : 'Gardar',\r
+       preview                 : 'Vista Previa',\r
+       cut                             : 'Cortar',\r
+       copy                    : 'Copiar',\r
+       paste                   : 'Pegar',\r
+       print                   : 'Imprimir',\r
+       underline               : 'Sub-raiado',\r
+       bold                    : 'Negrita',\r
+       italic                  : 'Cursiva',\r
+       selectAll               : 'Seleccionar todo',\r
+       removeFormat    : 'Eliminar Formato',\r
+       strike                  : 'Tachado',\r
+       subscript               : 'Subíndice',\r
+       superscript             : 'Superíndice',\r
+       horizontalrule  : 'Inserir Liña Horizontal',\r
+       pagebreak               : 'Inserir Salto de Páxina',\r
+       unlink                  : 'Eliminar Ligazón',\r
+       undo                    : 'Desfacer',\r
+       redo                    : 'Refacer',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Navegar no Servidor',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocolo',\r
+               upload                  : 'Carregar',\r
+               uploadSubmit    : 'Enviar ó Servidor',\r
+               image                   : 'Imaxe',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formulario',\r
+               checkbox                : 'Cadro de Verificación',\r
+               radio           : 'Botón de Radio',\r
+               textField               : 'Campo de Texto',\r
+               textarea                : 'Área de Texto',\r
+               hiddenField             : 'Campo Oculto',\r
+               button                  : 'Botón',\r
+               select  : 'Campo de Selección',\r
+               imageButton             : 'Botón de Imaxe',\r
+               notSet                  : '<non definido>',\r
+               id                              : 'Id',\r
+               name                    : 'Nome',\r
+               langDir                 : 'Orientación do Idioma',\r
+               langDirLtr              : 'Esquerda a Dereita (LTR)',\r
+               langDirRtl              : 'Dereita a Esquerda (RTL)',\r
+               langCode                : 'Código do Idioma',\r
+               longDescr               : 'Descrición Completa da URL',\r
+               cssClass                : 'Clases da Folla de Estilos',\r
+               advisoryTitle   : 'Título',\r
+               cssStyle                : 'Estilo',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Cancelar',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Advanzado',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Inserir Carácter Especial',\r
+               title           : 'Seleccione Caracter Especial'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Inserir/Editar Ligazón',\r
+               menu            : 'Editar Ligazón',\r
+               title           : 'Ligazón',\r
+               info            : 'Información da Ligazón',\r
+               target          : 'Destino',\r
+               upload          : 'Carregar',\r
+               advanced        : 'Advanzado',\r
+               type            : 'Tipo de Ligazón',\r
+               toAnchor        : 'Referencia nesta páxina',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Destino',\r
+               targetNotSet    : '<non definido>',\r
+               targetFrame     : '<frame>',\r
+               targetPopup     : '<Xanela Emerxente>',\r
+               targetNew       : 'Nova Xanela (_blank)',\r
+               targetTop       : 'Xanela Primaria (_top)',\r
+               targetSelf      : 'Mesma Xanela (_self)',\r
+               targetParent    : 'Xanela Pai (_parent)',\r
+               targetFrameName : 'Nome do Marco Destino',\r
+               targetPopupName : 'Nome da Xanela Emerxente',\r
+               popupFeatures   : 'Características da Xanela Emerxente',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Barra de Estado',\r
+               popupLocationBar        : 'Barra de Localización',\r
+               popupToolbar    : 'Barra de Ferramentas',\r
+               popupMenuBar    : 'Barra de Menú',\r
+               popupFullScreen : 'A Toda Pantalla (IE)',\r
+               popupScrollBars : 'Barras de Desplazamento',\r
+               popupDependent  : 'Dependente (Netscape)',\r
+               popupWidth              : 'Largura',\r
+               popupLeft               : 'Posición Esquerda',\r
+               popupHeight             : 'Altura',\r
+               popupTop                : 'Posición dende Arriba',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Orientación do Idioma',\r
+               langDirNotSet   : '<non definido>',\r
+               langDirLTR              : 'Esquerda a Dereita (LTR)',\r
+               langDirRTL              : 'Dereita a Esquerda (RTL)',\r
+               acccessKey              : 'Chave de Acceso',\r
+               name                    : 'Nome',\r
+               langCode                : 'Orientación do Idioma',\r
+               tabIndex                : 'Índice de Tabulación',\r
+               advisoryTitle   : 'Título',\r
+               advisoryContentType     : 'Tipo de Contido',\r
+               cssClasses              : 'Clases da Folla de Estilos',\r
+               charset                 : 'Fonte de Caracteres Vinculado',\r
+               styles                  : 'Estilo',\r
+               selectAnchor    : 'Seleccionar unha Referencia',\r
+               anchorName              : 'Por Nome de Referencia',\r
+               anchorId                : 'Por Element Id',\r
+               emailAddress    : 'Enderezo de E-Mail',\r
+               emailSubject    : 'Asunto do Mensaxe',\r
+               emailBody               : 'Corpo do Mensaxe',\r
+               noAnchors               : '(Non hai referencias disponibles no documento)',\r
+               noUrl                   : 'Por favor, escriba a ligazón URL',\r
+               noEmail                 : 'Por favor, escriba o enderezo de e-mail'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Inserir/Editar Referencia',\r
+               menu            : 'Propriedades da Referencia',\r
+               title           : 'Propriedades da Referencia',\r
+               name            : 'Nome da Referencia',\r
+               errorName       : 'Por favor, escriba o nome da referencia'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'Procurar',\r
+               replace                         : 'Substituir',\r
+               findWhat                        : 'Texto a procurar:',\r
+               replaceWith                     : 'Substituir con:',\r
+               notFoundMsg                     : 'Non te atopou o texto indicado.',\r
+               matchCase                       : 'Coincidir Mai./min.',\r
+               matchWord                       : 'Coincidir con toda a palabra',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Substitiur Todo',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabla',\r
+               title           : 'Propiedades da Táboa',\r
+               menu            : 'Propiedades da Táboa',\r
+               deleteTable     : 'Borrar Táboa',\r
+               rows            : 'Filas',\r
+               columns         : 'Columnas',\r
+               border          : 'Tamaño do Borde',\r
+               align           : 'Aliñamento',\r
+               alignNotSet     : '<Non Definido>',\r
+               alignLeft       : 'Esquerda',\r
+               alignCenter     : 'Centro',\r
+               alignRight      : 'Ereita',\r
+               width           : 'Largura',\r
+               widthPx         : 'pixels',\r
+               widthPc         : 'percent',\r
+               height          : 'Altura',\r
+               cellSpace       : 'Marxe entre Celas',\r
+               cellPad         : 'Marxe interior',\r
+               caption         : 'Título',\r
+               summary         : 'Sumario',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cela',\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'Borrar Cela',\r
+                       merge                   : 'Unir Celas',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Fila',\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'Borrar Filas'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Columna',\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'Borrar Columnas'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Propriedades do Botón',\r
+               text            : 'Texto (Valor)',\r
+               type            : 'Tipo',\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Propriedades do Cadro de Verificación',\r
+               radioTitle      : 'Propriedades do Botón de Radio',\r
+               value           : 'Valor',\r
+               selected        : 'Seleccionado'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Propriedades do Formulario',\r
+               menu            : 'Propriedades do Formulario',\r
+               action          : 'Acción',\r
+               method          : 'Método',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Destino',\r
+               targetNotSet    : '<non definido>',\r
+               targetNew       : 'Nova Xanela (_blank)',\r
+               targetTop       : 'Xanela Primaria (_top)',\r
+               targetSelf      : 'Mesma Xanela (_self)',\r
+               targetParent    : 'Xanela Pai (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Propriedades do Campo de Selección',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Opcións Disponibles',\r
+               value           : 'Valor',\r
+               size            : 'Tamaño',\r
+               lines           : 'liñas',\r
+               chkMulti        : 'Permitir múltiples seleccións',\r
+               opText          : 'Texto',\r
+               opValue         : 'Valor',\r
+               btnAdd          : 'Engadir',\r
+               btnModify       : 'Modificar',\r
+               btnUp           : 'Subir',\r
+               btnDown         : 'Baixar',\r
+               btnSetValue : 'Definir como valor por defecto',\r
+               btnDelete       : 'Borrar'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Propriedades da Área de Texto',\r
+               cols            : 'Columnas',\r
+               rows            : 'Filas'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Propriedades do Campo de Texto',\r
+               name            : 'Nome',\r
+               value           : 'Valor',\r
+               charWidth       : 'Tamaño do Caracter',\r
+               maxChars        : 'Máximo de Caracteres',\r
+               type            : 'Tipo',\r
+               typeText        : 'Texto',\r
+               typePass        : 'Chave'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Propriedades do Campo Oculto',\r
+               name    : 'Nome',\r
+               value   : 'Valor'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Propriedades da Imaxe',\r
+               titleButton     : 'Propriedades do Botón de Imaxe',\r
+               menu            : 'Propriedades da Imaxe',\r
+               infoTab : 'Información da Imaxe',\r
+               btnUpload       : 'Enviar ó Servidor',\r
+               url             : 'URL',\r
+               upload  : 'Carregar',\r
+               alt             : 'Texto Alternativo',\r
+               width           : 'Largura',\r
+               height  : 'Altura',\r
+               lockRatio       : 'Proporcional',\r
+               resetSize       : 'Tamaño Orixinal',\r
+               border  : 'Límite',\r
+               hSpace  : 'Esp. Horiz.',\r
+               vSpace  : 'Esp. Vert.',\r
+               align           : 'Aliñamento',\r
+               alignLeft       : 'Esquerda',\r
+               alignAbsBottom: 'Abs Inferior',\r
+               alignAbsMiddle: 'Abs Centro',\r
+               alignBaseline   : 'Liña Base',\r
+               alignBottom     : 'Pé',\r
+               alignMiddle     : 'Centro',\r
+               alignRight      : 'Dereita',\r
+               alignTextTop    : 'Tope do Texto',\r
+               alignTop        : 'Tope',\r
+               preview : 'Vista Previa',\r
+               alertUrl        : 'Por favor, escriba a URL da imaxe',\r
+               linkTab : 'Ligazón',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Propriedades Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Propriedades Flash',\r
+               chkPlay         : 'Auto Execución',\r
+               chkLoop         : 'Bucle',\r
+               chkMenu         : 'Activar Menú Flash',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Escalar',\r
+               scaleAll                : 'Amosar Todo',\r
+               scaleNoBorder   : 'Sen Borde',\r
+               scaleFit                : 'Encaixar axustando',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Aliñamento',\r
+               alignLeft       : 'Esquerda',\r
+               alignAbsBottom: 'Abs Inferior',\r
+               alignAbsMiddle: 'Abs Centro',\r
+               alignBaseline   : 'Liña Base',\r
+               alignBottom     : 'Pé',\r
+               alignMiddle     : 'Centro',\r
+               alignRight      : 'Dereita',\r
+               alignTextTop    : 'Tope do Texto',\r
+               alignTop        : 'Tope',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Cor do Fondo',\r
+               width   : 'Largura',\r
+               height  : 'Altura',\r
+               hSpace  : 'Esp. Horiz.',\r
+               vSpace  : 'Esp. Vert.',\r
+               validateSrc : 'Por favor, escriba a ligazón URL',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Corrección Ortográfica',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Non está no diccionario',\r
+               changeTo                : 'Cambiar a',\r
+               btnIgnore               : 'Ignorar',\r
+               btnIgnoreAll    : 'Ignorar Todas',\r
+               btnReplace              : 'Substituir',\r
+               btnReplaceAll   : 'Substituir Todas',\r
+               btnUndo                 : 'Desfacer',\r
+               noSuggestions   : '- Sen candidatos -',\r
+               progress                : 'Corrección ortográfica en progreso...',\r
+               noMispell               : 'Corrección ortográfica rematada: Non se atoparon erros',\r
+               noChanges               : 'Corrección ortográfica rematada: Non se substituiu nengunha verba',\r
+               oneChange               : 'Corrección ortográfica rematada: Unha verba substituida',\r
+               manyChanges             : 'Corrección ortográfica rematada: %1 verbas substituidas',\r
+               ieSpellDownload : 'O corrector ortográfico non está instalado. ¿Quere descargalo agora?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Inserte un Smiley'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Lista Numerada',\r
+       bulletedlist : 'Marcas',\r
+       indent : 'Aumentar Sangría',\r
+       outdent : 'Disminuir Sangría',\r
+\r
+       justify :\r
+       {\r
+               left : 'Aliñar á Esquerda',\r
+               center : 'Centrado',\r
+               right : 'Aliñar á Dereita',\r
+               block : 'Xustificado'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Pegar',\r
+               cutError        : 'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl+X).',\r
+               copyError       : 'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl+C).',\r
+               pasteMsg        : 'Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl+V</STRONG>) e pulse <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Pegar dende Word',\r
+               title : 'Pegar dende Word',\r
+               advice : 'Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl+V</STRONG>) e pulse <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignorar as definicións de Tipografía',\r
+               removeStyle : 'Eliminar as definicións de Estilos'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Pegar como texto plano',\r
+               title : 'Pegar como texto plano'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Plantillas',\r
+               title : 'Plantillas de Contido',\r
+               insertOption: 'Replace actual contents', // MISSING\r
+               selectPromptMsg: 'Por favor, seleccione a plantilla a abrir no editor<br>(o contido actual perderase):',\r
+               emptyListMsg : '(Non hai plantillas definidas)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Estilo',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formato',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Formato',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formateado',\r
+               tag_address : 'Enderezo',\r
+               tag_h1 : 'Enacabezado 1',\r
+               tag_h2 : 'Encabezado 2',\r
+               tag_h3 : 'Encabezado 3',\r
+               tag_h4 : 'Encabezado 4',\r
+               tag_h5 : 'Encabezado 5',\r
+               tag_h6 : 'Encabezado 6',\r
+               tag_div : 'Paragraph (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Tipo',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Tipo',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Tamaño',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Tamaño',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Cor do Texto',\r
+               bgColorTitle : 'Cor do Fondo',\r
+               auto : 'Automático',\r
+               more : 'Máis Cores...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/gu.js b/_source/lang/gu.js
new file mode 100644 (file)
index 0000000..0d59345
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Gujarati language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['gu'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'મૂળ કે પ્રાથમિક દસ્તાવેજ',\r
+       newPage                 : 'નવુ પાનું',\r
+       save                    : 'સેવ',\r
+       preview                 : 'પૂર્વદર્શન',\r
+       cut                             : 'કાપવું',\r
+       copy                    : 'નકલ',\r
+       paste                   : 'પેસ્ટ',\r
+       print                   : 'પ્રિન્ટ',\r
+       underline               : 'અન્ડર્લાઇન, નીચે લીટી',\r
+       bold                    : 'બોલ્ડ/સ્પષ્ટ',\r
+       italic                  : 'ઇટેલિક, ત્રાંસા',\r
+       selectAll               : 'બઘું પસંદ કરવું',\r
+       removeFormat    : 'ફૉર્મટ કાઢવું',\r
+       strike                  : 'છેકી નાખવું',\r
+       subscript               : 'એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન',\r
+       superscript             : 'એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.',\r
+       horizontalrule  : 'સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી',\r
+       pagebreak               : 'ઇન્સર્ટ પેજબ્રેક/પાનાને અલગ કરવું/દાખલ કરવું',\r
+       unlink                  : 'લિંક કાઢવી',\r
+       undo                    : 'રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી',\r
+       redo                    : 'રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'સર્વર બ્રાઉઝ કરો',\r
+               url                             : 'URL',\r
+               protocol                : 'પ્રોટોકૉલ',\r
+               upload                  : 'અપલોડ',\r
+               uploadSubmit    : 'આ સર્વરને મોકલવું',\r
+               image                   : 'ચિત્ર',\r
+               flash                   : 'ફ્લૅશ',\r
+               form                    : 'ફૉર્મ/પત્રક',\r
+               checkbox                : 'ચેક બોક્સ',\r
+               radio           : 'રેડિઓ બટન',\r
+               textField               : 'ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર',\r
+               textarea                : 'ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર',\r
+               hiddenField             : 'ગુપ્ત ક્ષેત્ર',\r
+               button                  : 'બટન',\r
+               select  : 'પસંદગી ક્ષેત્ર',\r
+               imageButton             : 'ચિત્ર બટન',\r
+               notSet                  : '<સેટ નથી>',\r
+               id                              : 'Id',\r
+               name                    : 'નામ',\r
+               langDir                 : 'ભાષા લેખવાની પદ્ધતિ',\r
+               langDirLtr              : 'ડાબે થી જમણે (LTR)',\r
+               langDirRtl              : 'જમણે થી ડાબે (RTL)',\r
+               langCode                : 'ભાષા કોડ',\r
+               longDescr               : 'વધારે માહિતી માટે URL',\r
+               cssClass                : 'સ્ટાઇલ-શીટ ક્લાસ',\r
+               advisoryTitle   : 'મુખ્ય મથાળું',\r
+               cssStyle                : 'સ્ટાઇલ',\r
+               ok                              : 'ઠીક છે',\r
+               cancel                  : 'રદ કરવું',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'અડ્વાન્સડ',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું',\r
+               title           : 'સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'લિંક ઇન્સર્ટ/દાખલ કરવી',\r
+               menu            : ' લિંક એડિટ/માં ફેરફાર કરવો',\r
+               title           : 'લિંક',\r
+               info            : 'લિંક ઇન્ફૉ ટૅબ',\r
+               target          : 'ટાર્ગેટ/લક્ષ્ય',\r
+               upload          : 'અપલોડ',\r
+               advanced        : 'અડ્વાન્સડ',\r
+               type            : 'લિંક પ્રકાર',\r
+               toAnchor        : 'આ પેજનો ઍંકર',\r
+               toEmail         : 'ઈ-મેલ',\r
+               target          : 'ટાર્ગેટ/લક્ષ્ય',\r
+               targetNotSet    : '<સેટ નથી>',\r
+               targetFrame     : '<ફ્રેમ>',\r
+               targetPopup     : '<પૉપ-અપ વિન્ડો>',\r
+               targetNew       : 'નવી  વિન્ડો (_blank)',\r
+               targetTop       : 'ઉપરની વિન્ડો (_top)',\r
+               targetSelf      : 'આજ વિન્ડો (_self)',\r
+               targetParent    : 'મૂળ વિન્ડો (_parent)',\r
+               targetFrameName : 'ટાર્ગેટ ફ્રેમ નું નામ',\r
+               targetPopupName : 'પૉપ-અપ વિન્ડો નું નામ',\r
+               popupFeatures   : 'પૉપ-અપ વિન્ડો ફીચરસૅ',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'સ્ટૅટસ બાર',\r
+               popupLocationBar        : 'લોકેશન બાર',\r
+               popupToolbar    : 'ટૂલ બાર',\r
+               popupMenuBar    : 'મેન્યૂ બાર',\r
+               popupFullScreen : 'ફુલ સ્ક્રીન (IE)',\r
+               popupScrollBars : 'સ્ક્રોલ બાર',\r
+               popupDependent  : 'ડિપેન્ડન્ટ (Netscape)',\r
+               popupWidth              : 'પહોળાઈ',\r
+               popupLeft               : 'ડાબી બાજુ',\r
+               popupHeight             : 'ઊંચાઈ',\r
+               popupTop                : 'જમણી બાજુ',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'ભાષા લેખવાની પદ્ધતિ',\r
+               langDirNotSet   : '<સેટ નથી>',\r
+               langDirLTR              : 'ડાબે થી જમણે (LTR)',\r
+               langDirRTL              : 'જમણે થી ડાબે (RTL)',\r
+               acccessKey              : 'ઍક્સેસ કી',\r
+               name                    : 'નામ',\r
+               langCode                : 'ભાષા લેખવાની પદ્ધતિ',\r
+               tabIndex                : 'ટૅબ ઇન્ડેક્સ',\r
+               advisoryTitle   : 'મુખ્ય મથાળું',\r
+               advisoryContentType     : 'મુખ્ય કન્ટેન્ટ પ્રકાર',\r
+               cssClasses              : 'સ્ટાઇલ-શીટ ક્લાસ',\r
+               charset                 : 'લિંક રિસૉર્સ કૅરિક્ટર સેટ',\r
+               styles                  : 'સ્ટાઇલ',\r
+               selectAnchor    : 'ઍંકર પસંદ કરો',\r
+               anchorName              : 'ઍંકર નામથી પસંદ કરો',\r
+               anchorId                : 'ઍંકર એલિમન્ટ Id થી પસંદ કરો',\r
+               emailAddress    : 'ઈ-મેલ સરનામું',\r
+               emailSubject    : 'ઈ-મેલ વિષય',\r
+               emailBody               : 'સંદેશ',\r
+               noAnchors               : '(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)',\r
+               noUrl                   : 'લિંક  URL ટાઇપ કરો',\r
+               noEmail                 : 'ઈ-મેલ સરનામું ટાઇપ કરો'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'ઍંકર ઇન્સર્ટ/દાખલ કરવી',\r
+               menu            : 'ઍંકરના ગુણ',\r
+               title           : 'ઍંકરના ગુણ',\r
+               name            : 'ઍંકરનું નામ',\r
+               errorName       : 'ઍંકરનું નામ ટાઈપ કરો'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'શોધવું અને બદલવું',\r
+               find                            : 'શોધવું',\r
+               replace                         : 'રિપ્લેસ/બદલવું',\r
+               findWhat                        : 'આ શોધો',\r
+               replaceWith                     : 'આનાથી બદલો',\r
+               notFoundMsg                     : 'તમે શોધેલી ટેક્સ્ટ નથી મળી',\r
+               matchCase                       : 'કેસ સરખા રાખો',\r
+               matchWord                       : 'બઘા શબ્દ સરખા રાખો',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'બઘા બદલી ',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'ટેબલ, કોઠો',\r
+               title           : 'ટેબલ, કોઠાનું મથાળું',\r
+               menu            : 'ટેબલ, કોઠાનું મથાળું',\r
+               deleteTable     : 'કોઠો ડિલીટ/કાઢી નાખવું',\r
+               rows            : 'પંક્તિના ખાના',\r
+               columns         : 'કૉલમ/ઊભી કટાર',\r
+               border          : 'કોઠાની બાજુ(બોર્ડર) સાઇઝ',\r
+               align           : 'અલાઇનમન્ટ/ગોઠવાયેલું ',\r
+               alignNotSet     : '<સેટ નથી>',\r
+               alignLeft       : 'ડાબી બાજુ',\r
+               alignCenter     : 'મધ્ય સેન્ટર',\r
+               alignRight      : 'જમણી બાજુ',\r
+               width           : 'પહોળાઈ',\r
+               widthPx         : 'પિકસલ',\r
+               widthPc         : 'પ્રતિશત',\r
+               height          : 'ઊંચાઈ',\r
+               cellSpace       : 'સેલ અંતર',\r
+               cellPad         : 'સેલ પૅડિંગ',\r
+               caption         : 'મથાળું/કૅપ્શન ',\r
+               summary         : 'ટૂંકો એહેવાલ',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'કોષના ખાના',\r
+                       insertBefore    : 'પહેલાં કોષ ઉમેરવો',\r
+                       insertAfter             : 'પછી કોષ ઉમેરવો',\r
+                       deleteCell              : 'કોષ ડિલીટ/કાઢી નાખવો',\r
+                       merge                   : 'કોષ ભેગા કરવા',\r
+                       mergeRight              : 'જમણી બાજુ ભેગા કરવા',\r
+                       mergeDown               : 'નીચે ભેગા કરવા',\r
+                       splitHorizontal : 'કોષને સમસ્તરીય વિભાજન કરવું',\r
+                       splitVertical   : 'કોષને સીધું ને ઊભું વિભાજન કરવું',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'પંક્તિના ખાના',\r
+                       insertBefore    : 'પહેલાં પંક્તિ ઉમેરવી',\r
+                       insertAfter             : 'પછી પંક્તિ ઉમેરવી',\r
+                       deleteRow               : 'પંક્તિઓ ડિલીટ/કાઢી નાખવી'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'કૉલમ/ઊભી કટાર',\r
+                       insertBefore    : 'પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી',\r
+                       insertAfter             : 'પછી કૉલમ/ઊભી કટાર ઉમેરવી',\r
+                       deleteColumn    : 'કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'બટનના ગુણ',\r
+               text            : 'ટેક્સ્ટ (વૅલ્યૂ)',\r
+               type            : 'પ્રકાર',\r
+               typeBtn         : 'બટન',\r
+               typeSbm         : 'સબ્મિટ',\r
+               typeRst         : 'રિસેટ'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'ચેક બોક્સ ગુણ',\r
+               radioTitle      : 'રેડિઓ બટનના ગુણ',\r
+               value           : 'વૅલ્યૂ',\r
+               selected        : 'સિલેક્ટેડ'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'ફૉર્મ/પત્રકના ગુણ',\r
+               menu            : 'ફૉર્મ/પત્રકના ગુણ',\r
+               action          : 'ક્રિયા',\r
+               method          : 'પદ્ધતિ',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'ટાર્ગેટ/લક્ષ્ય',\r
+               targetNotSet    : '<સેટ નથી>',\r
+               targetNew       : 'નવી  વિન્ડો (_blank)',\r
+               targetTop       : 'ઉપરની વિન્ડો (_top)',\r
+               targetSelf      : 'આજ વિન્ડો (_self)',\r
+               targetParent    : 'મૂળ વિન્ડો (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'પસંદગી ક્ષેત્રના ગુણ',\r
+               selectInfo      : 'સૂચના',\r
+               opAvail         : 'ઉપલબ્ધ વિકલ્પ',\r
+               value           : 'વૅલ્યૂ',\r
+               size            : 'સાઇઝ',\r
+               lines           : 'લીટીઓ',\r
+               chkMulti        : 'એકથી વધારે પસંદ કરી શકો',\r
+               opText          : 'ટેક્સ્ટ',\r
+               opValue         : 'વૅલ્યૂ',\r
+               btnAdd          : 'ઉમેરવું',\r
+               btnModify       : 'બદલવું',\r
+               btnUp           : 'ઉપર',\r
+               btnDown         : 'નીચે',\r
+               btnSetValue : 'પસંદ કરલી વૅલ્યૂ સેટ કરો',\r
+               btnDelete       : 'રદ કરવું'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'ટેક્સ્ટ એઅરિઆ, શબ્દ વિસ્તારના ગુણ',\r
+               cols            : 'કૉલમ/ઊભી કટાર',\r
+               rows            : 'પંક્તિઓ'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્રના ગુણ',\r
+               name            : 'નામ',\r
+               value           : 'વૅલ્યૂ',\r
+               charWidth       : 'કેરેક્ટરની પહોળાઈ',\r
+               maxChars        : 'અધિકતમ કેરેક્ટર',\r
+               type            : 'ટાઇપ',\r
+               typeText        : 'ટેક્સ્ટ',\r
+               typePass        : 'પાસવર્ડ'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'ગુપ્ત ક્ષેત્રના ગુણ',\r
+               name    : 'નામ',\r
+               value   : 'વૅલ્યૂ'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'ચિત્રના ગુણ',\r
+               titleButton     : 'ચિત્ર બટનના ગુણ',\r
+               menu            : 'ચિત્રના ગુણ',\r
+               infoTab : 'ચિત્ર ની જાણકારી',\r
+               btnUpload       : 'આ સર્વરને મોકલવું',\r
+               url             : 'URL',\r
+               upload  : 'અપલોડ',\r
+               alt             : 'ઑલ્ટર્નટ ટેક્સ્ટ',\r
+               width           : 'પહોળાઈ',\r
+               height  : 'ઊંચાઈ',\r
+               lockRatio       : 'લૉક ગુણોત્તર',\r
+               resetSize       : 'રીસેટ સાઇઝ',\r
+               border  : 'બોર્ડર',\r
+               hSpace  : 'સમસ્તરીય જગ્યા',\r
+               vSpace  : 'લંબરૂપ જગ્યા',\r
+               align           : 'લાઇનદોરીમાં ગોઠવવું',\r
+               alignLeft       : 'ડાબી બાજુ ગોઠવવું',\r
+               alignAbsBottom: 'Abs નીચે',\r
+               alignAbsMiddle: 'Abs ઉપર',\r
+               alignBaseline   : 'આધાર લીટી',\r
+               alignBottom     : 'નીચે',\r
+               alignMiddle     : 'વચ્ચે',\r
+               alignRight      : 'જમણી',\r
+               alignTextTop    : 'ટેક્સ્ટ ઉપર',\r
+               alignTop        : 'ઉપર',\r
+               preview : 'પૂર્વદર્શન',\r
+               alertUrl        : 'ચિત્રની URL ટાઇપ કરો',\r
+               linkTab : 'લિંક',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'ફ્લૅશના ગુણ',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'ફ્લૅશ ગુણ',\r
+               chkPlay         : 'ઑટો/સ્વયં પ્લે',\r
+               chkLoop         : 'લૂપ',\r
+               chkMenu         : 'ફ્લૅશ મેન્યૂ નો પ્રયોગ કરો',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'સ્કેલ',\r
+               scaleAll                : 'સ્કેલ ઓલ/બધુ બતાવો',\r
+               scaleNoBorder   : 'સ્કેલ બોર્ડર વગર',\r
+               scaleFit                : 'સ્કેલ એકદમ ફીટ',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'લાઇનદોરીમાં ગોઠવવું',\r
+               alignLeft       : 'ડાબી બાજુ ગોઠવવું',\r
+               alignAbsBottom: 'Abs નીચે',\r
+               alignAbsMiddle: 'Abs ઉપર',\r
+               alignBaseline   : 'આધાર લીટી',\r
+               alignBottom     : 'નીચે',\r
+               alignMiddle     : 'વચ્ચે',\r
+               alignRight      : 'જમણી',\r
+               alignTextTop    : 'ટેક્સ્ટ ઉપર',\r
+               alignTop        : 'ઉપર',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'બૅકગ્રાઉન્ડ રંગ,',\r
+               width   : 'પહોળાઈ',\r
+               height  : 'ઊંચાઈ',\r
+               hSpace  : 'સમસ્તરીય જગ્યા',\r
+               vSpace  : 'લંબરૂપ જગ્યા',\r
+               validateSrc : 'લિંક  URL ટાઇપ કરો',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'જોડણી (સ્પેલિંગ) તપાસવી',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'શબ્દકોશમાં નથી',\r
+               changeTo                : 'આનાથી બદલવું',\r
+               btnIgnore               : 'ઇગ્નોર/અવગણના કરવી',\r
+               btnIgnoreAll    : 'બધાની ઇગ્નોર/અવગણના કરવી',\r
+               btnReplace              : 'બદલવું',\r
+               btnReplaceAll   : 'બધા બદલી કરો',\r
+               btnUndo                 : 'અન્ડૂ',\r
+               noSuggestions   : '- કઇ સજેશન નથી -',\r
+               progress                : 'શબ્દની જોડણી/સ્પેલ ચેક ચાલુ છે...',\r
+               noMispell               : 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: ખોટી જોડણી મળી નથી',\r
+               noChanges               : 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એકપણ શબ્દ બદલયો નથી',\r
+               oneChange               : 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એક શબ્દ બદલયો છે',\r
+               manyChanges             : 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: %1 શબ્દ બદલયા છે',\r
+               ieSpellDownload : 'સ્પેલ-ચેકર ઇન્સ્ટોલ નથી. શું તમે ડાઉનલોડ કરવા માંગો છો?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'સ્માઇલી',\r
+               title   : 'સ્માઇલી  પસંદ કરો'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'સંખ્યાંકન સૂચિ',\r
+       bulletedlist : 'બુલેટ સૂચિ',\r
+       indent : 'ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી',\r
+       outdent : 'ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી',\r
+\r
+       justify :\r
+       {\r
+               left : 'ડાબી બાજુએ/બાજુ તરફ',\r
+               center : 'સંકેંદ્રણ/સેંટરિંગ',\r
+               right : 'જમણી બાજુએ/બાજુ તરફ',\r
+               block : 'બ્લૉક, અંતરાય જસ્ટિફાઇ'\r
+       },\r
+\r
+       blockquote : 'બ્લૉક-કોટ, અવતરણચિહ્નો',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'પેસ્ટ',\r
+               cutError        : 'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl+X) નો ઉપયોગ કરો.',\r
+               copyError       : 'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી.  (Ctrl+C) का प्रयोग करें।',\r
+               pasteMsg        : 'Ctrl+V નો પ્રયોગ કરી પેસ્ટ કરો',\r
+               securityMsg     : 'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસના કારણે,એડિટર તમારા કિલ્પબોર્ડ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિન્ડોમાં ફરીથી પેસ્ટ કરવું પડશે.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'પેસ્ટ (વડૅ ટેક્સ્ટ)',\r
+               title : 'પેસ્ટ (વડૅ ટેક્સ્ટ)',\r
+               advice : 'Ctrl+V નો પ્રયોગ કરી પેસ્ટ કરો',\r
+               ignoreFontFace : 'ફૉન્ટફેસ વ્યાખ્યાની અવગણના',\r
+               removeStyle : 'સ્ટાઇલ વ્યાખ્યા કાઢી નાખવી'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'પેસ્ટ (ટેક્સ્ટ)',\r
+               title : 'પેસ્ટ (ટેક્સ્ટ)'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'ટેમ્પ્લેટ',\r
+               title : 'કન્ટેન્ટ ટેમ્પ્લેટ',\r
+               insertOption: 'મૂળ શબ્દને બદલો',\r
+               selectPromptMsg: 'એડિટરમાં ઓપન કરવા ટેમ્પ્લેટ પસંદ કરો (વર્તમાન કન્ટેન્ટ સેવ નહીં થાય):',\r
+               emptyListMsg : '(કોઈ ટેમ્પ્લેટ ડિફાઇન નથી)'\r
+       },\r
+\r
+       showBlocks : 'બ્લૉક બતાવવું',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'શૈલી/રીત',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'ફૉન્ટ ફૉર્મટ, રચનાની શૈલી',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'ફૉન્ટ ફૉર્મટ, રચનાની શૈલી',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'સામાન્ય',\r
+               tag_pre : 'ફૉર્મટેડ',\r
+               tag_address : 'સરનામું',\r
+               tag_h1 : 'શીર્ષક 1',\r
+               tag_h2 : 'શીર્ષક 2',\r
+               tag_h3 : 'શીર્ષક 3',\r
+               tag_h4 : 'શીર્ષક 4',\r
+               tag_h5 : 'શીર્ષક 5',\r
+               tag_h6 : 'શીર્ષક 6',\r
+               tag_div : 'શીર્ષક (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'ફૉન્ટ',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'ફૉન્ટ',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'ફૉન્ટ સાઇઝ/કદ',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'ફૉન્ટ સાઇઝ/કદ',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'શબ્દનો રંગ',\r
+               bgColorTitle : 'બૅકગ્રાઉન્ડ રંગ,',\r
+               auto : 'સ્વચાલિત',\r
+               more : 'ઔર રંગ...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/he.js b/_source/lang/he.js
new file mode 100644 (file)
index 0000000..42e66be
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Hebrew language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['he'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'rtl',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'מקור',\r
+       newPage                 : 'דף חדש',\r
+       save                    : 'שמירה',\r
+       preview                 : 'תצוגה מקדימה',\r
+       cut                             : 'גזירה',\r
+       copy                    : 'העתקה',\r
+       paste                   : 'הדבקה',\r
+       print                   : 'הדפסה',\r
+       underline               : 'קו תחתון',\r
+       bold                    : 'מודגש',\r
+       italic                  : 'נטוי',\r
+       selectAll               : 'בחירת הכל',\r
+       removeFormat    : 'הסרת העיצוב',\r
+       strike                  : 'כתיב מחוק',\r
+       subscript               : 'כתיב תחתון',\r
+       superscript             : 'כתיב עליון',\r
+       horizontalrule  : 'הוספת קו אופקי',\r
+       pagebreak               : 'הוסף שבירת דף',\r
+       unlink                  : 'הסרת הקישור',\r
+       undo                    : 'ביטול צעד אחרון',\r
+       redo                    : 'חזרה על צעד אחרון',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'סייר השרת',\r
+               url                             : 'כתובת (URL)',\r
+               protocol                : 'פרוטוקול',\r
+               upload                  : 'העלאה',\r
+               uploadSubmit    : 'שליחה לשרת',\r
+               image                   : 'תמונה',\r
+               flash                   : 'פלאש',\r
+               form                    : 'טופס',\r
+               checkbox                : 'תיבת סימון',\r
+               radio           : 'לחצן אפשרויות',\r
+               textField               : 'שדה טקסט',\r
+               textarea                : 'איזור טקסט',\r
+               hiddenField             : 'שדה חבוי',\r
+               button                  : 'כפתור',\r
+               select  : 'שדה בחירה',\r
+               imageButton             : 'כפתור תמונה',\r
+               notSet                  : '<לא נקבע>',\r
+               id                              : 'זיהוי (Id)',\r
+               name                    : 'שם',\r
+               langDir                 : 'כיוון שפה',\r
+               langDirLtr              : 'שמאל לימין (LTR)',\r
+               langDirRtl              : 'ימין לשמאל (RTL)',\r
+               langCode                : 'קוד שפה',\r
+               longDescr               : 'קישור לתיאור מפורט',\r
+               cssClass                : 'גיליונות עיצוב קבוצות',\r
+               advisoryTitle   : 'כותרת מוצעת',\r
+               cssStyle                : 'סגנון',\r
+               ok                              : 'אישור',\r
+               cancel                  : 'ביטול',\r
+               generalTab              : 'כללי',\r
+               advancedTab             : 'אפשרויות מתקדמות',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'הוספת תו מיוחד',\r
+               title           : 'בחירת תו מיוחד'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'הוספת/עריכת קישור',\r
+               menu            : 'עריכת קישור',\r
+               title           : 'קישור',\r
+               info            : 'מידע על הקישור',\r
+               target          : 'מטרה',\r
+               upload          : 'העלאה',\r
+               advanced        : 'אפשרויות מתקדמות',\r
+               type            : 'סוג קישור',\r
+               toAnchor        : 'עוגן בעמוד זה',\r
+               toEmail         : 'דוא\'\'ל',\r
+               target          : 'מטרה',\r
+               targetNotSet    : '<לא נקבע>',\r
+               targetFrame     : '<מסגרת>',\r
+               targetPopup     : '<חלון קופץ>',\r
+               targetNew       : 'חלון חדש (_blank)',\r
+               targetTop       : 'חלון ראשי (_top)',\r
+               targetSelf      : 'באותו החלון (_self)',\r
+               targetParent    : 'חלון האב (_parent)',\r
+               targetFrameName : 'שם מסגרת היעד',\r
+               targetPopupName : 'שם החלון הקופץ',\r
+               popupFeatures   : 'תכונות החלון הקופץ',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'סרגל חיווי',\r
+               popupLocationBar        : 'סרגל כתובת',\r
+               popupToolbar    : 'סרגל הכלים',\r
+               popupMenuBar    : 'סרגל תפריט',\r
+               popupFullScreen : 'מסך מלא (IE)',\r
+               popupScrollBars : 'ניתן לגלילה',\r
+               popupDependent  : 'תלוי (Netscape)',\r
+               popupWidth              : 'רוחב',\r
+               popupLeft               : 'מיקום צד שמאל',\r
+               popupHeight             : 'גובה',\r
+               popupTop                : 'מיקום צד עליון',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'כיוון שפה',\r
+               langDirNotSet   : '<לא נקבע>',\r
+               langDirLTR              : 'שמאל לימין (LTR)',\r
+               langDirRTL              : 'ימין לשמאל (RTL)',\r
+               acccessKey              : 'מקש גישה',\r
+               name                    : 'שם',\r
+               langCode                : 'כיוון שפה',\r
+               tabIndex                : 'מספר טאב',\r
+               advisoryTitle   : 'כותרת מוצעת',\r
+               advisoryContentType     : 'Content Type מוצע',\r
+               cssClasses              : 'גיליונות עיצוב קבוצות',\r
+               charset                 : 'קידוד המשאב המקושר',\r
+               styles                  : 'סגנון',\r
+               selectAnchor    : 'בחירת עוגן',\r
+               anchorName              : 'עפ\'\'י שם העוגן',\r
+               anchorId                : 'עפ\'\'י זיהוי (Id) הרכיב',\r
+               emailAddress    : 'כתובת הדוא\'\'ל',\r
+               emailSubject    : 'נושא ההודעה',\r
+               emailBody               : 'גוף ההודעה',\r
+               noAnchors               : '(אין עוגנים זמינים בדף)',\r
+               noUrl                   : 'נא להקליד את כתובת הקישור (URL)',\r
+               noEmail                 : 'נא להקליד את כתובת הדוא\'\'ל'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'הוספת/עריכת נקודת עיגון',\r
+               menu            : 'מאפייני נקודת עיגון',\r
+               title           : 'מאפייני נקודת עיגון',\r
+               name            : 'שם לנקודת עיגון',\r
+               errorName       : 'אנא הזן שם לנקודת עיגון'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'חפש והחלף',\r
+               find                            : 'חיפוש',\r
+               replace                         : 'החלפה',\r
+               findWhat                        : 'חיפוש מחרוזת:',\r
+               replaceWith                     : 'החלפה במחרוזת:',\r
+               notFoundMsg                     : 'הטקסט המבוקש לא נמצא.',\r
+               matchCase                       : 'התאמת סוג אותיות (Case)',\r
+               matchWord                       : 'התאמה למילה המלאה',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'החלפה בכל העמוד',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'טבלה',\r
+               title           : 'תכונות טבלה',\r
+               menu            : 'תכונות טבלה',\r
+               deleteTable     : 'מחק טבלה',\r
+               rows            : 'שורות',\r
+               columns         : 'עמודות',\r
+               border          : 'גודל מסגרת',\r
+               align           : 'יישור',\r
+               alignNotSet     : '<לא נקבע>',\r
+               alignLeft       : 'שמאל',\r
+               alignCenter     : 'מרכז',\r
+               alignRight      : 'ימין',\r
+               width           : 'רוחב',\r
+               widthPx         : 'פיקסלים',\r
+               widthPc         : 'אחוז',\r
+               height          : 'גובה',\r
+               cellSpace       : 'מרווח תא',\r
+               cellPad         : 'ריפוד תא',\r
+               caption         : 'כיתוב',\r
+               summary         : 'סיכום',\r
+               headers         : 'כותרות',\r
+               headersNone             : 'אין',\r
+               headersColumn   : 'עמודה ראשונה',\r
+               headersRow              : 'שורה ראשונה',\r
+               headersBoth             : 'שניהם',\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'תא',\r
+                       insertBefore    : 'הוסף תא אחרי',\r
+                       insertAfter             : 'הוסף תא אחרי',\r
+                       deleteCell              : 'מחיקת תאים',\r
+                       merge                   : 'מיזוג תאים',\r
+                       mergeRight              : 'מזג ימינה',\r
+                       mergeDown               : 'מזג למטה',\r
+                       splitHorizontal : 'פצל תא אופקית',\r
+                       splitVertical   : 'פצל תא אנכית',\r
+                       title                   : 'תכונות התא',\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'שורה',\r
+                       insertBefore    : 'הוסף שורה לפני',\r
+                       insertAfter             : 'הוסף שורה אחרי',\r
+                       deleteRow               : 'מחיקת שורות'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'עמודה',\r
+                       insertBefore    : 'הוסף עמודה לפני',\r
+                       insertAfter             : 'הוסף עמודה אחרי',\r
+                       deleteColumn    : 'מחיקת עמודות'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'מאפייני כפתור',\r
+               text            : 'טקסט (ערך)',\r
+               type            : 'סוג',\r
+               typeBtn         : 'כפתור',\r
+               typeSbm         : 'שלח',\r
+               typeRst         : 'אפס'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'מאפייני תיבת סימון',\r
+               radioTitle      : 'מאפייני לחצן אפשרויות',\r
+               value           : 'ערך',\r
+               selected        : 'בחור'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'מאפיני טופס',\r
+               menu            : 'מאפיני טופס',\r
+               action          : 'שלח אל',\r
+               method          : 'סוג שליחה',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'מטרה',\r
+               targetNotSet    : '<לא נקבע>',\r
+               targetNew       : 'חלון חדש (_blank)',\r
+               targetTop       : 'חלון ראשי (_top)',\r
+               targetSelf      : 'באותו החלון (_self)',\r
+               targetParent    : 'חלון האב (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'מאפייני שדה בחירה',\r
+               selectInfo      : 'מידע',\r
+               opAvail         : 'אפשרויות זמינות',\r
+               value           : 'ערך',\r
+               size            : 'גודל',\r
+               lines           : 'שורות',\r
+               chkMulti        : 'אפשר בחירות מרובות',\r
+               opText          : 'טקסט',\r
+               opValue         : 'ערך',\r
+               btnAdd          : 'הוסף',\r
+               btnModify       : 'שנה',\r
+               btnUp           : 'למעלה',\r
+               btnDown         : 'למטה',\r
+               btnSetValue : 'קבע כברירת מחדל',\r
+               btnDelete       : 'מחק'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'מאפיני איזור טקסט',\r
+               cols            : 'עמודות',\r
+               rows            : 'שורות'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'מאפייני שדה טקסט',\r
+               name            : 'שם',\r
+               value           : 'ערך',\r
+               charWidth       : 'רוחב באותיות',\r
+               maxChars        : 'מקסימות אותיות',\r
+               type            : 'סוג',\r
+               typeText        : 'טקסט',\r
+               typePass        : 'סיסמה'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'מאפיני שדה חבוי',\r
+               name    : 'שם',\r
+               value   : 'ערך'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'תכונות התמונה',\r
+               titleButton     : 'מאפיני כפתור תמונה',\r
+               menu            : 'תכונות התמונה',\r
+               infoTab : 'מידע על התמונה',\r
+               btnUpload       : 'שליחה לשרת',\r
+               url             : 'כתובת (URL)',\r
+               upload  : 'העלאה',\r
+               alt             : 'טקסט חלופי',\r
+               width           : 'רוחב',\r
+               height  : 'גובה',\r
+               lockRatio       : 'נעילת היחס',\r
+               resetSize       : 'איפוס הגודל',\r
+               border  : 'מסגרת',\r
+               hSpace  : 'מרווח אופקי',\r
+               vSpace  : 'מרווח אנכי',\r
+               align           : 'יישור',\r
+               alignLeft       : 'לשמאל',\r
+               alignAbsBottom: 'לתחתית האבסולוטית',\r
+               alignAbsMiddle: 'מרכוז אבסולוטי',\r
+               alignBaseline   : 'לקו התחתית',\r
+               alignBottom     : 'לתחתית',\r
+               alignMiddle     : 'לאמצע',\r
+               alignRight      : 'לימין',\r
+               alignTextTop    : 'לראש הטקסט',\r
+               alignTop        : 'למעלה',\r
+               preview : 'תצוגה מקדימה',\r
+               alertUrl        : 'נא להקליד את כתובת התמונה',\r
+               linkTab : 'קישור',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'מאפייני פלאש',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'מאפיני פלאש',\r
+               chkPlay         : 'נגן אוטומטי',\r
+               chkLoop         : 'לולאה',\r
+               chkMenu         : 'אפשר תפריט פלאש',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'גודל',\r
+               scaleAll                : 'הצג הכל',\r
+               scaleNoBorder   : 'ללא גבולות',\r
+               scaleFit                : 'התאמה מושלמת',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'יישור',\r
+               alignLeft       : 'לשמאל',\r
+               alignAbsBottom: 'לתחתית האבסולוטית',\r
+               alignAbsMiddle: 'מרכוז אבסולוטי',\r
+               alignBaseline   : 'לקו התחתית',\r
+               alignBottom     : 'לתחתית',\r
+               alignMiddle     : 'לאמצע',\r
+               alignRight      : 'לימין',\r
+               alignTextTop    : 'לראש הטקסט',\r
+               alignTop        : 'למעלה',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'צבע רקע',\r
+               width   : 'רוחב',\r
+               height  : 'גובה',\r
+               hSpace  : 'מרווח אופקי',\r
+               vSpace  : 'מרווח אנכי',\r
+               validateSrc : 'נא להקליד את כתובת הקישור (URL)',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'בדיקת איות',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'לא נמצא במילון',\r
+               changeTo                : 'שנה ל',\r
+               btnIgnore               : 'התעלם',\r
+               btnIgnoreAll    : 'התעלם מהכל',\r
+               btnReplace              : 'החלף',\r
+               btnReplaceAll   : 'החלף הכל',\r
+               btnUndo                 : 'החזר',\r
+               noSuggestions   : '- אין הצעות -',\r
+               progress                : 'בדיקות איות בתהליך ....',\r
+               noMispell               : 'בדיקות איות הסתיימה: לא נמצאו שגיעות כתיב',\r
+               noChanges               : 'בדיקות איות הסתיימה: לא שונתה אף מילה',\r
+               oneChange               : 'בדיקות איות הסתיימה: שונתה מילה אחת',\r
+               manyChanges             : 'בדיקות איות הסתיימה: %1 מילים שונו',\r
+               ieSpellDownload : 'בודק האיות לא מותקן, האם אתה מעוניין להוריד?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'סמיילי',\r
+               title   : 'הוספת סמיילי'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'רשימה ממוספרת',\r
+       bulletedlist : 'רשימת נקודות',\r
+       indent : 'הגדלת אינדנטציה',\r
+       outdent : 'הקטנת אינדנטציה',\r
+\r
+       justify :\r
+       {\r
+               left : 'יישור לשמאל',\r
+               center : 'מרכוז',\r
+               right : 'יישור לימין',\r
+               block : 'יישור לשוליים'\r
+       },\r
+\r
+       blockquote : 'בלוק ציטוט',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'הדבקה',\r
+               cutError        : 'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה  אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+X).',\r
+               copyError       : 'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+C).',\r
+               pasteMsg        : 'אנא הדבק בתוך הקופסה באמצעות  (<STRONG>Ctrl+V</STRONG>) ולחץ על  <STRONG>אישור</STRONG>.',\r
+               securityMsg     : 'עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (clipboard) בצורה ישירה.אנא בצע הדבק שוב בחלון זה.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'הדבקה מ-וורד',\r
+               title : 'הדבקה מ-וורד',\r
+               advice : 'אנא הדבק בתוך הקופסה באמצעות  (<STRONG>Ctrl+V</STRONG>) ולחץ על  <STRONG>אישור</STRONG>.',\r
+               ignoreFontFace : 'התעלם מהגדרות סוג פונט',\r
+               removeStyle : 'הסר הגדרות סגנון'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'הדבקה כטקסט פשוט',\r
+               title : 'הדבקה כטקסט פשוט'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'תבניות',\r
+               title : 'תביות תוכן',\r
+               insertOption: 'החלפת תוכן ממשי',\r
+               selectPromptMsg: 'אנא בחר תבנית לפתיחה בעורך <BR>התוכן המקורי ימחק:',\r
+               emptyListMsg : '(לא הוגדרו תבניות)'\r
+       },\r
+\r
+       showBlocks : 'הצג בלוקים',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'סגנון',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'עיצוב',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'עיצוב',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'נורמלי',\r
+               tag_pre : 'קוד',\r
+               tag_address : 'כתובת',\r
+               tag_h1 : 'כותרת',\r
+               tag_h2 : 'כותרת 2',\r
+               tag_h3 : 'כותרת 3',\r
+               tag_h4 : 'כותרת 4',\r
+               tag_h5 : 'כותרת 5',\r
+               tag_h6 : 'כותרת 6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'גופן',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'גופן',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'גודל',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'גודל',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'צבע טקסט',\r
+               bgColorTitle : 'צבע רקע',\r
+               auto : 'אוטומטי',\r
+               more : 'צבעים נוספים...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/hi.js b/_source/lang/hi.js
new file mode 100644 (file)
index 0000000..4f228e4
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Hindi language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['hi'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'सोर्स',\r
+       newPage                 : 'नया पेज',\r
+       save                    : 'सेव',\r
+       preview                 : 'प्रीव्यू',\r
+       cut                             : 'कट',\r
+       copy                    : 'कॉपी',\r
+       paste                   : 'पेस्ट',\r
+       print                   : 'प्रिन्ट',\r
+       underline               : 'रेखांकण',\r
+       bold                    : 'बोल्ड',\r
+       italic                  : 'इटैलिक',\r
+       selectAll               : 'सब सॅलॅक्ट करें',\r
+       removeFormat    : 'फ़ॉर्मैट हटायें',\r
+       strike                  : 'स्ट्राइक थ्रू',\r
+       subscript               : 'अधोलेख',\r
+       superscript             : 'अभिलेख',\r
+       horizontalrule  : 'हॉरिज़ॉन्टल रेखा इन्सर्ट करें',\r
+       pagebreak               : 'पेज ब्रेक इन्सर्ट् करें',\r
+       unlink                  : 'लिंक हटायें',\r
+       undo                    : 'अन्डू',\r
+       redo                    : 'रीडू',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'सर्वर ब्राउज़ करें',\r
+               url                             : 'URL',\r
+               protocol                : 'प्रोटोकॉल',\r
+               upload                  : 'अपलोड',\r
+               uploadSubmit    : 'इसे सर्वर को भेजें',\r
+               image                   : 'तस्वीर',\r
+               flash                   : 'फ़्लैश',\r
+               form                    : 'फ़ॉर्म',\r
+               checkbox                : 'चॅक बॉक्स',\r
+               radio           : 'रेडिओ बटन',\r
+               textField               : 'टेक्स्ट फ़ील्ड',\r
+               textarea                : 'टेक्स्ट एरिया',\r
+               hiddenField             : 'गुप्त फ़ील्ड',\r
+               button                  : 'बटन',\r
+               select  : 'चुनाव फ़ील्ड',\r
+               imageButton             : 'तस्वीर बटन',\r
+               notSet                  : '<सॅट नहीं>',\r
+               id                              : 'Id',\r
+               name                    : 'नाम',\r
+               langDir                 : 'भाषा लिखने की दिशा',\r
+               langDirLtr              : 'बायें से दायें (LTR)',\r
+               langDirRtl              : 'दायें से बायें (RTL)',\r
+               langCode                : 'भाषा कोड',\r
+               longDescr               : 'अधिक विवरण के लिए URL',\r
+               cssClass                : 'स्टाइल-शीट क्लास',\r
+               advisoryTitle   : 'परामर्श शीर्शक',\r
+               cssStyle                : 'स्टाइल',\r
+               ok                              : 'ठीक है',\r
+               cancel                  : 'रद्द करें',\r
+               generalTab              : 'सामान्य',\r
+               advancedTab             : 'ऍड्वान्स्ड',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'विशेष करॅक्टर इन्सर्ट करें',\r
+               title           : 'विशेष करॅक्टर चुनें'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'लिंक इन्सर्ट/संपादन',\r
+               menu            : 'लिंक संपादन',\r
+               title           : 'लिंक',\r
+               info            : 'लिंक  ',\r
+               target          : 'टार्गेट',\r
+               upload          : 'अपलोड',\r
+               advanced        : 'ऍड्वान्स्ड',\r
+               type            : 'लिंक प्रकार',\r
+               toAnchor        : 'इस पेज का ऐंकर',\r
+               toEmail         : 'ई-मेल',\r
+               target          : 'टार्गेट',\r
+               targetNotSet    : '<सॅट नहीं>',\r
+               targetFrame     : '<फ़्रेम>',\r
+               targetPopup     : '<पॉप-अप विन्डो>',\r
+               targetNew       : 'नया विन्डो (_blank)',\r
+               targetTop       : 'शीर्ष विन्डो (_top)',\r
+               targetSelf      : 'इसी विन्डो (_self)',\r
+               targetParent    : 'मूल विन्डो (_parent)',\r
+               targetFrameName : 'टार्गेट फ़्रेम का नाम',\r
+               targetPopupName : 'पॉप-अप विन्डो का नाम',\r
+               popupFeatures   : 'पॉप-अप विन्डो फ़ीचर्स',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'स्टेटस बार',\r
+               popupLocationBar        : 'लोकेशन बार',\r
+               popupToolbar    : 'टूल बार',\r
+               popupMenuBar    : 'मॅन्यू बार',\r
+               popupFullScreen : 'फ़ुल स्क्रीन (IE)',\r
+               popupScrollBars : 'स्क्रॉल बार',\r
+               popupDependent  : 'डिपेन्डॅन्ट (Netscape)',\r
+               popupWidth              : 'चौड़ाई',\r
+               popupLeft               : 'बायीं तरफ',\r
+               popupHeight             : 'ऊँचाई',\r
+               popupTop                : 'दायीं तरफ',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'भाषा लिखने की दिशा',\r
+               langDirNotSet   : '<सॅट नहीं>',\r
+               langDirLTR              : 'बायें से दायें (LTR)',\r
+               langDirRTL              : 'दायें से बायें (RTL)',\r
+               acccessKey              : 'ऍक्सॅस की',\r
+               name                    : 'नाम',\r
+               langCode                : 'भाषा लिखने की दिशा',\r
+               tabIndex                : 'टैब इन्डॅक्स',\r
+               advisoryTitle   : 'परामर्श शीर्शक',\r
+               advisoryContentType     : 'परामर्श कन्टॅन्ट प्रकार',\r
+               cssClasses              : 'स्टाइल-शीट क्लास',\r
+               charset                 : 'लिंक रिसोर्स करॅक्टर सॅट',\r
+               styles                  : 'स्टाइल',\r
+               selectAnchor    : 'ऐंकर चुनें',\r
+               anchorName              : 'ऐंकर नाम से',\r
+               anchorId                : 'ऍलीमॅन्ट Id से',\r
+               emailAddress    : 'ई-मेल पता',\r
+               emailSubject    : 'संदेश विषय',\r
+               emailBody               : 'संदेश',\r
+               noAnchors               : '(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)',\r
+               noUrl                   : 'लिंक URL टाइप करें',\r
+               noEmail                 : 'ई-मेल पता टाइप करें'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'ऐंकर इन्सर्ट/संपादन',\r
+               menu            : 'ऐंकर प्रॉपर्टीज़',\r
+               title           : 'ऐंकर प्रॉपर्टीज़',\r
+               name            : 'ऐंकर का नाम',\r
+               errorName       : 'ऐंकर का नाम टाइप करें'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'खोजें और बदलें',\r
+               find                            : 'खोजें',\r
+               replace                         : 'रीप्लेस',\r
+               findWhat                        : 'यह खोजें:',\r
+               replaceWith                     : 'इससे रिप्लेस करें:',\r
+               notFoundMsg                     : 'आपके द्वारा दिया गया टेक्स्ट नहीं मिला',\r
+               matchCase                       : 'केस मिलायें',\r
+               matchWord                       : 'पूरा शब्द मिलायें',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'सभी रिप्लेस करें',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'टेबल',\r
+               title           : 'टेबल प्रॉपर्टीज़',\r
+               menu            : 'टेबल प्रॉपर्टीज़',\r
+               deleteTable     : 'टेबल डिलीट करें',\r
+               rows            : 'पंक्तियाँ',\r
+               columns         : 'कालम',\r
+               border          : 'बॉर्डर साइज़',\r
+               align           : 'ऍलाइन्मॅन्ट',\r
+               alignNotSet     : '<सॅट नहीं>',\r
+               alignLeft       : 'दायें',\r
+               alignCenter     : 'बीच में',\r
+               alignRight      : 'बायें',\r
+               width           : 'चौड़ाई',\r
+               widthPx         : 'पिक्सैल',\r
+               widthPc         : 'प्रतिशत',\r
+               height          : 'ऊँचाई',\r
+               cellSpace       : 'सैल अंतर',\r
+               cellPad         : 'सैल पैडिंग',\r
+               caption         : 'शीर्षक',\r
+               summary         : 'सारांश',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'खाना',\r
+                       insertBefore    : 'पहले सैल डालें',\r
+                       insertAfter             : 'बाद में सैल डालें',\r
+                       deleteCell              : 'सैल डिलीट करें',\r
+                       merge                   : 'सैल मिलायें',\r
+                       mergeRight              : 'बाँया विलय',\r
+                       mergeDown               : 'नीचे विलय करें',\r
+                       splitHorizontal : 'सैल को क्षैतिज स्थिति में विभाजित करें',\r
+                       splitVertical   : 'सैल को लम्बाकार में विभाजित करें',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'पंक्ति',\r
+                       insertBefore    : 'पहले पंक्ति डालें',\r
+                       insertAfter             : 'बाद में पंक्ति डालें',\r
+                       deleteRow               : 'पंक्तियाँ डिलीट करें'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'कालम',\r
+                       insertBefore    : 'पहले कालम डालें',\r
+                       insertAfter             : 'बाद में कालम डालें',\r
+                       deleteColumn    : 'कालम डिलीट करें'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'बटन प्रॉपर्टीज़',\r
+               text            : 'टेक्स्ट (वैल्यू)',\r
+               type            : 'प्रकार',\r
+               typeBtn         : 'बटन',\r
+               typeSbm         : 'सब्मिट',\r
+               typeRst         : 'रिसेट'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'चॅक बॉक्स प्रॉपर्टीज़',\r
+               radioTitle      : 'रेडिओ बटन प्रॉपर्टीज़',\r
+               value           : 'वैल्यू',\r
+               selected        : 'सॅलॅक्टॅड'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'फ़ॉर्म प्रॉपर्टीज़',\r
+               menu            : 'फ़ॉर्म प्रॉपर्टीज़',\r
+               action          : 'क्रिया',\r
+               method          : 'तरीका',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'टार्गेट',\r
+               targetNotSet    : '<सॅट नहीं>',\r
+               targetNew       : 'नया विन्डो (_blank)',\r
+               targetTop       : 'शीर्ष विन्डो (_top)',\r
+               targetSelf      : 'इसी विन्डो (_self)',\r
+               targetParent    : 'मूल विन्डो (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'चुनाव फ़ील्ड प्रॉपर्टीज़',\r
+               selectInfo      : 'सूचना',\r
+               opAvail         : 'उपलब्ध विकल्प',\r
+               value           : 'वैल्यू',\r
+               size            : 'साइज़',\r
+               lines           : 'पंक्तियाँ',\r
+               chkMulti        : 'एक से ज्यादा विकल्प चुनने दें',\r
+               opText          : 'टेक्स्ट',\r
+               opValue         : 'वैल्यू',\r
+               btnAdd          : 'जोड़ें',\r
+               btnModify       : 'बदलें',\r
+               btnUp           : 'ऊपर',\r
+               btnDown         : 'नीचे',\r
+               btnSetValue : 'चुनी गई वैल्यू सॅट करें',\r
+               btnDelete       : 'डिलीट'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'टेक्स्त एरिया प्रॉपर्टीज़',\r
+               cols            : 'कालम',\r
+               rows            : 'पंक्तियां'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'टेक्स्ट फ़ील्ड प्रॉपर्टीज़',\r
+               name            : 'नाम',\r
+               value           : 'वैल्यू',\r
+               charWidth       : 'करॅक्टर की चौढ़ाई',\r
+               maxChars        : 'अधिकतम करॅक्टर',\r
+               type            : 'टाइप',\r
+               typeText        : 'टेक्स्ट',\r
+               typePass        : 'पास्वर्ड'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'गुप्त फ़ील्ड प्रॉपर्टीज़',\r
+               name    : 'नाम',\r
+               value   : 'वैल्यू'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'तस्वीर प्रॉपर्टीज़',\r
+               titleButton     : 'तस्वीर बटन प्रॉपर्टीज़',\r
+               menu            : 'तस्वीर प्रॉपर्टीज़',\r
+               infoTab : 'तस्वीर की जानकारी',\r
+               btnUpload       : 'इसे सर्वर को भेजें',\r
+               url             : 'URL',\r
+               upload  : 'अपलोड',\r
+               alt             : 'वैकल्पिक टेक्स्ट',\r
+               width           : 'चौड़ाई',\r
+               height  : 'ऊँचाई',\r
+               lockRatio       : 'लॉक अनुपात',\r
+               resetSize       : 'रीसॅट साइज़',\r
+               border  : 'बॉर्डर',\r
+               hSpace  : 'हॉरिज़ॉन्टल स्पेस',\r
+               vSpace  : 'वर्टिकल स्पेस',\r
+               align           : 'ऍलाइन',\r
+               alignLeft       : 'दायें',\r
+               alignAbsBottom: 'Abs नीचे',\r
+               alignAbsMiddle: 'Abs ऊपर',\r
+               alignBaseline   : 'मूल रेखा',\r
+               alignBottom     : 'नीचे',\r
+               alignMiddle     : 'मध्य',\r
+               alignRight      : 'दायें',\r
+               alignTextTop    : 'टेक्स्ट ऊपर',\r
+               alignTop        : 'ऊपर',\r
+               preview : 'प्रीव्यू',\r
+               alertUrl        : 'तस्वीर का URL टाइप करें ',\r
+               linkTab : 'लिंक',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'फ़्लैश प्रॉपर्टीज़',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'फ़्लैश प्रॉपर्टीज़',\r
+               chkPlay         : 'ऑटो प्ले',\r
+               chkLoop         : 'लूप',\r
+               chkMenu         : 'फ़्लैश मॅन्यू का प्रयोग करें',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'स्केल',\r
+               scaleAll                : 'सभी दिखायें',\r
+               scaleNoBorder   : 'कोई बॉर्डर नहीं',\r
+               scaleFit                : 'बिल्कुल फ़िट',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'ऍलाइन',\r
+               alignLeft       : 'दायें',\r
+               alignAbsBottom: 'Abs नीचे',\r
+               alignAbsMiddle: 'Abs ऊपर',\r
+               alignBaseline   : 'मूल रेखा',\r
+               alignBottom     : 'नीचे',\r
+               alignMiddle     : 'मध्य',\r
+               alignRight      : 'दायें',\r
+               alignTextTop    : 'टेक्स्ट ऊपर',\r
+               alignTop        : 'ऊपर',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'बैक्ग्राउन्ड रंग',\r
+               width   : 'चौड़ाई',\r
+               height  : 'ऊँचाई',\r
+               hSpace  : 'हॉरिज़ॉन्टल स्पेस',\r
+               vSpace  : 'वर्टिकल स्पेस',\r
+               validateSrc : 'लिंक URL टाइप करें',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'वर्तनी (स्पेलिंग) जाँच',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'शब्दकोश में नहीं',\r
+               changeTo                : 'इसमें बदलें',\r
+               btnIgnore               : 'इग्नोर',\r
+               btnIgnoreAll    : 'सभी इग्नोर करें',\r
+               btnReplace              : 'रिप्लेस',\r
+               btnReplaceAll   : 'सभी रिप्लेस करें',\r
+               btnUndo                 : 'अन्डू',\r
+               noSuggestions   : '- कोई सुझाव नहीं -',\r
+               progress                : 'वर्तनी की जाँच (स्पॅल-चॅक) जारी है...',\r
+               noMispell               : 'वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई',\r
+               noChanges               : 'वर्तनी की जाँच :कोई शब्द नहीं बदला गया',\r
+               oneChange               : 'वर्तनी की जाँच : एक शब्द बदला गया',\r
+               manyChanges             : 'वर्तनी की जाँच : %1 शब्द बदले गये',\r
+               ieSpellDownload : 'स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डाउनलोड करना चाहेंगे?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'स्माइली',\r
+               title   : 'स्माइली इन्सर्ट करें'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'अंकीय सूची',\r
+       bulletedlist : 'बुलॅट सूची',\r
+       indent : 'इन्डॅन्ट बढ़ायें',\r
+       outdent : 'इन्डॅन्ट कम करें',\r
+\r
+       justify :\r
+       {\r
+               left : 'बायीं तरफ',\r
+               center : 'बीच में',\r
+               right : 'दायीं तरफ',\r
+               block : 'ब्लॉक जस्टीफ़ाई'\r
+       },\r
+\r
+       blockquote : 'ब्लॉक-कोट',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'पेस्ट',\r
+               cutError        : 'आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl+X) का प्रयोग करें।',\r
+               copyError       : 'आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl+C) का प्रयोग करें।',\r
+               pasteMsg        : 'Ctrl+V का प्रयोग करके पेस्ट करें और ठीक है करें.',\r
+               securityMsg     : 'आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'पेस्ट (वर्ड से)',\r
+               title : 'पेस्ट (वर्ड से)',\r
+               advice : 'Ctrl+V का प्रयोग करके पेस्ट करें और ठीक है करें.',\r
+               ignoreFontFace : 'फ़ॉन्ट परिभाषा निकालें',\r
+               removeStyle : 'स्टाइल परिभाषा निकालें'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'पेस्ट (सादा टॅक्स्ट)',\r
+               title : 'पेस्ट (सादा टॅक्स्ट)'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'टॅम्प्लेट',\r
+               title : 'कन्टेन्ट टॅम्प्लेट',\r
+               insertOption: 'मूल शब्दों को बदलें',\r
+               selectPromptMsg: 'ऍडिटर में ओपन करने हेतु टॅम्प्लेट चुनें(वर्तमान कन्टॅन्ट सेव नहीं होंगे):',\r
+               emptyListMsg : '(कोई टॅम्प्लेट डिफ़ाइन नहीं किया गया है)'\r
+       },\r
+\r
+       showBlocks : 'ब्लॉक दिखायें',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'स्टाइल',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'फ़ॉर्मैट',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'फ़ॉर्मैट',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'साधारण',\r
+               tag_pre : 'फ़ॉर्मैटॅड',\r
+               tag_address : 'पता',\r
+               tag_h1 : 'शीर्षक 1',\r
+               tag_h2 : 'शीर्षक 2',\r
+               tag_h3 : 'शीर्षक 3',\r
+               tag_h4 : 'शीर्षक 4',\r
+               tag_h5 : 'शीर्षक 5',\r
+               tag_h6 : 'शीर्षक 6',\r
+               tag_div : 'शीर्षक (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'फ़ॉन्ट',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'फ़ॉन्ट',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'साइज़',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'साइज़',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'टेक्स्ट रंग',\r
+               bgColorTitle : 'बैक्ग्राउन्ड रंग',\r
+               auto : 'स्वचालित',\r
+               more : 'और रंग...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/hr.js b/_source/lang/hr.js
new file mode 100644 (file)
index 0000000..630a03e
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Croatian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['hr'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Text editor, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Kôd',\r
+       newPage                 : 'Nova stranica',\r
+       save                    : 'Snimi',\r
+       preview                 : 'Pregledaj',\r
+       cut                             : 'Izreži',\r
+       copy                    : 'Kopiraj',\r
+       paste                   : 'Zalijepi',\r
+       print                   : 'Ispiši',\r
+       underline               : 'Potcrtano',\r
+       bold                    : 'Podebljaj',\r
+       italic                  : 'Ukosi',\r
+       selectAll               : 'Odaberi sve',\r
+       removeFormat    : 'Ukloni formatiranje',\r
+       strike                  : 'Precrtano',\r
+       subscript               : 'Subscript',\r
+       superscript             : 'Superscript',\r
+       horizontalrule  : 'Ubaci vodoravnu liniju',\r
+       pagebreak               : 'Ubaci prijelom stranice',\r
+       unlink                  : 'Ukloni link',\r
+       undo                    : 'Poništi',\r
+       redo                    : 'Ponovi',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Pretraži server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokol',\r
+               upload                  : 'Pošalji',\r
+               uploadSubmit    : 'Pošalji na server',\r
+               image                   : 'Slika',\r
+               flash                   : 'Flash',\r
+               form                    : 'Form',\r
+               checkbox                : 'Checkbox',\r
+               radio           : 'Radio Button',\r
+               textField               : 'Text Field',\r
+               textarea                : 'Textarea',\r
+               hiddenField             : 'Hidden Field',\r
+               button                  : 'Button',\r
+               select  : 'Selection Field',\r
+               imageButton             : 'Image Button',\r
+               notSet                  : '<nije postavljeno>',\r
+               id                              : 'Id',\r
+               name                    : 'Naziv',\r
+               langDir                 : 'Smjer jezika',\r
+               langDirLtr              : 'S lijeva na desno (LTR)',\r
+               langDirRtl              : 'S desna na lijevo (RTL)',\r
+               langCode                : 'Kôd jezika',\r
+               longDescr               : 'Dugački opis URL',\r
+               cssClass                : 'Stylesheet klase',\r
+               advisoryTitle   : 'Advisory naslov',\r
+               cssStyle                : 'Stil',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Poništi',\r
+               generalTab              : 'Općenito',\r
+               advancedTab             : 'Napredno',\r
+               validateNumberFailed    : 'Ova vrijednost nije broj.',\r
+               confirmNewPage  : 'Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?',\r
+               confirmCancel   : 'Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, nedostupno</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Ubaci posebne znakove',\r
+               title           : 'Odaberite posebni karakter'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Ubaci/promijeni link',\r
+               menu            : 'Promijeni link',\r
+               title           : 'Link',\r
+               info            : 'Link Info',\r
+               target          : 'Meta',\r
+               upload          : 'Pošalji',\r
+               advanced        : 'Napredno',\r
+               type            : 'Link vrsta',\r
+               toAnchor        : 'Sidro na ovoj stranici',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Meta',\r
+               targetNotSet    : '<nije postavljeno>',\r
+               targetFrame     : '<okvir>',\r
+               targetPopup     : '<popup prozor>',\r
+               targetNew       : 'Novi prozor (_blank)',\r
+               targetTop       : 'Vršni prozor (_top)',\r
+               targetSelf      : 'Isti prozor (_self)',\r
+               targetParent    : 'Roditeljski prozor (_parent)',\r
+               targetFrameName : 'Ime ciljnog okvira',\r
+               targetPopupName : 'Naziv popup prozora',\r
+               popupFeatures   : 'Mogućnosti popup prozora',\r
+               popupResizable  : 'Promjenjiva veličina',\r
+               popupStatusBar  : 'Statusna traka',\r
+               popupLocationBar        : 'Traka za lokaciju',\r
+               popupToolbar    : 'Traka s alatima',\r
+               popupMenuBar    : 'Izborna traka',\r
+               popupFullScreen : 'Cijeli ekran (IE)',\r
+               popupScrollBars : 'Scroll traka',\r
+               popupDependent  : 'Ovisno (Netscape)',\r
+               popupWidth              : 'Širina',\r
+               popupLeft               : 'Lijeva pozicija',\r
+               popupHeight             : 'Visina',\r
+               popupTop                : 'Gornja pozicija',\r
+               id                              : 'Id',\r
+               langDir                 : 'Smjer jezika',\r
+               langDirNotSet   : '<nije postavljeno>',\r
+               langDirLTR              : 'S lijeva na desno (LTR)',\r
+               langDirRTL              : 'S desna na lijevo (RTL)',\r
+               acccessKey              : 'Pristupna tipka',\r
+               name                    : 'Naziv',\r
+               langCode                : 'Smjer jezika',\r
+               tabIndex                : 'Tab Indeks',\r
+               advisoryTitle   : 'Advisory naslov',\r
+               advisoryContentType     : 'Advisory vrsta sadržaja',\r
+               cssClasses              : 'Stylesheet klase',\r
+               charset                 : 'Kodna stranica povezanih resursa',\r
+               styles                  : 'Stil',\r
+               selectAnchor    : 'Odaberi sidro',\r
+               anchorName              : 'Po nazivu sidra',\r
+               anchorId                : 'Po Id elementa',\r
+               emailAddress    : 'E-Mail adresa',\r
+               emailSubject    : 'Naslov',\r
+               emailBody               : 'Sadržaj poruke',\r
+               noAnchors               : '(Nema dostupnih sidra)',\r
+               noUrl                   : 'Molimo upišite URL link',\r
+               noEmail                 : 'Molimo upišite e-mail adresu'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Ubaci/promijeni sidro',\r
+               menu            : 'Svojstva sidra',\r
+               title           : 'Svojstva sidra',\r
+               name            : 'Ime sidra',\r
+               errorName       : 'Molimo unesite ime sidra'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Pronađi i zamijeni',\r
+               find                            : 'Pronađi',\r
+               replace                         : 'Zamijeni',\r
+               findWhat                        : 'Pronađi:',\r
+               replaceWith                     : 'Zamijeni s:',\r
+               notFoundMsg                     : 'Traženi tekst nije pronađen.',\r
+               matchCase                       : 'Usporedi mala/velika slova',\r
+               matchWord                       : 'Usporedi cijele riječi',\r
+               matchCyclic                     : 'Usporedi kružno',\r
+               replaceAll                      : 'Zamijeni sve',\r
+               replaceSuccessMsg       : 'Zamijenjeno %1 pojmova.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tablica',\r
+               title           : 'Svojstva tablice',\r
+               menu            : 'Svojstva tablice',\r
+               deleteTable     : 'Izbriši tablicu',\r
+               rows            : 'Redova',\r
+               columns         : 'Kolona',\r
+               border          : 'Veličina okvira',\r
+               align           : 'Poravnanje',\r
+               alignNotSet     : '<nije postavljeno>',\r
+               alignLeft       : 'Lijevo',\r
+               alignCenter     : 'Središnje',\r
+               alignRight      : 'Desno',\r
+               width           : 'Širina',\r
+               widthPx         : 'piksela',\r
+               widthPc         : 'postotaka',\r
+               height          : 'Visina',\r
+               cellSpace       : 'Prostornost ćelija',\r
+               cellPad         : 'Razmak ćelija',\r
+               caption         : 'Naslov',\r
+               summary         : 'Sažetak',\r
+               headers         : 'Zaglavlje',\r
+               headersNone             : 'Ništa',\r
+               headersColumn   : 'Prva kolona',\r
+               headersRow              : 'Prvi red',\r
+               headersBoth             : 'Oba',\r
+               invalidRows             : 'Broj redova mora biti broj veći od 0.',\r
+               invalidCols             : 'Broj kolona mora biti broj veći od 0.',\r
+               invalidBorder   : 'Debljina ruba mora biti broj.',\r
+               invalidWidth    : 'Širina tablice mora biti broj.',\r
+               invalidHeight   : 'Visina tablice mora biti broj.',\r
+               invalidCellSpacing      : 'Prostornost ćelija mora biti broj.',\r
+               invalidCellPadding      : 'Razmak ćelija mora biti broj.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Ćelija',\r
+                       insertBefore    : 'Ubaci ćeliju prije',\r
+                       insertAfter             : 'Ubaci ćeliju poslije',\r
+                       deleteCell              : 'Izbriši ćelije',\r
+                       merge                   : 'Spoji ćelije',\r
+                       mergeRight              : 'Spoji desno',\r
+                       mergeDown               : 'Spoji dolje',\r
+                       splitHorizontal : 'Podijeli ćeliju vodoravno',\r
+                       splitVertical   : 'Podijeli ćeliju okomito',\r
+                       title                   : 'Svojstva ćelije',\r
+                       cellType                : 'Vrsta ćelije',\r
+                       rowSpan                 : 'Rows Span',\r
+                       colSpan                 : 'Columns Span',\r
+                       wordWrap                : 'Prelazak u novi red',\r
+                       hAlign                  : 'Vodoravno poravnanje',\r
+                       vAlign                  : 'Okomito poravnanje',\r
+                       alignTop                : 'Vrh',\r
+                       alignMiddle             : 'Sredina',\r
+                       alignBottom             : 'Dolje',\r
+                       alignBaseline   : 'Osnovna linija',\r
+                       bgColor                 : 'Boja pozadine',\r
+                       borderColor             : 'Boja ruba',\r
+                       data                    : 'Podatak',\r
+                       header                  : 'Zaglavlje',\r
+                       yes                             : 'Da',\r
+                       no                              : 'ne',\r
+                       invalidWidth    : 'Širina ćelije mora biti broj.',\r
+                       invalidHeight   : 'Visina ćelije mora biti broj.',\r
+                       invalidRowSpan  : 'Rows span mora biti cijeli broj.',\r
+                       invalidColSpan  : 'Columns span mora biti cijeli broj.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Red',\r
+                       insertBefore    : 'Ubaci red prije',\r
+                       insertAfter             : 'Ubaci red poslije',\r
+                       deleteRow               : 'Izbriši redove'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Kolona',\r
+                       insertBefore    : 'Ubaci kolonu prije',\r
+                       insertAfter             : 'Ubaci kolonu poslije',\r
+                       deleteColumn    : 'Izbriši kolone'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Image Button svojstva',\r
+               text            : 'Tekst (vrijednost)',\r
+               type            : 'Vrsta',\r
+               typeBtn         : 'Gumb',\r
+               typeSbm         : 'Pošalji',\r
+               typeRst         : 'Poništi'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Checkbox svojstva',\r
+               radioTitle      : 'Radio Button svojstva',\r
+               value           : 'Vrijednost',\r
+               selected        : 'Odabrano'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Form svojstva',\r
+               menu            : 'Form svojstva',\r
+               action          : 'Akcija',\r
+               method          : 'Metoda',\r
+               encoding        : 'Encoding',\r
+               target          : 'Meta',\r
+               targetNotSet    : '<nije postavljeno>',\r
+               targetNew       : 'Novi prozor (_blank)',\r
+               targetTop       : 'Vršni prozor (_top)',\r
+               targetSelf      : 'Isti prozor (_self)',\r
+               targetParent    : 'Roditeljski prozor (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Selection svojstva',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Dostupne opcije',\r
+               value           : 'Vrijednost',\r
+               size            : 'Veličina',\r
+               lines           : 'linija',\r
+               chkMulti        : 'Dozvoli višestruki odabir',\r
+               opText          : 'Tekst',\r
+               opValue         : 'Vrijednost',\r
+               btnAdd          : 'Dodaj',\r
+               btnModify       : 'Promijeni',\r
+               btnUp           : 'Gore',\r
+               btnDown         : 'Dolje',\r
+               btnSetValue : 'Postavi kao odabranu vrijednost',\r
+               btnDelete       : 'Obriši'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Textarea svojstva',\r
+               cols            : 'Kolona',\r
+               rows            : 'Redova'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Text Field svojstva',\r
+               name            : 'Ime',\r
+               value           : 'Vrijednost',\r
+               charWidth       : 'Širina',\r
+               maxChars        : 'Najviše karaktera',\r
+               type            : 'Vrsta',\r
+               typeText        : 'Tekst',\r
+               typePass        : 'Šifra'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Hidden Field svojstva',\r
+               name    : 'Ime',\r
+               value   : 'Vrijednost'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Svojstva slika',\r
+               titleButton     : 'Image Button svojstva',\r
+               menu            : 'Svojstva slika',\r
+               infoTab : 'Info slike',\r
+               btnUpload       : 'Pošalji na server',\r
+               url             : 'URL',\r
+               upload  : 'Pošalji',\r
+               alt             : 'Alternativni tekst',\r
+               width           : 'Širina',\r
+               height  : 'Visina',\r
+               lockRatio       : 'Zaključaj odnos',\r
+               resetSize       : 'Obriši veličinu',\r
+               border  : 'Okvir',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Poravnaj',\r
+               alignLeft       : 'Lijevo',\r
+               alignAbsBottom: 'Abs dolje',\r
+               alignAbsMiddle: 'Abs sredina',\r
+               alignBaseline   : 'Bazno',\r
+               alignBottom     : 'Dolje',\r
+               alignMiddle     : 'Sredina',\r
+               alignRight      : 'Desno',\r
+               alignTextTop    : 'Vrh teksta',\r
+               alignTop        : 'Vrh',\r
+               preview : 'Pregledaj',\r
+               alertUrl        : 'Unesite URL slike',\r
+               linkTab : 'Link',\r
+               button2Img      : 'Želite li promijeniti odabrani gumb u jednostavnu sliku?',\r
+               img2Button      : 'Želite li promijeniti odabranu sliku u gumb?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash svojstva',\r
+               propertiesTab   : 'Svojstva',\r
+               title           : 'Flash svojstva',\r
+               chkPlay         : 'Auto Play',\r
+               chkLoop         : 'Ponavljaj',\r
+               chkMenu         : 'Omogući Flash izbornik',\r
+               chkFull         : 'Omogući Fullscreen',\r
+               scale           : 'Omjer',\r
+               scaleAll                : 'Prikaži sve',\r
+               scaleNoBorder   : 'Bez okvira',\r
+               scaleFit                : 'Točna veličina',\r
+               access                  : 'Script Access',\r
+               accessAlways    : 'Uvijek',\r
+               accessSameDomain        : 'Ista domena',\r
+               accessNever     : 'Nikad',\r
+               align           : 'Poravnaj',\r
+               alignLeft       : 'Lijevo',\r
+               alignAbsBottom: 'Abs dolje',\r
+               alignAbsMiddle: 'Abs sredina',\r
+               alignBaseline   : 'Bazno',\r
+               alignBottom     : 'Dolje',\r
+               alignMiddle     : 'Sredina',\r
+               alignRight      : 'Desno',\r
+               alignTextTop    : 'Vrh teksta',\r
+               alignTop        : 'Vrh',\r
+               quality         : 'Kvaliteta',\r
+               qualityBest              : 'Best',\r
+               qualityHigh              : 'High',\r
+               qualityAutoHigh  : 'Auto High',\r
+               qualityMedium    : 'Medium',\r
+               qualityAutoLow   : 'Auto Low',\r
+               qualityLow               : 'Low',\r
+               windowModeWindow         : 'Window',\r
+               windowModeOpaque         : 'Opaque',\r
+               windowModeTransparent    : 'Transparent',\r
+               windowMode      : 'Vrsta prozora',\r
+               flashvars       : 'Varijable za Flash',\r
+               bgcolor : 'Boja pozadine',\r
+               width   : 'Širina',\r
+               height  : 'Visina',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'Molimo upišite URL link',\r
+               validateWidth : 'Širina mora biti broj.',\r
+               validateHeight : 'Visina mora biti broj.',\r
+               validateHSpace : 'HSpace mora biti broj.',\r
+               validateVSpace : 'VSpace mora biti broj.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Provjeri pravopis',\r
+               title                   : 'Provjera pravopisa',\r
+               notAvailable    : 'Žao nam je, ali usluga trenutno nije dostupna.',\r
+               errorLoading    : 'Greška učitavanja aplikacije: %s.',\r
+               notInDic                : 'Nije u rječniku',\r
+               changeTo                : 'Promijeni u',\r
+               btnIgnore               : 'Zanemari',\r
+               btnIgnoreAll    : 'Zanemari sve',\r
+               btnReplace              : 'Zamijeni',\r
+               btnReplaceAll   : 'Zamijeni sve',\r
+               btnUndo                 : 'Vrati',\r
+               noSuggestions   : '-Nema preporuke-',\r
+               progress                : 'Provjera u tijeku...',\r
+               noMispell               : 'Provjera završena: Nema grešaka',\r
+               noChanges               : 'Provjera završena: Nije napravljena promjena',\r
+               oneChange               : 'Provjera završena: Jedna riječ promjenjena',\r
+               manyChanges             : 'Provjera završena: Promijenjeno %1 riječi',\r
+               ieSpellDownload : 'Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smješko',\r
+               title   : 'Ubaci smješka'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element'\r
+       },\r
+\r
+       numberedlist : 'Brojčana lista',\r
+       bulletedlist : 'Obična lista',\r
+       indent : 'Pomakni udesno',\r
+       outdent : 'Pomakni ulijevo',\r
+\r
+       justify :\r
+       {\r
+               left : 'Lijevo poravnanje',\r
+               center : 'Središnje poravnanje',\r
+               right : 'Desno poravnanje',\r
+               block : 'Blok poravnanje'\r
+       },\r
+\r
+       blockquote : 'Blockquote',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Zalijepi',\r
+               cutError        : 'Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl+X).',\r
+               copyError       : 'Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl+C).',\r
+               pasteMsg        : 'Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl+V</STRONG>) i kliknite <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Zalijepi iz Worda',\r
+               title : 'Zalijepi iz Worda',\r
+               advice : 'Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl+V</STRONG>) i kliknite <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Zanemari definiciju vrste fonta',\r
+               removeStyle : 'Ukloni definicije stilova'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Zalijepi kao čisti tekst',\r
+               title : 'Zalijepi kao čisti tekst'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Predlošci',\r
+               title : 'Predlošci sadržaja',\r
+               insertOption: 'Zamijeni trenutne sadržaje',\r
+               selectPromptMsg: 'Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):',\r
+               emptyListMsg : '(Nema definiranih predložaka)'\r
+       },\r
+\r
+       showBlocks : 'Prikaži blokove',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stil',\r
+               voiceLabel : 'Stilovi',\r
+               panelVoiceLabel : 'Odaberite stil',\r
+               panelTitle1 : 'Block stilovi',\r
+               panelTitle2 : 'Inline stilovi',\r
+               panelTitle3 : 'Object stilovi'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format',\r
+               panelTitle : 'Format',\r
+               panelVoiceLabel : 'Odaberite format paragrafa',\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatirano',\r
+               tag_address : 'Address',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Font',\r
+               voiceLabel : 'Font',\r
+               panelTitle : 'Font',\r
+               panelVoiceLabel : 'Odaberite font'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Veličina',\r
+               voiceLabel : 'Veličina slova',\r
+               panelTitle : 'Veličina',\r
+               panelVoiceLabel : 'Odaberite veličinu slova'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Boja teksta',\r
+               bgColorTitle : 'Boja pozadine',\r
+               auto : 'Automatski',\r
+               more : 'Više boja...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Provjeri pravopis tijekom tipkanja (SCAYT)',\r
+               enable : 'Omogući SCAYT',\r
+               disable : 'Onemogući SCAYT',\r
+               about : 'O SCAYT',\r
+               toggle : 'Omoguću/Onemogući SCAYT',\r
+               options : 'Opcije',\r
+               langs : 'Jezici',\r
+               moreSuggestions : 'Više prijedloga',\r
+               ignore : 'Zanemari',\r
+               ignoreAll : 'Zanemari sve',\r
+               addWord : 'Dodaj riječ',\r
+               emptyDic : 'Naziv rječnika ne smije biti prazno.',\r
+               optionsTab : 'Opcije',\r
+               languagesTab : 'Jezici',\r
+               dictionariesTab : 'Rječnici',\r
+               aboutTab : 'O SCAYT'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'O CKEditoru',\r
+               dlgTitle : 'O CKEditoru',\r
+               moreInfo : 'Za informacije o licencama posjetite našu web stranicu:',\r
+               copy : 'Copyright &copy; $1. All rights reserved.'\r
+       },\r
+\r
+       maximize : 'Povećaj',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Sidro',\r
+               flash : 'Flash animacija',\r
+               div : 'Prijelom stranice',\r
+               unknown : 'Nepoznati objekt'\r
+       },\r
+\r
+       resize : 'Povuci za promjenu veličine'\r
+};\r
diff --git a/_source/lang/hu.js b/_source/lang/hu.js
new file mode 100644 (file)
index 0000000..7b1441a
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Hungarian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['hu'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Forráskód',\r
+       newPage                 : 'Új oldal',\r
+       save                    : 'Mentés',\r
+       preview                 : 'Előnézet',\r
+       cut                             : 'Kivágás',\r
+       copy                    : 'Másolás',\r
+       paste                   : 'Beillesztés',\r
+       print                   : 'Nyomtatás',\r
+       underline               : 'Aláhúzott',\r
+       bold                    : 'Félkövér',\r
+       italic                  : 'Dőlt',\r
+       selectAll               : 'Mindent kijelöl',\r
+       removeFormat    : 'Formázás eltávolítása',\r
+       strike                  : 'Áthúzott',\r
+       subscript               : 'Alsó index',\r
+       superscript             : 'Felső index',\r
+       horizontalrule  : 'Elválasztóvonal beillesztése',\r
+       pagebreak               : 'Oldaltörés beillesztése',\r
+       unlink                  : 'Hivatkozás törlése',\r
+       undo                    : 'Visszavonás',\r
+       redo                    : 'Ismétlés',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Böngészés a szerveren',\r
+               url                             : 'Hivatkozás',\r
+               protocol                : 'Protokoll',\r
+               upload                  : 'Feltöltés',\r
+               uploadSubmit    : 'Küldés a szerverre',\r
+               image                   : 'Kép',\r
+               flash                   : 'Flash',\r
+               form                    : 'Űrlap',\r
+               checkbox                : 'Jelölőnégyzet',\r
+               radio           : 'Választógomb',\r
+               textField               : 'Szövegmező',\r
+               textarea                : 'Szövegterület',\r
+               hiddenField             : 'Rejtettmező',\r
+               button                  : 'Gomb',\r
+               select  : 'Legördülő lista',\r
+               imageButton             : 'Képgomb',\r
+               notSet                  : '<nincs beállítva>',\r
+               id                              : 'Azonosító',\r
+               name                    : 'Név',\r
+               langDir                 : 'Írás iránya',\r
+               langDirLtr              : 'Balról jobbra',\r
+               langDirRtl              : 'Jobbról balra',\r
+               langCode                : 'Nyelv kódja',\r
+               longDescr               : 'Részletes leírás webcíme',\r
+               cssClass                : 'Stíluskészlet',\r
+               advisoryTitle   : 'Súgócimke',\r
+               cssStyle                : 'Stílus',\r
+               ok                              : 'Rendben',\r
+               cancel                  : 'Mégsem',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'További opciók',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Speciális karakter beillesztése',\r
+               title           : 'Speciális karakter választása'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Hivatkozás beillesztése/módosítása',\r
+               menu            : 'Hivatkozás módosítása',\r
+               title           : 'Hivatkozás tulajdonságai',\r
+               info            : 'Alaptulajdonságok',\r
+               target          : 'Tartalom megjelenítése',\r
+               upload          : 'Feltöltés',\r
+               advanced        : 'További opciók',\r
+               type            : 'Hivatkozás típusa',\r
+               toAnchor        : 'Horgony az oldalon',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Tartalom megjelenítése',\r
+               targetNotSet    : '<nincs beállítva>',\r
+               targetFrame     : '<keretben>',\r
+               targetPopup     : '<felugró ablakban>',\r
+               targetNew       : 'Új ablakban (_blank)',\r
+               targetTop       : 'Legfelső ablakban (_top)',\r
+               targetSelf      : 'Azonos ablakban (_self)',\r
+               targetParent    : 'Szülő ablakban (_parent)',\r
+               targetFrameName : 'Keret neve',\r
+               targetPopupName : 'Felugró ablak neve',\r
+               popupFeatures   : 'Felugró ablak jellemzői',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Állapotsor',\r
+               popupLocationBar        : 'Címsor',\r
+               popupToolbar    : 'Eszköztár',\r
+               popupMenuBar    : 'Menü sor',\r
+               popupFullScreen : 'Teljes képernyő (csak IE)',\r
+               popupScrollBars : 'Gördítősáv',\r
+               popupDependent  : 'Szülőhöz kapcsolt (csak Netscape)',\r
+               popupWidth              : 'Szélesség',\r
+               popupLeft               : 'Bal pozíció',\r
+               popupHeight             : 'Magasság',\r
+               popupTop                : 'Felső pozíció',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Írás iránya',\r
+               langDirNotSet   : '<nincs beállítva>',\r
+               langDirLTR              : 'Balról jobbra',\r
+               langDirRTL              : 'Jobbról balra',\r
+               acccessKey              : 'Billentyűkombináció',\r
+               name                    : 'Név',\r
+               langCode                : 'Írás iránya',\r
+               tabIndex                : 'Tabulátor index',\r
+               advisoryTitle   : 'Súgócimke',\r
+               advisoryContentType     : 'Súgó tartalomtípusa',\r
+               cssClasses              : 'Stíluskészlet',\r
+               charset                 : 'Hivatkozott tartalom kódlapja',\r
+               styles                  : 'Stílus',\r
+               selectAnchor    : 'Horgony választása',\r
+               anchorName              : 'Horgony név szerint',\r
+               anchorId                : 'Azonosító szerint',\r
+               emailAddress    : 'E-Mail cím',\r
+               emailSubject    : 'Üzenet tárgya',\r
+               emailBody               : 'Üzenet',\r
+               noAnchors               : '(Nincs horgony a dokumentumban)',\r
+               noUrl                   : 'Adja meg a hivatkozás webcímét',\r
+               noEmail                 : 'Adja meg az E-Mail címet'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Horgony beillesztése/szerkesztése',\r
+               menu            : 'Horgony tulajdonságai',\r
+               title           : 'Horgony tulajdonságai',\r
+               name            : 'Horgony neve',\r
+               errorName       : 'Kérem adja meg a horgony nevét'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Keresés és csere',\r
+               find                            : 'Keresés',\r
+               replace                         : 'Csere',\r
+               findWhat                        : 'Keresett szöveg:',\r
+               replaceWith                     : 'Csere erre:',\r
+               notFoundMsg                     : 'A keresett szöveg nem található.',\r
+               matchCase                       : 'kis- és nagybetű megkülönböztetése',\r
+               matchWord                       : 'csak ha ez a teljes szó',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Az összes cseréje',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Táblázat',\r
+               title           : 'Táblázat tulajdonságai',\r
+               menu            : 'Táblázat tulajdonságai',\r
+               deleteTable     : 'Táblázat törlése',\r
+               rows            : 'Sorok',\r
+               columns         : 'Oszlopok',\r
+               border          : 'Szegélyméret',\r
+               align           : 'Igazítás',\r
+               alignNotSet     : '<Nincs beállítva>',\r
+               alignLeft       : 'Balra',\r
+               alignCenter     : 'Középre',\r
+               alignRight      : 'Jobbra',\r
+               width           : 'Szélesség',\r
+               widthPx         : 'képpont',\r
+               widthPc         : 'százalék',\r
+               height          : 'Magasság',\r
+               cellSpace       : 'Cella térköz',\r
+               cellPad         : 'Cella belső margó',\r
+               caption         : 'Felirat',\r
+               summary         : 'Leírás',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cella',\r
+                       insertBefore    : 'Cella beillesztése az aktuális cella elé',\r
+                       insertAfter             : 'Cella beillesztése az aktuális cella mögé',\r
+                       deleteCell              : 'Cellák törlése',\r
+                       merge                   : 'Cellák egyesítése',\r
+                       mergeRight              : 'Cellák egyesítése jobbra',\r
+                       mergeDown               : 'Cellák egyesítése lefelé',\r
+                       splitHorizontal : 'Cellák szétválasztása vízszintesen',\r
+                       splitVertical   : 'Cellák szétválasztása függőlegesen',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Sor',\r
+                       insertBefore    : 'Sor beillesztése az aktuális sor elé',\r
+                       insertAfter             : 'Sor beillesztése az aktuális sor mögé',\r
+                       deleteRow               : 'Sorok törlése'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Oszlop',\r
+                       insertBefore    : 'Oszlop beillesztése az aktuális oszlop elé',\r
+                       insertAfter             : 'Oszlop beillesztése az aktuális oszlop mögé',\r
+                       deleteColumn    : 'Oszlopok törlése'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Gomb tulajdonságai',\r
+               text            : 'Szöveg (Érték)',\r
+               type            : 'Típus',\r
+               typeBtn         : 'Gomb',\r
+               typeSbm         : 'Küldés',\r
+               typeRst         : 'Alaphelyzet'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Jelölőnégyzet tulajdonságai',\r
+               radioTitle      : 'Választógomb tulajdonságai',\r
+               value           : 'Érték',\r
+               selected        : 'Kiválasztott'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Űrlap tulajdonságai',\r
+               menu            : 'Űrlap tulajdonságai',\r
+               action          : 'Adatfeldolgozást végző hivatkozás',\r
+               method          : 'Adatküldés módja',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Tartalom megjelenítése',\r
+               targetNotSet    : '<nincs beállítva>',\r
+               targetNew       : 'Új ablakban (_blank)',\r
+               targetTop       : 'Legfelső ablakban (_top)',\r
+               targetSelf      : 'Azonos ablakban (_self)',\r
+               targetParent    : 'Szülő ablakban (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Legördülő lista tulajdonságai',\r
+               selectInfo      : 'Alaptulajdonságok',\r
+               opAvail         : 'Elérhető opciók',\r
+               value           : 'Érték',\r
+               size            : 'Méret',\r
+               lines           : 'sor',\r
+               chkMulti        : 'több sor is kiválasztható',\r
+               opText          : 'Szöveg',\r
+               opValue         : 'Érték',\r
+               btnAdd          : 'Hozzáad',\r
+               btnModify       : 'Módosít',\r
+               btnUp           : 'Fel',\r
+               btnDown         : 'Le',\r
+               btnSetValue : 'Legyen az alapértelmezett érték',\r
+               btnDelete       : 'Töröl'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Szövegterület tulajdonságai',\r
+               cols            : 'Karakterek száma egy sorban',\r
+               rows            : 'Sorok száma'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Szövegmező tulajdonságai',\r
+               name            : 'Név',\r
+               value           : 'Érték',\r
+               charWidth       : 'Megjelenített karakterek száma',\r
+               maxChars        : 'Maximális karakterszám',\r
+               type            : 'Típus',\r
+               typeText        : 'Szöveg',\r
+               typePass        : 'Jelszó'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Rejtett mező tulajdonságai',\r
+               name    : 'Név',\r
+               value   : 'Érték'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Kép tulajdonságai',\r
+               titleButton     : 'Képgomb tulajdonságai',\r
+               menu            : 'Kép tulajdonságai',\r
+               infoTab : 'Alaptulajdonságok',\r
+               btnUpload       : 'Küldés a szerverre',\r
+               url             : 'Hivatkozás',\r
+               upload  : 'Feltöltés',\r
+               alt             : 'Buborék szöveg',\r
+               width           : 'Szélesség',\r
+               height  : 'Magasság',\r
+               lockRatio       : 'Arány megtartása',\r
+               resetSize       : 'Eredeti méret',\r
+               border  : 'Keret',\r
+               hSpace  : 'Vízsz. táv',\r
+               vSpace  : 'Függ. táv',\r
+               align           : 'Igazítás',\r
+               alignLeft       : 'Bal',\r
+               alignAbsBottom: 'Legaljára',\r
+               alignAbsMiddle: 'Közepére',\r
+               alignBaseline   : 'Alapvonalhoz',\r
+               alignBottom     : 'Aljára',\r
+               alignMiddle     : 'Középre',\r
+               alignRight      : 'Jobbra',\r
+               alignTextTop    : 'Szöveg tetejére',\r
+               alignTop        : 'Tetejére',\r
+               preview : 'Előnézet',\r
+               alertUrl        : 'Töltse ki a kép webcímét',\r
+               linkTab : 'Hivatkozás',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash tulajdonságai',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash tulajdonságai',\r
+               chkPlay         : 'Automata lejátszás',\r
+               chkLoop         : 'Folyamatosan',\r
+               chkMenu         : 'Flash menü engedélyezése',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Méretezés',\r
+               scaleAll                : 'Mindent mutat',\r
+               scaleNoBorder   : 'Keret nélkül',\r
+               scaleFit                : 'Teljes kitöltés',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Igazítás',\r
+               alignLeft       : 'Bal',\r
+               alignAbsBottom: 'Legaljára',\r
+               alignAbsMiddle: 'Közepére',\r
+               alignBaseline   : 'Alapvonalhoz',\r
+               alignBottom     : 'Aljára',\r
+               alignMiddle     : 'Középre',\r
+               alignRight      : 'Jobbra',\r
+               alignTextTop    : 'Szöveg tetejére',\r
+               alignTop        : 'Tetejére',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Háttérszín',\r
+               width   : 'Szélesség',\r
+               height  : 'Magasság',\r
+               hSpace  : 'Vízsz. táv',\r
+               vSpace  : 'Függ. táv',\r
+               validateSrc : 'Adja meg a hivatkozás webcímét',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Helyesírás-ellenőrzés',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Nincs a szótárban',\r
+               changeTo                : 'Módosítás',\r
+               btnIgnore               : 'Kihagyja',\r
+               btnIgnoreAll    : 'Mindet kihagyja',\r
+               btnReplace              : 'Csere',\r
+               btnReplaceAll   : 'Összes cseréje',\r
+               btnUndo                 : 'Visszavonás',\r
+               noSuggestions   : 'Nincs javaslat',\r
+               progress                : 'Helyesírás-ellenőrzés folyamatban...',\r
+               noMispell               : 'Helyesírás-ellenőrzés kész: Nem találtam hibát',\r
+               noChanges               : 'Helyesírás-ellenőrzés kész: Nincs változtatott szó',\r
+               oneChange               : 'Helyesírás-ellenőrzés kész: Egy szó cserélve',\r
+               manyChanges             : 'Helyesírás-ellenőrzés kész: %1 szó cserélve',\r
+               ieSpellDownload : 'A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Hangulatjelek',\r
+               title   : 'Hangulatjel beszúrása'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Számozás',\r
+       bulletedlist : 'Felsorolás',\r
+       indent : 'Behúzás növelése',\r
+       outdent : 'Behúzás csökkentése',\r
+\r
+       justify :\r
+       {\r
+               left : 'Balra',\r
+               center : 'Középre',\r
+               right : 'Jobbra',\r
+               block : 'Sorkizárt'\r
+       },\r
+\r
+       blockquote : 'Idézet blokk',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Beillesztés',\r
+               cutError        : 'A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).',\r
+               copyError       : 'A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).',\r
+               pasteMsg        : 'Másolja be az alábbi mezőbe a <STRONG>Ctrl+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.',\r
+               securityMsg     : 'A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Beillesztés Word-ből',\r
+               title : 'Beillesztés Word-ből',\r
+               advice : 'Másolja be az alábbi mezőbe a <STRONG>Ctrl+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.',\r
+               ignoreFontFace : 'Betű formázások megszüntetése',\r
+               removeStyle : 'Stílusok eltávolítása'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Beillesztés formázatlan szövegként',\r
+               title : 'Beillesztés formázatlan szövegként'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Sablonok',\r
+               title : 'Elérhető sablonok',\r
+               insertOption: 'Kicseréli a jelenlegi tartalmat',\r
+               selectPromptMsg: 'Válassza ki melyik sablon nyíljon meg a szerkesztőben<br>(a jelenlegi tartalom elveszik):',\r
+               emptyListMsg : '(Nincs sablon megadva)'\r
+       },\r
+\r
+       showBlocks : 'Blokkok megjelenítése',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stílus',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formátum',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Formátum',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normál',\r
+               tag_pre : 'Formázott',\r
+               tag_address : 'Címsor',\r
+               tag_h1 : 'Fejléc 1',\r
+               tag_h2 : 'Fejléc 2',\r
+               tag_h3 : 'Fejléc 3',\r
+               tag_h4 : 'Fejléc 4',\r
+               tag_h5 : 'Fejléc 5',\r
+               tag_h6 : 'Fejléc 6',\r
+               tag_div : 'Bekezdés (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Betűtípus',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Betűtípus',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Méret',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Méret',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Betűszín',\r
+               bgColorTitle : 'Háttérszín',\r
+               auto : 'Automatikus',\r
+               more : 'További színek...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/is.js b/_source/lang/is.js
new file mode 100644 (file)
index 0000000..9b4583f
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Icelandic language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['is'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Kóði',\r
+       newPage                 : 'Ný síða',\r
+       save                    : 'Vista',\r
+       preview                 : 'Forskoða',\r
+       cut                             : 'Klippa',\r
+       copy                    : 'Afrita',\r
+       paste                   : 'Líma',\r
+       print                   : 'Prenta',\r
+       underline               : 'Undirstrikað',\r
+       bold                    : 'Feitletrað',\r
+       italic                  : 'Skáletrað',\r
+       selectAll               : 'Velja allt',\r
+       removeFormat    : 'Fjarlægja snið',\r
+       strike                  : 'Yfirstrikað',\r
+       subscript               : 'Niðurskrifað',\r
+       superscript             : 'Uppskrifað',\r
+       horizontalrule  : 'Lóðrétt lína',\r
+       pagebreak               : 'Setja inn síðuskil',\r
+       unlink                  : 'Fjarlægja stiklu',\r
+       undo                    : 'Afturkalla',\r
+       redo                    : 'Hætta við afturköllun',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Fletta í skjalasafni',\r
+               url                             : 'Vefslóð',\r
+               protocol                : 'Samskiptastaðall',\r
+               upload                  : 'Senda upp',\r
+               uploadSubmit    : 'Hlaða upp',\r
+               image                   : 'Setja inn mynd',\r
+               flash                   : 'Flash',\r
+               form                    : 'Setja inn innsláttarform',\r
+               checkbox                : 'Setja inn hökunarreit',\r
+               radio           : 'Setja inn valhnapp',\r
+               textField               : 'Setja inn textareit',\r
+               textarea                : 'Setja inn textasvæði',\r
+               hiddenField             : 'Setja inn falið svæði',\r
+               button                  : 'Setja inn hnapp',\r
+               select  : 'Setja inn lista',\r
+               imageButton             : 'Setja inn myndahnapp',\r
+               notSet                  : '<ekkert valið>',\r
+               id                              : 'Auðkenni',\r
+               name                    : 'Nafn',\r
+               langDir                 : 'Lesstefna',\r
+               langDirLtr              : 'Frá vinstri til hægri (LTR)',\r
+               langDirRtl              : 'Frá hægri til vinstri (RTL)',\r
+               langCode                : 'Tungumálakóði',\r
+               longDescr               : 'Nánari lýsing',\r
+               cssClass                : 'Stílsniðsflokkur',\r
+               advisoryTitle   : 'Titill',\r
+               cssStyle                : 'Stíll',\r
+               ok                              : 'Í lagi',\r
+               cancel                  : 'Hætta við',\r
+               generalTab              : 'Almennt',\r
+               advancedTab             : 'Tæknilegt',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Setja inn merki',\r
+               title           : 'Velja tákn'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Stofna/breyta stiklu',\r
+               menu            : 'Breyta stiklu',\r
+               title           : 'Stikla',\r
+               info            : 'Almennt',\r
+               target          : 'Mark',\r
+               upload          : 'Senda upp',\r
+               advanced        : 'Tæknilegt',\r
+               type            : 'Stikluflokkur',\r
+               toAnchor        : 'Bókamerki á þessari síðu',\r
+               toEmail         : 'Netfang',\r
+               target          : 'Mark',\r
+               targetNotSet    : '<ekkert valið>',\r
+               targetFrame     : '<rammi>',\r
+               targetPopup     : '<sprettigluggi>',\r
+               targetNew       : 'Nýr gluggi (_blank)',\r
+               targetTop       : 'Allur glugginn (_top)',\r
+               targetSelf      : 'Sami gluggi (_self)',\r
+               targetParent    : 'Yfirsettur rammi (_parent)',\r
+               targetFrameName : 'Nafn markglugga',\r
+               targetPopupName : 'Nafn sprettiglugga',\r
+               popupFeatures   : 'Eigindi sprettiglugga',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Stöðustika',\r
+               popupLocationBar        : 'Fanglína',\r
+               popupToolbar    : 'Verkfærastika',\r
+               popupMenuBar    : 'Vallína',\r
+               popupFullScreen : 'Heilskjár (IE)',\r
+               popupScrollBars : 'Skrunstikur',\r
+               popupDependent  : 'Háð venslum (Netscape)',\r
+               popupWidth              : 'Breidd',\r
+               popupLeft               : 'Fjarlægð frá vinstri',\r
+               popupHeight             : 'Hæð',\r
+               popupTop                : 'Fjarlægð frá efri brún',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Lesstefna',\r
+               langDirNotSet   : '<ekkert valið>',\r
+               langDirLTR              : 'Frá vinstri til hægri (LTR)',\r
+               langDirRTL              : 'Frá hægri til vinstri (RTL)',\r
+               acccessKey              : 'Skammvalshnappur',\r
+               name                    : 'Nafn',\r
+               langCode                : 'Lesstefna',\r
+               tabIndex                : 'Raðnúmer innsláttarreits',\r
+               advisoryTitle   : 'Titill',\r
+               advisoryContentType     : 'Tegund innihalds',\r
+               cssClasses              : 'Stílsniðsflokkur',\r
+               charset                 : 'Táknróf',\r
+               styles                  : 'Stíll',\r
+               selectAnchor    : 'Veldu akkeri',\r
+               anchorName              : 'Eftir akkerisnafni',\r
+               anchorId                : 'Eftir auðkenni einingar',\r
+               emailAddress    : 'Netfang',\r
+               emailSubject    : 'Efni',\r
+               emailBody               : 'Meginmál',\r
+               noAnchors               : '<Engin bókamerki á skrá>',\r
+               noUrl                   : 'Sláðu inn veffang stiklunnar!',\r
+               noEmail                 : 'Sláðu inn netfang!'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Stofna/breyta kaflamerki',\r
+               menu            : 'Eigindi kaflamerkis',\r
+               title           : 'Eigindi kaflamerkis',\r
+               name            : 'Nafn bókamerkis',\r
+               errorName       : 'Sláðu inn nafn bókamerkis!'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Finna og skipta',\r
+               find                            : 'Leita',\r
+               replace                         : 'Skipta út',\r
+               findWhat                        : 'Leita að:',\r
+               replaceWith                     : 'Skipta út fyrir:',\r
+               notFoundMsg                     : 'Leitartexti fannst ekki!',\r
+               matchCase                       : 'Gera greinarmun á¡ há¡- og lágstöfum',\r
+               matchWord                       : 'Aðeins heil orð',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Skipta út allsstaðar',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tafla',\r
+               title           : 'Eigindi töflu',\r
+               menu            : 'Eigindi töflu',\r
+               deleteTable     : 'Fella töflu',\r
+               rows            : 'Raðir',\r
+               columns         : 'Dálkar',\r
+               border          : 'Breidd ramma',\r
+               align           : 'Jöfnun',\r
+               alignNotSet     : '<ekkert valið>',\r
+               alignLeft       : 'Vinstrijafnað',\r
+               alignCenter     : 'Miðjað',\r
+               alignRight      : 'Hægrijafnað',\r
+               width           : 'Breidd',\r
+               widthPx         : 'myndeindir',\r
+               widthPc         : 'prósent',\r
+               height          : 'Hæð',\r
+               cellSpace       : 'Bil milli reita',\r
+               cellPad         : 'Reitaspássía',\r
+               caption         : 'Titill',\r
+               summary         : 'Áfram',\r
+               headers         : 'Fyrirsagnir',\r
+               headersNone             : 'Engar',\r
+               headersColumn   : 'Fyrsti dálkur',\r
+               headersRow              : 'Fyrsta röð',\r
+               headersBoth             : 'Hvort tveggja',\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Reitur',\r
+                       insertBefore    : 'Skjóta inn reiti fyrir aftan',\r
+                       insertAfter             : 'Skjóta inn reiti fyrir framan',\r
+                       deleteCell              : 'Fella reit',\r
+                       merge                   : 'Sameina reiti',\r
+                       mergeRight              : 'Sameina til hægri',\r
+                       mergeDown               : 'Sameina niður á við',\r
+                       splitHorizontal : 'Kljúfa reit lárétt',\r
+                       splitVertical   : 'Kljúfa reit lóðrétt',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Röð',\r
+                       insertBefore    : 'Skjóta inn röð fyrir ofan',\r
+                       insertAfter             : 'Skjóta inn röð fyrir neðan',\r
+                       deleteRow               : 'Eyða röð'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Dálkur',\r
+                       insertBefore    : 'Skjóta inn dálki vinstra megin',\r
+                       insertAfter             : 'Skjóta inn dálki hægra megin',\r
+                       deleteColumn    : 'Fella dálk'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Eigindi hnapps',\r
+               text            : 'Texti',\r
+               type            : 'Gerð',\r
+               typeBtn         : 'Hnappur',\r
+               typeSbm         : 'Staðfesta',\r
+               typeRst         : 'Hreinsa'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Eigindi markreits',\r
+               radioTitle      : 'Eigindi valhnapps',\r
+               value           : 'Gildi',\r
+               selected        : 'Valið'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Eigindi innsláttarforms',\r
+               menu            : 'Eigindi innsláttarforms',\r
+               action          : 'Aðgerð',\r
+               method          : 'Aðferð',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Mark',\r
+               targetNotSet    : '<ekkert valið>',\r
+               targetNew       : 'Nýr gluggi (_blank)',\r
+               targetTop       : 'Allur glugginn (_top)',\r
+               targetSelf      : 'Sami gluggi (_self)',\r
+               targetParent    : 'Yfirsettur rammi (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Eigindi lista',\r
+               selectInfo      : 'Upplýsingar',\r
+               opAvail         : 'Kostir',\r
+               value           : 'Gildi',\r
+               size            : 'Stærð',\r
+               lines           : 'línur',\r
+               chkMulti        : 'Leyfa fleiri kosti',\r
+               opText          : 'Texti',\r
+               opValue         : 'Gildi',\r
+               btnAdd          : 'Bæta við',\r
+               btnModify       : 'Breyta',\r
+               btnUp           : 'Upp',\r
+               btnDown         : 'Niður',\r
+               btnSetValue : 'Merkja sem valið',\r
+               btnDelete       : 'Eyða'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Eigindi textasvæðis',\r
+               cols            : 'Dálkar',\r
+               rows            : 'Línur'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Eigindi textareits',\r
+               name            : 'Nafn',\r
+               value           : 'Gildi',\r
+               charWidth       : 'Breidd (leturtákn)',\r
+               maxChars        : 'Hámarksfjöldi leturtákna',\r
+               type            : 'Gerð',\r
+               typeText        : 'Texti',\r
+               typePass        : 'Lykilorð'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Eigindi falins svæðis',\r
+               name    : 'Nafn',\r
+               value   : 'Gildi'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Eigindi myndar',\r
+               titleButton     : 'Eigindi myndahnapps',\r
+               menu            : 'Eigindi myndar',\r
+               infoTab : 'Almennt',\r
+               btnUpload       : 'Hlaða upp',\r
+               url             : 'Vefslóð',\r
+               upload  : 'Hlaða upp',\r
+               alt             : 'Baklægur texti',\r
+               width           : 'Breidd',\r
+               height  : 'Hæð',\r
+               lockRatio       : 'Festa stærðarhlutfall',\r
+               resetSize       : 'Reikna stærð',\r
+               border  : 'Rammi',\r
+               hSpace  : 'Vinstri bil',\r
+               vSpace  : 'Hægri bil',\r
+               align           : 'Jöfnun',\r
+               alignLeft       : 'Vinstri',\r
+               alignAbsBottom: 'Abs neðst',\r
+               alignAbsMiddle: 'Abs miðjuð',\r
+               alignBaseline   : 'Grunnlína',\r
+               alignBottom     : 'Neðst',\r
+               alignMiddle     : 'Miðjuð',\r
+               alignRight      : 'Hægri',\r
+               alignTextTop    : 'Efri brún texta',\r
+               alignTop        : 'Efst',\r
+               preview : 'Sýna dæmi',\r
+               alertUrl        : 'Sláðu inn slóðina að myndinni',\r
+               linkTab : 'Stikla',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Eigindi Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Eigindi Flash',\r
+               chkPlay         : 'Sjálfvirk spilun',\r
+               chkLoop         : 'Endurtekning',\r
+               chkMenu         : 'Sýna Flash-valmynd',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Skali',\r
+               scaleAll                : 'Sýna allt',\r
+               scaleNoBorder   : 'Án ramma',\r
+               scaleFit                : 'Fella skala að stærð',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Jöfnun',\r
+               alignLeft       : 'Vinstri',\r
+               alignAbsBottom: 'Abs neðst',\r
+               alignAbsMiddle: 'Abs miðjuð',\r
+               alignBaseline   : 'Grunnlína',\r
+               alignBottom     : 'Neðst',\r
+               alignMiddle     : 'Miðjuð',\r
+               alignRight      : 'Hægri',\r
+               alignTextTop    : 'Efri brún texta',\r
+               alignTop        : 'Efst',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Bakgrunnslitur',\r
+               width   : 'Breidd',\r
+               height  : 'Hæð',\r
+               hSpace  : 'Vinstri bil',\r
+               vSpace  : 'Hægri bil',\r
+               validateSrc : 'Sláðu inn veffang stiklunnar!',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Villuleit',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Ekki í orðabókinni',\r
+               changeTo                : 'Tillaga',\r
+               btnIgnore               : 'Hunsa',\r
+               btnIgnoreAll    : 'Hunsa allt',\r
+               btnReplace              : 'Skipta',\r
+               btnReplaceAll   : 'Skipta öllu',\r
+               btnUndo                 : 'Til baka',\r
+               noSuggestions   : '- engar tillögur -',\r
+               progress                : 'Villuleit í gangi...',\r
+               noMispell               : 'Villuleit lokið: Engin villa fannst',\r
+               noChanges               : 'Villuleit lokið: Engu orði breytt',\r
+               oneChange               : 'Villuleit lokið: Einu orði breytt',\r
+               manyChanges             : 'Villuleit lokið: %1 orðum breytt',\r
+               ieSpellDownload : 'Villuleit ekki sett upp.<br>Viltu setja hana upp?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Svipur',\r
+               title   : 'Velja svip'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Númeraður listi',\r
+       bulletedlist : 'Punktalisti',\r
+       indent : 'Minnka inndrátt',\r
+       outdent : 'Auka inndrátt',\r
+\r
+       justify :\r
+       {\r
+               left : 'Vinstrijöfnun',\r
+               center : 'Miðja texta',\r
+               right : 'Hægrijöfnun',\r
+               block : 'Jafna báðum megin'\r
+       },\r
+\r
+       blockquote : 'Inndráttur',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Líma',\r
+               cutError        : 'Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl+X).',\r
+               copyError       : 'Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl+C).',\r
+               pasteMsg        : 'Límdu í svæðið hér að neðan og (<STRONG>Ctrl+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Líma úr Word',\r
+               title : 'Líma úr Word',\r
+               advice : 'Límdu í svæðið hér að neðan og (<STRONG>Ctrl+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Hunsa leturskilgreiningar',\r
+               removeStyle : 'Hunsa letureigindi'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Líma sem ósniðinn texta',\r
+               title : 'Líma sem ósniðinn texta'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Sniðmát',\r
+               title : 'Innihaldssniðmát',\r
+               insertOption: 'Skipta út raunverulegu innihaldi',\r
+               selectPromptMsg: 'Veldu sniðmát til að opna í ritlinum.<br>(Núverandi innihald víkur fyrir því!):',\r
+               emptyListMsg : '(Ekkert sniðmát er skilgreint!)'\r
+       },\r
+\r
+       showBlocks : 'Sýna blokkir',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stílflokkur',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Stílsnið',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Stílsnið',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Venjulegt letur',\r
+               tag_pre : 'Forsniðið',\r
+               tag_address : 'Vistfang',\r
+               tag_h1 : 'Fyrirsögn 1',\r
+               tag_h2 : 'Fyrirsögn 2',\r
+               tag_h3 : 'Fyrirsögn 3',\r
+               tag_h4 : 'Fyrirsögn 4',\r
+               tag_h5 : 'Fyrirsögn 5',\r
+               tag_h6 : 'Fyrirsögn 6',\r
+               tag_div : 'Venjulegt (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Leturgerð ',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Leturgerð ',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Leturstærð ',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Leturstærð ',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Litur texta',\r
+               bgColorTitle : 'Bakgrunnslitur',\r
+               auto : 'Sjálfval',\r
+               more : 'Fleiri liti...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/it.js b/_source/lang/it.js
new file mode 100644 (file)
index 0000000..5356f87
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Italian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['it'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Codice Sorgente',\r
+       newPage                 : 'Nuova pagina vuota',\r
+       save                    : 'Salva',\r
+       preview                 : 'Anteprima',\r
+       cut                             : 'Taglia',\r
+       copy                    : 'Copia',\r
+       paste                   : 'Incolla',\r
+       print                   : 'Stampa',\r
+       underline               : 'Sottolineato',\r
+       bold                    : 'Grassetto',\r
+       italic                  : 'Corsivo',\r
+       selectAll               : 'Seleziona tutto',\r
+       removeFormat    : 'Elimina formattazione',\r
+       strike                  : 'Barrato',\r
+       subscript               : 'Pedice',\r
+       superscript             : 'Apice',\r
+       horizontalrule  : 'Inserisci riga orizzontale',\r
+       pagebreak               : 'Inserisci interruzione di pagina',\r
+       unlink                  : 'Elimina collegamento',\r
+       undo                    : 'Annulla',\r
+       redo                    : 'Ripristina',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Cerca sul server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocollo',\r
+               upload                  : 'Carica',\r
+               uploadSubmit    : 'Invia al server',\r
+               image                   : 'Immagine',\r
+               flash                   : 'Oggetto Flash',\r
+               form                    : 'Modulo',\r
+               checkbox                : 'Checkbox',\r
+               radio           : 'Radio Button',\r
+               textField               : 'Campo di testo',\r
+               textarea                : 'Area di testo',\r
+               hiddenField             : 'Campo nascosto',\r
+               button                  : 'Bottone',\r
+               select  : 'Menu di selezione',\r
+               imageButton             : 'Bottone immagine',\r
+               notSet                  : '<non impostato>',\r
+               id                              : 'Id',\r
+               name                    : 'Nome',\r
+               langDir                 : 'Direzione scrittura',\r
+               langDirLtr              : 'Da Sinistra a Destra (LTR)',\r
+               langDirRtl              : 'Da Destra a Sinistra (RTL)',\r
+               langCode                : 'Codice Lingua',\r
+               longDescr               : 'URL descrizione estesa',\r
+               cssClass                : 'Nome classe CSS',\r
+               advisoryTitle   : 'Titolo',\r
+               cssStyle                : 'Stile',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Annulla',\r
+               generalTab              : 'Generale',\r
+               advancedTab             : 'Avanzate',\r
+               validateNumberFailed    : 'Il valore inserito non è un numero.',\r
+               confirmNewPage  : 'Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?',\r
+               confirmCancel   : 'Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, non disponibile</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Inserisci carattere speciale',\r
+               title           : 'Seleziona carattere speciale'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Inserisci/Modifica collegamento',\r
+               menu            : 'Modifica collegamento',\r
+               title           : 'Collegamento',\r
+               info            : 'Informazioni collegamento',\r
+               target          : 'Destinazione',\r
+               upload          : 'Carica',\r
+               advanced        : 'Avanzate',\r
+               type            : 'Tipo di Collegamento',\r
+               toAnchor        : 'Ancora nella pagina',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Destinazione',\r
+               targetNotSet    : '<non impostato>',\r
+               targetFrame     : '<riquadro>',\r
+               targetPopup     : '<finestra popup>',\r
+               targetNew       : 'Nuova finestra (_blank)',\r
+               targetTop       : 'Finestra superiore (_top)',\r
+               targetSelf      : 'Stessa finestra (_self)',\r
+               targetParent    : 'Finestra padre (_parent)',\r
+               targetFrameName : 'Nome del riquadro di destinazione',\r
+               targetPopupName : 'Nome finestra popup',\r
+               popupFeatures   : 'Caratteristiche finestra popup',\r
+               popupResizable  : 'Ridimensionabile',\r
+               popupStatusBar  : 'Barra di stato',\r
+               popupLocationBar        : 'Barra degli indirizzi',\r
+               popupToolbar    : 'Barra degli strumenti',\r
+               popupMenuBar    : 'Barra del menu',\r
+               popupFullScreen : 'A tutto schermo (IE)',\r
+               popupScrollBars : 'Barre di scorrimento',\r
+               popupDependent  : 'Dipendente (Netscape)',\r
+               popupWidth              : 'Larghezza',\r
+               popupLeft               : 'Posizione da sinistra',\r
+               popupHeight             : 'Altezza',\r
+               popupTop                : 'Posizione dall\'alto',\r
+               id                              : 'Id',\r
+               langDir                 : 'Direzione scrittura',\r
+               langDirNotSet   : '<non impostato>',\r
+               langDirLTR              : 'Da Sinistra a Destra (LTR)',\r
+               langDirRTL              : 'Da Destra a Sinistra (RTL)',\r
+               acccessKey              : 'Scorciatoia<br />da tastiera',\r
+               name                    : 'Nome',\r
+               langCode                : 'Direzione scrittura',\r
+               tabIndex                : 'Ordine di tabulazione',\r
+               advisoryTitle   : 'Titolo',\r
+               advisoryContentType     : 'Tipo della risorsa collegata',\r
+               cssClasses              : 'Nome classe CSS',\r
+               charset                 : 'Set di caretteri della risorsa collegata',\r
+               styles                  : 'Stile',\r
+               selectAnchor    : 'Scegli Ancora',\r
+               anchorName              : 'Per Nome',\r
+               anchorId                : 'Per id elemento',\r
+               emailAddress    : 'Indirizzo E-Mail',\r
+               emailSubject    : 'Oggetto del messaggio',\r
+               emailBody               : 'Corpo del messaggio',\r
+               noAnchors               : '(Nessuna ancora disponibile nel documento)',\r
+               noUrl                   : 'Devi inserire l\'URL del collegamento',\r
+               noEmail                 : 'Devi inserire un\'indirizzo e-mail'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Inserisci/Modifica Ancora',\r
+               menu            : 'Proprietà ancora',\r
+               title           : 'Proprietà ancora',\r
+               name            : 'Nome ancora',\r
+               errorName       : 'Inserici il nome dell\'ancora'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Cerca e Sostituisci',\r
+               find                            : 'Trova',\r
+               replace                         : 'Sostituisci',\r
+               findWhat                        : 'Trova:',\r
+               replaceWith                     : 'Sostituisci con:',\r
+               notFoundMsg                     : 'L\'elemento cercato non è stato trovato.',\r
+               matchCase                       : 'Maiuscole/minuscole',\r
+               matchWord                       : 'Solo parole intere',\r
+               matchCyclic                     : 'Ricerca ciclica',\r
+               replaceAll                      : 'Sostituisci tutto',\r
+               replaceSuccessMsg       : '%1 occorrenza(e) sostituite.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabella',\r
+               title           : 'Proprietà tabella',\r
+               menu            : 'Proprietà tabella',\r
+               deleteTable     : 'Cancella Tabella',\r
+               rows            : 'Righe',\r
+               columns         : 'Colonne',\r
+               border          : 'Dimensione bordo',\r
+               align           : 'Allineamento',\r
+               alignNotSet     : '<non impostato>',\r
+               alignLeft       : 'Sinistra',\r
+               alignCenter     : 'Centrato',\r
+               alignRight      : 'Destra',\r
+               width           : 'Larghezza',\r
+               widthPx         : 'pixel',\r
+               widthPc         : 'percento',\r
+               height          : 'Altezza',\r
+               cellSpace       : 'Spaziatura celle',\r
+               cellPad         : 'Padding celle',\r
+               caption         : 'Intestazione',\r
+               summary         : 'Indice',\r
+               headers         : 'Intestazione',\r
+               headersNone             : 'Nessuna',\r
+               headersColumn   : 'Prima Colonna',\r
+               headersRow              : 'Prima Riga',\r
+               headersBoth             : 'Entrambe',\r
+               invalidRows             : 'Il numero di righe dev\'essere un numero maggiore di 0.',\r
+               invalidCols             : 'Il numero di colonne dev\'essere un numero maggiore di 0.',\r
+               invalidBorder   : 'La dimensione del bordo dev\'essere un numero.',\r
+               invalidWidth    : 'La larghezza della tabella dev\'essere un numero.',\r
+               invalidHeight   : 'L\'altezza della tabella dev\'essere un numero.',\r
+               invalidCellSpacing      : 'La spaziatura tra le celle dev\'essere un numero.',\r
+               invalidCellPadding      : 'Il pagging delle celle dev\'essere un numero',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cella',\r
+                       insertBefore    : 'Inserisci Cella Prima',\r
+                       insertAfter             : 'Inserisci Cella Dopo',\r
+                       deleteCell              : 'Elimina celle',\r
+                       merge                   : 'Unisce celle',\r
+                       mergeRight              : 'Unisci a Destra',\r
+                       mergeDown               : 'Unisci in Basso',\r
+                       splitHorizontal : 'Dividi Cella Orizzontalmente',\r
+                       splitVertical   : 'Dividi Cella Verticalmente',\r
+                       title                   : 'Proprietà della cella',\r
+                       cellType                : 'Tipo di cella',\r
+                       rowSpan                 : 'Su più righe',\r
+                       colSpan                 : 'Su più colonne',\r
+                       wordWrap                : 'Ritorno a capo',\r
+                       hAlign                  : 'Allineamento orizzontale',\r
+                       vAlign                  : 'Allineamento verticale',\r
+                       alignTop                : 'In Alto',\r
+                       alignMiddle             : 'Al Centro',\r
+                       alignBottom             : 'In Basso',\r
+                       alignBaseline   : 'Linea Base',\r
+                       bgColor                 : 'Colore di Sfondo',\r
+                       borderColor             : 'Colore del Bordo',\r
+                       data                    : 'Dati',\r
+                       header                  : 'Intestazione',\r
+                       yes                             : 'Si',\r
+                       no                              : 'No',\r
+                       invalidWidth    : 'La larghezza della cella dev\'essere un numero.',\r
+                       invalidHeight   : 'L\'altezza della cella dev\'essere un numero.',\r
+                       invalidRowSpan  : 'Il numero di righe dev\'essere un numero intero.',\r
+                       invalidColSpan  : 'Il numero di colonne dev\'essere un numero intero.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Riga',\r
+                       insertBefore    : 'Inserisci Riga Prima',\r
+                       insertAfter             : 'Inserisci Riga Dopo',\r
+                       deleteRow               : 'Elimina righe'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Colonna',\r
+                       insertBefore    : 'Inserisci Colonna Prima',\r
+                       insertAfter             : 'Inserisci Colonna Dopo',\r
+                       deleteColumn    : 'Elimina colonne'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Proprietà bottone',\r
+               text            : 'Testo (Value)',\r
+               type            : 'Tipo',\r
+               typeBtn         : 'Bottone',\r
+               typeSbm         : 'Invio',\r
+               typeRst         : 'Annulla'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Proprietà checkbox',\r
+               radioTitle      : 'Proprietà radio button',\r
+               value           : 'Valore',\r
+               selected        : 'Selezionato'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Proprietà modulo',\r
+               menu            : 'Proprietà modulo',\r
+               action          : 'Azione',\r
+               method          : 'Metodo',\r
+               encoding        : 'Codifica',\r
+               target          : 'Destinazione',\r
+               targetNotSet    : '<non impostato>',\r
+               targetNew       : 'Nuova finestra (_blank)',\r
+               targetTop       : 'Finestra superiore (_top)',\r
+               targetSelf      : 'Stessa finestra (_self)',\r
+               targetParent    : 'Finestra padre (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Proprietà menu di selezione',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Opzioni disponibili',\r
+               value           : 'Valore',\r
+               size            : 'Dimensione',\r
+               lines           : 'righe',\r
+               chkMulti        : 'Permetti selezione multipla',\r
+               opText          : 'Testo',\r
+               opValue         : 'Valore',\r
+               btnAdd          : 'Aggiungi',\r
+               btnModify       : 'Modifica',\r
+               btnUp           : 'Su',\r
+               btnDown         : 'Gi',\r
+               btnSetValue : 'Imposta come predefinito',\r
+               btnDelete       : 'Rimuovi'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Proprietà area di testo',\r
+               cols            : 'Colonne',\r
+               rows            : 'Righe'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Proprietà campo di testo',\r
+               name            : 'Nome',\r
+               value           : 'Valore',\r
+               charWidth       : 'Larghezza',\r
+               maxChars        : 'Numero massimo di caratteri',\r
+               type            : 'Tipo',\r
+               typeText        : 'Testo',\r
+               typePass        : 'Password'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Proprietà campo nascosto',\r
+               name    : 'Nome',\r
+               value   : 'Valore'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Proprietà immagine',\r
+               titleButton     : 'Proprietà bottone immagine',\r
+               menu            : 'Proprietà immagine',\r
+               infoTab : 'Informazioni immagine',\r
+               btnUpload       : 'Invia al server',\r
+               url             : 'URL',\r
+               upload  : 'Carica',\r
+               alt             : 'Testo alternativo',\r
+               width           : 'Larghezza',\r
+               height  : 'Altezza',\r
+               lockRatio       : 'Blocca rapporto',\r
+               resetSize       : 'Reimposta dimensione',\r
+               border  : 'Bordo',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Allineamento',\r
+               alignLeft       : 'Sinistra',\r
+               alignAbsBottom: 'In basso assoluto',\r
+               alignAbsMiddle: 'Centrato assoluto',\r
+               alignBaseline   : 'Linea base',\r
+               alignBottom     : 'In Basso',\r
+               alignMiddle     : 'Centrato',\r
+               alignRight      : 'Destra',\r
+               alignTextTop    : 'In alto al testo',\r
+               alignTop        : 'In Alto',\r
+               preview : 'Anteprima',\r
+               alertUrl        : 'Devi inserire l\'URL per l\'immagine',\r
+               linkTab : 'Collegamento',\r
+               button2Img      : 'Vuoi trasformare il bottone immagine selezionato in un\'immagine semplice?',\r
+               img2Button      : 'Vuoi trasferomare l\'immagine selezionata in un bottone immagine?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Proprietà Oggetto Flash',\r
+               propertiesTab   : 'Proprietà',\r
+               title           : 'Proprietà Oggetto Flash',\r
+               chkPlay         : 'Avvio Automatico',\r
+               chkLoop         : 'Riavvio automatico',\r
+               chkMenu         : 'Abilita Menu di Flash',\r
+               chkFull         : 'Permetti la modalità tutto schermo',\r
+               scale           : 'Ridimensiona',\r
+               scaleAll                : 'Mostra Tutto',\r
+               scaleNoBorder   : 'Senza Bordo',\r
+               scaleFit                : 'Dimensione Esatta',\r
+               access                  : 'Accesso Script',\r
+               accessAlways    : 'Sempre',\r
+               accessSameDomain        : 'Solo stesso dominio',\r
+               accessNever     : 'Mai',\r
+               align           : 'Allineamento',\r
+               alignLeft       : 'Sinistra',\r
+               alignAbsBottom: 'In basso assoluto',\r
+               alignAbsMiddle: 'Centrato assoluto',\r
+               alignBaseline   : 'Linea base',\r
+               alignBottom     : 'In Basso',\r
+               alignMiddle     : 'Centrato',\r
+               alignRight      : 'Destra',\r
+               alignTextTop    : 'In alto al testo',\r
+               alignTop        : 'In Alto',\r
+               quality         : 'Qualità',\r
+               qualityBest              : 'Massima',\r
+               qualityHigh              : 'Alta',\r
+               qualityAutoHigh  : 'Alta Automatica',\r
+               qualityMedium    : 'Intermedia',\r
+               qualityAutoLow   : 'Bassa Automatica',\r
+               qualityLow               : 'Bassa',\r
+               windowModeWindow         : 'Finestra',\r
+               windowModeOpaque         : 'Opaca',\r
+               windowModeTransparent    : 'Trasparente',\r
+               windowMode      : 'Modalità finestra',\r
+               flashvars       : 'Variabili per Flash',\r
+               bgcolor : 'Colore sfondo',\r
+               width   : 'Larghezza',\r
+               height  : 'Altezza',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'Devi inserire l\'URL del collegamento',\r
+               validateWidth : 'La Larghezza dev\'essere un numero',\r
+               validateHeight : 'L\'altezza dev\'essere un numero',\r
+               validateHSpace : 'L\'HSpace dev\'essere un numero.',\r
+               validateVSpace : 'Il VSpace dev\'essere un numero.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Correttore ortografico',\r
+               title                   : 'Controllo ortografico',\r
+               notAvailable    : 'Il servizio non è momentaneamente disponibile.',\r
+               errorLoading    : 'Errore nel caricamento dell\'host col servizio applicativo: %s.',\r
+               notInDic                : 'Non nel dizionario',\r
+               changeTo                : 'Cambia in',\r
+               btnIgnore               : 'Ignora',\r
+               btnIgnoreAll    : 'Ignora tutto',\r
+               btnReplace              : 'Cambia',\r
+               btnReplaceAll   : 'Cambia tutto',\r
+               btnUndo                 : 'Annulla',\r
+               noSuggestions   : '- Nessun suggerimento -',\r
+               progress                : 'Controllo ortografico in corso',\r
+               noMispell               : 'Controllo ortografico completato: nessun errore trovato',\r
+               noChanges               : 'Controllo ortografico completato: nessuna parola cambiata',\r
+               oneChange               : 'Controllo ortografico completato: 1 parola cambiata',\r
+               manyChanges             : 'Controllo ortografico completato: %1 parole cambiate',\r
+               ieSpellDownload : 'Contollo ortografico non installato. Lo vuoi scaricare ora?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Emoticon',\r
+               title   : 'Inserisci emoticon'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 elemento'\r
+       },\r
+\r
+       numberedlist : 'Elenco numerato',\r
+       bulletedlist : 'Elenco puntato',\r
+       indent : 'Aumenta rientro',\r
+       outdent : 'Riduci rientro',\r
+\r
+       justify :\r
+       {\r
+               left : 'Allinea a sinistra',\r
+               center : 'Centra',\r
+               right : 'Allinea a destra',\r
+               block : 'Giustifica'\r
+       },\r
+\r
+       blockquote : 'Citazione',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Incolla',\r
+               cutError        : 'Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl+X).',\r
+               copyError       : 'Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl+C).',\r
+               pasteMsg        : 'Incolla il testo all\'interno dell\'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl+V</STRONG>) e premi <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'A causa delle impostazioni di sicurezza del browser,l\'editor non è in grado di accedere direttamente agli appunti. E\' pertanto necessario incollarli di nuovo in questa finestra.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Incolla da Word',\r
+               title : 'Incolla da Word',\r
+               advice : 'Incolla il testo all\'interno dell\'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl+V</STRONG>) e premi <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignora le definizioni di Font',\r
+               removeStyle : 'Rimuovi le definizioni di Stile'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Incolla come testo semplice',\r
+               title : 'Incolla come testo semplice'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Modelli',\r
+               title : 'Contenuto dei modelli',\r
+               insertOption: 'Cancella il contenuto corrente',\r
+               selectPromptMsg: 'Seleziona il modello da aprire nell\'editor<br />(il contenuto attuale verrà eliminato):',\r
+               emptyListMsg : '(Nessun modello definito)'\r
+       },\r
+\r
+       showBlocks : 'Visualizza Blocchi',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stile',\r
+               voiceLabel : 'Stili',\r
+               panelVoiceLabel : 'Seleziona uno stile',\r
+               panelTitle1 : 'Stili per blocchi',\r
+               panelTitle2 : 'Stili in linea',\r
+               panelTitle3 : 'Stili per oggetti'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formato',\r
+               voiceLabel : 'Formato',\r
+               panelTitle : 'Formato',\r
+               panelVoiceLabel : 'Seleziona il formato per paragrafo',\r
+\r
+               tag_p : 'Normale',\r
+               tag_pre : 'Formattato',\r
+               tag_address : 'Indirizzo',\r
+               tag_h1 : 'Titolo 1',\r
+               tag_h2 : 'Titolo 2',\r
+               tag_h3 : 'Titolo 3',\r
+               tag_h4 : 'Titolo 4',\r
+               tag_h5 : 'Titolo 5',\r
+               tag_h6 : 'Titolo 6',\r
+               tag_div : 'Paragrafo (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Font',\r
+               voiceLabel : 'Font',\r
+               panelTitle : 'Font',\r
+               panelVoiceLabel : 'Seleziona un font'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Dimensione',\r
+               voiceLabel : 'Dimensione Font',\r
+               panelTitle : 'Dimensione',\r
+               panelVoiceLabel : 'Seleziona una dimensione font'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Colore testo',\r
+               bgColorTitle : 'Colore sfondo',\r
+               auto : 'Automatico',\r
+               more : 'Altri colori...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Controllo Ortografico Mentre Scrivi',\r
+               enable : 'Abilita COMS',\r
+               disable : 'Disabilita COMS',\r
+               about : 'About COMS',\r
+               toggle : 'Inverti abilitazione SCOMS',\r
+               options : 'Opzioni',\r
+               langs : 'Lingue',\r
+               moreSuggestions : 'Altri suggerimenti',\r
+               ignore : 'Ignora',\r
+               ignoreAll : 'Ignora tutti',\r
+               addWord : 'Aggiungi Parola',\r
+               emptyDic : 'Il nome del dizionario non può essere vuoto.',\r
+               optionsTab : 'Opzioni',\r
+               languagesTab : 'Lingue',\r
+               dictionariesTab : 'Dizionari',\r
+               aboutTab : 'About'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor',\r
+               dlgTitle : 'About CKEditor',\r
+               moreInfo : 'Per le informazioni sulla licenza si prega di visitare il nostro sito:',\r
+               copy : 'Copyright &copy; $1. Tutti i diritti riservati.'\r
+       },\r
+\r
+       maximize : 'Massimizza',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Ancora',\r
+               flash : 'Animazione Flash',\r
+               div : 'Interruzione di Pagina',\r
+               unknown : 'Oggetto sconosciuto'\r
+       },\r
+\r
+       resize : 'Trascina per ridimensionare'\r
+};\r
diff --git a/_source/lang/ja.js b/_source/lang/ja.js
new file mode 100644 (file)
index 0000000..ba744e5
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Japanese language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['ja'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'リッチテキストエディタ, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'ソース',\r
+       newPage                 : '新しいページ',\r
+       save                    : '保存',\r
+       preview                 : 'プレビュー',\r
+       cut                             : '切り取り',\r
+       copy                    : 'コピー',\r
+       paste                   : '貼り付け',\r
+       print                   : '印刷',\r
+       underline               : '下線',\r
+       bold                    : '太字',\r
+       italic                  : '斜体',\r
+       selectAll               : 'すべて選択',\r
+       removeFormat    : 'フォーマット削除',\r
+       strike                  : '打ち消し線',\r
+       subscript               : '添え字',\r
+       superscript             : '上付き文字',\r
+       horizontalrule  : '横罫線',\r
+       pagebreak               : '改ページ挿入',\r
+       unlink                  : 'リンク削除',\r
+       undo                    : '元に戻す',\r
+       redo                    : 'やり直し',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'サーバーブラウザー',\r
+               url                             : 'URL',\r
+               protocol                : 'プロトコル',\r
+               upload                  : 'アップロード',\r
+               uploadSubmit    : 'サーバーに送信',\r
+               image                   : 'イメージ',\r
+               flash                   : 'Flash',\r
+               form                    : 'フォーム',\r
+               checkbox                : 'チェックボックス',\r
+               radio           : 'ラジオボタン',\r
+               textField               : '1行テキスト',\r
+               textarea                : 'テキストエリア',\r
+               hiddenField             : '不可視フィールド',\r
+               button                  : 'ボタン',\r
+               select  : '選択フィールド',\r
+               imageButton             : '画像ボタン',\r
+               notSet                  : '<なし>',\r
+               id                              : 'Id',\r
+               name                    : 'Name属性',\r
+               langDir                 : '文字表記の方向',\r
+               langDirLtr              : '左から右 (LTR)',\r
+               langDirRtl              : '右から左 (RTL)',\r
+               langCode                : '言語コード',\r
+               longDescr               : 'longdesc属性(長文説明)',\r
+               cssClass                : 'スタイルシートクラス',\r
+               advisoryTitle   : 'Title属性',\r
+               cssStyle                : 'スタイルシート',\r
+               ok                              : 'OK',\r
+               cancel                  : 'キャンセル',\r
+               generalTab              : '全般',\r
+               advancedTab             : '高度な設定',\r
+               validateNumberFailed    : '値が数ではありません',\r
+               confirmNewPage  : '変更内容を保存せず、 新しいページを開いてもよろしいでしょうか?',\r
+               confirmCancel   : 'オプション設定を変更しました。ダイアログを閉じてもよろしいでしょうか?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, 利用不可能</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : '特殊文字挿入',\r
+               title           : '特殊文字選択'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'リンク挿入/編集',\r
+               menu            : 'リンク編集',\r
+               title           : 'ハイパーリンク',\r
+               info            : 'ハイパーリンク 情報',\r
+               target          : 'ターゲット',\r
+               upload          : 'アップロード',\r
+               advanced        : '高度な設定',\r
+               type            : 'リンクタイプ',\r
+               toAnchor        : 'このページのアンカー',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'ターゲット',\r
+               targetNotSet    : '<なし>',\r
+               targetFrame     : '<フレーム>',\r
+               targetPopup     : '<ポップアップウィンドウ>',\r
+               targetNew       : '新しいウィンドウ (_blank)',\r
+               targetTop       : '最上位ウィンドウ (_top)',\r
+               targetSelf      : '同じウィンドウ (_self)',\r
+               targetParent    : '親ウィンドウ (_parent)',\r
+               targetFrameName : '目的のフレーム名',\r
+               targetPopupName : 'ポップアップウィンドウ名',\r
+               popupFeatures   : 'ポップアップウィンドウ特徴',\r
+               popupResizable  : 'サイズ可変',\r
+               popupStatusBar  : 'ステータスバー',\r
+               popupLocationBar        : 'ロケーションバー',\r
+               popupToolbar    : 'ツールバー',\r
+               popupMenuBar    : 'メニューバー',\r
+               popupFullScreen : '全画面モード(IE)',\r
+               popupScrollBars : 'スクロールバー',\r
+               popupDependent  : '開いたウィンドウに連動して閉じる (Netscape)',\r
+               popupWidth              : '幅',\r
+               popupLeft               : '左端からの座標で指定',\r
+               popupHeight             : '高さ',\r
+               popupTop                : '上端からの座標で指定',\r
+               id                              : 'Id',\r
+               langDir                 : '文字表記の方向',\r
+               langDirNotSet   : '<なし>',\r
+               langDirLTR              : '左から右 (LTR)',\r
+               langDirRTL              : '右から左 (RTL)',\r
+               acccessKey              : 'アクセスキー',\r
+               name                    : 'Name属性',\r
+               langCode                : '文字表記の方向',\r
+               tabIndex                : 'タブインデックス',\r
+               advisoryTitle   : 'Title属性',\r
+               advisoryContentType     : 'Content Type属性',\r
+               cssClasses              : 'スタイルシートクラス',\r
+               charset                 : 'リンクcharset属性',\r
+               styles                  : 'スタイルシート',\r
+               selectAnchor    : 'アンカーを選択',\r
+               anchorName              : 'アンカー名',\r
+               anchorId                : 'エレメントID',\r
+               emailAddress    : 'E-Mail アドレス',\r
+               emailSubject    : '件名',\r
+               emailBody               : '本文',\r
+               noAnchors               : '(ドキュメントにおいて利用可能なアンカーはありません。)',\r
+               noUrl                   : 'リンクURLを入力してください。',\r
+               noEmail                 : 'メールアドレスを入力してください。'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'アンカー挿入/編集',\r
+               menu            : 'アンカー プロパティ',\r
+               title           : 'アンカー プロパティ',\r
+               name            : 'アンカー名',\r
+               errorName       : 'アンカー名を必ず入力してください。'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : '検索して置換',\r
+               find                            : '検索',\r
+               replace                         : '置き換え',\r
+               findWhat                        : '検索する文字列:',\r
+               replaceWith                     : '置換えする文字列:',\r
+               notFoundMsg                     : '指定された文字列は見つかりませんでした。',\r
+               matchCase                       : '部分一致',\r
+               matchWord                       : '単語単位で一致',\r
+               matchCyclic                     : '大文字/小文字区別一致',\r
+               replaceAll                      : 'すべて置換え',\r
+               replaceSuccessMsg       : '%1 に置換しました。'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'テーブル',\r
+               title           : 'テーブル プロパティ',\r
+               menu            : 'テーブル プロパティ',\r
+               deleteTable     : 'テーブル削除',\r
+               rows            : '行',\r
+               columns         : '列',\r
+               border          : 'ボーダーサイズ',\r
+               align           : 'キャプションの整列',\r
+               alignNotSet     : '<なし>',\r
+               alignLeft       : '左',\r
+               alignCenter     : '中央',\r
+               alignRight      : '右',\r
+               width           : 'テーブル幅',\r
+               widthPx         : 'ピクセル',\r
+               widthPc         : 'パーセント',\r
+               height          : 'テーブル高さ',\r
+               cellSpace       : 'セル内余白',\r
+               cellPad         : 'セル内間隔',\r
+               caption         : 'キャプション',\r
+               summary         : 'テーブル目的/構造',\r
+               headers         : 'テーブルヘッダ(th)',\r
+               headersNone             : 'なし',\r
+               headersColumn   : '初めの列のみ',\r
+               headersRow              : '初めの行のみ',\r
+               headersBoth             : '両方',\r
+               invalidRows             : '行は0より大きな数値で入力してください。',\r
+               invalidCols             : '列は0より大きな数値で入力してください。',\r
+               invalidBorder   : 'ボーダーサイズは数値で入力してください。',\r
+               invalidWidth    : 'テーブル幅は数値で入力してください。',\r
+               invalidHeight   : 'テーブル高さは数値で入力してください。',\r
+               invalidCellSpacing      : 'セル内余白は数値で入力してください。',\r
+               invalidCellPadding      : 'セル内間隔は数値で入力してください。',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'セル',\r
+                       insertBefore    : 'セルの前に挿入',\r
+                       insertAfter             : 'セルの後に挿入',\r
+                       deleteCell              : 'セル削除',\r
+                       merge                   : 'セル結合',\r
+                       mergeRight              : '右に結合',\r
+                       mergeDown               : '下に結合',\r
+                       splitHorizontal : 'セルを水平方向分割',\r
+                       splitVertical   : 'セルを垂直方向に分割',\r
+                       title                   : 'セルプロパティ',\r
+                       cellType                : 'セルタイプ',\r
+                       rowSpan                 : '縦幅(行数)',\r
+                       colSpan                 : '横幅(列数)',\r
+                       wordWrap                : '折り返し',\r
+                       hAlign                  : 'セル横の整列',\r
+                       vAlign                  : 'セル縦の整列',\r
+                       alignTop                : '上',\r
+                       alignMiddle             : '中央',\r
+                       alignBottom             : '下',\r
+                       alignBaseline   : 'ベースライン',\r
+                       bgColor                 : '背景色',\r
+                       borderColor             : 'ボーダーカラー',\r
+                       data                    : 'テーブルデータ(td)',\r
+                       header                  : 'テーブルヘッダ(th)',\r
+                       yes                             : 'Yes',\r
+                       no                              : 'No',\r
+                       invalidWidth    : 'セル幅は数値で入力してください。',\r
+                       invalidHeight   : 'セル高さは数値で入力してください。',\r
+                       invalidRowSpan  : '縦幅(行数)は数値で入力してください。',\r
+                       invalidColSpan  : '横幅(列数)は数値で入力してください。'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : '行',\r
+                       insertBefore    : '列の前に挿入',\r
+                       insertAfter             : '列の後に挿入',\r
+                       deleteRow               : '行削除'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'カラム',\r
+                       insertBefore    : 'カラムの前に挿入',\r
+                       insertAfter             : 'カラムの後に挿入',\r
+                       deleteColumn    : '列削除'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'ボタン プロパティ',\r
+               text            : 'テキスト (値)',\r
+               type            : 'タイプ',\r
+               typeBtn         : 'ボタン',\r
+               typeSbm         : '送信',\r
+               typeRst         : 'リセット'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'チェックボックス プロパティ',\r
+               radioTitle      : 'ラジオボタン プロパティ',\r
+               value           : '値',\r
+               selected        : '選択済み'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'フォーム プロパティ',\r
+               menu            : 'フォーム プロパティ',\r
+               action          : 'アクション',\r
+               method          : 'メソッド',\r
+               encoding        : 'エンコーディング',\r
+               target          : 'ターゲット',\r
+               targetNotSet    : '<なし>',\r
+               targetNew       : '新しいウィンドウ (_blank)',\r
+               targetTop       : '最上位ウィンドウ (_top)',\r
+               targetSelf      : '同じウィンドウ (_self)',\r
+               targetParent    : '親ウィンドウ (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : '選択フィールド プロパティ',\r
+               selectInfo      : '情報',\r
+               opAvail         : '利用可能なオプション',\r
+               value           : '選択項目値',\r
+               size            : 'サイズ',\r
+               lines           : '行',\r
+               chkMulti        : '複数項目選択を許可',\r
+               opText          : '選択項目名',\r
+               opValue         : '値',\r
+               btnAdd          : '追加',\r
+               btnModify       : '編集',\r
+               btnUp           : '上へ',\r
+               btnDown         : '下へ',\r
+               btnSetValue : '選択した値を設定',\r
+               btnDelete       : '削除'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'テキストエリア プロパティ',\r
+               cols            : '列',\r
+               rows            : '行'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : '1行テキスト プロパティ',\r
+               name            : '名前',\r
+               value           : '値',\r
+               charWidth       : 'サイズ',\r
+               maxChars        : '最大長',\r
+               type            : 'タイプ',\r
+               typeText        : 'テキスト',\r
+               typePass        : 'パスワード入力'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : '不可視フィールド プロパティ',\r
+               name    : '名前',\r
+               value   : '値'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'イメージ プロパティ',\r
+               titleButton     : '画像ボタン プロパティ',\r
+               menu            : 'イメージ プロパティ',\r
+               infoTab : 'イメージ 情報',\r
+               btnUpload       : 'サーバーに送信',\r
+               url             : 'URL',\r
+               upload  : 'アップロード',\r
+               alt             : '代替テキスト',\r
+               width           : '幅',\r
+               height  : '高さ',\r
+               lockRatio       : 'ロック比率',\r
+               resetSize       : 'サイズリセット',\r
+               border  : 'ボーダー',\r
+               hSpace  : '横間隔',\r
+               vSpace  : '縦間隔',\r
+               align           : '行揃え',\r
+               alignLeft       : '左',\r
+               alignAbsBottom: '下部(絶対的)',\r
+               alignAbsMiddle: '中央(絶対的)',\r
+               alignBaseline   : 'ベースライン',\r
+               alignBottom     : '下',\r
+               alignMiddle     : '中央',\r
+               alignRight      : '右',\r
+               alignTextTop    : 'テキスト上部',\r
+               alignTop        : '上',\r
+               preview : 'プレビュー',\r
+               alertUrl        : 'イメージのURLを入力してください。',\r
+               linkTab : 'リンク',\r
+               button2Img      : '選択したボタンを画像に置き換えますか?',\r
+               img2Button      : '選択した画像をボタンに置き換えますか?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash プロパティ',\r
+               propertiesTab   : 'プロパティ',\r
+               title           : 'Flash プロパティ',\r
+               chkPlay         : '再生',\r
+               chkLoop         : 'ループ再生',\r
+               chkMenu         : 'Flashメニュー可能',\r
+               chkFull         : 'フルスクリーン許可',\r
+               scale           : '拡大縮小設定',\r
+               scaleAll                : 'すべて表示',\r
+               scaleNoBorder   : '外が見えない様に拡大',\r
+               scaleFit                : '上下左右にフィット',\r
+               access                  : 'スプリクトアクセス(AllowScriptAccess)',\r
+               accessAlways    : 'すべての場合に通信可能(Always)',\r
+               accessSameDomain        : '同一ドメインのみに通信可能(Same domain)',\r
+               accessNever     : 'すべての場合に通信不可能(Never)',\r
+               align           : '行揃え',\r
+               alignLeft       : '左',\r
+               alignAbsBottom: '下部(絶対的)',\r
+               alignAbsMiddle: '中央(絶対的)',\r
+               alignBaseline   : 'ベースライン',\r
+               alignBottom     : '下',\r
+               alignMiddle     : '中央',\r
+               alignRight      : '右',\r
+               alignTextTop    : 'テキスト上部',\r
+               alignTop        : '上',\r
+               quality         : '画質',\r
+               qualityBest              : '品質優先',\r
+               qualityHigh              : '高',\r
+               qualityAutoHigh  : '自動/高',\r
+               qualityMedium    : '中',\r
+               qualityAutoLow   : '自動/低',\r
+               qualityLow               : '低',\r
+               windowModeWindow         : '標準',\r
+               windowModeOpaque         : '背景を不透明設定',\r
+               windowModeTransparent    : '背景を透過設定',\r
+               windowMode      : 'ウィンドウモード',\r
+               flashvars       : 'フラッシュに渡す変数(FlashVars)',\r
+               bgcolor : '背景色',\r
+               width   : '幅',\r
+               height  : '高さ',\r
+               hSpace  : '横間隔',\r
+               vSpace  : '縦間隔',\r
+               validateSrc : 'リンクURLを入力してください。',\r
+               validateWidth : '幅は数値で入力してください。',\r
+               validateHeight : '高さは数値で入力してください。',\r
+               validateHSpace : '横間隔は数値で入力してください。',\r
+               validateVSpace : '縦間隔は数値で入力してください。'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'スペルチェック',\r
+               title                   : 'スペルチェック',\r
+               notAvailable    : '申し訳ありません、現在サービスを利用することができません',\r
+               errorLoading    : 'アプリケーションサービスホスト読込みエラー: %s.',\r
+               notInDic                : '辞書にありません',\r
+               changeTo                : '変更',\r
+               btnIgnore               : '無視',\r
+               btnIgnoreAll    : 'すべて無視',\r
+               btnReplace              : '置換',\r
+               btnReplaceAll   : 'すべて置換',\r
+               btnUndo                 : 'やり直し',\r
+               noSuggestions   : '- 該当なし -',\r
+               progress                : 'スペルチェック処理中...',\r
+               noMispell               : 'スペルチェック完了: スペルの誤りはありませんでした',\r
+               noChanges               : 'スペルチェック完了: 語句は変更されませんでした',\r
+               oneChange               : 'スペルチェック完了: 1語句変更されました',\r
+               manyChanges             : 'スペルチェック完了: %1 語句変更されました',\r
+               ieSpellDownload : 'スペルチェッカーがインストールされていません。今すぐダウンロードしますか?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : '絵文字',\r
+               title   : '顔文字挿入'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 エレメント'\r
+       },\r
+\r
+       numberedlist : '段落番号',\r
+       bulletedlist : '箇条書き',\r
+       indent : 'インデント',\r
+       outdent : 'インデント解除',\r
+\r
+       justify :\r
+       {\r
+               left : '左揃え',\r
+               center : '中央揃え',\r
+               right : '右揃え',\r
+               block : '両端揃え'\r
+       },\r
+\r
+       blockquote : 'ブロック引用',\r
+\r
+       clipboard :\r
+       {\r
+               title           : '貼り付け',\r
+               cutError        : 'ブラウザーのセキュリティ設定によりエディタの切り取り操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+X)を使用してください。',\r
+               copyError       : 'ブラウザーのセキュリティ設定によりエディタのコピー操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+C)を使用してください。',\r
+               pasteMsg        : 'キーボード(<STRONG>Ctrl+V</STRONG>)を使用して、次の入力エリア内で貼って、<STRONG>OK</STRONG>を押してください。',\r
+               securityMsg     : 'ブラウザのセキュリティ設定により、エディタはクリップボード・データに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'ワード文章から貼り付け',\r
+               title : 'ワード文章から貼り付け',\r
+               advice : 'キーボード(<STRONG>Ctrl+V</STRONG>)を使用して、次の入力エリア内で貼って、<STRONG>OK</STRONG>を押してください。',\r
+               ignoreFontFace : 'FontタグのFace属性を無視します。',\r
+               removeStyle : 'スタイル定義を削除します。'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'プレーンテキスト貼り付け',\r
+               title : 'プレーンテキスト貼り付け'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'テンプレート(雛形)',\r
+               title : 'テンプレート内容',\r
+               insertOption: '現在のエディタの内容と置換えをします',\r
+               selectPromptMsg: 'エディターで使用するテンプレートを選択してください。<br>(現在のエディタの内容は失われます):',\r
+               emptyListMsg : '(テンプレートが定義されていません)'\r
+       },\r
+\r
+       showBlocks : 'ブロック表示',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'スタイル',\r
+               voiceLabel : 'スタイル',\r
+               panelVoiceLabel : 'スタイルを選択してください',\r
+               panelTitle1 : 'ブロックスタイル',\r
+               panelTitle2 : 'インラインスタイル',\r
+               panelTitle3 : 'オブジェクトスタイル'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'フォーマット',\r
+               voiceLabel : 'フォーマット',\r
+               panelTitle : 'フォーマット',\r
+               panelVoiceLabel : 'パラグラフ形式を選択してください。',\r
+\r
+               tag_p : '標準',\r
+               tag_pre : '書式付き',\r
+               tag_address : 'アドレス',\r
+               tag_h1 : '見出し 1',\r
+               tag_h2 : '見出し 2',\r
+               tag_h3 : '見出し 3',\r
+               tag_h4 : '見出し 4',\r
+               tag_h5 : '見出し 5',\r
+               tag_h6 : '見出し 6',\r
+               tag_div : '標準 (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'フォント',\r
+               voiceLabel : 'フォント',\r
+               panelTitle : 'フォント',\r
+               panelVoiceLabel : 'フォントを選択してください'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'サイズ',\r
+               voiceLabel : 'フォントサイズ',\r
+               panelTitle : 'サイズ',\r
+               panelVoiceLabel : 'フォントサイズを選択してください'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'テキスト色',\r
+               bgColorTitle : '背景色',\r
+               auto : '自動',\r
+               more : 'その他の色...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'スペルチェック設定(SCAYT)',\r
+               enable : 'SCAYT有効',\r
+               disable : 'SCAYT無効',\r
+               about : 'SCAYTバージョン',\r
+               toggle : 'SCAYT切替',\r
+               options : 'オプション',\r
+               langs : '言語',\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : '無視',\r
+               ignoreAll : 'すべて無視',\r
+               addWord : '語句追加',\r
+               emptyDic : '辞書名は必ず入力してください',\r
+               optionsTab : 'オプション',\r
+               languagesTab : '言語',\r
+               dictionariesTab : '辞書',\r
+               aboutTab : 'バージョン情報'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'CKEditorバージョン情報',\r
+               dlgTitle : 'CKEditorバージョン情報',\r
+               moreInfo : 'ライセンス情報の詳細はウェブサイトにて確認してください:',\r
+               copy : 'Copyright &copy; $1. All rights reserved.'\r
+       },\r
+\r
+       maximize : '最大化',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'アンカー',\r
+               flash : 'Flash Animation',\r
+               div : 'Page Break',\r
+               unknown : 'Unknown Object'\r
+       },\r
+\r
+       resize : 'ドラックしてリサイズ'\r
+};\r
diff --git a/_source/lang/km.js b/_source/lang/km.js
new file mode 100644 (file)
index 0000000..f10e7fb
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Khmer language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['km'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'កូត',\r
+       newPage                 : 'ទំព័រថ្មី',\r
+       save                    : 'រក្សាទុក',\r
+       preview                 : 'មើលសាកល្បង',\r
+       cut                             : 'កាត់យក',\r
+       copy                    : 'ចំលងយក',\r
+       paste                   : 'ចំលងដាក់',\r
+       print                   : 'បោះពុម្ភ',\r
+       underline               : 'ដិតបន្ទាត់ពីក្រោមអក្សរ',\r
+       bold                    : 'អក្សរដិតធំ',\r
+       italic                  : 'អក្សរផ្តេក',\r
+       selectAll               : 'ជ្រើសរើសទាំងអស់',\r
+       removeFormat    : 'លប់ចោល ការរចនា',\r
+       strike                  : 'ដិតបន្ទាត់ពាក់កណ្តាលអក្សរ',\r
+       subscript               : 'អក្សរតូចក្រោម',\r
+       superscript             : 'អក្សរតូចលើ',\r
+       horizontalrule  : 'បន្ថែមបន្ទាត់ផ្តេក',\r
+       pagebreak               : 'បន្ថែម ការផ្តាច់ទំព័រ',\r
+       unlink                  : 'លប់ឈ្នាប់',\r
+       undo                    : 'សារឡើងវិញ',\r
+       redo                    : 'ធ្វើឡើងវិញ',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'មើល',\r
+               url                             : 'URL',\r
+               protocol                : 'ប្រូតូកូល',\r
+               upload                  : 'ទាញយក',\r
+               uploadSubmit    : 'បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា',\r
+               image                   : 'រូបភាព',\r
+               flash                   : 'Flash',\r
+               form                    : 'បែបបទ',\r
+               checkbox                : 'ប្រអប់ជ្រើសរើស',\r
+               radio           : 'ប៉ូតុនរង្វង់មូល',\r
+               textField               : 'ជួរសរសេរអត្ថបទ',\r
+               textarea                : 'តំបន់សរសេរអត្ថបទ',\r
+               hiddenField             : 'ជួរលាក់',\r
+               button                  : 'ប៉ូតុន',\r
+               select  : 'ជួរជ្រើសរើស',\r
+               imageButton             : 'ប៉ូតុនរូបភាព',\r
+               notSet                  : '<មិនមែន>',\r
+               id                              : 'Id',\r
+               name                    : 'ឈ្មោះ',\r
+               langDir                 : 'ទិសដៅភាសា',\r
+               langDirLtr              : 'ពីឆ្វេងទៅស្តាំ(LTR)',\r
+               langDirRtl              : 'ពីស្តាំទៅឆ្វេង(RTL)',\r
+               langCode                : 'លេខកូតភាសា',\r
+               longDescr               : 'អធិប្បាយ URL វែង',\r
+               cssClass                : 'Stylesheet Classes',\r
+               advisoryTitle   : 'ចំណងជើង ប្រឹក្សា',\r
+               cssStyle                : 'ម៉ូត',\r
+               ok                              : 'យល់ព្រម',\r
+               cancel                  : 'មិនយល់ព្រម',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'កំរិតខ្ពស់',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'បន្ថែមអក្សរពិសេស',\r
+               title           : 'តូអក្សរពិសេស'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'បន្ថែម/កែប្រែ ឈ្នាប់',\r
+               menu            : 'កែប្រែឈ្នាប់',\r
+               title           : 'ឈ្នាប់',\r
+               info            : 'ពត៌មានអំពីឈ្នាប់',\r
+               target          : 'គោលដៅ',\r
+               upload          : 'ទាញយក',\r
+               advanced        : 'កំរិតខ្ពស់',\r
+               type            : 'ប្រភេទឈ្នាប់',\r
+               toAnchor        : 'យុថ្កានៅក្នុងទំព័រនេះ',\r
+               toEmail         : 'អ៊ីមែល',\r
+               target          : 'គោលដៅ',\r
+               targetNotSet    : '<មិនមែន>',\r
+               targetFrame     : '<ហ្វ្រេម>',\r
+               targetPopup     : '<វីនដូវ លោត>',\r
+               targetNew       : 'វីនដូវថ្មី (_blank)',\r
+               targetTop       : 'វីនដូវនៅលើគេ(_top)',\r
+               targetSelf      : 'វីនដូវដដែល (_self)',\r
+               targetParent    : 'វីនដូវមេ (_parent)',\r
+               targetFrameName : 'ឈ្មោះហ្រ្វេមដែលជាគោលដៅ',\r
+               targetPopupName : 'ឈ្មោះវីនដូវលោត',\r
+               popupFeatures   : 'លក្ខណះរបស់វីនដូលលោត',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'របា ពត៌មាន',\r
+               popupLocationBar        : 'របា ទីតាំង',\r
+               popupToolbar    : 'របា ឩបករណ៍',\r
+               popupMenuBar    : 'របា មឺនុយ',\r
+               popupFullScreen : 'អេក្រុងពេញ(IE)',\r
+               popupScrollBars : 'របា ទាញ',\r
+               popupDependent  : 'អាស្រ័យលើ (Netscape)',\r
+               popupWidth              : 'ទទឹង',\r
+               popupLeft               : 'ទីតាំងខាងឆ្វេង',\r
+               popupHeight             : 'កំពស់',\r
+               popupTop                : 'ទីតាំងខាងលើ',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'ទិសដៅភាសា',\r
+               langDirNotSet   : '<មិនមែន>',\r
+               langDirLTR              : 'ពីឆ្វេងទៅស្តាំ(LTR)',\r
+               langDirRTL              : 'ពីស្តាំទៅឆ្វេង(RTL)',\r
+               acccessKey              : 'ឃី សំរាប់ចូល',\r
+               name                    : 'ឈ្មោះ',\r
+               langCode                : 'ទិសដៅភាសា',\r
+               tabIndex                : 'លេខ Tab',\r
+               advisoryTitle   : 'ចំណងជើង ប្រឹក្សា',\r
+               advisoryContentType     : 'ប្រភេទអត្ថបទ ប្រឹក្សា',\r
+               cssClasses              : 'Stylesheet Classes',\r
+               charset                 : 'លេខកូតអក្សររបស់ឈ្នាប់',\r
+               styles                  : 'ម៉ូត',\r
+               selectAnchor    : 'ជ្រើសរើសយុថ្កា',\r
+               anchorName              : 'តាមឈ្មោះរបស់យុថ្កា',\r
+               anchorId                : 'តាម Id',\r
+               emailAddress    : 'អ៊ីមែល',\r
+               emailSubject    : 'ចំណងជើងអត្ថបទ',\r
+               emailBody               : 'អត្ថបទ',\r
+               noAnchors               : '(No anchors available in the document)', // MISSING\r
+               noUrl                   : 'សូមសរសេរ អាស័យដ្ឋាន URL',\r
+               noEmail                 : 'សូមសរសេរ អាស័យដ្ឋាន អ៊ីមែល'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'បន្ថែម/កែប្រែ យុថ្កា',\r
+               menu            : 'ការកំណត់យុថ្កា',\r
+               title           : 'ការកំណត់យុថ្កា',\r
+               name            : 'ឈ្មោះយុទ្ធថ្កា',\r
+               errorName       : 'សូមសរសេរ ឈ្មោះយុទ្ធថ្កា'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'ស្វែងរក',\r
+               replace                         : 'ជំនួស',\r
+               findWhat                        : 'ស្វែងរកអ្វី:',\r
+               replaceWith                     : 'ជំនួសជាមួយ:',\r
+               notFoundMsg                     : 'ពាក្យនេះ រកមិនឃើញទេ ។',\r
+               matchCase                       : 'ករណ៉ត្រូវរក',\r
+               matchWord                       : 'ត្រូវពាក្យទាំងអស់',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'ជំនួសទាំងអស់',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'តារាង',\r
+               title           : 'ការកំណត់ តារាង',\r
+               menu            : 'ការកំណត់ តារាង',\r
+               deleteTable     : 'លប់តារាង',\r
+               rows            : 'ជួរផ្តេក',\r
+               columns         : 'ជួរឈរ',\r
+               border          : 'ទំហំស៊ុម',\r
+               align           : 'ការកំណត់ទីតាំង',\r
+               alignNotSet     : '<មិនកំណត់>',\r
+               alignLeft       : 'ខាងឆ្វេង',\r
+               alignCenter     : 'កណ្តាល',\r
+               alignRight      : 'ខាងស្តាំ',\r
+               width           : 'ទទឹង',\r
+               widthPx         : 'ភីកសែល',\r
+               widthPc         : 'ភាគរយ',\r
+               height          : 'កំពស់',\r
+               cellSpace       : 'គំលាតសែល',\r
+               cellPad         : 'គែមសែល',\r
+               caption         : 'ចំណងជើង',\r
+               summary         : 'សេចក្តីសង្ខេប',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell', // MISSING\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'លប់សែល',\r
+                       merge                   : 'បញ្ជូលសែល',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Row', // MISSING\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'លប់ជួរផ្តេក'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Column', // MISSING\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'លប់ជួរឈរ'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'ការកំណត់ ប៉ូតុន',\r
+               text            : 'អត្ថបទ(តំលៃ)',\r
+               type            : 'ប្រភេទ',\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'ការកំណត់ប្រអប់ជ្រើសរើស',\r
+               radioTitle      : 'ការកំណត់ប៉ូតុនរង្វង់',\r
+               value           : 'តំលៃ',\r
+               selected        : 'បានជ្រើសរើស'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'ការកំណត់បែបបទ',\r
+               menu            : 'ការកំណត់បែបបទ',\r
+               action          : 'សកម្មភាព',\r
+               method          : 'វិធី',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'គោលដៅ',\r
+               targetNotSet    : '<មិនមែន>',\r
+               targetNew       : 'វីនដូវថ្មី (_blank)',\r
+               targetTop       : 'វីនដូវនៅលើគេ(_top)',\r
+               targetSelf      : 'វីនដូវដដែល (_self)',\r
+               targetParent    : 'វីនដូវមេ (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'ការកំណត់ជួរជ្រើសរើស',\r
+               selectInfo      : 'ពត៌មាន',\r
+               opAvail         : 'ការកំណត់ជ្រើសរើស ដែលអាចកំណត់បាន',\r
+               value           : 'តំលៃ',\r
+               size            : 'ទំហំ',\r
+               lines           : 'បន្ទាត់',\r
+               chkMulti        : 'អនុញ្ញាតអោយជ្រើសរើសច្រើន',\r
+               opText          : 'ពាក្យ',\r
+               opValue         : 'តំលៃ',\r
+               btnAdd          : 'បន្ថែម',\r
+               btnModify       : 'ផ្លាស់ប្តូរ',\r
+               btnUp           : 'លើ',\r
+               btnDown         : 'ក្រោម',\r
+               btnSetValue : 'Set as selected value', // MISSING\r
+               btnDelete       : 'លប់'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'ការកំណត់កន្លែងសរសេរអត្ថបទ',\r
+               cols            : 'ជូរឈរ',\r
+               rows            : 'ជូរផ្តេក'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'ការកំណត់ជួរអត្ថបទ',\r
+               name            : 'ឈ្មោះ',\r
+               value           : 'តំលៃ',\r
+               charWidth       : 'ទទឹង អក្សរ',\r
+               maxChars        : 'អក្សរអតិបរិមា',\r
+               type            : 'ប្រភេទ',\r
+               typeText        : 'ពាក្យ',\r
+               typePass        : 'ពាក្យសំងាត់'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'ការកំណត់ជួរលាក់',\r
+               name    : 'ឈ្មោះ',\r
+               value   : 'តំលៃ'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'ការកំណត់រូបភាព',\r
+               titleButton     : 'ការកំណត់ប៉ូតុនរូបភាព',\r
+               menu            : 'ការកំណត់រូបភាព',\r
+               infoTab : 'ពត៌មានអំពីរូបភាព',\r
+               btnUpload       : 'បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា',\r
+               url             : 'URL',\r
+               upload  : 'ទាញយក',\r
+               alt             : 'អត្ថបទជំនួស',\r
+               width           : 'ទទឹង',\r
+               height  : 'កំពស់',\r
+               lockRatio       : 'អត្រាឡុក',\r
+               resetSize       : 'កំណត់ទំហំឡើងវិញ',\r
+               border  : 'ស៊ុម',\r
+               hSpace  : 'គំលាតទទឹង',\r
+               vSpace  : 'គំលាតបណ្តោយ',\r
+               align           : 'កំណត់ទីតាំង',\r
+               alignLeft       : 'ខាងឆ្វង',\r
+               alignAbsBottom: 'Abs Bottom', // MISSING\r
+               alignAbsMiddle: 'Abs Middle', // MISSING\r
+               alignBaseline   : 'បន្ទាត់ជាមូលដ្ឋាន',\r
+               alignBottom     : 'ខាងក្រោម',\r
+               alignMiddle     : 'កណ្តាល',\r
+               alignRight      : 'ខាងស្តាំ',\r
+               alignTextTop    : 'លើអត្ថបទ',\r
+               alignTop        : 'ខាងលើ',\r
+               preview : 'មើលសាកល្បង',\r
+               alertUrl        : 'សូមសរសេរងាស័យដ្ឋានរបស់រូបភាព',\r
+               linkTab : 'ឈ្នាប់',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'ការកំណត់ Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'ការកំណត់ Flash',\r
+               chkPlay         : 'លេងដោយស្វ័យប្រវត្ត',\r
+               chkLoop         : 'ចំនួនដង',\r
+               chkMenu         : 'បង្ហាញ មឺនុយរបស់ Flash',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'ទំហំ',\r
+               scaleAll                : 'បង្ហាញទាំងអស់',\r
+               scaleNoBorder   : 'មិនបង្ហាញស៊ុម',\r
+               scaleFit                : 'ត្រូវល្មម',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'កំណត់ទីតាំង',\r
+               alignLeft       : 'ខាងឆ្វង',\r
+               alignAbsBottom: 'Abs Bottom', // MISSING\r
+               alignAbsMiddle: 'Abs Middle', // MISSING\r
+               alignBaseline   : 'បន្ទាត់ជាមូលដ្ឋាន',\r
+               alignBottom     : 'ខាងក្រោម',\r
+               alignMiddle     : 'កណ្តាល',\r
+               alignRight      : 'ខាងស្តាំ',\r
+               alignTextTop    : 'លើអត្ថបទ',\r
+               alignTop        : 'ខាងលើ',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'ពណ៌ផ្ទៃខាងក្រោយ',\r
+               width   : 'ទទឹង',\r
+               height  : 'កំពស់',\r
+               hSpace  : 'គំលាតទទឹង',\r
+               vSpace  : 'គំលាតបណ្តោយ',\r
+               validateSrc : 'សូមសរសេរ អាស័យដ្ឋាន URL',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'ពិនិត្យអក្ខរាវិរុទ្ធ',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'គ្មានក្នុងវចនានុក្រម',\r
+               changeTo                : 'ផ្លាស់ប្តូរទៅ',\r
+               btnIgnore               : 'មិនផ្លាស់ប្តូរ',\r
+               btnIgnoreAll    : 'មិនផ្លាស់ប្តូរ ទាំងអស់',\r
+               btnReplace              : 'ជំនួស',\r
+               btnReplaceAll   : 'ជំនួសទាំងអស់',\r
+               btnUndo                 : 'សារឡើងវិញ',\r
+               noSuggestions   : '- គ្មានសំណើរ -',\r
+               progress                : 'កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...',\r
+               noMispell               : 'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស',\r
+               noChanges               : 'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ',\r
+               oneChange               : 'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ',\r
+               manyChanges             : 'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ',\r
+               ieSpellDownload : 'ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'រូបភាព',\r
+               title   : 'បញ្ជូលរូបភាព'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'បញ្ជីជាអក្សរ',\r
+       bulletedlist : 'បញ្ជីជារង្វង់មូល',\r
+       indent : 'បន្ថែមការចូលបន្ទាត់',\r
+       outdent : 'បន្ថយការចូលបន្ទាត់',\r
+\r
+       justify :\r
+       {\r
+               left : 'តំរឹមឆ្វេង',\r
+               center : 'តំរឹមកណ្តាល',\r
+               right : 'តំរឹមស្តាំ',\r
+               block : 'តំរឹមសងខាង'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'ចំលងដាក់',\r
+               cutError        : 'ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ\u200bមិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ  (Ctrl+X) ។',\r
+               copyError       : 'ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ\u200bមិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl+C)។',\r
+               pasteMsg        : 'សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី \u200b(<STRONG>Ctrl+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'ចំលងដាក់ពី Word',\r
+               title : 'ចំលងដាក់ពី Word',\r
+               advice : 'សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី \u200b(<STRONG>Ctrl+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។',\r
+               ignoreFontFace : 'មិនគិតអំពីប្រភេទពុម្ភអក្សរ',\r
+               removeStyle : 'លប់ម៉ូត'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'ចំលងដាក់អត្ថបទធម្មតា',\r
+               title : 'ចំលងដាក់អត្ថបទធម្មតា'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'ឯកសារគំរូ',\r
+               title : 'ឯកសារគំរូ របស់អត្ថន័យ',\r
+               insertOption: 'Replace actual contents', // MISSING\r
+               selectPromptMsg: 'សូមជ្រើសរើសឯកសារគំរូ ដើម្បីបើកនៅក្នុងកម្មវិធីតាក់តែងអត្ថបទ<br>(អត្ថបទនឹងបាត់បង់):',\r
+               emptyListMsg : '(ពុំមានឯកសារគំរូត្រូវបានកំណត់)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'ម៉ូត',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'រចនា',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'រចនា',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatted',\r
+               tag_address : 'Address',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'ហ្វុង',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'ហ្វុង',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'ទំហំ',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'ទំហំ',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'ពណ៌អក្សរ',\r
+               bgColorTitle : 'ពណ៌ផ្ទៃខាងក្រោយ',\r
+               auto : 'ស្វ័យប្រវត្ត',\r
+               more : 'ពណ៌ផ្សេងទៀត..'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/ko.js b/_source/lang/ko.js
new file mode 100644 (file)
index 0000000..9e519f6
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Korean language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['ko'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : '소스',\r
+       newPage                 : '새 문서',\r
+       save                    : '저장하기',\r
+       preview                 : '미리보기',\r
+       cut                             : '잘라내기',\r
+       copy                    : '복사하기',\r
+       paste                   : '붙여넣기',\r
+       print                   : '인쇄하기',\r
+       underline               : '밑줄',\r
+       bold                    : '진하게',\r
+       italic                  : '이텔릭',\r
+       selectAll               : '전체선택',\r
+       removeFormat    : '포맷 지우기',\r
+       strike                  : '취소선',\r
+       subscript               : '아래 첨자',\r
+       superscript             : '위 첨자',\r
+       horizontalrule  : '수평선 삽입',\r
+       pagebreak               : 'Insert Page Break for Printing', // MISSING\r
+       unlink                  : '링크 삭제',\r
+       undo                    : '취소',\r
+       redo                    : '재실행',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : '서버 보기',\r
+               url                             : 'URL',\r
+               protocol                : '프로토콜',\r
+               upload                  : '업로드',\r
+               uploadSubmit    : '서버로 전송',\r
+               image                   : '이미지',\r
+               flash                   : '플래쉬',\r
+               form                    : '폼',\r
+               checkbox                : '체크박스',\r
+               radio           : '라디오버튼',\r
+               textField               : '입력필드',\r
+               textarea                : '입력영역',\r
+               hiddenField             : '숨김필드',\r
+               button                  : '버튼',\r
+               select  : '펼침목록',\r
+               imageButton             : '이미지버튼',\r
+               notSet                  : '<설정되지 않음>',\r
+               id                              : 'ID',\r
+               name                    : 'Name',\r
+               langDir                 : '쓰기 방향',\r
+               langDirLtr              : '왼쪽에서 오른쪽 (LTR)',\r
+               langDirRtl              : '오른쪽에서 왼쪽 (RTL)',\r
+               langCode                : '언어 코드',\r
+               longDescr               : 'URL 설명',\r
+               cssClass                : 'Stylesheet Classes',\r
+               advisoryTitle   : 'Advisory Title',\r
+               cssStyle                : 'Style',\r
+               ok                              : '예',\r
+               cancel                  : '아니오',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : '자세히',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : '특수문자 삽입',\r
+               title           : '특수문자 선택'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : '링크 삽입/변경',\r
+               menu            : '링크 수정',\r
+               title           : '링크',\r
+               info            : '링크 정보',\r
+               target          : '타겟',\r
+               upload          : '업로드',\r
+               advanced        : '자세히',\r
+               type            : '링크 종류',\r
+               toAnchor        : '책갈피',\r
+               toEmail         : '이메일',\r
+               target          : '타겟',\r
+               targetNotSet    : '<설정되지 않음>',\r
+               targetFrame     : '<프레임>',\r
+               targetPopup     : '<팝업창>',\r
+               targetNew       : '새 창 (_blank)',\r
+               targetTop       : '최 상위 창 (_top)',\r
+               targetSelf      : '현재 창 (_self)',\r
+               targetParent    : '부모 창 (_parent)',\r
+               targetFrameName : '타겟 프레임 이름',\r
+               targetPopupName : '팝업창 이름',\r
+               popupFeatures   : '팝업창 설정',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : '상태바',\r
+               popupLocationBar        : '주소표시줄',\r
+               popupToolbar    : '툴바',\r
+               popupMenuBar    : '메뉴바',\r
+               popupFullScreen : '전체화면 (IE)',\r
+               popupScrollBars : '스크롤바',\r
+               popupDependent  : 'Dependent (Netscape)',\r
+               popupWidth              : '너비',\r
+               popupLeft               : '왼쪽 위치',\r
+               popupHeight             : '높이',\r
+               popupTop                : '윗쪽 위치',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : '쓰기 방향',\r
+               langDirNotSet   : '<설정되지 않음>',\r
+               langDirLTR              : '왼쪽에서 오른쪽 (LTR)',\r
+               langDirRTL              : '오른쪽에서 왼쪽 (RTL)',\r
+               acccessKey              : '엑세스 키',\r
+               name                    : 'Name',\r
+               langCode                : '쓰기 방향',\r
+               tabIndex                : '탭 순서',\r
+               advisoryTitle   : 'Advisory Title',\r
+               advisoryContentType     : 'Advisory Content Type',\r
+               cssClasses              : 'Stylesheet Classes',\r
+               charset                 : 'Linked Resource Charset',\r
+               styles                  : 'Style',\r
+               selectAnchor    : '책갈피 선택',\r
+               anchorName              : '책갈피 이름',\r
+               anchorId                : '책갈피 ID',\r
+               emailAddress    : '이메일 주소',\r
+               emailSubject    : '제목',\r
+               emailBody               : '내용',\r
+               noAnchors               : '(문서에 책갈피가 없습니다.)',\r
+               noUrl                   : '링크 URL을 입력하십시요.',\r
+               noEmail                 : '이메일주소를 입력하십시요.'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : '책갈피 삽입/변경',\r
+               menu            : '책갈피 속성',\r
+               title           : '책갈피 속성',\r
+               name            : '책갈피 이름',\r
+               errorName       : '책갈피 이름을 입력하십시요.'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : '찾기 & 바꾸기',\r
+               find                            : '찾기',\r
+               replace                         : '바꾸기',\r
+               findWhat                        : '찾을 문자열:',\r
+               replaceWith                     : '바꿀 문자열:',\r
+               notFoundMsg                     : '문자열을 찾을 수 없습니다.',\r
+               matchCase                       : '대소문자 구분',\r
+               matchWord                       : '온전한 단어',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : '모두 바꾸기',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : '표',\r
+               title           : '표 설정',\r
+               menu            : '표 설정',\r
+               deleteTable     : '표 삭제',\r
+               rows            : '가로줄',\r
+               columns         : '세로줄',\r
+               border          : '테두리 크기',\r
+               align           : '정렬',\r
+               alignNotSet     : '<설정되지 않음>',\r
+               alignLeft       : '왼쪽',\r
+               alignCenter     : '가운데',\r
+               alignRight      : '오른쪽',\r
+               width           : '너비',\r
+               widthPx         : '픽셀',\r
+               widthPc         : '퍼센트',\r
+               height          : '높이',\r
+               cellSpace       : '셀 간격',\r
+               cellPad         : '셀 여백',\r
+               caption         : '캡션',\r
+               summary         : 'Summary', // MISSING\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : '셀/칸(Cell)',\r
+                       insertBefore    : '앞에 셀/칸 삽입',\r
+                       insertAfter             : '뒤에 셀/칸 삽입',\r
+                       deleteCell              : '셀 삭제',\r
+                       merge                   : '셀 합치기',\r
+                       mergeRight              : '오른쪽 뭉치기',\r
+                       mergeDown               : '왼쪽 뭉치기',\r
+                       splitHorizontal : '수평 나누기',\r
+                       splitVertical   : '수직 나누기',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : '행(Row)',\r
+                       insertBefore    : '앞에 행 삽입',\r
+                       insertAfter             : '뒤에 행 삽입',\r
+                       deleteRow               : '가로줄 삭제'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : '열(Column)',\r
+                       insertBefore    : '앞에 열 삽입',\r
+                       insertAfter             : '뒤에 열 삽입',\r
+                       deleteColumn    : '세로줄 삭제'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : '버튼 속성',\r
+               text            : '버튼글자(값)',\r
+               type            : '버튼종류',\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : '체크박스 속성',\r
+               radioTitle      : '라디오버튼 속성',\r
+               value           : '값',\r
+               selected        : '선택됨'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : '폼 속성',\r
+               menu            : '폼 속성',\r
+               action          : '실행경로(Action)',\r
+               method          : '방법(Method)',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : '타겟',\r
+               targetNotSet    : '<설정되지 않음>',\r
+               targetNew       : '새 창 (_blank)',\r
+               targetTop       : '최 상위 창 (_top)',\r
+               targetSelf      : '현재 창 (_self)',\r
+               targetParent    : '부모 창 (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : '펼침목록 속성',\r
+               selectInfo      : '정보',\r
+               opAvail         : '선택옵션',\r
+               value           : '값',\r
+               size            : '세로크기',\r
+               lines           : '줄',\r
+               chkMulti        : '여러항목 선택 허용',\r
+               opText          : '이름',\r
+               opValue         : '값',\r
+               btnAdd          : '추가',\r
+               btnModify       : '변경',\r
+               btnUp           : '위로',\r
+               btnDown         : '아래로',\r
+               btnSetValue : '선택된것으로 설정',\r
+               btnDelete       : '삭제'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : '입력영역 속성',\r
+               cols            : '칸수',\r
+               rows            : '줄수'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : '입력필드 속성',\r
+               name            : '이름',\r
+               value           : '값',\r
+               charWidth       : '글자 너비',\r
+               maxChars        : '최대 글자수',\r
+               type            : '종류',\r
+               typeText        : '문자열',\r
+               typePass        : '비밀번호'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : '숨김필드 속성',\r
+               name    : '이름',\r
+               value   : '값'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : '이미지 설정',\r
+               titleButton     : '이미지버튼 속성',\r
+               menu            : '이미지 설정',\r
+               infoTab : '이미지 정보',\r
+               btnUpload       : '서버로 전송',\r
+               url             : 'URL',\r
+               upload  : '업로드',\r
+               alt             : '이미지 설명',\r
+               width           : '너비',\r
+               height  : '높이',\r
+               lockRatio       : '비율 유지',\r
+               resetSize       : '원래 크기로',\r
+               border  : '테두리',\r
+               hSpace  : '수평여백',\r
+               vSpace  : '수직여백',\r
+               align           : '정렬',\r
+               alignLeft       : '왼쪽',\r
+               alignAbsBottom: '줄아래(Abs Bottom)',\r
+               alignAbsMiddle: '줄중간(Abs Middle)',\r
+               alignBaseline   : '기준선',\r
+               alignBottom     : '아래',\r
+               alignMiddle     : '중간',\r
+               alignRight      : '오른쪽',\r
+               alignTextTop    : '글자상단',\r
+               alignTop        : '위',\r
+               preview : '미리보기',\r
+               alertUrl        : '이미지 URL을 입력하십시요',\r
+               linkTab : '링크',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : '플래쉬 속성',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : '플래쉬 등록정보',\r
+               chkPlay         : '자동재생',\r
+               chkLoop         : '반복',\r
+               chkMenu         : '플래쉬메뉴 가능',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : '영역',\r
+               scaleAll                : '모두보기',\r
+               scaleNoBorder   : '경계선없음',\r
+               scaleFit                : '영역자동조절',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : '정렬',\r
+               alignLeft       : '왼쪽',\r
+               alignAbsBottom: '줄아래(Abs Bottom)',\r
+               alignAbsMiddle: '줄중간(Abs Middle)',\r
+               alignBaseline   : '기준선',\r
+               alignBottom     : '아래',\r
+               alignMiddle     : '중간',\r
+               alignRight      : '오른쪽',\r
+               alignTextTop    : '글자상단',\r
+               alignTop        : '위',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : '배경 색상',\r
+               width   : '너비',\r
+               height  : '높이',\r
+               hSpace  : '수평여백',\r
+               vSpace  : '수직여백',\r
+               validateSrc : '링크 URL을 입력하십시요.',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : '철자검사',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : '사전에 없는 단어',\r
+               changeTo                : '변경할 단어',\r
+               btnIgnore               : '건너뜀',\r
+               btnIgnoreAll    : '모두 건너뜀',\r
+               btnReplace              : '변경',\r
+               btnReplaceAll   : '모두 변경',\r
+               btnUndo                 : '취소',\r
+               noSuggestions   : '- 추천단어 없음 -',\r
+               progress                : '철자검사를 진행중입니다...',\r
+               noMispell               : '철자검사 완료: 잘못된 철자가 없습니다.',\r
+               noChanges               : '철자검사 완료: 변경된 단어가 없습니다.',\r
+               oneChange               : '철자검사 완료: 단어가 변경되었습니다.',\r
+               manyChanges             : '철자검사 완료: %1 단어가 변경되었습니다.',\r
+               ieSpellDownload : '철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : '아이콘',\r
+               title   : '아이콘 삽입'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : '순서있는 목록',\r
+       bulletedlist : '순서없는 목록',\r
+       indent : '들여쓰기',\r
+       outdent : '내어쓰기',\r
+\r
+       justify :\r
+       {\r
+               left : '왼쪽 정렬',\r
+               center : '가운데 정렬',\r
+               right : '오른쪽 정렬',\r
+               block : '양쪽 맞춤'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : '붙여넣기',\r
+               cutError        : '브라우저의 보안설정때문에 잘라내기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl+X).',\r
+               copyError       : '브라우저의 보안설정때문에 복사하기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요.  (Ctrl+C).',\r
+               pasteMsg        : '키보드의 (<STRONG>Ctrl+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.',\r
+               securityMsg     : '브러우저 보안 설정으로 인해, 클립보드의 자료를 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'MS Word 형식에서 붙여넣기',\r
+               title : 'MS Word 형식에서 붙여넣기',\r
+               advice : '키보드의 (<STRONG>Ctrl+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.',\r
+               ignoreFontFace : '폰트 설정 무시',\r
+               removeStyle : '스타일 정의 제거'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : '텍스트로 붙여넣기',\r
+               title : '텍스트로 붙여넣기'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : '템플릿',\r
+               title : '내용 템플릿',\r
+               insertOption: '현재 내용 바꾸기',\r
+               selectPromptMsg: '에디터에서 사용할 템플릿을 선택하십시요.<br>(지금까지 작성된 내용은 사라집니다.):',\r
+               emptyListMsg : '(템플릿이 없습니다.)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : '스타일',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : '포맷',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : '포맷',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatted',\r
+               tag_address : 'Address',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : '폰트',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : '폰트',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : '글자 크기',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : '글자 크기',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : '글자 색상',\r
+               bgColorTitle : '배경 색상',\r
+               auto : '기본색상',\r
+               more : '색상선택...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/lt.js b/_source/lang/lt.js
new file mode 100644 (file)
index 0000000..c6d3ff3
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Lithuanian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['lt'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Šaltinis',\r
+       newPage                 : 'Naujas puslapis',\r
+       save                    : 'Išsaugoti',\r
+       preview                 : 'Peržiūra',\r
+       cut                             : 'Iškirpti',\r
+       copy                    : 'Kopijuoti',\r
+       paste                   : 'Įdėti',\r
+       print                   : 'Spausdinti',\r
+       underline               : 'Pabrauktas',\r
+       bold                    : 'Pusjuodis',\r
+       italic                  : 'Kursyvas',\r
+       selectAll               : 'Pažymėti viską',\r
+       removeFormat    : 'Panaikinti formatą',\r
+       strike                  : 'Perbrauktas',\r
+       subscript               : 'Apatinis indeksas',\r
+       superscript             : 'Viršutinis indeksas',\r
+       horizontalrule  : 'Įterpti horizontalią liniją',\r
+       pagebreak               : 'Įterpti puslapių skirtuką',\r
+       unlink                  : 'Panaikinti nuorodą',\r
+       undo                    : 'Atšaukti',\r
+       redo                    : 'Atstatyti',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Naršyti po serverį',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokolas',\r
+               upload                  : 'Siųsti',\r
+               uploadSubmit    : 'Siųsti į serverį',\r
+               image                   : 'Vaizdas',\r
+               flash                   : 'Flash',\r
+               form                    : 'Forma',\r
+               checkbox                : 'Žymimasis langelis',\r
+               radio           : 'Žymimoji akutė',\r
+               textField               : 'Teksto laukas',\r
+               textarea                : 'Teksto sritis',\r
+               hiddenField             : 'Nerodomas laukas',\r
+               button                  : 'Mygtukas',\r
+               select  : 'Atrankos laukas',\r
+               imageButton             : 'Vaizdinis mygtukas',\r
+               notSet                  : '<nėra nustatyta>',\r
+               id                              : 'Id',\r
+               name                    : 'Vardas',\r
+               langDir                 : 'Teksto kryptis',\r
+               langDirLtr              : 'Iš kairės į dešinę (LTR)',\r
+               langDirRtl              : 'Iš dešinės į kairę (RTL)',\r
+               langCode                : 'Kalbos kodas',\r
+               longDescr               : 'Ilgas aprašymas URL',\r
+               cssClass                : 'Stilių lentelės klasės',\r
+               advisoryTitle   : 'Konsultacinė antraštė',\r
+               cssStyle                : 'Stilius',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Nutraukti',\r
+               generalTab              : 'Bendros savybės',\r
+               advancedTab             : 'Papildomas',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Įterpti specialų simbolį',\r
+               title           : 'Pasirinkite specialų simbolį'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Įterpti/taisyti nuorodą',\r
+               menu            : 'Taisyti nuorodą',\r
+               title           : 'Nuoroda',\r
+               info            : 'Nuorodos informacija',\r
+               target          : 'Paskirties vieta',\r
+               upload          : 'Siųsti',\r
+               advanced        : 'Papildomas',\r
+               type            : 'Nuorodos tipas',\r
+               toAnchor        : 'Žymė šiame puslapyje',\r
+               toEmail         : 'El.paštas',\r
+               target          : 'Paskirties vieta',\r
+               targetNotSet    : '<nėra nustatyta>',\r
+               targetFrame     : '<kadras>',\r
+               targetPopup     : '<išskleidžiamas langas>',\r
+               targetNew       : 'Naujas langas (_blank)',\r
+               targetTop       : 'Svarbiausias langas (_top)',\r
+               targetSelf      : 'Tas pats langas (_self)',\r
+               targetParent    : 'Pirminis langas (_parent)',\r
+               targetFrameName : 'Paskirties kadro vardas',\r
+               targetPopupName : 'Paskirties lango vardas',\r
+               popupFeatures   : 'Išskleidžiamo lango savybės',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Būsenos juosta',\r
+               popupLocationBar        : 'Adreso juosta',\r
+               popupToolbar    : 'Mygtukų juosta',\r
+               popupMenuBar    : 'Meniu juosta',\r
+               popupFullScreen : 'Visas ekranas (IE)',\r
+               popupScrollBars : 'Slinkties juostos',\r
+               popupDependent  : 'Priklausomas (Netscape)',\r
+               popupWidth              : 'Plotis',\r
+               popupLeft               : 'Kairė pozicija',\r
+               popupHeight             : 'Aukštis',\r
+               popupTop                : 'Viršutinė pozicija',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Teksto kryptis',\r
+               langDirNotSet   : '<nėra nustatyta>',\r
+               langDirLTR              : 'Iš kairės į dešinę (LTR)',\r
+               langDirRTL              : 'Iš dešinės į kairę (RTL)',\r
+               acccessKey              : 'Prieigos raktas',\r
+               name                    : 'Vardas',\r
+               langCode                : 'Teksto kryptis',\r
+               tabIndex                : 'Tabuliavimo indeksas',\r
+               advisoryTitle   : 'Konsultacinė antraštė',\r
+               advisoryContentType     : 'Konsultacinio turinio tipas',\r
+               cssClasses              : 'Stilių lentelės klasės',\r
+               charset                 : 'Susietų išteklių simbolių lentelė',\r
+               styles                  : 'Stilius',\r
+               selectAnchor    : 'Pasirinkite žymę',\r
+               anchorName              : 'Pagal žymės vardą',\r
+               anchorId                : 'Pagal žymės Id',\r
+               emailAddress    : 'El.pašto adresas',\r
+               emailSubject    : 'Žinutės tema',\r
+               emailBody               : 'Žinutės turinys',\r
+               noAnchors               : '(Šiame dokumente žymių nėra)',\r
+               noUrl                   : 'Prašome įvesti nuorodos URL',\r
+               noEmail                 : 'Prašome įvesti el.pašto adresą'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Įterpti/modifikuoti žymę',\r
+               menu            : 'Žymės savybės',\r
+               title           : 'Žymės savybės',\r
+               name            : 'Žymės vardas',\r
+               errorName       : 'Prašome įvesti žymės vardą'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Surasti ir pakeisti',\r
+               find                            : 'Rasti',\r
+               replace                         : 'Pakeisti',\r
+               findWhat                        : 'Surasti tekstą:',\r
+               replaceWith                     : 'Pakeisti tekstu:',\r
+               notFoundMsg                     : 'Nurodytas tekstas nerastas.',\r
+               matchCase                       : 'Skirti didžiąsias ir mažąsias raides',\r
+               matchWord                       : 'Atitikti pilną žodį',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Pakeisti viską',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Lentelė',\r
+               title           : 'Lentelės savybės',\r
+               menu            : 'Lentelės savybės',\r
+               deleteTable     : 'Šalinti lentelę',\r
+               rows            : 'Eilutės',\r
+               columns         : 'Stulpeliai',\r
+               border          : 'Rėmelio dydis',\r
+               align           : 'Lygiuoti',\r
+               alignNotSet     : '<Nenustatyta>',\r
+               alignLeft       : 'Kairę',\r
+               alignCenter     : 'Centrą',\r
+               alignRight      : 'Dešinę',\r
+               width           : 'Plotis',\r
+               widthPx         : 'taškais',\r
+               widthPc         : 'procentais',\r
+               height          : 'Aukštis',\r
+               cellSpace       : 'Tarpas tarp langelių',\r
+               cellPad         : 'Trapas nuo langelio rėmo iki teksto',\r
+               caption         : 'Antraštė',\r
+               summary         : 'Santrauka',\r
+               headers         : 'Antraštės',\r
+               headersNone             : 'Nėra',\r
+               headersColumn   : 'Pirmas stulpelis',\r
+               headersRow              : 'Pirma eilutė',\r
+               headersBoth             : 'Abu',\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Langelis',\r
+                       insertBefore    : 'Įterpti langelį prieš',\r
+                       insertAfter             : 'Įterpti langelį po',\r
+                       deleteCell              : 'Šalinti langelius',\r
+                       merge                   : 'Sujungti langelius',\r
+                       mergeRight              : 'Sujungti su dešine',\r
+                       mergeDown               : 'Sujungti su apačia',\r
+                       splitHorizontal : 'Skaidyti langelį horizontaliai',\r
+                       splitVertical   : 'Skaidyti langelį vertikaliai',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Eilutė',\r
+                       insertBefore    : 'Įterpti eilutę prieš',\r
+                       insertAfter             : 'Įterpti eilutę po',\r
+                       deleteRow               : 'Šalinti eilutes'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Stulpelis',\r
+                       insertBefore    : 'Įterpti stulpelį prieš',\r
+                       insertAfter             : 'Įterpti stulpelį po',\r
+                       deleteColumn    : 'Šalinti stulpelius'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Mygtuko savybės',\r
+               text            : 'Tekstas (Reikšmė)',\r
+               type            : 'Tipas',\r
+               typeBtn         : 'Mygtukas',\r
+               typeSbm         : 'Siųsti',\r
+               typeRst         : 'Išvalyti'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Žymimojo langelio savybės',\r
+               radioTitle      : 'Žymimosios akutės savybės',\r
+               value           : 'Reikšmė',\r
+               selected        : 'Pažymėtas'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Formos savybės',\r
+               menu            : 'Formos savybės',\r
+               action          : 'Veiksmas',\r
+               method          : 'Metodas',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Paskirties vieta',\r
+               targetNotSet    : '<nėra nustatyta>',\r
+               targetNew       : 'Naujas langas (_blank)',\r
+               targetTop       : 'Svarbiausias langas (_top)',\r
+               targetSelf      : 'Tas pats langas (_self)',\r
+               targetParent    : 'Pirminis langas (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Atrankos lauko savybės',\r
+               selectInfo      : 'Informacija',\r
+               opAvail         : 'Galimos parinktys',\r
+               value           : 'Reikšmė',\r
+               size            : 'Dydis',\r
+               lines           : 'eilučių',\r
+               chkMulti        : 'Leisti daugeriopą atranką',\r
+               opText          : 'Tekstas',\r
+               opValue         : 'Reikšmė',\r
+               btnAdd          : 'Įtraukti',\r
+               btnModify       : 'Modifikuoti',\r
+               btnUp           : 'Aukštyn',\r
+               btnDown         : 'Žemyn',\r
+               btnSetValue : 'Laikyti pažymėta reikšme',\r
+               btnDelete       : 'Trinti'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Teksto srities savybės',\r
+               cols            : 'Ilgis',\r
+               rows            : 'Plotis'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Teksto lauko savybės',\r
+               name            : 'Vardas',\r
+               value           : 'Reikšmė',\r
+               charWidth       : 'Ilgis simboliais',\r
+               maxChars        : 'Maksimalus simbolių skaičius',\r
+               type            : 'Tipas',\r
+               typeText        : 'Tekstas',\r
+               typePass        : 'Slaptažodis'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Nerodomo lauko savybės',\r
+               name    : 'Vardas',\r
+               value   : 'Reikšmė'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Vaizdo savybės',\r
+               titleButton     : 'Vaizdinio mygtuko savybės',\r
+               menu            : 'Vaizdo savybės',\r
+               infoTab : 'Vaizdo informacija',\r
+               btnUpload       : 'Siųsti į serverį',\r
+               url             : 'URL',\r
+               upload  : 'Nusiųsti',\r
+               alt             : 'Alternatyvus Tekstas',\r
+               width           : 'Plotis',\r
+               height  : 'Aukštis',\r
+               lockRatio       : 'Išlaikyti proporciją',\r
+               resetSize       : 'Atstatyti dydį',\r
+               border  : 'Rėmelis',\r
+               hSpace  : 'Hor.Erdvė',\r
+               vSpace  : 'Vert.Erdvė',\r
+               align           : 'Lygiuoti',\r
+               alignLeft       : 'Kairę',\r
+               alignAbsBottom: 'Absoliučią apačią',\r
+               alignAbsMiddle: 'Absoliutų vidurį',\r
+               alignBaseline   : 'Apatinę liniją',\r
+               alignBottom     : 'Apačią',\r
+               alignMiddle     : 'Vidurį',\r
+               alignRight      : 'Dešinę',\r
+               alignTextTop    : 'Teksto viršūnę',\r
+               alignTop        : 'Viršūnę',\r
+               preview : 'Peržiūra',\r
+               alertUrl        : 'Prašome įvesti vaizdo URL',\r
+               linkTab : 'Nuoroda',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash savybės',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash savybės',\r
+               chkPlay         : 'Automatinis paleidimas',\r
+               chkLoop         : 'Ciklas',\r
+               chkMenu         : 'Leisti Flash meniu',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Mastelis',\r
+               scaleAll                : 'Rodyti visą',\r
+               scaleNoBorder   : 'Be rėmelio',\r
+               scaleFit                : 'Tikslus atitikimas',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Lygiuoti',\r
+               alignLeft       : 'Kairę',\r
+               alignAbsBottom: 'Absoliučią apačią',\r
+               alignAbsMiddle: 'Absoliutų vidurį',\r
+               alignBaseline   : 'Apatinę liniją',\r
+               alignBottom     : 'Apačią',\r
+               alignMiddle     : 'Vidurį',\r
+               alignRight      : 'Dešinę',\r
+               alignTextTop    : 'Teksto viršūnę',\r
+               alignTop        : 'Viršūnę',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Fono spalva',\r
+               width   : 'Plotis',\r
+               height  : 'Aukštis',\r
+               hSpace  : 'Hor.Erdvė',\r
+               vSpace  : 'Vert.Erdvė',\r
+               validateSrc : 'Prašome įvesti nuorodos URL',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Rašybos tikrinimas',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Žodyne nerastas',\r
+               changeTo                : 'Pakeisti į',\r
+               btnIgnore               : 'Ignoruoti',\r
+               btnIgnoreAll    : 'Ignoruoti visus',\r
+               btnReplace              : 'Pakeisti',\r
+               btnReplaceAll   : 'Pakeisti visus',\r
+               btnUndo                 : 'Atšaukti',\r
+               noSuggestions   : '- Nėra pasiūlymų -',\r
+               progress                : 'Vyksta rašybos tikrinimas...',\r
+               noMispell               : 'Rašybos tikrinimas baigtas: Nerasta rašybos klaidų',\r
+               noChanges               : 'Rašybos tikrinimas baigtas: Nėra pakeistų žodžių',\r
+               oneChange               : 'Rašybos tikrinimas baigtas: Vienas žodis pakeistas',\r
+               manyChanges             : 'Rašybos tikrinimas baigtas: Pakeista %1 žodžių',\r
+               ieSpellDownload : 'Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Veideliai',\r
+               title   : 'Įterpti veidelį'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Numeruotas sąrašas',\r
+       bulletedlist : 'Suženklintas sąrašas',\r
+       indent : 'Padidinti įtrauką',\r
+       outdent : 'Sumažinti įtrauką',\r
+\r
+       justify :\r
+       {\r
+               left : 'Lygiuoti kairę',\r
+               center : 'Centruoti',\r
+               right : 'Lygiuoti dešinę',\r
+               block : 'Lygiuoti abi puses'\r
+       },\r
+\r
+       blockquote : 'Citata',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Įdėti',\r
+               cutError        : 'Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+X).',\r
+               copyError       : 'Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+C).',\r
+               pasteMsg        : 'Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl+V</STRONG>) ir paspauskite mygtuką <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Dėl jūsų naršyklės saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartą į šį langą.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Įdėti iš Word',\r
+               title : 'Įdėti iš Word',\r
+               advice : 'Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl+V</STRONG>) ir paspauskite mygtuką <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignoruoti šriftų nustatymus',\r
+               removeStyle : 'Pašalinti stilių nustatymus'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Įdėti kaip gryną tekstą',\r
+               title : 'Įdėti kaip gryną tekstą'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Šablonai',\r
+               title : 'Turinio šablonai',\r
+               insertOption: 'Pakeisti dabartinį turinį pasirinktu šablonu',\r
+               selectPromptMsg: 'Pasirinkite norimą šabloną<br>(<b>Dėmesio!</b> esamas turinys bus prarastas):',\r
+               emptyListMsg : '(Šablonų sąrašas tuščias)'\r
+       },\r
+\r
+       showBlocks : 'Rodyti blokus',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stilius',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Šrifto formatas',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Šrifto formatas',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normalus',\r
+               tag_pre : 'Formuotas',\r
+               tag_address : 'Kreipinio',\r
+               tag_h1 : 'Antraštinis 1',\r
+               tag_h2 : 'Antraštinis 2',\r
+               tag_h3 : 'Antraštinis 3',\r
+               tag_h4 : 'Antraštinis 4',\r
+               tag_h5 : 'Antraštinis 5',\r
+               tag_h6 : 'Antraštinis 6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Šriftas',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Šriftas',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Šrifto dydis',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Šrifto dydis',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Teksto spalva',\r
+               bgColorTitle : 'Fono spalva',\r
+               auto : 'Automatinis',\r
+               more : 'Daugiau spalvų...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/lv.js b/_source/lang/lv.js
new file mode 100644 (file)
index 0000000..903f2aa
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Latvian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['lv'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'HTML kods',\r
+       newPage                 : 'Jauna lapa',\r
+       save                    : 'Saglabāt',\r
+       preview                 : 'Pārskatīt',\r
+       cut                             : 'Izgriezt',\r
+       copy                    : 'Kopēt',\r
+       paste                   : 'Ievietot',\r
+       print                   : 'Drukāt',\r
+       underline               : 'Apakšsvītra',\r
+       bold                    : 'Treknu šriftu',\r
+       italic                  : 'Slīprakstā',\r
+       selectAll               : 'Iezīmēt visu',\r
+       removeFormat    : 'Noņemt stilus',\r
+       strike                  : 'Pārsvītrots',\r
+       subscript               : 'Zemrakstā',\r
+       superscript             : 'Augšrakstā',\r
+       horizontalrule  : 'Ievietot horizontālu Atdalītājsvītru',\r
+       pagebreak               : 'Ievietot lapas pārtraukumu',\r
+       unlink                  : 'Noņemt hipersaiti',\r
+       undo                    : 'Atcelt',\r
+       redo                    : 'Atkārtot',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Skatīt servera saturu',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokols',\r
+               upload                  : 'Augšupielādēt',\r
+               uploadSubmit    : 'Nosūtīt serverim',\r
+               image                   : 'Attēls',\r
+               flash                   : 'Flash',\r
+               form                    : 'Forma',\r
+               checkbox                : 'Atzīmēšanas kastīte',\r
+               radio           : 'Izvēles poga',\r
+               textField               : 'Teksta rinda',\r
+               textarea                : 'Teksta laukums',\r
+               hiddenField             : 'Paslēpta teksta rinda',\r
+               button                  : 'Poga',\r
+               select  : 'Iezīmēšanas lauks',\r
+               imageButton             : 'Attēlpoga',\r
+               notSet                  : '<nav iestatīts>',\r
+               id                              : 'Id',\r
+               name                    : 'Nosaukums',\r
+               langDir                 : 'Valodas lasīšanas virziens',\r
+               langDirLtr              : 'No kreisās uz labo (LTR)',\r
+               langDirRtl              : 'No labās uz kreiso (RTL)',\r
+               langCode                : 'Valodas kods',\r
+               longDescr               : 'Gara apraksta Hipersaite',\r
+               cssClass                : 'Stilu saraksta klases',\r
+               advisoryTitle   : 'Konsultatīvs virsraksts',\r
+               cssStyle                : 'Stils',\r
+               ok                              : 'Darīts!',\r
+               cancel                  : 'Atcelt',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Izvērstais',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Ievietot speciālo simbolu',\r
+               title           : 'Ievietot īpašu simbolu'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Ievietot/Labot hipersaiti',\r
+               menu            : 'Labot hipersaiti',\r
+               title           : 'Hipersaite',\r
+               info            : 'Hipersaites informācija',\r
+               target          : 'Mērķis',\r
+               upload          : 'Augšupielādēt',\r
+               advanced        : 'Izvērstais',\r
+               type            : 'Hipersaites tips',\r
+               toAnchor        : 'Iezīme šajā lapā',\r
+               toEmail         : 'E-pasts',\r
+               target          : 'Mērķis',\r
+               targetNotSet    : '<nav iestatīts>',\r
+               targetFrame     : '<ietvars>',\r
+               targetPopup     : '<uznirstošā logā>',\r
+               targetNew       : 'Jaunā logā (_blank)',\r
+               targetTop       : 'Visredzamākajā logā (_top)',\r
+               targetSelf      : 'Tajā pašā logā (_self)',\r
+               targetParent    : 'Esošajā logā (_parent)',\r
+               targetFrameName : 'Mērķa ietvara nosaukums',\r
+               targetPopupName : 'Uznirstošā loga nosaukums',\r
+               popupFeatures   : 'Uznirstošā loga nosaukums īpašības',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Statusa josla',\r
+               popupLocationBar        : 'Atrašanās vietas josla',\r
+               popupToolbar    : 'Rīku josla',\r
+               popupMenuBar    : 'Izvēlnes josla',\r
+               popupFullScreen : 'Pilnā ekrānā (IE)',\r
+               popupScrollBars : 'Ritjoslas',\r
+               popupDependent  : 'Atkarīgs (Netscape)',\r
+               popupWidth              : 'Platums',\r
+               popupLeft               : 'Kreisā koordināte',\r
+               popupHeight             : 'Augstums',\r
+               popupTop                : 'Augšējā koordināte',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Valodas lasīšanas virziens',\r
+               langDirNotSet   : '<nav iestatīts>',\r
+               langDirLTR              : 'No kreisās uz labo (LTR)',\r
+               langDirRTL              : 'No labās uz kreiso (RTL)',\r
+               acccessKey              : 'Pieejas kods',\r
+               name                    : 'Nosaukums',\r
+               langCode                : 'Valodas lasīšanas virziens',\r
+               tabIndex                : 'Ciļņu indekss',\r
+               advisoryTitle   : 'Konsultatīvs virsraksts',\r
+               advisoryContentType     : 'Konsultatīvs satura tips',\r
+               cssClasses              : 'Stilu saraksta klases',\r
+               charset                 : 'Pievienotā resursa kodu tabula',\r
+               styles                  : 'Stils',\r
+               selectAnchor    : 'Izvēlēties iezīmi',\r
+               anchorName              : 'Pēc iezīmes nosaukuma',\r
+               anchorId                : 'Pēc elementa ID',\r
+               emailAddress    : 'E-pasta adrese',\r
+               emailSubject    : 'Ziņas tēma',\r
+               emailBody               : 'Ziņas saturs',\r
+               noAnchors               : '(Šajā dokumentā nav iezīmju)',\r
+               noUrl                   : 'Lūdzu norādi hipersaiti',\r
+               noEmail                 : 'Lūdzu norādi e-pasta adresi'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Ievietot/Labot iezīmi',\r
+               menu            : 'Iezīmes īpašības',\r
+               title           : 'Iezīmes īpašības',\r
+               name            : 'Iezīmes nosaukums',\r
+               errorName       : 'Lūdzu norādiet iezīmes nosaukumu'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'Meklēt',\r
+               replace                         : 'Nomainīt',\r
+               findWhat                        : 'Meklēt:',\r
+               replaceWith                     : 'Nomainīt uz:',\r
+               notFoundMsg                     : 'Norādītā frāze netika atrasta.',\r
+               matchCase                       : 'Reģistrjūtīgs',\r
+               matchWord                       : 'Jāsakrīt pilnībā',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Aizvietot visu',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabula',\r
+               title           : 'Tabulas īpašības',\r
+               menu            : 'Tabulas īpašības',\r
+               deleteTable     : 'Dzēst tabulu',\r
+               rows            : 'Rindas',\r
+               columns         : 'Kolonnas',\r
+               border          : 'Rāmja izmērs',\r
+               align           : 'Novietojums',\r
+               alignNotSet     : '<nav norādīts>',\r
+               alignLeft       : 'Pa kreisi',\r
+               alignCenter     : 'Centrēti',\r
+               alignRight      : 'Pa labi',\r
+               width           : 'Platums',\r
+               widthPx         : 'pikseļos',\r
+               widthPc         : 'procentuāli',\r
+               height          : 'Augstums',\r
+               cellSpace       : 'Rūtiņu atstatums',\r
+               cellPad         : 'Rūtiņu nobīde',\r
+               caption         : 'Leģenda',\r
+               summary         : 'Anotācija',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Šūna',\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'Dzēst rūtiņas',\r
+                       merge                   : 'Apvienot rūtiņas',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Rinda',\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'Dzēst rindas'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Kolonna',\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'Dzēst kolonnas'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Pogas īpašības',\r
+               text            : 'Teksts (vērtība)',\r
+               type            : 'Tips',\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Atzīmēšanas kastītes īpašības',\r
+               radioTitle      : 'Izvēles poga īpašības',\r
+               value           : 'Vērtība',\r
+               selected        : 'Iezīmēts'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Formas īpašības',\r
+               menu            : 'Formas īpašības',\r
+               action          : 'Darbība',\r
+               method          : 'Metode',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Mērķis',\r
+               targetNotSet    : '<nav iestatīts>',\r
+               targetNew       : 'Jaunā logā (_blank)',\r
+               targetTop       : 'Visredzamākajā logā (_top)',\r
+               targetSelf      : 'Tajā pašā logā (_self)',\r
+               targetParent    : 'Esošajā logā (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Iezīmēšanas lauka īpašības',\r
+               selectInfo      : 'Informācija',\r
+               opAvail         : 'Pieejamās iespējas',\r
+               value           : 'Vērtība',\r
+               size            : 'Izmērs',\r
+               lines           : 'rindas',\r
+               chkMulti        : 'Atļaut vairākus iezīmējumus',\r
+               opText          : 'Teksts',\r
+               opValue         : 'Vērtība',\r
+               btnAdd          : 'Pievienot',\r
+               btnModify       : 'Veikt izmaiņas',\r
+               btnUp           : 'Augšup',\r
+               btnDown         : 'Lejup',\r
+               btnSetValue : 'Noteikt kā iezīmēto vērtību',\r
+               btnDelete       : 'Dzēst'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Teksta laukuma īpašības',\r
+               cols            : 'Kolonnas',\r
+               rows            : 'Rindas'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Teksta rindas  īpašības',\r
+               name            : 'Nosaukums',\r
+               value           : 'Vērtība',\r
+               charWidth       : 'Simbolu platums',\r
+               maxChars        : 'Simbolu maksimālais daudzums',\r
+               type            : 'Tips',\r
+               typeText        : 'Teksts',\r
+               typePass        : 'Parole'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Paslēptās teksta rindas īpašības',\r
+               name    : 'Nosaukums',\r
+               value   : 'Vērtība'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Attēla īpašības',\r
+               titleButton     : 'Attēlpogas īpašības',\r
+               menu            : 'Attēla īpašības',\r
+               infoTab : 'Informācija par attēlu',\r
+               btnUpload       : 'Nosūtīt serverim',\r
+               url             : 'URL',\r
+               upload  : 'Augšupielādēt',\r
+               alt             : 'Alternatīvais teksts',\r
+               width           : 'Platums',\r
+               height  : 'Augstums',\r
+               lockRatio       : 'Nemainīga Augstuma/Platuma attiecība',\r
+               resetSize       : 'Atjaunot sākotnējo izmēru',\r
+               border  : 'Rāmis',\r
+               hSpace  : 'Horizontālā telpa',\r
+               vSpace  : 'Vertikālā telpa',\r
+               align           : 'Nolīdzināt',\r
+               alignLeft       : 'Pa kreisi',\r
+               alignAbsBottom: 'Absolūti apakšā',\r
+               alignAbsMiddle: 'Absolūti vertikāli centrēts',\r
+               alignBaseline   : 'Pamatrindā',\r
+               alignBottom     : 'Apakšā',\r
+               alignMiddle     : 'Vertikāli centrēts',\r
+               alignRight      : 'Pa labi',\r
+               alignTextTop    : 'Teksta augšā',\r
+               alignTop        : 'Augšā',\r
+               preview : 'Pārskats',\r
+               alertUrl        : 'Lūdzu norādīt attēla hipersaiti',\r
+               linkTab : 'Hipersaite',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash īpašības',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash īpašības',\r
+               chkPlay         : 'Automātiska atskaņošana',\r
+               chkLoop         : 'Nepārtraukti',\r
+               chkMenu         : 'Atļaut Flash izvēlni',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Mainīt izmēru',\r
+               scaleAll                : 'Rādīt visu',\r
+               scaleNoBorder   : 'Bez rāmja',\r
+               scaleFit                : 'Precīzs izmērs',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Nolīdzināt',\r
+               alignLeft       : 'Pa kreisi',\r
+               alignAbsBottom: 'Absolūti apakšā',\r
+               alignAbsMiddle: 'Absolūti vertikāli centrēts',\r
+               alignBaseline   : 'Pamatrindā',\r
+               alignBottom     : 'Apakšā',\r
+               alignMiddle     : 'Vertikāli centrēts',\r
+               alignRight      : 'Pa labi',\r
+               alignTextTop    : 'Teksta augšā',\r
+               alignTop        : 'Augšā',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Fona krāsa',\r
+               width   : 'Platums',\r
+               height  : 'Augstums',\r
+               hSpace  : 'Horizontālā telpa',\r
+               vSpace  : 'Vertikālā telpa',\r
+               validateSrc : 'Lūdzu norādi hipersaiti',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Pareizrakstības pārbaude',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Netika atrasts vārdnīcā',\r
+               changeTo                : 'Nomainīt uz',\r
+               btnIgnore               : 'Ignorēt',\r
+               btnIgnoreAll    : 'Ignorēt visu',\r
+               btnReplace              : 'Aizvietot',\r
+               btnReplaceAll   : 'Aizvietot visu',\r
+               btnUndo                 : 'Atcelt',\r
+               noSuggestions   : '- Nav ieteikumu -',\r
+               progress                : 'Notiek pareizrakstības pārbaude...',\r
+               noMispell               : 'Pareizrakstības pārbaude pabeigta: kļūdas netika atrastas',\r
+               noChanges               : 'Pareizrakstības pārbaude pabeigta: nekas netika labots',\r
+               oneChange               : 'Pareizrakstības pārbaude pabeigta: 1 vārds izmainīts',\r
+               manyChanges             : 'Pareizrakstības pārbaude pabeigta: %1 vārdi tika mainīti',\r
+               ieSpellDownload : 'Pareizrakstības pārbaudītājs nav pievienots. Vai vēlaties to lejupielādēt tagad?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smaidiņi',\r
+               title   : 'Ievietot smaidiņu'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Numurēts saraksts',\r
+       bulletedlist : 'Izcelts saraksts',\r
+       indent : 'Palielināt atkāpi',\r
+       outdent : 'Samazināt atkāpi',\r
+\r
+       justify :\r
+       {\r
+               left : 'Izlīdzināt pa kreisi',\r
+               center : 'Izlīdzināt pret centru',\r
+               right : 'Izlīdzināt pa labi',\r
+               block : 'Izlīdzināt malas'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Ievietot',\r
+               cutError        : 'Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt izgriešanas darbību.  Lūdzu, izmantojiet (Ctrl+X, lai veiktu šo darbību.',\r
+               copyError       : 'Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt kopēšanas darbību.  Lūdzu, izmantojiet (Ctrl+C), lai veiktu šo darbību.',\r
+               pasteMsg        : 'Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Ievietot no Worda',\r
+               title : 'Ievietot no Worda',\r
+               advice : 'Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.',\r
+               ignoreFontFace : 'Ignorēt iepriekš norādītos fontus',\r
+               removeStyle : 'Noņemt norādītos stilus'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Ievietot kā vienkāršu tekstu',\r
+               title : 'Ievietot kā vienkāršu tekstu'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Sagataves',\r
+               title : 'Satura sagataves',\r
+               insertOption: 'Replace actual contents', // MISSING\r
+               selectPromptMsg: 'Lūdzu, norādiet sagatavi, ko atvērt editorā<br>(patreizējie dati tiks zaudēti):',\r
+               emptyListMsg : '(Nav norādītas sagataves)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stils',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formāts',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Formāts',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normāls teksts',\r
+               tag_pre : 'Formatēts teksts',\r
+               tag_address : 'Adrese',\r
+               tag_h1 : 'Virsraksts 1',\r
+               tag_h2 : 'Virsraksts 2',\r
+               tag_h3 : 'Virsraksts 3',\r
+               tag_h4 : 'Virsraksts 4',\r
+               tag_h5 : 'Virsraksts 5',\r
+               tag_h6 : 'Virsraksts 6',\r
+               tag_div : 'Rindkopa (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Šrifts',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Šrifts',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Izmērs',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Izmērs',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Teksta krāsa',\r
+               bgColorTitle : 'Fona krāsa',\r
+               auto : 'Automātiska',\r
+               more : 'Plašāka palete...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/mn.js b/_source/lang/mn.js
new file mode 100644 (file)
index 0000000..ae46f9d
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Mongolian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['mn'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Код',\r
+       newPage                 : 'Шинэ хуудас',\r
+       save                    : 'Хадгалах',\r
+       preview                 : 'Уридчлан харах',\r
+       cut                             : 'Хайчлах',\r
+       copy                    : 'Хуулах',\r
+       paste                   : 'Буулгах',\r
+       print                   : 'Хэвлэх',\r
+       underline               : 'Доогуур нь зураастай болгох',\r
+       bold                    : 'Тод бүдүүн',\r
+       italic                  : 'Налуу',\r
+       selectAll               : 'Бүгдийг нь сонгох',\r
+       removeFormat    : 'Формат авч хаях',\r
+       strike                  : 'Дундуур нь зураастай болгох',\r
+       subscript               : 'Суурь болгох',\r
+       superscript             : 'Зэрэг болгох',\r
+       horizontalrule  : 'Хөндлөн зураас оруулах',\r
+       pagebreak               : 'Хуудас тусгаарлагч оруулах',\r
+       unlink                  : 'Линк авч хаях',\r
+       undo                    : 'Хүчингүй болгох',\r
+       redo                    : 'Өмнөх үйлдлээ сэргээх',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Сервер харуулах',\r
+               url                             : 'URL',\r
+               protocol                : 'Протокол',\r
+               upload                  : 'Хуулах',\r
+               uploadSubmit    : 'Үүнийг сервэррүү илгээ',\r
+               image                   : 'Зураг',\r
+               flash                   : 'Флаш',\r
+               form                    : 'Форм',\r
+               checkbox                : 'Чекбокс',\r
+               radio           : 'Радио товч',\r
+               textField               : 'Техт талбар',\r
+               textarea                : 'Техт орчин',\r
+               hiddenField             : 'Нууц талбар',\r
+               button                  : 'Товч',\r
+               select  : 'Сонгогч талбар',\r
+               imageButton             : 'Зурагтай товч',\r
+               notSet                  : '<Оноохгүй>',\r
+               id                              : 'Id',\r
+               name                    : 'Нэр',\r
+               langDir                 : 'Хэлний чиглэл',\r
+               langDirLtr              : 'Зүүнээс баруун (LTR)',\r
+               langDirRtl              : 'Баруунаас зүүн (RTL)',\r
+               langCode                : 'Хэлний код',\r
+               longDescr               : 'URL-ын тайлбар',\r
+               cssClass                : 'Stylesheet классууд',\r
+               advisoryTitle   : 'Зөвлөлдөх гарчиг',\r
+               cssStyle                : 'Загвар',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Болих',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Нэмэлт',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Онцгой тэмдэгт оруулах',\r
+               title           : 'Онцгой тэмдэгт сонгох'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Линк Оруулах/Засварлах',\r
+               menu            : 'Холбоос засварлах',\r
+               title           : 'Линк',\r
+               info            : 'Линкийн мэдээлэл',\r
+               target          : 'Байрлал',\r
+               upload          : 'Хуулах',\r
+               advanced        : 'Нэмэлт',\r
+               type            : 'Линкийн төрөл',\r
+               toAnchor        : 'Энэ хуудасандах холбоос',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Байрлал',\r
+               targetNotSet    : '<Оноохгүй>',\r
+               targetFrame     : '<Агуулах хүрээ>',\r
+               targetPopup     : '<popup цонх>',\r
+               targetNew       : 'Шинэ цонх (_blank)',\r
+               targetTop       : 'Хамгийн түрүүн байх цонх (_top)',\r
+               targetSelf      : 'Төстэй цонх (_self)',\r
+               targetParent    : 'Эцэг цонх (_parent)',\r
+               targetFrameName : 'Очих фремын нэр',\r
+               targetPopupName : 'Popup цонхны нэр',\r
+               popupFeatures   : 'Popup цонхны онцлог',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Статус хэсэг',\r
+               popupLocationBar        : 'Location хэсэг',\r
+               popupToolbar    : 'Багажны хэсэг',\r
+               popupMenuBar    : 'Meню хэсэг',\r
+               popupFullScreen : 'Цонх дүүргэх (IE)',\r
+               popupScrollBars : 'Скрол хэсэгүүд',\r
+               popupDependent  : 'Хамаатай (Netscape)',\r
+               popupWidth              : 'Өргөн',\r
+               popupLeft               : 'Зүүн байрлал',\r
+               popupHeight             : 'Өндөр',\r
+               popupTop                : 'Дээд байрлал',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Хэлний чиглэл',\r
+               langDirNotSet   : '<Оноохгүй>',\r
+               langDirLTR              : 'Зүүнээс баруун (LTR)',\r
+               langDirRTL              : 'Баруунаас зүүн (RTL)',\r
+               acccessKey              : 'Холбох түлхүүр',\r
+               name                    : 'Нэр',\r
+               langCode                : 'Хэлний чиглэл',\r
+               tabIndex                : 'Tab индекс',\r
+               advisoryTitle   : 'Зөвлөлдөх гарчиг',\r
+               advisoryContentType     : 'Зөвлөлдөх төрлийн агуулга',\r
+               cssClasses              : 'Stylesheet классууд',\r
+               charset                 : 'Тэмдэгт оноох нөөцөд холбогдсон',\r
+               styles                  : 'Загвар',\r
+               selectAnchor    : 'Холбоос сонгох',\r
+               anchorName              : 'Холбоосын нэрээр',\r
+               anchorId                : 'Элемэнт Id-гаар',\r
+               emailAddress    : 'E-Mail Хаяг',\r
+               emailSubject    : 'Message гарчиг',\r
+               emailBody               : 'Message-ийн агуулга',\r
+               noAnchors               : '(Баримт бичиг холбоосгүй байна)',\r
+               noUrl                   : 'Линк URL-ээ төрөлжүүлнэ үү',\r
+               noEmail                 : 'Е-mail хаягаа төрөлжүүлнэ үү'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Холбоос Оруулах/Засварлах',\r
+               menu            : 'Холбоос шинж чанар',\r
+               title           : 'Холбоос шинж чанар',\r
+               name            : 'Холбоос нэр',\r
+               errorName       : 'Холбоос төрөл оруулна уу'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Хай мөн Дарж бич',\r
+               find                            : 'Хайх',\r
+               replace                         : 'Солих',\r
+               findWhat                        : 'Хайх үг/үсэг:',\r
+               replaceWith                     : 'Солих үг:',\r
+               notFoundMsg                     : 'Хайсан текст олсонгүй.',\r
+               matchCase                       : 'Тэнцэх төлөв',\r
+               matchWord                       : 'Тэнцэх бүтэн үг',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Бүгдийг нь Солих',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Хүснэгт',\r
+               title           : 'Хүснэгт',\r
+               menu            : 'Хүснэгт',\r
+               deleteTable     : 'Хүснэгт устгах',\r
+               rows            : 'Мөр',\r
+               columns         : 'Багана',\r
+               border          : 'Хүрээний хэмжээ',\r
+               align           : 'Эгнээ',\r
+               alignNotSet     : '<Оноохгүй>',\r
+               alignLeft       : 'Зүүн талд',\r
+               alignCenter     : 'Төвд',\r
+               alignRight      : 'Баруун талд',\r
+               width           : 'Өргөн',\r
+               widthPx         : 'цэг',\r
+               widthPc         : 'хувь',\r
+               height          : 'Өндөр',\r
+               cellSpace       : 'Нүх хоорондын зай (spacing)',\r
+               cellPad         : 'Нүх доторлох(padding)',\r
+               caption         : 'Тайлбар',\r
+               summary         : 'Тайлбар',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Нүх/зай',\r
+                       insertBefore    : 'Нүх/зай өмнө нь оруулах',\r
+                       insertAfter             : 'Нүх/зай дараа нь оруулах',\r
+                       deleteCell              : 'Нүх устгах',\r
+                       merge                   : 'Нүх нэгтэх',\r
+                       mergeRight              : 'Баруун тийш нэгтгэх',\r
+                       mergeDown               : 'Доош нэгтгэх',\r
+                       splitHorizontal : 'Нүх/зайг босоогоор нь тусгаарлах',\r
+                       splitVertical   : 'Нүх/зайг хөндлөнгөөр нь тусгаарлах',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Мөр',\r
+                       insertBefore    : 'Мөр өмнө нь оруулах',\r
+                       insertAfter             : 'Мөр дараа нь оруулах',\r
+                       deleteRow               : 'Мөр устгах'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Багана',\r
+                       insertBefore    : 'Багана өмнө нь оруулах',\r
+                       insertAfter             : 'Багана дараа нь оруулах',\r
+                       deleteColumn    : 'Багана устгах'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Товчны шинж чанар',\r
+               text            : 'Тэкст (Утга)',\r
+               type            : 'Төрөл',\r
+               typeBtn         : 'Товч',\r
+               typeSbm         : 'Submit',\r
+               typeRst         : 'Болих'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Чекбоксны шинж чанар',\r
+               radioTitle      : 'Радио товчны шинж чанар',\r
+               value           : 'Утга',\r
+               selected        : 'Сонгогдсон'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Форм шинж чанар',\r
+               menu            : 'Форм шинж чанар',\r
+               action          : 'Үйлдэл',\r
+               method          : 'Арга',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Байрлал',\r
+               targetNotSet    : '<Оноохгүй>',\r
+               targetNew       : 'Шинэ цонх (_blank)',\r
+               targetTop       : 'Хамгийн түрүүн байх цонх (_top)',\r
+               targetSelf      : 'Төстэй цонх (_self)',\r
+               targetParent    : 'Эцэг цонх (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Согогч талбарын шинж чанар',\r
+               selectInfo      : 'Мэдээлэл',\r
+               opAvail         : 'Идвэхтэй сонголт',\r
+               value           : 'Утга',\r
+               size            : 'Хэмжээ',\r
+               lines           : 'Мөр',\r
+               chkMulti        : 'Олон сонголт зөвшөөрөх',\r
+               opText          : 'Тэкст',\r
+               opValue         : 'Утга',\r
+               btnAdd          : 'Нэмэх',\r
+               btnModify       : 'Өөрчлөх',\r
+               btnUp           : 'Дээш',\r
+               btnDown         : 'Доош',\r
+               btnSetValue : 'Сонгогдсан утга оноох',\r
+               btnDelete       : 'Устгах'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Текст орчны шинж чанар',\r
+               cols            : 'Багана',\r
+               rows            : 'Мөр'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Текст талбарын шинж чанар',\r
+               name            : 'Нэр',\r
+               value           : 'Утга',\r
+               charWidth       : 'Тэмдэгтын өргөн',\r
+               maxChars        : 'Хамгийн их тэмдэгт',\r
+               type            : 'Төрөл',\r
+               typeText        : 'Текст',\r
+               typePass        : 'Нууц үг'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Нууц талбарын шинж чанар',\r
+               name    : 'Нэр',\r
+               value   : 'Утга'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Зураг',\r
+               titleButton     : 'Зурган товчны шинж чанар',\r
+               menu            : 'Зураг',\r
+               infoTab : 'Зурагны мэдээлэл',\r
+               btnUpload       : 'Үүнийг сервэррүү илгээ',\r
+               url             : 'URL',\r
+               upload  : 'Хуулах',\r
+               alt             : 'Тайлбар текст',\r
+               width           : 'Өргөн',\r
+               height  : 'Өндөр',\r
+               lockRatio       : 'Радио түгжих',\r
+               resetSize       : 'хэмжээ дахин оноох',\r
+               border  : 'Хүрээ',\r
+               hSpace  : 'Хөндлөн зай',\r
+               vSpace  : 'Босоо зай',\r
+               align           : 'Эгнээ',\r
+               alignLeft       : 'Зүүн',\r
+               alignAbsBottom: 'Abs доод талд',\r
+               alignAbsMiddle: 'Abs Дунд талд',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Доод талд',\r
+               alignMiddle     : 'Дунд талд',\r
+               alignRight      : 'Баруун',\r
+               alignTextTop    : 'Текст дээр',\r
+               alignTop        : 'Дээд талд',\r
+               preview : 'Уридчлан харах',\r
+               alertUrl        : 'Зурагны URL-ын төрлийн сонгоно уу',\r
+               linkTab : 'Линк',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Флаш шинж чанар',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Флаш  шинж чанар',\r
+               chkPlay         : 'Автоматаар тоглох',\r
+               chkLoop         : 'Давтах',\r
+               chkMenu         : 'Флаш цэс идвэхжүүлэх',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Өргөгтгөх',\r
+               scaleAll                : 'Бүгдийг харуулах',\r
+               scaleNoBorder   : 'Хүрээгүй',\r
+               scaleFit                : 'Яг тааруулах',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Эгнээ',\r
+               alignLeft       : 'Зүүн',\r
+               alignAbsBottom: 'Abs доод талд',\r
+               alignAbsMiddle: 'Abs Дунд талд',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Доод талд',\r
+               alignMiddle     : 'Дунд талд',\r
+               alignRight      : 'Баруун',\r
+               alignTextTop    : 'Текст дээр',\r
+               alignTop        : 'Дээд талд',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Фонны өнгө',\r
+               width   : 'Өргөн',\r
+               height  : 'Өндөр',\r
+               hSpace  : 'Хөндлөн зай',\r
+               vSpace  : 'Босоо зай',\r
+               validateSrc : 'Линк URL-ээ төрөлжүүлнэ үү',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Үгийн дүрэх шалгах',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Толь бичиггүй',\r
+               changeTo                : 'Өөрчлөх',\r
+               btnIgnore               : 'Зөвшөөрөх',\r
+               btnIgnoreAll    : 'Бүгдийг зөвшөөрөх',\r
+               btnReplace              : 'Дарж бичих',\r
+               btnReplaceAll   : 'Бүгдийг Дарж бичих',\r
+               btnUndo                 : 'Буцаах',\r
+               noSuggestions   : '- Тайлбаргүй -',\r
+               progress                : 'Дүрэм шалгаж байгаа үйл явц...',\r
+               noMispell               : 'Дүрэм шалгаад дууссан: Алдаа олдсонгүй',\r
+               noChanges               : 'Дүрэм шалгаад дууссан: үг өөрчлөгдөөгүй',\r
+               oneChange               : 'Дүрэм шалгаад дууссан: 1 үг өөрчлөгдсөн',\r
+               manyChanges             : 'Дүрэм шалгаад дууссан: %1 үг өөрчлөгдсөн',\r
+               ieSpellDownload : 'Дүрэм шалгагч суугаагүй байна. Татаж авахыг хүсч байна уу?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Тодорхойлолт',\r
+               title   : 'Тодорхойлолт оруулах'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Дугаарлагдсан жагсаалт',\r
+       bulletedlist : 'Цэгтэй жагсаалт',\r
+       indent : 'Догол мөр хасах',\r
+       outdent : 'Догол мөр нэмэх',\r
+\r
+       justify :\r
+       {\r
+               left : 'Зүүн талд байрлуулах',\r
+               center : 'Төвд байрлуулах',\r
+               right : 'Баруун талд байрлуулах',\r
+               block : 'Блок хэлбэрээр байрлуулах'\r
+       },\r
+\r
+       blockquote : 'Хайрцаглах',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Буулгах',\r
+               cutError        : 'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+X) товчны хослолыг ашиглана уу.',\r
+               copyError       : 'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+C) товчны хослолыг ашиглана уу.',\r
+               pasteMsg        : '(<strong>Ctrl+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.',\r
+               securityMsg     : 'Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Word-оос буулгах',\r
+               title : 'Word-оос буулгах',\r
+               advice : '(<strong>Ctrl+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.',\r
+               ignoreFontFace : 'Тодорхойлогдсон Font Face зөвшөөрнө',\r
+               removeStyle : 'Тодорхойлогдсон загварыг авах'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Plain Text-ээс буулгах',\r
+               title : 'Plain Text-ээс буулгах'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Загварууд',\r
+               title : 'Загварын агуулга',\r
+               insertOption: 'Одоогийн агууллагыг дарж бичих',\r
+               selectPromptMsg: 'Загварыг нээж editor-рүү сонгож оруулна уу<br />(Одоогийн агууллагыг устаж магадгүй):',\r
+               emptyListMsg : '(Загвар тодорхойлогдоогүй байна)'\r
+       },\r
+\r
+       showBlocks : 'Block-уудыг үзүүлэх',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Загвар',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Формат',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Формат',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Хэвийн',\r
+               tag_pre : 'Formatted',\r
+               tag_address : 'Хаяг',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Paragraph (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Фонт',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Фонт',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Хэмжээ',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Хэмжээ',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Фонтны өнгө',\r
+               bgColorTitle : 'Фонны өнгө',\r
+               auto : 'Автоматаар',\r
+               more : 'Нэмэлт өнгөнүүд...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/ms.js b/_source/lang/ms.js
new file mode 100644 (file)
index 0000000..44cc2ae
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Malay language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['ms'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Sumber',\r
+       newPage                 : 'Helaian Baru',\r
+       save                    : 'Simpan',\r
+       preview                 : 'Prebiu',\r
+       cut                             : 'Potong',\r
+       copy                    : 'Salin',\r
+       paste                   : 'Tampal',\r
+       print                   : 'Cetak',\r
+       underline               : 'Underline',\r
+       bold                    : 'Bold',\r
+       italic                  : 'Italic',\r
+       selectAll               : 'Pilih Semua',\r
+       removeFormat    : 'Buang Format',\r
+       strike                  : 'Strike Through',\r
+       subscript               : 'Subscript',\r
+       superscript             : 'Superscript',\r
+       horizontalrule  : 'Masukkan Garisan Membujur',\r
+       pagebreak               : 'Insert Page Break for Printing', // MISSING\r
+       unlink                  : 'Buang Sambungan',\r
+       undo                    : 'Batalkan',\r
+       redo                    : 'Ulangkan',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Browse Server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokol',\r
+               upload                  : 'Muat Naik',\r
+               uploadSubmit    : 'Hantar ke Server',\r
+               image                   : 'Gambar',\r
+               flash                   : 'Flash', // MISSING\r
+               form                    : 'Borang',\r
+               checkbox                : 'Checkbox',\r
+               radio           : 'Butang Radio',\r
+               textField               : 'Text Field',\r
+               textarea                : 'Textarea',\r
+               hiddenField             : 'Field Tersembunyi',\r
+               button                  : 'Butang',\r
+               select  : 'Field Pilihan',\r
+               imageButton             : 'Butang Bergambar',\r
+               notSet                  : '<tidak di set>',\r
+               id                              : 'Id',\r
+               name                    : 'Nama',\r
+               langDir                 : 'Arah Tulisan',\r
+               langDirLtr              : 'Kiri ke Kanan (LTR)',\r
+               langDirRtl              : 'Kanan ke Kiri (RTL)',\r
+               langCode                : 'Kod Bahasa',\r
+               longDescr               : 'Butiran Panjang URL',\r
+               cssClass                : 'Kelas-kelas Stylesheet',\r
+               advisoryTitle   : 'Tajuk Makluman',\r
+               cssStyle                : 'Stail',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Batal',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Advanced',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Masukkan Huruf Istimewa',\r
+               title           : 'Sila pilih huruf istimewa'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Masukkan/Sunting Sambungan',\r
+               menu            : 'Sunting Sambungan',\r
+               title           : 'Sambungan',\r
+               info            : 'Butiran Sambungan',\r
+               target          : 'Sasaran',\r
+               upload          : 'Muat Naik',\r
+               advanced        : 'Advanced',\r
+               type            : 'Jenis Sambungan',\r
+               toAnchor        : 'Pautan dalam muka surat ini',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Sasaran',\r
+               targetNotSet    : '<tidak di set>',\r
+               targetFrame     : '<bingkai>',\r
+               targetPopup     : '<tetingkap popup>',\r
+               targetNew       : 'Tetingkap Baru (_blank)',\r
+               targetTop       : 'Tetingkap yang paling atas (_top)',\r
+               targetSelf      : 'Tetingkap yang Sama (_self)',\r
+               targetParent    : 'Tetingkap Parent (_parent)',\r
+               targetFrameName : 'Nama Bingkai Sasaran',\r
+               targetPopupName : 'Nama Tetingkap Popup',\r
+               popupFeatures   : 'Ciri Tetingkap Popup',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Bar Status',\r
+               popupLocationBar        : 'Bar Lokasi',\r
+               popupToolbar    : 'Toolbar',\r
+               popupMenuBar    : 'Bar Menu',\r
+               popupFullScreen : 'Skrin Penuh (IE)',\r
+               popupScrollBars : 'Bar-bar skrol',\r
+               popupDependent  : 'Bergantungan (Netscape)',\r
+               popupWidth              : 'Lebar',\r
+               popupLeft               : 'Posisi Kiri',\r
+               popupHeight             : 'Tinggi',\r
+               popupTop                : 'Posisi Atas',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Arah Tulisan',\r
+               langDirNotSet   : '<tidak di set>',\r
+               langDirLTR              : 'Kiri ke Kanan (LTR)',\r
+               langDirRTL              : 'Kanan ke Kiri (RTL)',\r
+               acccessKey              : 'Kunci Akses',\r
+               name                    : 'Nama',\r
+               langCode                : 'Arah Tulisan',\r
+               tabIndex                : 'Indeks Tab ',\r
+               advisoryTitle   : 'Tajuk Makluman',\r
+               advisoryContentType     : 'Jenis Kandungan Makluman',\r
+               cssClasses              : 'Kelas-kelas Stylesheet',\r
+               charset                 : 'Linked Resource Charset',\r
+               styles                  : 'Stail',\r
+               selectAnchor    : 'Sila pilih pautan',\r
+               anchorName              : 'dengan menggunakan nama pautan',\r
+               anchorId                : 'dengan menggunakan ID elemen',\r
+               emailAddress    : 'Alamat E-Mail',\r
+               emailSubject    : 'Subjek Mesej',\r
+               emailBody               : 'Isi Kandungan Mesej',\r
+               noAnchors               : '(Tiada pautan terdapat dalam dokumen ini)',\r
+               noUrl                   : 'Sila taip sambungan URL',\r
+               noEmail                 : 'Sila taip alamat e-mail'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Masukkan/Sunting Pautan',\r
+               menu            : 'Ciri-ciri Pautan',\r
+               title           : 'Ciri-ciri Pautan',\r
+               name            : 'Nama Pautan',\r
+               errorName       : 'Sila taip nama pautan'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'Cari',\r
+               replace                         : 'Ganti',\r
+               findWhat                        : 'Perkataan yang dicari:',\r
+               replaceWith                     : 'Diganti dengan:',\r
+               notFoundMsg                     : 'Text yang dicari tidak dijumpai.',\r
+               matchCase                       : 'Padanan case huruf',\r
+               matchWord                       : 'Padana Keseluruhan perkataan',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Ganti semua',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Jadual',\r
+               title           : 'Ciri-ciri Jadual',\r
+               menu            : 'Ciri-ciri Jadual',\r
+               deleteTable     : 'Delete Table', // MISSING\r
+               rows            : 'Barisan',\r
+               columns         : 'Jaluran',\r
+               border          : 'Saiz Border',\r
+               align           : 'Penjajaran',\r
+               alignNotSet     : '<Tidak diset>',\r
+               alignLeft       : 'Kiri',\r
+               alignCenter     : 'Tengah',\r
+               alignRight      : 'Kanan',\r
+               width           : 'Lebar',\r
+               widthPx         : 'piksel-piksel',\r
+               widthPc         : 'peratus',\r
+               height          : 'Tinggi',\r
+               cellSpace       : 'Ruangan Antara Sel',\r
+               cellPad         : 'Tambahan Ruang Sel',\r
+               caption         : 'Keterangan',\r
+               summary         : 'Summary', // MISSING\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell', // MISSING\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'Buangkan Sel-sel',\r
+                       merge                   : 'Cantumkan Sel-sel',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Row', // MISSING\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'Buangkan Baris'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Column', // MISSING\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'Buangkan Lajur'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Ciri-ciri Butang',\r
+               text            : 'Teks (Nilai)',\r
+               type            : 'Jenis',\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Ciri-ciri Checkbox',\r
+               radioTitle      : 'Ciri-ciri Butang Radio',\r
+               value           : 'Nilai',\r
+               selected        : 'Dipilih'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Ciri-ciri Borang',\r
+               menu            : 'Ciri-ciri Borang',\r
+               action          : 'Tindakan borang',\r
+               method          : 'Cara borang dihantar',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Sasaran',\r
+               targetNotSet    : '<tidak di set>',\r
+               targetNew       : 'Tetingkap Baru (_blank)',\r
+               targetTop       : 'Tetingkap yang paling atas (_top)',\r
+               targetSelf      : 'Tetingkap yang Sama (_self)',\r
+               targetParent    : 'Tetingkap Parent (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Ciri-ciri Selection Field',\r
+               selectInfo      : 'Select Info', // MISSING\r
+               opAvail         : 'Pilihan sediada',\r
+               value           : 'Nilai',\r
+               size            : 'Saiz',\r
+               lines           : 'garisan',\r
+               chkMulti        : 'Benarkan pilihan pelbagai',\r
+               opText          : 'Teks',\r
+               opValue         : 'Nilai',\r
+               btnAdd          : 'Tambah Pilihan',\r
+               btnModify       : 'Ubah Pilihan',\r
+               btnUp           : 'Naik ke atas',\r
+               btnDown         : 'Turun ke bawah',\r
+               btnSetValue : 'Set sebagai nilai terpilih',\r
+               btnDelete       : 'Padam'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Ciri-ciri Textarea',\r
+               cols            : 'Lajur',\r
+               rows            : 'Baris'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Ciri-ciri Text Field',\r
+               name            : 'Nama',\r
+               value           : 'Nilai',\r
+               charWidth       : 'Lebar isian',\r
+               maxChars        : 'Isian Maksimum',\r
+               type            : 'Jenis',\r
+               typeText        : 'Teks',\r
+               typePass        : 'Kata Laluan'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Ciri-ciri Field Tersembunyi',\r
+               name    : 'Nama',\r
+               value   : 'Nilai'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Ciri-ciri Imej',\r
+               titleButton     : 'Ciri-ciri Butang Bergambar',\r
+               menu            : 'Ciri-ciri Imej',\r
+               infoTab : 'Info Imej',\r
+               btnUpload       : 'Hantar ke Server',\r
+               url             : 'URL',\r
+               upload  : 'Muat Naik',\r
+               alt             : 'Text Alternatif',\r
+               width           : 'Lebar',\r
+               height  : 'Tinggi',\r
+               lockRatio       : 'Tetapkan Nisbah',\r
+               resetSize       : 'Saiz Set Semula',\r
+               border  : 'Border',\r
+               hSpace  : 'Ruang Melintang',\r
+               vSpace  : 'Ruang Menegak',\r
+               align           : 'Jajaran',\r
+               alignLeft       : 'Kiri',\r
+               alignAbsBottom: 'Bawah Mutlak',\r
+               alignAbsMiddle: 'Pertengahan Mutlak',\r
+               alignBaseline   : 'Garis Dasar',\r
+               alignBottom     : 'Bawah',\r
+               alignMiddle     : 'Pertengahan',\r
+               alignRight      : 'Kanan',\r
+               alignTextTop    : 'Atas Text',\r
+               alignTop        : 'Atas',\r
+               preview : 'Prebiu',\r
+               alertUrl        : 'Sila taip URL untuk fail gambar',\r
+               linkTab : 'Sambungan',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash Properties', // MISSING\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash Properties', // MISSING\r
+               chkPlay         : 'Auto Play', // MISSING\r
+               chkLoop         : 'Loop', // MISSING\r
+               chkMenu         : 'Enable Flash Menu', // MISSING\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Scale', // MISSING\r
+               scaleAll                : 'Show all', // MISSING\r
+               scaleNoBorder   : 'No Border', // MISSING\r
+               scaleFit                : 'Exact Fit', // MISSING\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Jajaran',\r
+               alignLeft       : 'Kiri',\r
+               alignAbsBottom: 'Bawah Mutlak',\r
+               alignAbsMiddle: 'Pertengahan Mutlak',\r
+               alignBaseline   : 'Garis Dasar',\r
+               alignBottom     : 'Bawah',\r
+               alignMiddle     : 'Pertengahan',\r
+               alignRight      : 'Kanan',\r
+               alignTextTop    : 'Atas Text',\r
+               alignTop        : 'Atas',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Warna Latarbelakang',\r
+               width   : 'Lebar',\r
+               height  : 'Tinggi',\r
+               hSpace  : 'Ruang Melintang',\r
+               vSpace  : 'Ruang Menegak',\r
+               validateSrc : 'Sila taip sambungan URL',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Semak Ejaan',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Tidak terdapat didalam kamus',\r
+               changeTo                : 'Tukarkan kepada',\r
+               btnIgnore               : 'Biar',\r
+               btnIgnoreAll    : 'Biarkan semua',\r
+               btnReplace              : 'Ganti',\r
+               btnReplaceAll   : 'Gantikan Semua',\r
+               btnUndo                 : 'Batalkan',\r
+               noSuggestions   : '- Tiada cadangan -',\r
+               progress                : 'Pemeriksaan ejaan sedang diproses...',\r
+               noMispell               : 'Pemeriksaan ejaan siap: Tiada salah ejaan',\r
+               noChanges               : 'Pemeriksaan ejaan siap: Tiada perkataan diubah',\r
+               oneChange               : 'Pemeriksaan ejaan siap: Satu perkataan telah diubah',\r
+               manyChanges             : 'Pemeriksaan ejaan siap: %1 perkataan diubah',\r
+               ieSpellDownload : 'Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Masukkan Smiley'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Senarai bernombor',\r
+       bulletedlist : 'Senarai tidak bernombor',\r
+       indent : 'Tambahkan Inden',\r
+       outdent : 'Kurangkan Inden',\r
+\r
+       justify :\r
+       {\r
+               left : 'Jajaran Kiri',\r
+               center : 'Jajaran Tengah',\r
+               right : 'Jajaran Kanan',\r
+               block : 'Jajaran Blok'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Tampal',\r
+               cutError        : 'Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl+X).',\r
+               copyError       : 'Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl+C).',\r
+               pasteMsg        : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK', // MISSING\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Tampal dari Word',\r
+               title : 'Tampal dari Word',\r
+               advice : 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.', // MISSING\r
+               ignoreFontFace : 'Ignore Font Face definitions', // MISSING\r
+               removeStyle : 'Remove Styles definitions' // MISSING\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Tampal sebagai text biasa',\r
+               title : 'Tampal sebagai text biasa'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Templat',\r
+               title : 'Templat Kandungan',\r
+               insertOption: 'Replace actual contents', // MISSING\r
+               selectPromptMsg: 'Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):',\r
+               emptyListMsg : '(Tiada Templat Disimpan)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stail',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Format',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Telah Diformat',\r
+               tag_address : 'Alamat',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Perenggan (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Font',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Font',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Saiz',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Saiz',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Warna Text',\r
+               bgColorTitle : 'Warna Latarbelakang',\r
+               auto : 'Otomatik',\r
+               more : 'Warna lain-lain...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/nb.js b/_source/lang/nb.js
new file mode 100644 (file)
index 0000000..700a00d
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Norwegian Bokmål language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['nb'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Kilde',\r
+       newPage                 : 'Ny Side',\r
+       save                    : 'Lagre',\r
+       preview                 : 'Forhåndsvis',\r
+       cut                             : 'Klipp ut',\r
+       copy                    : 'Kopier',\r
+       paste                   : 'Lim inn',\r
+       print                   : 'Skriv ut',\r
+       underline               : 'Understrek',\r
+       bold                    : 'Fet',\r
+       italic                  : 'Kursiv',\r
+       selectAll               : 'Merk alt',\r
+       removeFormat    : 'Fjern format',\r
+       strike                  : 'Gjennomstrek',\r
+       subscript               : 'Senket skrift',\r
+       superscript             : 'Hevet skrift',\r
+       horizontalrule  : 'Sett inn horisontal linje',\r
+       pagebreak               : 'Sett inn sideskift',\r
+       unlink                  : 'Fjern lenke',\r
+       undo                    : 'Angre',\r
+       redo                    : 'Gjør om',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Bla igjennom server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokoll',\r
+               upload                  : 'Last opp',\r
+               uploadSubmit    : 'Send det til serveren',\r
+               image                   : 'Bilde',\r
+               flash                   : 'Flash',\r
+               form                    : 'Skjema',\r
+               checkbox                : 'Avmerkingsboks',\r
+               radio           : 'Alternativknapp',\r
+               textField               : 'Tekstboks',\r
+               textarea                : 'Tekstområde',\r
+               hiddenField             : 'Skjult felt',\r
+               button                  : 'Knapp',\r
+               select  : 'Rullegardinliste',\r
+               imageButton             : 'Bildeknapp',\r
+               notSet                  : '<ikke satt>',\r
+               id                              : 'Id',\r
+               name                    : 'Navn',\r
+               langDir                 : 'Språkretning',\r
+               langDirLtr              : 'Venstre til høyre (VTH)',\r
+               langDirRtl              : 'Høyre til venstre (HTV)',\r
+               langCode                : 'Språkkode',\r
+               longDescr               : 'Utvidet beskrivelse',\r
+               cssClass                : 'Stilarkklasser',\r
+               advisoryTitle   : 'Tittel',\r
+               cssStyle                : 'Stil',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Avbryt',\r
+               generalTab              : 'Generelt',\r
+               advancedTab             : 'Avansert',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Sett inn spesielt tegn',\r
+               title           : 'Velg spesielt tegn'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Sett inn/Rediger lenke',\r
+               menu            : 'Rediger lenke',\r
+               title           : 'Lenke',\r
+               info            : 'Lenkeinfo',\r
+               target          : 'Mål',\r
+               upload          : 'Last opp',\r
+               advanced        : 'Avansert',\r
+               type            : 'Lenketype',\r
+               toAnchor        : 'Lenke til anker i teksten',\r
+               toEmail         : 'E-post',\r
+               target          : 'Mål',\r
+               targetNotSet    : '<ikke satt>',\r
+               targetFrame     : '<ramme>',\r
+               targetPopup     : '<popup vindu>',\r
+               targetNew       : 'Nytt vindu (_blank)',\r
+               targetTop       : 'Hele vindu (_top)',\r
+               targetSelf      : 'Samme vindu (_self)',\r
+               targetParent    : 'Foreldrevindu (_parent)',\r
+               targetFrameName : 'Målramme',\r
+               targetPopupName : 'Navn på popup-vindus',\r
+               popupFeatures   : 'Egenskaper for popup-vindu',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Statuslinje',\r
+               popupLocationBar        : 'Adresselinje',\r
+               popupToolbar    : 'Verktøylinje',\r
+               popupMenuBar    : 'Menylinje',\r
+               popupFullScreen : 'Full skjerm (IE)',\r
+               popupScrollBars : 'Scrollbar',\r
+               popupDependent  : 'Avhenging (Netscape)',\r
+               popupWidth              : 'Bredde',\r
+               popupLeft               : 'Venstre posisjon',\r
+               popupHeight             : 'Høyde',\r
+               popupTop                : 'Topp-posisjon',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Språkretning',\r
+               langDirNotSet   : '<ikke satt>',\r
+               langDirLTR              : 'Venstre til høyre (VTH)',\r
+               langDirRTL              : 'Høyre til venstre (HTV)',\r
+               acccessKey              : 'Aksessknapp',\r
+               name                    : 'Navn',\r
+               langCode                : 'Språkretning',\r
+               tabIndex                : 'Tab Indeks',\r
+               advisoryTitle   : 'Tittel',\r
+               advisoryContentType     : 'Type',\r
+               cssClasses              : 'Stilarkklasser',\r
+               charset                 : 'Lenket språkkart',\r
+               styles                  : 'Stil',\r
+               selectAnchor    : 'Velg et anker',\r
+               anchorName              : 'Anker etter navn',\r
+               anchorId                : 'Element etter ID',\r
+               emailAddress    : 'E-postadresse',\r
+               emailSubject    : 'Meldingsemne',\r
+               emailBody               : 'Melding',\r
+               noAnchors               : '(Ingen anker i dokumentet)',\r
+               noUrl                   : 'Vennligst skriv inn lenkens url',\r
+               noEmail                 : 'Vennligst skriv inn e-postadressen'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Sett inn/Rediger anker',\r
+               menu            : 'Egenskaper for anker',\r
+               title           : 'Egenskaper for anker',\r
+               name            : 'Ankernavn',\r
+               errorName       : 'Vennligst skriv inn ankernavnet'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Søk og erstatt',\r
+               find                            : 'Søk',\r
+               replace                         : 'Erstatt',\r
+               findWhat                        : 'Søk etter:',\r
+               replaceWith                     : 'Erstatt med:',\r
+               notFoundMsg                     : 'Fant ikke søketeksten.',\r
+               matchCase                       : 'Skill mellom store og små bokstaver',\r
+               matchWord                       : 'Bare hele ord',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Erstatt alle',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabell',\r
+               title           : 'Egenskaper for tabell',\r
+               menu            : 'Egenskaper for tabell',\r
+               deleteTable     : 'Slett tabell',\r
+               rows            : 'Rader',\r
+               columns         : 'Kolonner',\r
+               border          : 'Rammestørrelse',\r
+               align           : 'Justering',\r
+               alignNotSet     : '<Ikke satt>',\r
+               alignLeft       : 'Venstre',\r
+               alignCenter     : 'Midtjuster',\r
+               alignRight      : 'Høyre',\r
+               width           : 'Bredde',\r
+               widthPx         : 'piksler',\r
+               widthPc         : 'prosent',\r
+               height          : 'Høyde',\r
+               cellSpace       : 'Cellemarg',\r
+               cellPad         : 'Cellepolstring',\r
+               caption         : 'Tittel',\r
+               summary         : 'Sammendrag',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Celle',\r
+                       insertBefore    : 'Sett inn celle før',\r
+                       insertAfter             : 'Sett inn celle etter',\r
+                       deleteCell              : 'Slett celler',\r
+                       merge                   : 'Slå sammen celler',\r
+                       mergeRight              : 'Slå sammen høyre',\r
+                       mergeDown               : 'Slå sammen ned',\r
+                       splitHorizontal : 'Del celle horisontalt',\r
+                       splitVertical   : 'Del celle vertikalt',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Rader',\r
+                       insertBefore    : 'Sett inn rad før',\r
+                       insertAfter             : 'Sett inn rad etter',\r
+                       deleteRow               : 'Slett rader'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Kolonne',\r
+                       insertBefore    : 'Sett inn kolonne før',\r
+                       insertAfter             : 'Sett inn kolonne etter',\r
+                       deleteColumn    : 'Slett kolonner'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Egenskaper for knapp',\r
+               text            : 'Tekst (verdi)',\r
+               type            : 'Type',\r
+               typeBtn         : 'Knapp',\r
+               typeSbm         : 'Send',\r
+               typeRst         : 'Nullstill'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Egenskaper for avmerkingsboks',\r
+               radioTitle      : 'Egenskaper for alternativknapp',\r
+               value           : 'Verdi',\r
+               selected        : 'Valgt'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Egenskaper for skjema',\r
+               menu            : 'Egenskaper for skjema',\r
+               action          : 'Handling',\r
+               method          : 'Metode',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Mål',\r
+               targetNotSet    : '<ikke satt>',\r
+               targetNew       : 'Nytt vindu (_blank)',\r
+               targetTop       : 'Hele vindu (_top)',\r
+               targetSelf      : 'Samme vindu (_self)',\r
+               targetParent    : 'Foreldrevindu (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Egenskaper for rullegardinliste',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Tilgjenglige alternativer',\r
+               value           : 'Verdi',\r
+               size            : 'Størrelse',\r
+               lines           : 'Linjer',\r
+               chkMulti        : 'Tillat flervalg',\r
+               opText          : 'Tekst',\r
+               opValue         : 'Verdi',\r
+               btnAdd          : 'Legg til',\r
+               btnModify       : 'Endre',\r
+               btnUp           : 'Opp',\r
+               btnDown         : 'Ned',\r
+               btnSetValue : 'Sett som valgt',\r
+               btnDelete       : 'Slett'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Egenskaper for tekstområde',\r
+               cols            : 'Kolonner',\r
+               rows            : 'Rader'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Egenskaper for tekstfelt',\r
+               name            : 'Navn',\r
+               value           : 'Verdi',\r
+               charWidth       : 'Tegnbredde',\r
+               maxChars        : 'Maks antall tegn',\r
+               type            : 'Type',\r
+               typeText        : 'Tekst',\r
+               typePass        : 'Passord'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Egenskaper for skjult felt',\r
+               name    : 'Navn',\r
+               value   : 'Verdi'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Bildeegenskaper',\r
+               titleButton     : 'Egenskaper for bildeknapp',\r
+               menu            : 'Bildeegenskaper',\r
+               infoTab : 'Bildeinformasjon',\r
+               btnUpload       : 'Send det til serveren',\r
+               url             : 'URL',\r
+               upload  : 'Last opp',\r
+               alt             : 'Alternativ tekst',\r
+               width           : 'Bredde',\r
+               height  : 'Høyde',\r
+               lockRatio       : 'Lås forhold',\r
+               resetSize       : 'Tilbakestill størrelse',\r
+               border  : 'Ramme',\r
+               hSpace  : 'HMarg',\r
+               vSpace  : 'VMarg',\r
+               align           : 'Juster',\r
+               alignLeft       : 'Venstre',\r
+               alignAbsBottom: 'Abs bunn',\r
+               alignAbsMiddle: 'Abs midten',\r
+               alignBaseline   : 'Bunnlinje',\r
+               alignBottom     : 'Bunn',\r
+               alignMiddle     : 'Midten',\r
+               alignRight      : 'Høyre',\r
+               alignTextTop    : 'Tekst topp',\r
+               alignTop        : 'Topp',\r
+               preview : 'Forhåndsvis',\r
+               alertUrl        : 'Vennligst skriv bilde-urlen',\r
+               linkTab : 'Lenke',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Egenskaper for Flash-objekt',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash-egenskaper',\r
+               chkPlay         : 'Autospill',\r
+               chkLoop         : 'Loop',\r
+               chkMenu         : 'Slå på Flash-meny',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Skaler',\r
+               scaleAll                : 'Vis alt',\r
+               scaleNoBorder   : 'Ingen ramme',\r
+               scaleFit                : 'Skaler til å passe',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Juster',\r
+               alignLeft       : 'Venstre',\r
+               alignAbsBottom: 'Abs bunn',\r
+               alignAbsMiddle: 'Abs midten',\r
+               alignBaseline   : 'Bunnlinje',\r
+               alignBottom     : 'Bunn',\r
+               alignMiddle     : 'Midten',\r
+               alignRight      : 'Høyre',\r
+               alignTextTop    : 'Tekst topp',\r
+               alignTop        : 'Topp',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Bakgrunnsfarge',\r
+               width   : 'Bredde',\r
+               height  : 'Høyde',\r
+               hSpace  : 'HMarg',\r
+               vSpace  : 'VMarg',\r
+               validateSrc : 'Vennligst skriv inn lenkens url',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Stavekontroll',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Ikke i ordboken',\r
+               changeTo                : 'Endre til',\r
+               btnIgnore               : 'Ignorer',\r
+               btnIgnoreAll    : 'Ignorer alle',\r
+               btnReplace              : 'Erstatt',\r
+               btnReplaceAll   : 'Erstatt alle',\r
+               btnUndo                 : 'Angre',\r
+               noSuggestions   : '- Ingen forslag -',\r
+               progress                : 'Stavekontroll pågår...',\r
+               noMispell               : 'Stavekontroll fullført: ingen feilstavinger funnet',\r
+               noChanges               : 'Stavekontroll fullført: ingen ord endret',\r
+               oneChange               : 'Stavekontroll fullført: Ett ord endret',\r
+               manyChanges             : 'Stavekontroll fullført: %1 ord endret',\r
+               ieSpellDownload : 'Stavekontroll er ikke installert. Vil du laste den ned nå?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smil',\r
+               title   : 'Sett inn smil'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Nummerert liste',\r
+       bulletedlist : 'Uordnet liste',\r
+       indent : 'Øk nivå',\r
+       outdent : 'Senk nivå',\r
+\r
+       justify :\r
+       {\r
+               left : 'Venstrejuster',\r
+               center : 'Midtjuster',\r
+               right : 'Høyrejuster',\r
+               block : 'Blokkjuster'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Lim inn',\r
+               cutError        : 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl+X).',\r
+               copyError       : 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl+C).',\r
+               pasteMsg        : 'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må lime det igjen i dette vinduet.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Lim inn fra Word',\r
+               title : 'Lim inn fra Word',\r
+               advice : 'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Fjern skrifttyper',\r
+               removeStyle : 'Fjern stildefinisjoner'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Lim inn som ren tekst',\r
+               title : 'Lim inn som ren tekst'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Maler',\r
+               title : 'Innholdsmaler',\r
+               insertOption: 'Erstatt faktisk innold',\r
+               selectPromptMsg: 'Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):',\r
+               emptyListMsg : '(Ingen maler definert)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stil',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Format',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatert',\r
+               tag_address : 'Adresse',\r
+               tag_h1 : 'Tittel 1',\r
+               tag_h2 : 'Tittel 2',\r
+               tag_h3 : 'Tittel 3',\r
+               tag_h4 : 'Tittel 4',\r
+               tag_h5 : 'Tittel 5',\r
+               tag_h6 : 'Tittel 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Skrift',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Skrift',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Størrelse',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Størrelse',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Tekstfarge',\r
+               bgColorTitle : 'Bakgrunnsfarge',\r
+               auto : 'Automatisk',\r
+               more : 'Flere farger...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/nl.js b/_source/lang/nl.js
new file mode 100644 (file)
index 0000000..7bce6c0
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Dutch language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['nl'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Code',\r
+       newPage                 : 'Nieuwe pagina',\r
+       save                    : 'Opslaan',\r
+       preview                 : 'Voorbeeld',\r
+       cut                             : 'Knippen',\r
+       copy                    : 'Kopiëren',\r
+       paste                   : 'Plakken',\r
+       print                   : 'Printen',\r
+       underline               : 'Onderstreept',\r
+       bold                    : 'Vet',\r
+       italic                  : 'Schuingedrukt',\r
+       selectAll               : 'Alles selecteren',\r
+       removeFormat    : 'Opmaak verwijderen',\r
+       strike                  : 'Doorhalen',\r
+       subscript               : 'Subscript',\r
+       superscript             : 'Superscript',\r
+       horizontalrule  : 'Horizontale lijn invoegen',\r
+       pagebreak               : 'Pagina-einde invoegen',\r
+       unlink                  : 'Link verwijderen',\r
+       undo                    : 'Ongedaan maken',\r
+       redo                    : 'Opnieuw uitvoeren',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Bladeren op server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocol',\r
+               upload                  : 'Upload',\r
+               uploadSubmit    : 'Naar server verzenden',\r
+               image                   : 'Afbeelding',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formulier',\r
+               checkbox                : 'Aanvinkvakje',\r
+               radio           : 'Selectievakje',\r
+               textField               : 'Tekstveld',\r
+               textarea                : 'Tekstvak',\r
+               hiddenField             : 'Verborgen veld',\r
+               button                  : 'Knop',\r
+               select  : 'Selectieveld',\r
+               imageButton             : 'Afbeeldingsknop',\r
+               notSet                  : '<niet ingevuld>',\r
+               id                              : 'Kenmerk',\r
+               name                    : 'Naam',\r
+               langDir                 : 'Schrijfrichting',\r
+               langDirLtr              : 'Links naar rechts (LTR)',\r
+               langDirRtl              : 'Rechts naar links (RTL)',\r
+               langCode                : 'Taalcode',\r
+               longDescr               : 'Lange URL-omschrijving',\r
+               cssClass                : 'Stylesheet-klassen',\r
+               advisoryTitle   : 'Aanbevolen titel',\r
+               cssStyle                : 'Stijl',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Annuleren',\r
+               generalTab              : 'Algemeen',\r
+               advancedTab             : 'Geavanceerd',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Speciaal teken invoegen',\r
+               title           : 'Selecteer speciaal teken'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Link invoegen/wijzigen',\r
+               menu            : 'Link wijzigen',\r
+               title           : 'Link',\r
+               info            : 'Linkomschrijving',\r
+               target          : 'Doel',\r
+               upload          : 'Upload',\r
+               advanced        : 'Geavanceerd',\r
+               type            : 'Linktype',\r
+               toAnchor        : 'Interne link in pagina',\r
+               toEmail         : 'E-mail',\r
+               target          : 'Doel',\r
+               targetNotSet    : '<niet ingevuld>',\r
+               targetFrame     : '<frame>',\r
+               targetPopup     : '<popup window>',\r
+               targetNew       : 'Nieuw venster (_blank)',\r
+               targetTop       : 'Hele venster (_top)',\r
+               targetSelf      : 'Zelfde venster (_self)',\r
+               targetParent    : 'Origineel venster (_parent)',\r
+               targetFrameName : 'Naam doelframe',\r
+               targetPopupName : 'Naam popupvenster',\r
+               popupFeatures   : 'Instellingen popupvenster',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Statusbalk',\r
+               popupLocationBar        : 'Locatiemenu',\r
+               popupToolbar    : 'Menubalk',\r
+               popupMenuBar    : 'Menubalk',\r
+               popupFullScreen : 'Volledig scherm (IE)',\r
+               popupScrollBars : 'Schuifbalken',\r
+               popupDependent  : 'Afhankelijk (Netscape)',\r
+               popupWidth              : 'Breedte',\r
+               popupLeft               : 'Positie links',\r
+               popupHeight             : 'Hoogte',\r
+               popupTop                : 'Positie boven',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Schrijfrichting',\r
+               langDirNotSet   : '<niet ingevuld>',\r
+               langDirLTR              : 'Links naar rechts (LTR)',\r
+               langDirRTL              : 'Rechts naar links (RTL)',\r
+               acccessKey              : 'Toegangstoets',\r
+               name                    : 'Naam',\r
+               langCode                : 'Schrijfrichting',\r
+               tabIndex                : 'Tabvolgorde',\r
+               advisoryTitle   : 'Aanbevolen titel',\r
+               advisoryContentType     : 'Aanbevolen content-type',\r
+               cssClasses              : 'Stylesheet-klassen',\r
+               charset                 : 'Karakterset van gelinkte bron',\r
+               styles                  : 'Stijl',\r
+               selectAnchor    : 'Kies een interne link',\r
+               anchorName              : 'Op naam interne link',\r
+               anchorId                : 'Op kenmerk interne link',\r
+               emailAddress    : 'E-mailadres',\r
+               emailSubject    : 'Onderwerp bericht',\r
+               emailBody               : 'Inhoud bericht',\r
+               noAnchors               : '(Geen interne links in document gevonden)',\r
+               noUrl                   : 'Geef de link van de URL',\r
+               noEmail                 : 'Geef een e-mailadres'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Interne link',\r
+               menu            : 'Eigenschappen interne link',\r
+               title           : 'Eigenschappen interne link',\r
+               name            : 'Naam interne link',\r
+               errorName       : 'Geef de naam van de interne link op'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Zoeken en vervangen',\r
+               find                            : 'Zoeken',\r
+               replace                         : 'Vervangen',\r
+               findWhat                        : 'Zoeken naar:',\r
+               replaceWith                     : 'Vervangen met:',\r
+               notFoundMsg                     : 'De opgegeven tekst is niet gevonden.',\r
+               matchCase                       : 'Hoofdlettergevoelig',\r
+               matchWord                       : 'Hele woord moet voorkomen',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Alles vervangen',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabel',\r
+               title           : 'Eigenschappen tabel',\r
+               menu            : 'Eigenschappen tabel',\r
+               deleteTable     : 'Tabel verwijderen',\r
+               rows            : 'Rijen',\r
+               columns         : 'Kolommen',\r
+               border          : 'Breedte rand',\r
+               align           : 'Uitlijning',\r
+               alignNotSet     : '<Niet ingevoerd>',\r
+               alignLeft       : 'Links',\r
+               alignCenter     : 'Centreren',\r
+               alignRight      : 'Rechts',\r
+               width           : 'Breedte',\r
+               widthPx         : 'pixels',\r
+               widthPc         : 'procent',\r
+               height          : 'Hoogte',\r
+               cellSpace       : 'Afstand tussen cellen',\r
+               cellPad         : 'Afstand vanaf rand cel',\r
+               caption         : 'Naam',\r
+               summary         : 'Samenvatting',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cel',\r
+                       insertBefore    : 'Voeg cel in voor',\r
+                       insertAfter             : 'Voeg cel in achter',\r
+                       deleteCell              : 'Cellen verwijderen',\r
+                       merge                   : 'Cellen samenvoegen',\r
+                       mergeRight              : 'Voeg samen naar rechts',\r
+                       mergeDown               : 'Voeg samen naar beneden',\r
+                       splitHorizontal : 'Splits cellen horizontaal',\r
+                       splitVertical   : 'Splits cellen verticaal',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Rij',\r
+                       insertBefore    : 'Voeg rij in voor',\r
+                       insertAfter             : 'Voeg rij in achter',\r
+                       deleteRow               : 'Rijen verwijderen'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Kolom',\r
+                       insertBefore    : 'Voeg kolom in voor',\r
+                       insertAfter             : 'Voeg kolom in achter',\r
+                       deleteColumn    : 'Kolommen verwijderen'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Eigenschappen knop',\r
+               text            : 'Tekst (waarde)',\r
+               type            : 'Soort',\r
+               typeBtn         : 'Knop',\r
+               typeSbm         : 'Versturen',\r
+               typeRst         : 'Leegmaken'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Eigenschappen aanvinkvakje',\r
+               radioTitle      : 'Eigenschappen selectievakje',\r
+               value           : 'Waarde',\r
+               selected        : 'Geselecteerd'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Eigenschappen formulier',\r
+               menu            : 'Eigenschappen formulier',\r
+               action          : 'Actie',\r
+               method          : 'Methode',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Doel',\r
+               targetNotSet    : '<niet ingevuld>',\r
+               targetNew       : 'Nieuw venster (_blank)',\r
+               targetTop       : 'Hele venster (_top)',\r
+               targetSelf      : 'Zelfde venster (_self)',\r
+               targetParent    : 'Origineel venster (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Eigenschappen selectieveld',\r
+               selectInfo      : 'Informatie',\r
+               opAvail         : 'Beschikbare opties',\r
+               value           : 'Waarde',\r
+               size            : 'Grootte',\r
+               lines           : 'Regels',\r
+               chkMulti        : 'Gecombineerde selecties toestaan',\r
+               opText          : 'Tekst',\r
+               opValue         : 'Waarde',\r
+               btnAdd          : 'Toevoegen',\r
+               btnModify       : 'Wijzigen',\r
+               btnUp           : 'Omhoog',\r
+               btnDown         : 'Omlaag',\r
+               btnSetValue : 'Als geselecteerde waarde instellen',\r
+               btnDelete       : 'Verwijderen'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Eigenschappen tekstvak',\r
+               cols            : 'Kolommen',\r
+               rows            : 'Rijen'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Eigenschappen tekstveld',\r
+               name            : 'Naam',\r
+               value           : 'Waarde',\r
+               charWidth       : 'Breedte (tekens)',\r
+               maxChars        : 'Maximum aantal tekens',\r
+               type            : 'Soort',\r
+               typeText        : 'Tekst',\r
+               typePass        : 'Wachtwoord'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Eigenschappen verborgen veld',\r
+               name    : 'Naam',\r
+               value   : 'Waarde'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Eigenschappen afbeelding',\r
+               titleButton     : 'Eigenschappen afbeeldingsknop',\r
+               menu            : 'Eigenschappen afbeelding',\r
+               infoTab : 'Informatie afbeelding',\r
+               btnUpload       : 'Naar server verzenden',\r
+               url             : 'URL',\r
+               upload  : 'Upload',\r
+               alt             : 'Alternatieve tekst',\r
+               width           : 'Breedte',\r
+               height  : 'Hoogte',\r
+               lockRatio       : 'Afmetingen vergrendelen',\r
+               resetSize       : 'Afmetingen resetten',\r
+               border  : 'Rand',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Uitlijning',\r
+               alignLeft       : 'Links',\r
+               alignAbsBottom: 'Absoluut-onder',\r
+               alignAbsMiddle: 'Absoluut-midden',\r
+               alignBaseline   : 'Basislijn',\r
+               alignBottom     : 'Beneden',\r
+               alignMiddle     : 'Midden',\r
+               alignRight      : 'Rechts',\r
+               alignTextTop    : 'Boven tekst',\r
+               alignTop        : 'Boven',\r
+               preview : 'Voorbeeld',\r
+               alertUrl        : 'Geef de URL van de afbeelding',\r
+               linkTab : 'Link',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Eigenschappen Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Eigenschappen Flash',\r
+               chkPlay         : 'Automatisch afspelen',\r
+               chkLoop         : 'Herhalen',\r
+               chkMenu         : 'Flashmenu\'s inschakelen',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Schaal',\r
+               scaleAll                : 'Alles tonen',\r
+               scaleNoBorder   : 'Geen rand',\r
+               scaleFit                : 'Precies passend',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Uitlijning',\r
+               alignLeft       : 'Links',\r
+               alignAbsBottom: 'Absoluut-onder',\r
+               alignAbsMiddle: 'Absoluut-midden',\r
+               alignBaseline   : 'Basislijn',\r
+               alignBottom     : 'Beneden',\r
+               alignMiddle     : 'Midden',\r
+               alignRight      : 'Rechts',\r
+               alignTextTop    : 'Boven tekst',\r
+               alignTop        : 'Boven',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Achtergrondkleur',\r
+               width   : 'Breedte',\r
+               height  : 'Hoogte',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'Geef de link van de URL',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Spellingscontrole',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Niet in het woordenboek',\r
+               changeTo                : 'Wijzig in',\r
+               btnIgnore               : 'Negeren',\r
+               btnIgnoreAll    : 'Alles negeren',\r
+               btnReplace              : 'Vervangen',\r
+               btnReplaceAll   : 'Alles vervangen',\r
+               btnUndo                 : 'Ongedaan maken',\r
+               noSuggestions   : '-Geen suggesties-',\r
+               progress                : 'Bezig met spellingscontrole...',\r
+               noMispell               : 'Klaar met spellingscontrole: geen fouten gevonden',\r
+               noChanges               : 'Klaar met spellingscontrole: geen woorden aangepast',\r
+               oneChange               : 'Klaar met spellingscontrole: één woord aangepast',\r
+               manyChanges             : 'Klaar met spellingscontrole: %1 woorden aangepast',\r
+               ieSpellDownload : 'De spellingscontrole niet geïnstalleerd. Wilt u deze nu downloaden?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Smiley invoegen'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Genummerde lijst',\r
+       bulletedlist : 'Opsomming',\r
+       indent : 'Inspringen vergroten',\r
+       outdent : 'Inspringen verkleinen',\r
+\r
+       justify :\r
+       {\r
+               left : 'Links uitlijnen',\r
+               center : 'Centreren',\r
+               right : 'Rechts uitlijnen',\r
+               block : 'Uitvullen'\r
+       },\r
+\r
+       blockquote : 'Citaatblok',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Plakken',\r
+               cutError        : 'De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl+X van het toetsenbord.',\r
+               copyError       : 'De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl+C van het toetsenbord.',\r
+               pasteMsg        : 'Plak de tekst in het volgende vak gebruik makend van uw toetsenbord (<strong>Ctrl+V</strong>) en klik op <strong>OK</strong>.',\r
+               securityMsg     : 'Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Plakken als Word-gegevens',\r
+               title : 'Plakken als Word-gegevens',\r
+               advice : 'Plak de tekst in het volgende vak gebruik makend van uw toetsenbord (<strong>Ctrl+V</strong>) en klik op <strong>OK</strong>.',\r
+               ignoreFontFace : 'Negeer "Font Face"-definities',\r
+               removeStyle : 'Verwijder "Style"-definities'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Plakken als platte tekst',\r
+               title : 'Plakken als platte tekst'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Sjablonen',\r
+               title : 'Inhoud sjabonen',\r
+               insertOption: 'Vervang de huidige inhoud',\r
+               selectPromptMsg: 'Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):',\r
+               emptyListMsg : '(Geen sjablonen gedefinieerd)'\r
+       },\r
+\r
+       showBlocks : 'Toon blokken',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stijl',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Opmaak',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Opmaak',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normaal',\r
+               tag_pre : 'Met opmaak',\r
+               tag_address : 'Adres',\r
+               tag_h1 : 'Kop 1',\r
+               tag_h2 : 'Kop 2',\r
+               tag_h3 : 'Kop 3',\r
+               tag_h4 : 'Kop 4',\r
+               tag_h5 : 'Kop 5',\r
+               tag_h6 : 'Kop 6',\r
+               tag_div : 'Normaal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Lettertype',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Lettertype',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Grootte',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Grootte',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Tekstkleur',\r
+               bgColorTitle : 'Achtergrondkleur',\r
+               auto : 'Automatisch',\r
+               more : 'Meer kleuren...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/no.js b/_source/lang/no.js
new file mode 100644 (file)
index 0000000..b836d01
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Norwegian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['no'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Kilde',\r
+       newPage                 : 'Ny Side',\r
+       save                    : 'Lagre',\r
+       preview                 : 'Forhåndsvis',\r
+       cut                             : 'Klipp ut',\r
+       copy                    : 'Kopier',\r
+       paste                   : 'Lim inn',\r
+       print                   : 'Skriv ut',\r
+       underline               : 'Understrek',\r
+       bold                    : 'Fet',\r
+       italic                  : 'Kursiv',\r
+       selectAll               : 'Merk alt',\r
+       removeFormat    : 'Fjern format',\r
+       strike                  : 'Gjennomstrek',\r
+       subscript               : 'Senket skrift',\r
+       superscript             : 'Hevet skrift',\r
+       horizontalrule  : 'Sett inn horisontal linje',\r
+       pagebreak               : 'Sett inn sideskift',\r
+       unlink                  : 'Fjern lenke',\r
+       undo                    : 'Angre',\r
+       redo                    : 'Gjør om',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Bla igjennom server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokoll',\r
+               upload                  : 'Last opp',\r
+               uploadSubmit    : 'Send det til serveren',\r
+               image                   : 'Bilde',\r
+               flash                   : 'Flash',\r
+               form                    : 'Skjema',\r
+               checkbox                : 'Avmerkingsboks',\r
+               radio           : 'Alternativknapp',\r
+               textField               : 'Tekstboks',\r
+               textarea                : 'Tekstområde',\r
+               hiddenField             : 'Skjult felt',\r
+               button                  : 'Knapp',\r
+               select  : 'Rullegardinliste',\r
+               imageButton             : 'Bildeknapp',\r
+               notSet                  : '<ikke satt>',\r
+               id                              : 'Id',\r
+               name                    : 'Navn',\r
+               langDir                 : 'Språkretning',\r
+               langDirLtr              : 'Venstre til høyre (VTH)',\r
+               langDirRtl              : 'Høyre til venstre (HTV)',\r
+               langCode                : 'Språkkode',\r
+               longDescr               : 'Utvidet beskrivelse',\r
+               cssClass                : 'Stilarkklasser',\r
+               advisoryTitle   : 'Tittel',\r
+               cssStyle                : 'Stil',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Avbryt',\r
+               generalTab              : 'Generelt',\r
+               advancedTab             : 'Avansert',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Sett inn spesielt tegn',\r
+               title           : 'Velg spesielt tegn'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Sett inn/Rediger lenke',\r
+               menu            : 'Rediger lenke',\r
+               title           : 'Lenke',\r
+               info            : 'Lenkeinfo',\r
+               target          : 'Mål',\r
+               upload          : 'Last opp',\r
+               advanced        : 'Avansert',\r
+               type            : 'Lenketype',\r
+               toAnchor        : 'Lenke til anker i teksten',\r
+               toEmail         : 'E-post',\r
+               target          : 'Mål',\r
+               targetNotSet    : '<ikke satt>',\r
+               targetFrame     : '<ramme>',\r
+               targetPopup     : '<popup vindu>',\r
+               targetNew       : 'Nytt vindu (_blank)',\r
+               targetTop       : 'Hele vindu (_top)',\r
+               targetSelf      : 'Samme vindu (_self)',\r
+               targetParent    : 'Foreldrevindu (_parent)',\r
+               targetFrameName : 'Målramme',\r
+               targetPopupName : 'Navn på popup-vindus',\r
+               popupFeatures   : 'Egenskaper for popup-vindu',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Statuslinje',\r
+               popupLocationBar        : 'Adresselinje',\r
+               popupToolbar    : 'Verktøylinje',\r
+               popupMenuBar    : 'Menylinje',\r
+               popupFullScreen : 'Full skjerm (IE)',\r
+               popupScrollBars : 'Scrollbar',\r
+               popupDependent  : 'Avhenging (Netscape)',\r
+               popupWidth              : 'Bredde',\r
+               popupLeft               : 'Venstre posisjon',\r
+               popupHeight             : 'Høyde',\r
+               popupTop                : 'Topp-posisjon',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Språkretning',\r
+               langDirNotSet   : '<ikke satt>',\r
+               langDirLTR              : 'Venstre til høyre (VTH)',\r
+               langDirRTL              : 'Høyre til venstre (HTV)',\r
+               acccessKey              : 'Aksessknapp',\r
+               name                    : 'Navn',\r
+               langCode                : 'Språkretning',\r
+               tabIndex                : 'Tab Indeks',\r
+               advisoryTitle   : 'Tittel',\r
+               advisoryContentType     : 'Type',\r
+               cssClasses              : 'Stilarkklasser',\r
+               charset                 : 'Lenket språkkart',\r
+               styles                  : 'Stil',\r
+               selectAnchor    : 'Velg et anker',\r
+               anchorName              : 'Anker etter navn',\r
+               anchorId                : 'Element etter ID',\r
+               emailAddress    : 'E-postadresse',\r
+               emailSubject    : 'Meldingsemne',\r
+               emailBody               : 'Melding',\r
+               noAnchors               : '(Ingen anker i dokumentet)',\r
+               noUrl                   : 'Vennligst skriv inn lenkens url',\r
+               noEmail                 : 'Vennligst skriv inn e-postadressen'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Sett inn/Rediger anker',\r
+               menu            : 'Egenskaper for anker',\r
+               title           : 'Egenskaper for anker',\r
+               name            : 'Ankernavn',\r
+               errorName       : 'Vennligst skriv inn ankernavnet'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Søk og erstatt',\r
+               find                            : 'Søk',\r
+               replace                         : 'Erstatt',\r
+               findWhat                        : 'Søk etter:',\r
+               replaceWith                     : 'Erstatt med:',\r
+               notFoundMsg                     : 'Fant ikke søketeksten.',\r
+               matchCase                       : 'Skill mellom store og små bokstaver',\r
+               matchWord                       : 'Bare hele ord',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Erstatt alle',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabell',\r
+               title           : 'Egenskaper for tabell',\r
+               menu            : 'Egenskaper for tabell',\r
+               deleteTable     : 'Slett tabell',\r
+               rows            : 'Rader',\r
+               columns         : 'Kolonner',\r
+               border          : 'Rammestørrelse',\r
+               align           : 'Justering',\r
+               alignNotSet     : '<Ikke satt>',\r
+               alignLeft       : 'Venstre',\r
+               alignCenter     : 'Midtjuster',\r
+               alignRight      : 'Høyre',\r
+               width           : 'Bredde',\r
+               widthPx         : 'piksler',\r
+               widthPc         : 'prosent',\r
+               height          : 'Høyde',\r
+               cellSpace       : 'Cellemarg',\r
+               cellPad         : 'Cellepolstring',\r
+               caption         : 'Tittel',\r
+               summary         : 'Sammendrag',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Celle',\r
+                       insertBefore    : 'Sett inn celle før',\r
+                       insertAfter             : 'Sett inn celle etter',\r
+                       deleteCell              : 'Slett celler',\r
+                       merge                   : 'Slå sammen celler',\r
+                       mergeRight              : 'Slå sammen høyre',\r
+                       mergeDown               : 'Slå sammen ned',\r
+                       splitHorizontal : 'Del celle horisontalt',\r
+                       splitVertical   : 'Del celle vertikalt',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Rader',\r
+                       insertBefore    : 'Sett inn rad før',\r
+                       insertAfter             : 'Sett inn rad etter',\r
+                       deleteRow               : 'Slett rader'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Kolonne',\r
+                       insertBefore    : 'Sett inn kolonne før',\r
+                       insertAfter             : 'Sett inn kolonne etter',\r
+                       deleteColumn    : 'Slett kolonner'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Egenskaper for knapp',\r
+               text            : 'Tekst (verdi)',\r
+               type            : 'Type',\r
+               typeBtn         : 'Knapp',\r
+               typeSbm         : 'Send',\r
+               typeRst         : 'Nullstill'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Egenskaper for avmerkingsboks',\r
+               radioTitle      : 'Egenskaper for alternativknapp',\r
+               value           : 'Verdi',\r
+               selected        : 'Valgt'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Egenskaper for skjema',\r
+               menu            : 'Egenskaper for skjema',\r
+               action          : 'Handling',\r
+               method          : 'Metode',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Mål',\r
+               targetNotSet    : '<ikke satt>',\r
+               targetNew       : 'Nytt vindu (_blank)',\r
+               targetTop       : 'Hele vindu (_top)',\r
+               targetSelf      : 'Samme vindu (_self)',\r
+               targetParent    : 'Foreldrevindu (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Egenskaper for rullegardinliste',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Tilgjenglige alternativer',\r
+               value           : 'Verdi',\r
+               size            : 'Størrelse',\r
+               lines           : 'Linjer',\r
+               chkMulti        : 'Tillat flervalg',\r
+               opText          : 'Tekst',\r
+               opValue         : 'Verdi',\r
+               btnAdd          : 'Legg til',\r
+               btnModify       : 'Endre',\r
+               btnUp           : 'Opp',\r
+               btnDown         : 'Ned',\r
+               btnSetValue : 'Sett som valgt',\r
+               btnDelete       : 'Slett'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Egenskaper for tekstområde',\r
+               cols            : 'Kolonner',\r
+               rows            : 'Rader'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Egenskaper for tekstfelt',\r
+               name            : 'Navn',\r
+               value           : 'Verdi',\r
+               charWidth       : 'Tegnbredde',\r
+               maxChars        : 'Maks antall tegn',\r
+               type            : 'Type',\r
+               typeText        : 'Tekst',\r
+               typePass        : 'Passord'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Egenskaper for skjult felt',\r
+               name    : 'Navn',\r
+               value   : 'Verdi'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Bildeegenskaper',\r
+               titleButton     : 'Egenskaper for bildeknapp',\r
+               menu            : 'Bildeegenskaper',\r
+               infoTab : 'Bildeinformasjon',\r
+               btnUpload       : 'Send det til serveren',\r
+               url             : 'URL',\r
+               upload  : 'Last opp',\r
+               alt             : 'Alternativ tekst',\r
+               width           : 'Bredde',\r
+               height  : 'Høyde',\r
+               lockRatio       : 'Lås forhold',\r
+               resetSize       : 'Tilbakestill størrelse',\r
+               border  : 'Ramme',\r
+               hSpace  : 'HMarg',\r
+               vSpace  : 'VMarg',\r
+               align           : 'Juster',\r
+               alignLeft       : 'Venstre',\r
+               alignAbsBottom: 'Abs bunn',\r
+               alignAbsMiddle: 'Abs midten',\r
+               alignBaseline   : 'Bunnlinje',\r
+               alignBottom     : 'Bunn',\r
+               alignMiddle     : 'Midten',\r
+               alignRight      : 'Høyre',\r
+               alignTextTop    : 'Tekst topp',\r
+               alignTop        : 'Topp',\r
+               preview : 'Forhåndsvis',\r
+               alertUrl        : 'Vennligst skriv bilde-urlen',\r
+               linkTab : 'Lenke',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Egenskaper for Flash-objekt',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash-egenskaper',\r
+               chkPlay         : 'Autospill',\r
+               chkLoop         : 'Loop',\r
+               chkMenu         : 'Slå på Flash-meny',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Skaler',\r
+               scaleAll                : 'Vis alt',\r
+               scaleNoBorder   : 'Ingen ramme',\r
+               scaleFit                : 'Skaler til å passe',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Juster',\r
+               alignLeft       : 'Venstre',\r
+               alignAbsBottom: 'Abs bunn',\r
+               alignAbsMiddle: 'Abs midten',\r
+               alignBaseline   : 'Bunnlinje',\r
+               alignBottom     : 'Bunn',\r
+               alignMiddle     : 'Midten',\r
+               alignRight      : 'Høyre',\r
+               alignTextTop    : 'Tekst topp',\r
+               alignTop        : 'Topp',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Bakgrunnsfarge',\r
+               width   : 'Bredde',\r
+               height  : 'Høyde',\r
+               hSpace  : 'HMarg',\r
+               vSpace  : 'VMarg',\r
+               validateSrc : 'Vennligst skriv inn lenkens url',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Stavekontroll',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Ikke i ordboken',\r
+               changeTo                : 'Endre til',\r
+               btnIgnore               : 'Ignorer',\r
+               btnIgnoreAll    : 'Ignorer alle',\r
+               btnReplace              : 'Erstatt',\r
+               btnReplaceAll   : 'Erstatt alle',\r
+               btnUndo                 : 'Angre',\r
+               noSuggestions   : '- Ingen forslag -',\r
+               progress                : 'Stavekontroll pågår...',\r
+               noMispell               : 'Stavekontroll fullført: ingen feilstavinger funnet',\r
+               noChanges               : 'Stavekontroll fullført: ingen ord endret',\r
+               oneChange               : 'Stavekontroll fullført: Ett ord endret',\r
+               manyChanges             : 'Stavekontroll fullført: %1 ord endret',\r
+               ieSpellDownload : 'Stavekontroll er ikke installert. Vil du laste den ned nå?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smil',\r
+               title   : 'Sett inn smil'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Nummerert liste',\r
+       bulletedlist : 'Uordnet liste',\r
+       indent : 'Øk nivå',\r
+       outdent : 'Senk nivå',\r
+\r
+       justify :\r
+       {\r
+               left : 'Venstrejuster',\r
+               center : 'Midtjuster',\r
+               right : 'Høyrejuster',\r
+               block : 'Blokkjuster'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Lim inn',\r
+               cutError        : 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl+X).',\r
+               copyError       : 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl+C).',\r
+               pasteMsg        : 'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må lime det igjen i dette vinduet.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Lim inn fra Word',\r
+               title : 'Lim inn fra Word',\r
+               advice : 'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Fjern skrifttyper',\r
+               removeStyle : 'Fjern stildefinisjoner'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Lim inn som ren tekst',\r
+               title : 'Lim inn som ren tekst'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Maler',\r
+               title : 'Innholdsmaler',\r
+               insertOption: 'Erstatt faktisk innold',\r
+               selectPromptMsg: 'Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):',\r
+               emptyListMsg : '(Ingen maler definert)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stil',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Format',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatert',\r
+               tag_address : 'Adresse',\r
+               tag_h1 : 'Tittel 1',\r
+               tag_h2 : 'Tittel 2',\r
+               tag_h3 : 'Tittel 3',\r
+               tag_h4 : 'Tittel 4',\r
+               tag_h5 : 'Tittel 5',\r
+               tag_h6 : 'Tittel 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Skrift',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Skrift',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Størrelse',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Størrelse',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Tekstfarge',\r
+               bgColorTitle : 'Bakgrunnsfarge',\r
+               auto : 'Automatisk',\r
+               more : 'Flere farger...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/pl.js b/_source/lang/pl.js
new file mode 100644 (file)
index 0000000..48c9fe6
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Polish language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['pl'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Wzbogacony edytor treści, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Źródło dokumentu',\r
+       newPage                 : 'Nowa strona',\r
+       save                    : 'Zapisz',\r
+       preview                 : 'Podgląd',\r
+       cut                             : 'Wytnij',\r
+       copy                    : 'Kopiuj',\r
+       paste                   : 'Wklej',\r
+       print                   : 'Drukuj',\r
+       underline               : 'Podkreślenie',\r
+       bold                    : 'Pogrubienie',\r
+       italic                  : 'Kursywa',\r
+       selectAll               : 'Zaznacz wszystko',\r
+       removeFormat    : 'Usuń formatowanie',\r
+       strike                  : 'Przekreślenie',\r
+       subscript               : 'Indeks dolny',\r
+       superscript             : 'Indeks górny',\r
+       horizontalrule  : 'Wstaw poziomą linię',\r
+       pagebreak               : 'Wstaw odstęp',\r
+       unlink                  : 'Usuń hiperłącze',\r
+       undo                    : 'Cofnij',\r
+       redo                    : 'Ponów',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Przeglądaj',\r
+               url                             : 'Adres URL',\r
+               protocol                : 'Protokół',\r
+               upload                  : 'Wyślij',\r
+               uploadSubmit    : 'Wyślij',\r
+               image                   : 'Obrazek',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formularz',\r
+               checkbox                : 'Pole wyboru (checkbox)',\r
+               radio           : 'Pole wyboru (radio)',\r
+               textField               : 'Pole tekstowe',\r
+               textarea                : 'Obszar tekstowy',\r
+               hiddenField             : 'Pole ukryte',\r
+               button                  : 'Przycisk',\r
+               select  : 'Lista wyboru',\r
+               imageButton             : 'Przycisk-obrazek',\r
+               notSet                  : '<nie ustawione>',\r
+               id                              : 'Id',\r
+               name                    : 'Nazwa',\r
+               langDir                 : 'Kierunek tekstu',\r
+               langDirLtr              : 'Od lewej do prawej (LTR)',\r
+               langDirRtl              : 'Od prawej do lewej (RTL)',\r
+               langCode                : 'Kod języka',\r
+               longDescr               : 'Długi opis hiperłącza',\r
+               cssClass                : 'Nazwa klasy CSS',\r
+               advisoryTitle   : 'Opis obiektu docelowego',\r
+               cssStyle                : 'Styl',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Anuluj',\r
+               generalTab              : 'Ogólne',\r
+               advancedTab             : 'Zaawansowane',\r
+               validateNumberFailed    : 'Ta wartość nie jest liczbą.',\r
+               confirmNewPage  : 'Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno wczytać nową stronę ?',\r
+               confirmCancel   : 'Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe ?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, niedostępne</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Wstaw znak specjalny',\r
+               title           : 'Wybierz znak specjalny'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Wstaw/edytuj hiperłącze',\r
+               menu            : 'Edytuj hiperłącze',\r
+               title           : 'Hiperłącze',\r
+               info            : 'Informacje ',\r
+               target          : 'Cel',\r
+               upload          : 'Wyślij',\r
+               advanced        : 'Zaawansowane',\r
+               type            : 'Typ hiperłącza',\r
+               toAnchor        : 'Odnośnik wewnątrz strony',\r
+               toEmail         : 'Adres e-mail',\r
+               target          : 'Cel',\r
+               targetNotSet    : '<nie ustawione>',\r
+               targetFrame     : '<ramka>',\r
+               targetPopup     : '<wyskakujące okno>',\r
+               targetNew       : 'Nowe okno (_blank)',\r
+               targetTop       : 'Okno najwyższe w hierarchii (_top)',\r
+               targetSelf      : 'To samo okno (_self)',\r
+               targetParent    : 'Okno nadrzędne (_parent)',\r
+               targetFrameName : 'Nazwa Ramki Docelowej',\r
+               targetPopupName : 'Nazwa wyskakującego okna',\r
+               popupFeatures   : 'Właściwości wyskakującego okna',\r
+               popupResizable  : 'Skalowalny',\r
+               popupStatusBar  : 'Pasek statusu',\r
+               popupLocationBar        : 'Pasek adresu',\r
+               popupToolbar    : 'Pasek narzędzi',\r
+               popupMenuBar    : 'Pasek menu',\r
+               popupFullScreen : 'Pełny ekran (IE)',\r
+               popupScrollBars : 'Paski przewijania',\r
+               popupDependent  : 'Okno zależne (Netscape)',\r
+               popupWidth              : 'Szerokość',\r
+               popupLeft               : 'Pozycja w poziomie',\r
+               popupHeight             : 'Wysokość',\r
+               popupTop                : 'Pozycja w pionie',\r
+               id                              : 'Id',\r
+               langDir                 : 'Kierunek tekstu',\r
+               langDirNotSet   : '<nie ustawione>',\r
+               langDirLTR              : 'Od lewej do prawej (LTR)',\r
+               langDirRTL              : 'Od prawej do lewej (RTL)',\r
+               acccessKey              : 'Klawisz dostępu',\r
+               name                    : 'Nazwa',\r
+               langCode                : 'Kierunek tekstu',\r
+               tabIndex                : 'Indeks tabeli',\r
+               advisoryTitle   : 'Opis obiektu docelowego',\r
+               advisoryContentType     : 'Typ MIME obiektu docelowego',\r
+               cssClasses              : 'Nazwa klasy CSS',\r
+               charset                 : 'Kodowanie znaków obiektu docelowego',\r
+               styles                  : 'Styl',\r
+               selectAnchor    : 'Wybierz etykietę',\r
+               anchorName              : 'Wg etykiety',\r
+               anchorId                : 'Wg identyfikatora elementu',\r
+               emailAddress    : 'Adres e-mail',\r
+               emailSubject    : 'Temat',\r
+               emailBody               : 'Treść',\r
+               noAnchors               : '(W dokumencie nie zdefiniowano żadnych etykiet)',\r
+               noUrl                   : 'Podaj adres URL',\r
+               noEmail                 : 'Podaj adres e-mail'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Wstaw/edytuj kotwicę',\r
+               menu            : 'Właściwości kotwicy',\r
+               title           : 'Właściwości kotwicy',\r
+               name            : 'Nazwa kotwicy',\r
+               errorName       : 'Wpisz nazwę kotwicy'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Znajdź i zamień',\r
+               find                            : 'Znajdź',\r
+               replace                         : 'Zamień',\r
+               findWhat                        : 'Znajdź:',\r
+               replaceWith                     : 'Zastąp przez:',\r
+               notFoundMsg                     : 'Nie znaleziono szukanego hasła.',\r
+               matchCase                       : 'Uwzględnij wielkość liter',\r
+               matchWord                       : 'Całe słowa',\r
+               matchCyclic                     : 'Cykliczne dopasowanie',\r
+               replaceAll                      : 'Zastąp wszystko',\r
+               replaceSuccessMsg       : '%1 wystąpień zastąpionych.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabela',\r
+               title           : 'Właściwości tabeli',\r
+               menu            : 'Właściwości tabeli',\r
+               deleteTable     : 'Usuń tabelę',\r
+               rows            : 'Liczba wierszy',\r
+               columns         : 'Liczba kolumn',\r
+               border          : 'Grubość ramki',\r
+               align           : 'Wyrównanie',\r
+               alignNotSet     : '<brak ustawień>',\r
+               alignLeft       : 'Do lewej',\r
+               alignCenter     : 'Do środka',\r
+               alignRight      : 'Do prawej',\r
+               width           : 'Szerokość',\r
+               widthPx         : 'piksele',\r
+               widthPc         : '%',\r
+               height          : 'Wysokość',\r
+               cellSpace       : 'Odstęp pomiędzy komórkami',\r
+               cellPad         : 'Margines wewnętrzny komórek',\r
+               caption         : 'Tytuł',\r
+               summary         : 'Podsumowanie',\r
+               headers         : 'Nagłowki',\r
+               headersNone             : 'Brak',\r
+               headersColumn   : 'Pierwsza kolumna',\r
+               headersRow              : 'Pierwszy wiersz',\r
+               headersBoth             : 'Oba',\r
+               invalidRows             : 'Liczba wierszy musi być liczbą większą niż 0.',\r
+               invalidCols             : 'Liczba kolumn musi być liczbą większą niż 0.',\r
+               invalidBorder   : 'Liczba obramowań musi być liczbą.',\r
+               invalidWidth    : 'Szerokość tabeli musi być liczbą.',\r
+               invalidHeight   : 'Wysokość tabeli musi być liczbą.',\r
+               invalidCellSpacing      : 'Odstęp komórek musi być liczbą.',\r
+               invalidCellPadding      : 'Dopełnienie komórek musi być liczbą.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Komórka',\r
+                       insertBefore    : 'Wstaw komórkę z lewej',\r
+                       insertAfter             : 'Wstaw komórkę z prawej',\r
+                       deleteCell              : 'Usuń komórki',\r
+                       merge                   : 'Połącz komórki',\r
+                       mergeRight              : 'Połącz z komórką z prawej',\r
+                       mergeDown               : 'Połącz z komórką poniżej',\r
+                       splitHorizontal : 'Podziel komórkę poziomo',\r
+                       splitVertical   : 'Podziel komórkę pionowo',\r
+                       title                   : 'Właściwości komórki',\r
+                       cellType                : 'Typ komórki',\r
+                       rowSpan                 : 'Scalenie wierszy',\r
+                       colSpan                 : 'Scalenie komórek',\r
+                       wordWrap                : 'Zawijanie słów',\r
+                       hAlign                  : 'Wyrównanie poziome',\r
+                       vAlign                  : 'Wyrównanie pionowe',\r
+                       alignTop                : 'Góra',\r
+                       alignMiddle             : 'Środek',\r
+                       alignBottom             : 'Dół',\r
+                       alignBaseline   : 'Linia bazowa',\r
+                       bgColor                 : 'Kolor tła',\r
+                       borderColor             : 'Kolor obramowania',\r
+                       data                    : 'Dane',\r
+                       header                  : 'Nagłowek',\r
+                       yes                             : 'Tak',\r
+                       no                              : 'Nie',\r
+                       invalidWidth    : 'Szerokość komórki musi być liczbą.',\r
+                       invalidHeight   : 'Wysokość komórki musi być liczbą.',\r
+                       invalidRowSpan  : 'Scalenie wierszy musi być liczbą całkowitą.',\r
+                       invalidColSpan  : 'Scalenie komórek musi być liczbą całkowitą.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Wiersz',\r
+                       insertBefore    : 'Wstaw wiersz powyżej',\r
+                       insertAfter             : 'Wstaw wiersz poniżej',\r
+                       deleteRow               : 'Usuń wiersze'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Kolumna',\r
+                       insertBefore    : 'Wstaw kolumnę z lewej',\r
+                       insertAfter             : 'Wstaw kolumnę z prawej',\r
+                       deleteColumn    : 'Usuń kolumny'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Właściwości przycisku',\r
+               text            : 'Tekst (Wartość)',\r
+               type            : 'Typ',\r
+               typeBtn         : 'Przycisk',\r
+               typeSbm         : 'Wyślij',\r
+               typeRst         : 'Wyzeruj'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Właściwości pola wyboru (checkbox)',\r
+               radioTitle      : 'Właściwości pola wyboru (radio)',\r
+               value           : 'Wartość',\r
+               selected        : 'Zaznaczone'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Właściwości formularza',\r
+               menu            : 'Właściwości formularza',\r
+               action          : 'Akcja',\r
+               method          : 'Metoda',\r
+               encoding        : 'Kodowanie',\r
+               target          : 'Cel',\r
+               targetNotSet    : '<nie ustawione>',\r
+               targetNew       : 'Nowe okno (_blank)',\r
+               targetTop       : 'Okno najwyższe w hierarchii (_top)',\r
+               targetSelf      : 'To samo okno (_self)',\r
+               targetParent    : 'Okno nadrzędne (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Właściwości listy wyboru',\r
+               selectInfo      : 'Informacje',\r
+               opAvail         : 'Dostępne opcje',\r
+               value           : 'Wartość',\r
+               size            : 'Rozmiar',\r
+               lines           : 'linii',\r
+               chkMulti        : 'Wielokrotny wybór',\r
+               opText          : 'Tekst',\r
+               opValue         : 'Wartość',\r
+               btnAdd          : 'Dodaj',\r
+               btnModify       : 'Zmień',\r
+               btnUp           : 'Do góry',\r
+               btnDown         : 'Do dołu',\r
+               btnSetValue : 'Ustaw wartość zaznaczoną',\r
+               btnDelete       : 'Usuń'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Właściwości obszaru tekstowego',\r
+               cols            : 'Kolumnu',\r
+               rows            : 'Wiersze'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Właściwości pola tekstowego',\r
+               name            : 'Nazwa',\r
+               value           : 'Wartość',\r
+               charWidth       : 'Szerokość w znakach',\r
+               maxChars        : 'Max. szerokość',\r
+               type            : 'Typ',\r
+               typeText        : 'Tekst',\r
+               typePass        : 'Hasło'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Właściwości pola ukrytego',\r
+               name    : 'Nazwa',\r
+               value   : 'Wartość'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Właściwości obrazka',\r
+               titleButton     : 'Właściwości przycisku obrazka',\r
+               menu            : 'Właściwości obrazka',\r
+               infoTab : 'Informacje o obrazku',\r
+               btnUpload       : 'Wyślij',\r
+               url             : 'Adres URL',\r
+               upload  : 'Wyślij',\r
+               alt             : 'Tekst zastępczy',\r
+               width           : 'Szerokość',\r
+               height  : 'Wysokość',\r
+               lockRatio       : 'Zablokuj proporcje',\r
+               resetSize       : 'Przywróć rozmiar',\r
+               border  : 'Ramka',\r
+               hSpace  : 'Odstęp poziomy',\r
+               vSpace  : 'Odstęp pionowy',\r
+               align           : 'Wyrównaj',\r
+               alignLeft       : 'Do lewej',\r
+               alignAbsBottom: 'Do dołu',\r
+               alignAbsMiddle: 'Do środka w pionie',\r
+               alignBaseline   : 'Do linii bazowej',\r
+               alignBottom     : 'Do dołu',\r
+               alignMiddle     : 'Do środka',\r
+               alignRight      : 'Do prawej',\r
+               alignTextTop    : 'Do góry tekstu',\r
+               alignTop        : 'Do góry',\r
+               preview : 'Podgląd',\r
+               alertUrl        : 'Podaj adres obrazka.',\r
+               linkTab : 'Hiperłącze',\r
+               button2Img      : 'Czy chcesz przekonwertować zaznaczony przycisk graficzny do zwykłego obrazka?',\r
+               img2Button      : 'Czy chcesz przekonwertować zaznaczony obrazek do przycisku graficznego?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Właściwości elementu Flash',\r
+               propertiesTab   : 'Właściwości',\r
+               title           : 'Właściwości elementu Flash',\r
+               chkPlay         : 'Auto Odtwarzanie',\r
+               chkLoop         : 'Pętla',\r
+               chkMenu         : 'Włącz menu',\r
+               chkFull         : 'Dopuść pełny ekran',\r
+               scale           : 'Skaluj',\r
+               scaleAll                : 'Pokaż wszystko',\r
+               scaleNoBorder   : 'Bez Ramki',\r
+               scaleFit                : 'Dokładne dopasowanie',\r
+               access                  : 'Dostęp skryptów',\r
+               accessAlways    : 'Zawsze',\r
+               accessSameDomain        : 'Ta sama domena',\r
+               accessNever     : 'Nigdy',\r
+               align           : 'Wyrównaj',\r
+               alignLeft       : 'Do lewej',\r
+               alignAbsBottom: 'Do dołu',\r
+               alignAbsMiddle: 'Do środka w pionie',\r
+               alignBaseline   : 'Do linii bazowej',\r
+               alignBottom     : 'Do dołu',\r
+               alignMiddle     : 'Do środka',\r
+               alignRight      : 'Do prawej',\r
+               alignTextTop    : 'Do góry tekstu',\r
+               alignTop        : 'Do góry',\r
+               quality         : 'Jakość',\r
+               qualityBest              : 'Najlepsza',\r
+               qualityHigh              : 'Wysoka',\r
+               qualityAutoHigh  : 'Auto wysoka',\r
+               qualityMedium    : 'Średnia',\r
+               qualityAutoLow   : 'Auto niska',\r
+               qualityLow               : 'Niska',\r
+               windowModeWindow         : 'Okno',\r
+               windowModeOpaque         : 'Nieprzeźroczyste',\r
+               windowModeTransparent    : 'Przeźroczyste',\r
+               windowMode      : 'Tryb okna',\r
+               flashvars       : 'Zmienne dla Flash\'a',\r
+               bgcolor : 'Kolor tła',\r
+               width   : 'Szerokość',\r
+               height  : 'Wysokość',\r
+               hSpace  : 'Odstęp poziomy',\r
+               vSpace  : 'Odstęp pionowy',\r
+               validateSrc : 'Podaj adres URL',\r
+               validateWidth : 'Szerokość musi być liczbą.',\r
+               validateHeight : 'Wysokość musi być liczbą.',\r
+               validateHSpace : 'Odstęp poziomy musi być liczbą.',\r
+               validateVSpace : 'Odstęp pionowy musi być liczbą.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Sprawdź pisownię',\r
+               title                   : 'Sprawdź pisownię',\r
+               notAvailable    : 'Przepraszamy, ale usługa jest obecnie niedostępna.',\r
+               errorLoading    : 'Błąd wczytywania hosta aplikacji usługi: %s.',\r
+               notInDic                : 'Słowa nie ma w słowniku',\r
+               changeTo                : 'Zmień na',\r
+               btnIgnore               : 'Ignoruj',\r
+               btnIgnoreAll    : 'Ignoruj wszystkie',\r
+               btnReplace              : 'Zmień',\r
+               btnReplaceAll   : 'Zmień wszystkie',\r
+               btnUndo                 : 'Cofnij',\r
+               noSuggestions   : '- Brak sugestii -',\r
+               progress                : 'Trwa sprawdzanie ...',\r
+               noMispell               : 'Sprawdzanie zakończone: nie znaleziono błędów',\r
+               noChanges               : 'Sprawdzanie zakończone: nie zmieniono żadnego słowa',\r
+               oneChange               : 'Sprawdzanie zakończone: zmieniono jedno słowo',\r
+               manyChanges             : 'Sprawdzanie zakończone: zmieniono %l słów',\r
+               ieSpellDownload : 'Słownik nie jest zainstalowany. Chcesz go ściągnąć?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Emotikona',\r
+               title   : 'Wstaw emotikonę'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : 'element %1'\r
+       },\r
+\r
+       numberedlist : 'Lista numerowana',\r
+       bulletedlist : 'Lista wypunktowana',\r
+       indent : 'Zwiększ wcięcie',\r
+       outdent : 'Zmniejsz wcięcie',\r
+\r
+       justify :\r
+       {\r
+               left : 'Wyrównaj do lewej',\r
+               center : 'Wyrównaj do środka',\r
+               right : 'Wyrównaj do prawej',\r
+               block : 'Wyrównaj do lewej i prawej'\r
+       },\r
+\r
+       blockquote : 'Cytat',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Wklej',\r
+               cutError        : 'Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl+X.',\r
+               copyError       : 'Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl+C.',\r
+               pasteMsg        : 'Proszę wkleić w poniższym polu używając klawiaturowego skrótu (<STRONG>Ctrl+V</STRONG>) i kliknąć <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę dane wkleić ponownie w tym okienku.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Wklej z Worda',\r
+               title : 'Wklej z Worda',\r
+               advice : 'Proszę wkleić w poniższym polu używając klawiaturowego skrótu (<STRONG>Ctrl+V</STRONG>) i kliknąć <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignoruj definicje \'Font Face\'',\r
+               removeStyle : 'Usuń definicje Stylów'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Wklej jako czysty tekst',\r
+               title : 'Wklej jako czysty tekst'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Sablony',\r
+               title : 'Szablony zawartości',\r
+               insertOption: 'Zastąp aktualną zawartość',\r
+               selectPromptMsg: 'Wybierz szablon do otwarcia w edytorze<br>(obecna zawartość okna edytora zostanie utracona):',\r
+               emptyListMsg : '(Brak zdefiniowanych szablonów)'\r
+       },\r
+\r
+       showBlocks : 'Pokaż bloki',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Styl',\r
+               voiceLabel : 'Style',\r
+               panelVoiceLabel : 'Wybierz styl',\r
+               panelTitle1 : 'Style blokowe',\r
+               panelTitle2 : 'Style liniowe',\r
+               panelTitle3 : 'Style obiektowe'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format',\r
+               panelTitle : 'Format',\r
+               panelVoiceLabel : 'Wybierz paragraf do sformatowania',\r
+\r
+               tag_p : 'Normalny',\r
+               tag_pre : 'Tekst sformatowany',\r
+               tag_address : 'Adres',\r
+               tag_h1 : 'Nagłówek 1',\r
+               tag_h2 : 'Nagłówek 2',\r
+               tag_h3 : 'Nagłówek 3',\r
+               tag_h4 : 'Nagłówek 4',\r
+               tag_h5 : 'Nagłówek 5',\r
+               tag_h6 : 'Nagłówek 6',\r
+               tag_div : 'Normalny (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Czcionka',\r
+               voiceLabel : 'Czcionka',\r
+               panelTitle : 'Czcionka',\r
+               panelVoiceLabel : 'Select a font'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Rozmiar',\r
+               voiceLabel : 'Rozmiar czcionki',\r
+               panelTitle : 'Rozmiar',\r
+               panelVoiceLabel : 'Select a font size'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Kolor tekstu',\r
+               bgColorTitle : 'Kolor tła',\r
+               auto : 'Automatycznie',\r
+               more : 'Więcej kolorów...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Sprawdź pisowanie podczas pisania (SCAYT)',\r
+               enable : 'Włącz SCAYT',\r
+               disable : 'Wyłącz SCAYT',\r
+               about : 'Na temat SCAYT',\r
+               toggle : 'Toggle SCAYT',\r
+               options : 'Opcje',\r
+               langs : 'Języki',\r
+               moreSuggestions : 'Więcej sugestii',\r
+               ignore : 'Ignoruj',\r
+               ignoreAll : 'Ignoruj wszystkie',\r
+               addWord : 'Dodaj słowo',\r
+               emptyDic : 'Nazwa słownika nie może być pusta.',\r
+               optionsTab : 'Opcje',\r
+               languagesTab : 'Języki',\r
+               dictionariesTab : 'Słowniki',\r
+               aboutTab : 'Na temat SCAYT'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'Na temat CKEditor',\r
+               dlgTitle : 'Na temat CKEditor',\r
+               moreInfo : 'Informacje na temat licencji można znaleźć na naszej stronie:',\r
+               copy : 'Copyright &copy; $1. Wszelkie prawa zastrzeżone.'\r
+       },\r
+\r
+       maximize : 'Maksymalizuj',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Kotwica',\r
+               flash : 'Animacja Flash',\r
+               div : 'Separator stron',\r
+               unknown : 'Nieznany obiekt'\r
+       },\r
+\r
+       resize : 'Przeciągnij, aby zmienić rozmiar'\r
+};\r
diff --git a/_source/lang/pt-br.js b/_source/lang/pt-br.js
new file mode 100644 (file)
index 0000000..93dbd26
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Brazilian Portuguese language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['pt-br'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Editor de texto formatado, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Código-Fonte',\r
+       newPage                 : 'Novo',\r
+       save                    : 'Salvar',\r
+       preview                 : 'Visualizar',\r
+       cut                             : 'Recortar',\r
+       copy                    : 'Copiar',\r
+       paste                   : 'Colar',\r
+       print                   : 'Imprimir',\r
+       underline               : 'Sublinhado',\r
+       bold                    : 'Negrito',\r
+       italic                  : 'Itálico',\r
+       selectAll               : 'Selecionar Tudo',\r
+       removeFormat    : 'Remover Formatação',\r
+       strike                  : 'Tachado',\r
+       subscript               : 'Subscrito',\r
+       superscript             : 'Sobrescrito',\r
+       horizontalrule  : 'Inserir Linha Horizontal',\r
+       pagebreak               : 'Inserir Quebra de Página',\r
+       unlink                  : 'Remover Hiperlink',\r
+       undo                    : 'Desfazer',\r
+       redo                    : 'Refazer',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Localizar no Servidor',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocolo',\r
+               upload                  : 'Enviar ao Servidor',\r
+               uploadSubmit    : 'Enviar para o Servidor',\r
+               image                   : 'Figura',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formulário',\r
+               checkbox                : 'Caixa de Seleção',\r
+               radio           : 'Botão de Opção',\r
+               textField               : 'Caixa de Texto',\r
+               textarea                : 'Área de Texto',\r
+               hiddenField             : 'Campo Oculto',\r
+               button                  : 'Botão',\r
+               select  : 'Caixa de Listagem',\r
+               imageButton             : 'Botão de Imagem',\r
+               notSet                  : '<não ajustado>',\r
+               id                              : 'Id',\r
+               name                    : 'Nome',\r
+               langDir                 : 'Direção do idioma',\r
+               langDirLtr              : 'Esquerda para Direita (LTR)',\r
+               langDirRtl              : 'Direita para Esquerda (RTL)',\r
+               langCode                : 'Idioma',\r
+               longDescr               : 'Descrição da URL',\r
+               cssClass                : 'Classe de Folhas de Estilo',\r
+               advisoryTitle   : 'Título',\r
+               cssStyle                : 'Estilos',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Cancelar',\r
+               generalTab              : 'Geral',\r
+               advancedTab             : 'Avançado',\r
+               validateNumberFailed    : 'Este valor não é um número.',\r
+               confirmNewPage  : 'Todas as mudanças não salvas serão perdidas. Tem certeza de que quer carregar outra página?',\r
+               confirmCancel   : 'Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, indisponível</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Inserir Caractere Especial',\r
+               title           : 'Selecione um Caractere Especial'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Inserir/Editar Hiperlink',\r
+               menu            : 'Editar Hiperlink',\r
+               title           : 'Hiperlink',\r
+               info            : 'Informações',\r
+               target          : 'Destino',\r
+               upload          : 'Enviar ao Servidor',\r
+               advanced        : 'Avançado',\r
+               type            : 'Tipo de hiperlink',\r
+               toAnchor        : 'Âncora nesta página',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Destino',\r
+               targetNotSet    : '<não ajustado>',\r
+               targetFrame     : '<frame>',\r
+               targetPopup     : '<janela popup>',\r
+               targetNew       : 'Nova Janela (_blank)',\r
+               targetTop       : 'Janela Superior (_top)',\r
+               targetSelf      : 'Mesma Janela (_self)',\r
+               targetParent    : 'Janela Pai (_parent)',\r
+               targetFrameName : 'Nome do Frame de Destino',\r
+               targetPopupName : 'Nome da Janela Pop-up',\r
+               popupFeatures   : 'Atributos da Janela Pop-up',\r
+               popupResizable  : 'Redimensionável',\r
+               popupStatusBar  : 'Barra de Status',\r
+               popupLocationBar        : 'Barra de Endereços',\r
+               popupToolbar    : 'Barra de Ferramentas',\r
+               popupMenuBar    : 'Barra de Menus',\r
+               popupFullScreen : 'Modo Tela Cheia (IE)',\r
+               popupScrollBars : 'Barras de Rolagem',\r
+               popupDependent  : 'Dependente (Netscape)',\r
+               popupWidth              : 'Largura',\r
+               popupLeft               : 'Esquerda',\r
+               popupHeight             : 'Altura',\r
+               popupTop                : 'Superior',\r
+               id                              : 'Id',\r
+               langDir                 : 'Direção do idioma',\r
+               langDirNotSet   : '<não ajustado>',\r
+               langDirLTR              : 'Esquerda para Direita (LTR)',\r
+               langDirRTL              : 'Direita para Esquerda (RTL)',\r
+               acccessKey              : 'Chave de Acesso',\r
+               name                    : 'Nome',\r
+               langCode                : 'Direção do idioma',\r
+               tabIndex                : 'Índice de Tabulação',\r
+               advisoryTitle   : 'Título',\r
+               advisoryContentType     : 'Tipo de Conteúdo',\r
+               cssClasses              : 'Classe de Folhas de Estilo',\r
+               charset                 : 'Conjunto de Caracteres do Hiperlink',\r
+               styles                  : 'Estilos',\r
+               selectAnchor    : 'Selecione uma âncora',\r
+               anchorName              : 'Pelo Nome da âncora',\r
+               anchorId                : 'Pelo Id do Elemento',\r
+               emailAddress    : 'Endereço E-Mail',\r
+               emailSubject    : 'Assunto da Mensagem',\r
+               emailBody               : 'Corpo da Mensagem',\r
+               noAnchors               : '(Não há âncoras disponíveis neste documento)',\r
+               noUrl                   : 'Por favor, digite o endereço do Hiperlink',\r
+               noEmail                 : 'Por favor, digite o endereço de e-mail'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Inserir/Editar Âncora',\r
+               menu            : 'Formatar Âncora',\r
+               title           : 'Formatar Âncora',\r
+               name            : 'Nome da Âncora',\r
+               errorName       : 'Por favor, digite o nome da âncora'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Localizar e Substituir',\r
+               find                            : 'Localizar',\r
+               replace                         : 'Substituir',\r
+               findWhat                        : 'Procurar por:',\r
+               replaceWith                     : 'Substituir por:',\r
+               notFoundMsg                     : 'O texto especificado não foi encontrado.',\r
+               matchCase                       : 'Coincidir Maiúsculas/Minúsculas',\r
+               matchWord                       : 'Coincidir a palavra inteira',\r
+               matchCyclic                     : 'Coincidir cíclico',\r
+               replaceAll                      : 'Substituir Tudo',\r
+               replaceSuccessMsg       : '%1 ocorrência(s) substituída(s).'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabela',\r
+               title           : 'Formatar Tabela',\r
+               menu            : 'Formatar Tabela',\r
+               deleteTable     : 'Apagar Tabela',\r
+               rows            : 'Linhas',\r
+               columns         : 'Colunas',\r
+               border          : 'Borda',\r
+               align           : 'Alinhamento',\r
+               alignNotSet     : '<Não ajustado>',\r
+               alignLeft       : 'Esquerda',\r
+               alignCenter     : 'Centralizado',\r
+               alignRight      : 'Direita',\r
+               width           : 'Largura',\r
+               widthPx         : 'pixels',\r
+               widthPc         : '%',\r
+               height          : 'Altura',\r
+               cellSpace       : 'Espaçamento',\r
+               cellPad         : 'Enchimento',\r
+               caption         : 'Legenda',\r
+               summary         : 'Resumo',\r
+               headers         : 'Cabeçalho',\r
+               headersNone             : 'Nenhum',\r
+               headersColumn   : 'Primeira coluna',\r
+               headersRow              : 'Primeira linha',\r
+               headersBoth             : 'Ambos',\r
+               invalidRows             : '"Número de linhas" tem que ser um número maior que 0.',\r
+               invalidCols             : '"Número de colunas" tem que ser um número maior que 0.',\r
+               invalidBorder   : '"Tamanho da borda" tem que ser um número.',\r
+               invalidWidth    : '"Largura da tabela" tem que ser um número.',\r
+               invalidHeight   : '"Altura da tabela" tem que ser um número.',\r
+               invalidCellSpacing      : '"Espaçamento das células" tem que ser um número.',\r
+               invalidCellPadding      : '"Margem interna das células" tem que ser um número.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Célula',\r
+                       insertBefore    : 'Inserir célula à esquerda',\r
+                       insertAfter             : 'Inserir célula à direita',\r
+                       deleteCell              : 'Remover Células',\r
+                       merge                   : 'Mesclar Células',\r
+                       mergeRight              : 'Mesclar com célula à direita',\r
+                       mergeDown               : 'Mesclar com célula abaixo',\r
+                       splitHorizontal : 'Dividir célula horizontalmente',\r
+                       splitVertical   : 'Dividir célula verticalmente',\r
+                       title                   : 'Propriedades da célula',\r
+                       cellType                : 'Tipo de célula',\r
+                       rowSpan                 : 'Linhas cobertas',\r
+                       colSpan                 : 'Colunas cobertas',\r
+                       wordWrap                : 'Quebra de palavra',\r
+                       hAlign                  : 'Alinhamento horizontal',\r
+                       vAlign                  : 'Alinhamento vertical',\r
+                       alignTop                : 'Alinhar no topo',\r
+                       alignMiddle             : 'Centralizado verticalmente',\r
+                       alignBottom             : 'Alinhar na base',\r
+                       alignBaseline   : 'Patamar de alinhamento',\r
+                       bgColor                 : 'Cor de fundo',\r
+                       borderColor             : 'Cor das bordas',\r
+                       data                    : 'Dados',\r
+                       header                  : 'Cabeçalho',\r
+                       yes                             : 'Sim',\r
+                       no                              : 'Não',\r
+                       invalidWidth    : 'A largura da célula tem que ser um número.',\r
+                       invalidHeight   : 'A altura da célula tem que ser um número.',\r
+                       invalidRowSpan  : '"Linhas cobertas" tem que ser um número inteiro.',\r
+                       invalidColSpan  : '"Colunas cobertas" tem que ser um número inteiro.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Linha',\r
+                       insertBefore    : 'Inserir linha acima',\r
+                       insertAfter             : 'Inserir linha abaixo',\r
+                       deleteRow               : 'Remover Linhas'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Coluna',\r
+                       insertBefore    : 'Inserir coluna à esquerda',\r
+                       insertAfter             : 'Inserir coluna à direita',\r
+                       deleteColumn    : 'Remover Colunas'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Formatar Botão',\r
+               text            : 'Texto (Valor)',\r
+               type            : 'Tipo',\r
+               typeBtn         : 'Botão',\r
+               typeSbm         : 'Enviar',\r
+               typeRst         : 'Limpar'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Formatar Caixa de Seleção',\r
+               radioTitle      : 'Formatar Botão de Opção',\r
+               value           : 'Valor',\r
+               selected        : 'Selecionado'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Formatar Formulário',\r
+               menu            : 'Formatar Formulário',\r
+               action          : 'Action',\r
+               method          : 'Método',\r
+               encoding        : 'Codificação',\r
+               target          : 'Destino',\r
+               targetNotSet    : '<não ajustado>',\r
+               targetNew       : 'Nova Janela (_blank)',\r
+               targetTop       : 'Janela Superior (_top)',\r
+               targetSelf      : 'Mesma Janela (_self)',\r
+               targetParent    : 'Janela Pai (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Formatar Caixa de Listagem',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Opções disponíveis',\r
+               value           : 'Valor',\r
+               size            : 'Tamanho',\r
+               lines           : 'linhas',\r
+               chkMulti        : 'Permitir múltiplas seleções',\r
+               opText          : 'Texto',\r
+               opValue         : 'Valor',\r
+               btnAdd          : 'Adicionar',\r
+               btnModify       : 'Modificar',\r
+               btnUp           : 'Para cima',\r
+               btnDown         : 'Para baixo',\r
+               btnSetValue : 'Definir como selecionado',\r
+               btnDelete       : 'Remover'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Formatar Área de Texto',\r
+               cols            : 'Colunas',\r
+               rows            : 'Linhas'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Formatar Caixa de Texto',\r
+               name            : 'Nome',\r
+               value           : 'Valor',\r
+               charWidth       : 'Comprimento (em caracteres)',\r
+               maxChars        : 'Número Máximo de Caracteres',\r
+               type            : 'Tipo',\r
+               typeText        : 'Texto',\r
+               typePass        : 'Senha'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Formatar Campo Oculto',\r
+               name    : 'Nome',\r
+               value   : 'Valor'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Formatar Figura',\r
+               titleButton     : 'Formatar Botão de Imagem',\r
+               menu            : 'Formatar Figura',\r
+               infoTab : 'Informações da Figura',\r
+               btnUpload       : 'Enviar para o Servidor',\r
+               url             : 'URL',\r
+               upload  : 'Submeter',\r
+               alt             : 'Texto Alternativo',\r
+               width           : 'Largura',\r
+               height  : 'Altura',\r
+               lockRatio       : 'Manter proporções',\r
+               resetSize       : 'Redefinir para o Tamanho Original',\r
+               border  : 'Borda',\r
+               hSpace  : 'Horizontal',\r
+               vSpace  : 'Vertical',\r
+               align           : 'Alinhamento',\r
+               alignLeft       : 'Esquerda',\r
+               alignAbsBottom: 'Inferior Absoluto',\r
+               alignAbsMiddle: 'Centralizado Absoluto',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Inferior',\r
+               alignMiddle     : 'Centralizado',\r
+               alignRight      : 'Direita',\r
+               alignTextTop    : 'Superior Absoluto',\r
+               alignTop        : 'Superior',\r
+               preview : 'Visualização',\r
+               alertUrl        : 'Por favor, digite o URL da figura.',\r
+               linkTab : 'Hiperlink',\r
+               button2Img      : 'Você deseja transformar o botão de imagem selecionado em uma imagem comum?',\r
+               img2Button      : 'Você deseja transformar a imagem selecionada em um botão de imagem?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Propriedades do Flash',\r
+               propertiesTab   : 'Propriedades',\r
+               title           : 'Propriedades do Flash',\r
+               chkPlay         : 'Tocar Automaticamente',\r
+               chkLoop         : 'Loop',\r
+               chkMenu         : 'Habilita Menu Flash',\r
+               chkFull         : 'Permitir tela cheia',\r
+               scale           : 'Escala',\r
+               scaleAll                : 'Mostrar tudo',\r
+               scaleNoBorder   : 'Sem Borda',\r
+               scaleFit                : 'Escala Exata',\r
+               access                  : 'Acesso ao script',\r
+               accessAlways    : 'Sempre',\r
+               accessSameDomain        : 'Mesmo domínio',\r
+               accessNever     : 'Nunca',\r
+               align           : 'Alinhamento',\r
+               alignLeft       : 'Esquerda',\r
+               alignAbsBottom: 'Inferior Absoluto',\r
+               alignAbsMiddle: 'Centralizado Absoluto',\r
+               alignBaseline   : 'Baseline',\r
+               alignBottom     : 'Inferior',\r
+               alignMiddle     : 'Centralizado',\r
+               alignRight      : 'Direita',\r
+               alignTextTop    : 'Superior Absoluto',\r
+               alignTop        : 'Superior',\r
+               quality         : 'Qualidade',\r
+               qualityBest              : 'Melhor',\r
+               qualityHigh              : 'Alta',\r
+               qualityAutoHigh  : 'Alta automático',\r
+               qualityMedium    : 'Média',\r
+               qualityAutoLow   : 'Média automático',\r
+               qualityLow               : 'Baixa',\r
+               windowModeWindow         : 'Janela',\r
+               windowModeOpaque         : 'Opaca',\r
+               windowModeTransparent    : 'Transparente',\r
+               windowMode      : 'Modo da janela',\r
+               flashvars       : 'Variáveis do Flash',\r
+               bgcolor : 'Cor do Plano de Fundo',\r
+               width   : 'Largura',\r
+               height  : 'Altura',\r
+               hSpace  : 'Horizontal',\r
+               vSpace  : 'Vertical',\r
+               validateSrc : 'Por favor, digite o endereço do Hiperlink',\r
+               validateWidth : '"Largura" tem que ser um número.',\r
+               validateHeight : '"Altura" tem que ser um número',\r
+               validateHSpace : '"HSpace" tem que ser um número',\r
+               validateVSpace : '"VSpace" tem que ser um número.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Verificar Ortografia',\r
+               title                   : 'Corretor gramatical',\r
+               notAvailable    : 'Desculpe, o serviço não está disponível no momento.',\r
+               errorLoading    : 'Erro carregando servidor de aplicação: %s.',\r
+               notInDic                : 'Não encontrada',\r
+               changeTo                : 'Alterar para',\r
+               btnIgnore               : 'Ignorar uma vez',\r
+               btnIgnoreAll    : 'Ignorar Todas',\r
+               btnReplace              : 'Alterar',\r
+               btnReplaceAll   : 'Alterar Todas',\r
+               btnUndo                 : 'Desfazer',\r
+               noSuggestions   : '-sem sugestões de ortografia-',\r
+               progress                : 'Verificação ortográfica em andamento...',\r
+               noMispell               : 'Verificação encerrada: Não foram encontrados erros de ortografia',\r
+               noChanges               : 'Verificação ortográfica encerrada: Não houve alterações',\r
+               oneChange               : 'Verificação ortográfica encerrada: Uma palavra foi alterada',\r
+               manyChanges             : 'Verificação ortográfica encerrada: %1 foram alteradas',\r
+               ieSpellDownload : 'A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Emoticon',\r
+               title   : 'Inserir Emoticon'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : 'Elemento %1'\r
+       },\r
+\r
+       numberedlist : 'Numeração',\r
+       bulletedlist : 'Marcadores',\r
+       indent : 'Aumentar Recuo',\r
+       outdent : 'Diminuir Recuo',\r
+\r
+       justify :\r
+       {\r
+               left : 'Alinhar Esquerda',\r
+               center : 'Centralizar',\r
+               right : 'Alinhar Direita',\r
+               block : 'Justificado'\r
+       },\r
+\r
+       blockquote : 'Recuo',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Colar',\r
+               cutError        : 'As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl+X).',\r
+               copyError       : 'As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl+C).',\r
+               pasteMsg        : 'Transfira o link usado no box usando o teclado com (<STRONG>Ctrl+V</STRONG>) e <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo novamente nesta janela.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Colar do Word',\r
+               title : 'Colar do Word',\r
+               advice : 'Transfira o link usado no box usando o teclado com (<STRONG>Ctrl+V</STRONG>) e <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignorar definições de fonte',\r
+               removeStyle : 'Remove definições de estilo'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Colar como Texto sem Formatação',\r
+               title : 'Colar como Texto sem Formatação'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Modelos de layout',\r
+               title : 'Modelo de layout do conteúdo',\r
+               insertOption: 'Substituir o conteúdo atual',\r
+               selectPromptMsg: 'Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):',\r
+               emptyListMsg : '(Não foram definidos modelos de layout)'\r
+       },\r
+\r
+       showBlocks : 'Mostrar blocos',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Estilo',\r
+               voiceLabel : 'Estilo',\r
+               panelVoiceLabel : 'Selecione um estilo',\r
+               panelTitle1 : 'Estilos de bloco',\r
+               panelTitle2 : 'Estilos em texto corrido',\r
+               panelTitle3 : 'Estilos de objeto'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formatação',\r
+               voiceLabel : 'Formatação',\r
+               panelTitle : 'Formatação',\r
+               panelVoiceLabel : 'Selecione uma formatação de parágrafo',\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatado',\r
+               tag_address : 'Endereço',\r
+               tag_h1 : 'Título 1',\r
+               tag_h2 : 'Título 2',\r
+               tag_h3 : 'Título 3',\r
+               tag_h4 : 'Título 4',\r
+               tag_h5 : 'Título 5',\r
+               tag_h6 : 'Título 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Fonte',\r
+               voiceLabel : 'Fonte',\r
+               panelTitle : 'Fonte',\r
+               panelVoiceLabel : 'Selecione uma fonte'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Tamanho',\r
+               voiceLabel : 'Tamanho da fonte',\r
+               panelTitle : 'Tamanho',\r
+               panelVoiceLabel : 'Selecione um tamanho de fonte'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Cor do Texto',\r
+               bgColorTitle : 'Cor do Plano de Fundo',\r
+               auto : 'Automático',\r
+               more : 'Mais Cores...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Correção gramatical durante a digitação',\r
+               enable : 'Habilitar SCAYT',\r
+               disable : 'Desabilitar SCAYT',\r
+               about : 'Sobre o SCAYT',\r
+               toggle : 'Ativar/desativar SCAYT',\r
+               options : 'Opções',\r
+               langs : 'Línguas',\r
+               moreSuggestions : 'Mais sugestões',\r
+               ignore : 'Ignorar',\r
+               ignoreAll : 'Ignorar todas',\r
+               addWord : 'Adicionar palavra',\r
+               emptyDic : 'O nome do dicionário não deveria estar vazio.',\r
+               optionsTab : 'Opções',\r
+               languagesTab : 'Línguas',\r
+               dictionariesTab : 'Dicionários',\r
+               aboutTab : 'Sobre'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'Sobre o CKEditor',\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'Para informações sobre a licença, por favor, visite o nosso site na Internet:',\r
+               copy : 'Direito de reprodução &copy; $1. Todos os direitos reservados.'\r
+       },\r
+\r
+       maximize : 'Maximizar',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Âncora',\r
+               flash : 'Animação em Flash',\r
+               div : 'Quebra de página',\r
+               unknown : 'Objeto desconhecido'\r
+       },\r
+\r
+       resize : 'Arraste para redimensionar'\r
+};\r
diff --git a/_source/lang/pt.js b/_source/lang/pt.js
new file mode 100644 (file)
index 0000000..9377aa8
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Portuguese language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['pt'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Fonte',\r
+       newPage                 : 'Nova Página',\r
+       save                    : 'Guardar',\r
+       preview                 : 'Pré-visualizar',\r
+       cut                             : 'Cortar',\r
+       copy                    : 'Copiar',\r
+       paste                   : 'Colar',\r
+       print                   : 'Imprimir',\r
+       underline               : 'Sublinhado',\r
+       bold                    : 'Negrito',\r
+       italic                  : 'Itálico',\r
+       selectAll               : 'Seleccionar Tudo',\r
+       removeFormat    : 'Eliminar Formato',\r
+       strike                  : 'Rasurado',\r
+       subscript               : 'Superior à Linha',\r
+       superscript             : 'Inferior à Linha',\r
+       horizontalrule  : 'Inserir Linha Horizontal',\r
+       pagebreak               : 'Inserir Quebra de Página',\r
+       unlink                  : 'Eliminar Hiperligação',\r
+       undo                    : 'Anular',\r
+       redo                    : 'Repetir',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Navegar no Servidor',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocolo',\r
+               upload                  : 'Carregar',\r
+               uploadSubmit    : 'Enviar para o Servidor',\r
+               image                   : 'Imagem',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formulário',\r
+               checkbox                : 'Caixa de Verificação',\r
+               radio           : 'Botão de Opção',\r
+               textField               : 'Campo de Texto',\r
+               textarea                : 'Área de Texto',\r
+               hiddenField             : 'Campo Escondido',\r
+               button                  : 'Botão',\r
+               select  : 'Caixa de Combinação',\r
+               imageButton             : 'Botão de Imagem',\r
+               notSet                  : '<Não definido>',\r
+               id                              : 'Id',\r
+               name                    : 'Nome',\r
+               langDir                 : 'Orientação de idioma',\r
+               langDirLtr              : 'Esquerda à Direita (LTR)',\r
+               langDirRtl              : 'Direita a Esquerda (RTL)',\r
+               langCode                : 'Código de Idioma',\r
+               longDescr               : 'Descrição Completa do URL',\r
+               cssClass                : 'Classes de Estilo de Folhas Classes',\r
+               advisoryTitle   : 'Título',\r
+               cssStyle                : 'Estilo',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Cancelar',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Avançado',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Inserir Caracter Especial',\r
+               title           : 'Seleccione um caracter especial'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Inserir/Editar Hiperligação',\r
+               menu            : 'Editar Hiperligação',\r
+               title           : 'Hiperligação',\r
+               info            : 'Informação de Hiperligação',\r
+               target          : 'Destino',\r
+               upload          : 'Carregar',\r
+               advanced        : 'Avançado',\r
+               type            : 'Tipo de Hiperligação',\r
+               toAnchor        : 'Referência a esta página',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Destino',\r
+               targetNotSet    : '<Não definido>',\r
+               targetFrame     : '<Frame>',\r
+               targetPopup     : '<Janela de popup>',\r
+               targetNew       : 'Nova Janela(_blank)',\r
+               targetTop       : 'Janela primaria (_top)',\r
+               targetSelf      : 'Mesma janela (_self)',\r
+               targetParent    : 'Janela Pai (_parent)',\r
+               targetFrameName : 'Nome do Frame Destino',\r
+               targetPopupName : 'Nome da Janela de Popup',\r
+               popupFeatures   : 'Características de Janela de Popup',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Barra de Estado',\r
+               popupLocationBar        : 'Barra de localização',\r
+               popupToolbar    : 'Barra de Ferramentas',\r
+               popupMenuBar    : 'Barra de Menu',\r
+               popupFullScreen : 'Janela Completa (IE)',\r
+               popupScrollBars : 'Barras de deslocamento',\r
+               popupDependent  : 'Dependente (Netscape)',\r
+               popupWidth              : 'Largura',\r
+               popupLeft               : 'Posição Esquerda',\r
+               popupHeight             : 'Altura',\r
+               popupTop                : 'Posição Direita',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Orientação de idioma',\r
+               langDirNotSet   : '<Não definido>',\r
+               langDirLTR              : 'Esquerda à Direita (LTR)',\r
+               langDirRTL              : 'Direita a Esquerda (RTL)',\r
+               acccessKey              : 'Chave de Acesso',\r
+               name                    : 'Nome',\r
+               langCode                : 'Orientação de idioma',\r
+               tabIndex                : 'Índice de Tubulação',\r
+               advisoryTitle   : 'Título',\r
+               advisoryContentType     : 'Tipo de Conteúdo',\r
+               cssClasses              : 'Classes de Estilo de Folhas Classes',\r
+               charset                 : 'Fonte de caracteres vinculado',\r
+               styles                  : 'Estilo',\r
+               selectAnchor    : 'Seleccionar una referência',\r
+               anchorName              : 'Por Nome de Referência',\r
+               anchorId                : 'Por ID de elemento',\r
+               emailAddress    : 'Endereço de E-Mail',\r
+               emailSubject    : 'Título de Mensagem',\r
+               emailBody               : 'Corpo da Mensagem',\r
+               noAnchors               : '(Não há referências disponíveis no documento)',\r
+               noUrl                   : 'Por favor introduza a hiperligação URL',\r
+               noEmail                 : 'Por favor introduza o endereço de e-mail'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : ' Inserir/Editar Âncora',\r
+               menu            : 'Propriedades da Âncora',\r
+               title           : 'Propriedades da Âncora',\r
+               name            : 'Nome da Âncora',\r
+               errorName       : 'Por favor, introduza o nome da âncora'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'Procurar',\r
+               replace                         : 'Substituir',\r
+               findWhat                        : 'Texto a Procurar:',\r
+               replaceWith                     : 'Substituir por:',\r
+               notFoundMsg                     : 'O texto especificado não foi encontrado.',\r
+               matchCase                       : 'Maiúsculas/Minúsculas',\r
+               matchWord                       : 'Coincidir com toda a palavra',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Substituir Tudo',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabela',\r
+               title           : 'Propriedades da Tabela',\r
+               menu            : 'Propriedades da Tabela',\r
+               deleteTable     : 'Eliminar Tabela',\r
+               rows            : 'Linhas',\r
+               columns         : 'Colunas',\r
+               border          : 'Tamanho do Limite',\r
+               align           : 'Alinhamento',\r
+               alignNotSet     : '<Não definido>',\r
+               alignLeft       : 'Esquerda',\r
+               alignCenter     : 'Centrado',\r
+               alignRight      : 'Direita',\r
+               width           : 'Largura',\r
+               widthPx         : 'pixeis',\r
+               widthPc         : 'percentagem',\r
+               height          : 'Altura',\r
+               cellSpace       : 'Esp. e/células',\r
+               cellPad         : 'Esp. interior',\r
+               caption         : 'Título',\r
+               summary         : 'Sumário',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Célula',\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'Eliminar Célula',\r
+                       merge                   : 'Unir Células',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Linha',\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'Eliminar Linhas'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Coluna',\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'Eliminar Coluna'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Propriedades do Botão',\r
+               text            : 'Texto (Valor)',\r
+               type            : 'Tipo',\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Propriedades da Caixa de Verificação',\r
+               radioTitle      : 'Propriedades do Botão de Opção',\r
+               value           : 'Valor',\r
+               selected        : 'Seleccionado'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Propriedades do Formulário',\r
+               menu            : 'Propriedades do Formulário',\r
+               action          : 'Acção',\r
+               method          : 'Método',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Destino',\r
+               targetNotSet    : '<Não definido>',\r
+               targetNew       : 'Nova Janela(_blank)',\r
+               targetTop       : 'Janela primaria (_top)',\r
+               targetSelf      : 'Mesma janela (_self)',\r
+               targetParent    : 'Janela Pai (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Propriedades da Caixa de Combinação',\r
+               selectInfo      : 'Informação',\r
+               opAvail         : 'Opções Possíveis',\r
+               value           : 'Valor',\r
+               size            : 'Tamanho',\r
+               lines           : 'linhas',\r
+               chkMulti        : 'Permitir selecções múltiplas',\r
+               opText          : 'Texto',\r
+               opValue         : 'Valor',\r
+               btnAdd          : 'Adicionar',\r
+               btnModify       : 'Modificar',\r
+               btnUp           : 'Para cima',\r
+               btnDown         : 'Para baixo',\r
+               btnSetValue : 'Definir um valor por defeito',\r
+               btnDelete       : 'Apagar'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Propriedades da Área de Texto',\r
+               cols            : 'Colunas',\r
+               rows            : 'Linhas'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Propriedades do Campo de Texto',\r
+               name            : 'Nome',\r
+               value           : 'Valor',\r
+               charWidth       : 'Tamanho do caracter',\r
+               maxChars        : 'Nr. Máximo de Caracteres',\r
+               type            : 'Tipo',\r
+               typeText        : 'Texto',\r
+               typePass        : 'Palavra-chave'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Propriedades do Campo Escondido',\r
+               name    : 'Nome',\r
+               value   : 'Valor'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Propriedades da Imagem',\r
+               titleButton     : 'Propriedades do Botão de imagens',\r
+               menu            : 'Propriedades da Imagem',\r
+               infoTab : 'Informação da Imagem',\r
+               btnUpload       : 'Enviar para o Servidor',\r
+               url             : 'URL',\r
+               upload  : 'Carregar',\r
+               alt             : 'Texto Alternativo',\r
+               width           : 'Largura',\r
+               height  : 'Altura',\r
+               lockRatio       : 'Proporcional',\r
+               resetSize       : 'Tamanho Original',\r
+               border  : 'Limite',\r
+               hSpace  : 'Esp.Horiz',\r
+               vSpace  : 'Esp.Vert',\r
+               align           : 'Alinhamento',\r
+               alignLeft       : 'Esquerda',\r
+               alignAbsBottom: 'Abs inferior',\r
+               alignAbsMiddle: 'Abs centro',\r
+               alignBaseline   : 'Linha de base',\r
+               alignBottom     : 'Fundo',\r
+               alignMiddle     : 'Centro',\r
+               alignRight      : 'Direita',\r
+               alignTextTop    : 'Topo do texto',\r
+               alignTop        : 'Topo',\r
+               preview : 'Pré-visualizar',\r
+               alertUrl        : 'Por favor introduza o URL da imagem',\r
+               linkTab : 'Hiperligação',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Propriedades do Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Propriedades do Flash',\r
+               chkPlay         : 'Reproduzir automaticamente',\r
+               chkLoop         : 'Loop',\r
+               chkMenu         : 'Permitir Menu do Flash',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Escala',\r
+               scaleAll                : 'Mostrar tudo',\r
+               scaleNoBorder   : 'Sem Limites',\r
+               scaleFit                : 'Tamanho Exacto',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Alinhamento',\r
+               alignLeft       : 'Esquerda',\r
+               alignAbsBottom: 'Abs inferior',\r
+               alignAbsMiddle: 'Abs centro',\r
+               alignBaseline   : 'Linha de base',\r
+               alignBottom     : 'Fundo',\r
+               alignMiddle     : 'Centro',\r
+               alignRight      : 'Direita',\r
+               alignTextTop    : 'Topo do texto',\r
+               alignTop        : 'Topo',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Cor de Fundo',\r
+               width   : 'Largura',\r
+               height  : 'Altura',\r
+               hSpace  : 'Esp.Horiz',\r
+               vSpace  : 'Esp.Vert',\r
+               validateSrc : 'Por favor introduza a hiperligação URL',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Verificação Ortográfica',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Não está num directório',\r
+               changeTo                : 'Mudar para',\r
+               btnIgnore               : 'Ignorar',\r
+               btnIgnoreAll    : 'Ignorar Tudo',\r
+               btnReplace              : 'Substituir',\r
+               btnReplaceAll   : 'Substituir Tudo',\r
+               btnUndo                 : 'Anular',\r
+               noSuggestions   : '- Sem sugestões -',\r
+               progress                : 'Verificação ortográfica em progresso…',\r
+               noMispell               : 'Verificação ortográfica completa: não foram encontrados erros',\r
+               noChanges               : 'Verificação ortográfica completa: não houve alteração de palavras',\r
+               oneChange               : 'Verificação ortográfica completa: uma palavra alterada',\r
+               manyChanges             : 'Verificação ortográfica completa: %1 palavras alteradas',\r
+               ieSpellDownload : ' Verificação ortográfica não instalada. Quer descarregar agora?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Emoticons',\r
+               title   : 'Inserir um Emoticon'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Numeração',\r
+       bulletedlist : 'Marcas',\r
+       indent : 'Aumentar Avanço',\r
+       outdent : 'Diminuir Avanço',\r
+\r
+       justify :\r
+       {\r
+               left : 'Alinhar à Esquerda',\r
+               center : 'Alinhar ao Centro',\r
+               right : 'Alinhar à Direita',\r
+               block : 'Justificado'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Colar',\r
+               cutError        : 'A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl+X).',\r
+               copyError       : 'A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl+C).',\r
+               pasteMsg        : 'Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl+V</STRONG>) e prima <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Colar do Word',\r
+               title : 'Colar do Word',\r
+               advice : 'Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl+V</STRONG>) e prima <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignorar da definições do Tipo de Letra ',\r
+               removeStyle : 'Remover as definições de Estilos'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Colar como Texto Simples',\r
+               title : 'Colar como Texto Simples'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Modelos',\r
+               title : 'Modelo de Conteúdo',\r
+               insertOption: 'Replace actual contents', // MISSING\r
+               selectPromptMsg: 'Por favor, seleccione o modelo a abrir no editor<br>(o conteúdo actual será perdido):',\r
+               emptyListMsg : '(Sem modelos definidos)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Estilo',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formato',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Formato',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatado',\r
+               tag_address : 'Endereço',\r
+               tag_h1 : 'Título 1',\r
+               tag_h2 : 'Título 2',\r
+               tag_h3 : 'Título 3',\r
+               tag_h4 : 'Título 4',\r
+               tag_h5 : 'Título 5',\r
+               tag_h6 : 'Título 6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Tipo de Letra',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Tipo de Letra',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Tamanho',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Tamanho',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Cor do Texto',\r
+               bgColorTitle : 'Cor de Fundo',\r
+               auto : 'Automático',\r
+               more : 'Mais Cores...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/ro.js b/_source/lang/ro.js
new file mode 100644 (file)
index 0000000..fd54611
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Romanian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['ro'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Sursa',\r
+       newPage                 : 'Pagină nouă',\r
+       save                    : 'Salvează',\r
+       preview                 : 'Previzualizare',\r
+       cut                             : 'Taie',\r
+       copy                    : 'Copiază',\r
+       paste                   : 'Adaugă',\r
+       print                   : 'Printează',\r
+       underline               : 'Subliniat (underline)',\r
+       bold                    : 'Îngroşat (bold)',\r
+       italic                  : 'Înclinat (italic)',\r
+       selectAll               : 'Selectează tot',\r
+       removeFormat    : 'Înlătură formatarea',\r
+       strike                  : 'Tăiat (strike through)',\r
+       subscript               : 'Indice (subscript)',\r
+       superscript             : 'Putere (superscript)',\r
+       horizontalrule  : 'Inserează linie orizontă',\r
+       pagebreak               : 'Inserează separator de pagină (Page Break)',\r
+       unlink                  : 'Înlătură link (legătură web)',\r
+       undo                    : 'Starea anterioară (undo)',\r
+       redo                    : 'Starea ulterioară (redo)',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Răsfoieşte server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protocol',\r
+               upload                  : 'Încarcă',\r
+               uploadSubmit    : 'Trimite la server',\r
+               image                   : 'Imagine',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formular (Form)',\r
+               checkbox                : 'Bifă (Checkbox)',\r
+               radio           : 'Buton radio (RadioButton)',\r
+               textField               : 'Câmp text (TextField)',\r
+               textarea                : 'Suprafaţă text (Textarea)',\r
+               hiddenField             : 'Câmp ascuns (HiddenField)',\r
+               button                  : 'Buton',\r
+               select  : 'Câmp selecţie (SelectionField)',\r
+               imageButton             : 'Buton imagine (ImageButton)',\r
+               notSet                  : '<nesetat>',\r
+               id                              : 'Id',\r
+               name                    : 'Nume',\r
+               langDir                 : 'Direcţia cuvintelor',\r
+               langDirLtr              : 'stânga-dreapta (LTR)',\r
+               langDirRtl              : 'dreapta-stânga (RTL)',\r
+               langCode                : 'Codul limbii',\r
+               longDescr               : 'Descrierea lungă URL',\r
+               cssClass                : 'Clasele cu stilul paginii (CSS)',\r
+               advisoryTitle   : 'Titlul consultativ',\r
+               cssStyle                : 'Stil',\r
+               ok                              : 'Bine',\r
+               cancel                  : 'Anulare',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Avansat',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Inserează caracter special',\r
+               title           : 'Selectează caracter special'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Inserează/Editează link (legătură web)',\r
+               menu            : 'Editează Link',\r
+               title           : 'Link (Legătură web)',\r
+               info            : 'Informaţii despre link (Legătură web)',\r
+               target          : 'Ţintă (Target)',\r
+               upload          : 'Încarcă',\r
+               advanced        : 'Avansat',\r
+               type            : 'Tipul link-ului (al legăturii web)',\r
+               toAnchor        : 'Ancoră în această pagină',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Ţintă (Target)',\r
+               targetNotSet    : '<nesetat>',\r
+               targetFrame     : '<frame>',\r
+               targetPopup     : '<fereastra popup>',\r
+               targetNew       : 'Fereastră nouă (_blank)',\r
+               targetTop       : 'Fereastra din topul ierarhiei (_top)',\r
+               targetSelf      : 'Aceeaşi fereastră (_self)',\r
+               targetParent    : 'Fereastra părinte (_parent)',\r
+               targetFrameName : 'Numele frame-ului ţintă',\r
+               targetPopupName : 'Numele ferestrei popup',\r
+               popupFeatures   : 'Proprietăţile ferestrei popup',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Bara de status',\r
+               popupLocationBar        : 'Bara de locaţie',\r
+               popupToolbar    : 'Bara de opţiuni',\r
+               popupMenuBar    : 'Bara de meniu',\r
+               popupFullScreen : 'Tot ecranul (Full Screen)(IE)',\r
+               popupScrollBars : 'Scroll Bars',\r
+               popupDependent  : 'Dependent (Netscape)',\r
+               popupWidth              : 'Lăţime',\r
+               popupLeft               : 'Poziţia la stânga',\r
+               popupHeight             : 'Înălţime',\r
+               popupTop                : 'Poziţia la dreapta',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Direcţia cuvintelor',\r
+               langDirNotSet   : '<nesetat>',\r
+               langDirLTR              : 'stânga-dreapta (LTR)',\r
+               langDirRTL              : 'dreapta-stânga (RTL)',\r
+               acccessKey              : 'Tasta de acces',\r
+               name                    : 'Nume',\r
+               langCode                : 'Direcţia cuvintelor',\r
+               tabIndex                : 'Indexul tabului',\r
+               advisoryTitle   : 'Titlul consultativ',\r
+               advisoryContentType     : 'Tipul consultativ al titlului',\r
+               cssClasses              : 'Clasele cu stilul paginii (CSS)',\r
+               charset                 : 'Setul de caractere al resursei legate',\r
+               styles                  : 'Stil',\r
+               selectAnchor    : 'Selectaţi o ancoră',\r
+               anchorName              : 'după numele ancorei',\r
+               anchorId                : 'după Id-ul elementului',\r
+               emailAddress    : 'Adresă de e-mail',\r
+               emailSubject    : 'Subiectul mesajului',\r
+               emailBody               : 'Conţinutul mesajului',\r
+               noAnchors               : '(Nicio ancoră disponibilă în document)',\r
+               noUrl                   : 'Vă rugăm să scrieţi URL-ul',\r
+               noEmail                 : 'Vă rugăm să scrieţi adresa de e-mail'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Inserează/Editează ancoră',\r
+               menu            : 'Proprietăţi ancoră',\r
+               title           : 'Proprietăţi ancoră',\r
+               name            : 'Numele ancorei',\r
+               errorName       : 'Vă rugăm scrieţi numele ancorei'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Găseşte şi înlocuieşte',\r
+               find                            : 'Găseşte',\r
+               replace                         : 'Înlocuieşte',\r
+               findWhat                        : 'Găseşte:',\r
+               replaceWith                     : 'Înlocuieşte cu:',\r
+               notFoundMsg                     : 'Textul specificat nu a fost găsit.',\r
+               matchCase                       : 'Deosebeşte majuscule de minuscule (Match case)',\r
+               matchWord                       : 'Doar cuvintele întregi',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Înlocuieşte tot',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabel',\r
+               title           : 'Proprietăţile tabelului',\r
+               menu            : 'Proprietăţile tabelului',\r
+               deleteTable     : 'Şterge tabel',\r
+               rows            : 'Linii',\r
+               columns         : 'Coloane',\r
+               border          : 'Mărimea marginii',\r
+               align           : 'Aliniament',\r
+               alignNotSet     : '<Nesetat>',\r
+               alignLeft       : 'Stânga',\r
+               alignCenter     : 'Centru',\r
+               alignRight      : 'Dreapta',\r
+               width           : 'Lăţime',\r
+               widthPx         : 'pixeli',\r
+               widthPc         : 'procente',\r
+               height          : 'Înălţime',\r
+               cellSpace       : 'Spaţiu între celule',\r
+               cellPad         : 'Spaţiu în cadrul celulei',\r
+               caption         : 'Titlu (Caption)',\r
+               summary         : 'Rezumat',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Celulă',\r
+                       insertBefore    : 'Inserează celulă înainte',\r
+                       insertAfter             : 'Inserează celulă după',\r
+                       deleteCell              : 'Şterge celule',\r
+                       merge                   : 'Uneşte celule',\r
+                       mergeRight              : 'Uneşte la dreapta',\r
+                       mergeDown               : 'Uneşte jos',\r
+                       splitHorizontal : 'Împarte celula pe orizontală',\r
+                       splitVertical   : 'Împarte celula pe verticală',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Linie',\r
+                       insertBefore    : 'Inserează linie înainte',\r
+                       insertAfter             : 'Inserează linie după',\r
+                       deleteRow               : 'Şterge linii'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Coloană',\r
+                       insertBefore    : 'Inserează coloană înainte',\r
+                       insertAfter             : 'Inserează coloană după',\r
+                       deleteColumn    : 'Şterge celule'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Proprietăţi buton',\r
+               text            : 'Text (Valoare)',\r
+               type            : 'Tip',\r
+               typeBtn         : 'Button',\r
+               typeSbm         : 'Submit',\r
+               typeRst         : 'Reset'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Proprietăţi bifă (Checkbox)',\r
+               radioTitle      : 'Proprietăţi buton radio (Radio Button)',\r
+               value           : 'Valoare',\r
+               selected        : 'Selectat'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Proprietăţi formular (Form)',\r
+               menu            : 'Proprietăţi formular (Form)',\r
+               action          : 'Acţiune',\r
+               method          : 'Metodă',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Ţintă (Target)',\r
+               targetNotSet    : '<nesetat>',\r
+               targetNew       : 'Fereastră nouă (_blank)',\r
+               targetTop       : 'Fereastra din topul ierarhiei (_top)',\r
+               targetSelf      : 'Aceeaşi fereastră (_self)',\r
+               targetParent    : 'Fereastra părinte (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Proprietăţi câmp selecţie (Selection Field)',\r
+               selectInfo      : 'Informaţii',\r
+               opAvail         : 'Opţiuni disponibile',\r
+               value           : 'Valoare',\r
+               size            : 'Mărime',\r
+               lines           : 'linii',\r
+               chkMulti        : 'Permite selecţii multiple',\r
+               opText          : 'Text',\r
+               opValue         : 'Valoare',\r
+               btnAdd          : 'Adaugă',\r
+               btnModify       : 'Modifică',\r
+               btnUp           : 'Sus',\r
+               btnDown         : 'Jos',\r
+               btnSetValue : 'Setează ca valoare selectată',\r
+               btnDelete       : 'Şterge'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Proprietăţi suprafaţă text (Textarea)',\r
+               cols            : 'Coloane',\r
+               rows            : 'Linii'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Proprietăţi câmp text (Text Field)',\r
+               name            : 'Nume',\r
+               value           : 'Valoare',\r
+               charWidth       : 'Lărgimea caracterului',\r
+               maxChars        : 'Caractere maxime',\r
+               type            : 'Tip',\r
+               typeText        : 'Text',\r
+               typePass        : 'Parolă'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Proprietăţi câmp ascuns (Hidden Field)',\r
+               name    : 'Nume',\r
+               value   : 'Valoare'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Proprietăţile imaginii',\r
+               titleButton     : 'Proprietăţi buton imagine (Image Button)',\r
+               menu            : 'Proprietăţile imaginii',\r
+               infoTab : 'Informaţii despre imagine',\r
+               btnUpload       : 'Trimite la server',\r
+               url             : 'URL',\r
+               upload  : 'Încarcă',\r
+               alt             : 'Text alternativ',\r
+               width           : 'Lăţime',\r
+               height  : 'Înălţime',\r
+               lockRatio       : 'Păstrează proporţiile',\r
+               resetSize       : 'Resetează mărimea',\r
+               border  : 'Margine',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Aliniere',\r
+               alignLeft       : 'Stânga',\r
+               alignAbsBottom: 'Jos absolut (Abs Bottom)',\r
+               alignAbsMiddle: 'Mijloc absolut (Abs Middle)',\r
+               alignBaseline   : 'Linia de jos (Baseline)',\r
+               alignBottom     : 'Jos',\r
+               alignMiddle     : 'Mijloc',\r
+               alignRight      : 'Dreapta',\r
+               alignTextTop    : 'Text sus',\r
+               alignTop        : 'Sus',\r
+               preview : 'Previzualizare',\r
+               alertUrl        : 'Vă rugăm să scrieţi URL-ul imaginii',\r
+               linkTab : 'Link (Legătură web)',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Proprietăţile flash-ului',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Proprietăţile flash-ului',\r
+               chkPlay         : 'Rulează automat',\r
+               chkLoop         : 'Repetă (Loop)',\r
+               chkMenu         : 'Activează meniul flash',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Scală',\r
+               scaleAll                : 'Arată tot',\r
+               scaleNoBorder   : 'Fără margini (No border)',\r
+               scaleFit                : 'Potriveşte',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Aliniere',\r
+               alignLeft       : 'Stânga',\r
+               alignAbsBottom: 'Jos absolut (Abs Bottom)',\r
+               alignAbsMiddle: 'Mijloc absolut (Abs Middle)',\r
+               alignBaseline   : 'Linia de jos (Baseline)',\r
+               alignBottom     : 'Jos',\r
+               alignMiddle     : 'Mijloc',\r
+               alignRight      : 'Dreapta',\r
+               alignTextTop    : 'Text sus',\r
+               alignTop        : 'Sus',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Coloarea fundalului',\r
+               width   : 'Lăţime',\r
+               height  : 'Înălţime',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'Vă rugăm să scrieţi URL-ul',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Verifică text',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Nu e în dicţionar',\r
+               changeTo                : 'Schimbă în',\r
+               btnIgnore               : 'Ignoră',\r
+               btnIgnoreAll    : 'Ignoră toate',\r
+               btnReplace              : 'Înlocuieşte',\r
+               btnReplaceAll   : 'Înlocuieşte tot',\r
+               btnUndo                 : 'Starea anterioară (undo)',\r
+               noSuggestions   : '- Fără sugestii -',\r
+               progress                : 'Verificarea textului în desfăşurare...',\r
+               noMispell               : 'Verificarea textului terminată: Nicio greşeală găsită',\r
+               noChanges               : 'Verificarea textului terminată: Niciun cuvânt modificat',\r
+               oneChange               : 'Verificarea textului terminată: Un cuvânt modificat',\r
+               manyChanges             : 'Verificarea textului terminată: 1% cuvinte modificate',\r
+               ieSpellDownload : 'Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Figură expresivă (Emoticon)',\r
+               title   : 'Inserează o figură expresivă (Emoticon)'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Listă numerotată',\r
+       bulletedlist : 'Listă cu puncte',\r
+       indent : 'Creşte indentarea',\r
+       outdent : 'Scade indentarea',\r
+\r
+       justify :\r
+       {\r
+               left : 'Aliniere la stânga',\r
+               center : 'Aliniere centrală',\r
+               right : 'Aliniere la dreapta',\r
+               block : 'Aliniere în bloc (Block Justify)'\r
+       },\r
+\r
+       blockquote : 'Citat',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Adaugă',\r
+               cutError        : 'Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl+X).',\r
+               copyError       : 'Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl+C).',\r
+               pasteMsg        : 'Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<STRONG>Ctrl+V</STRONG>) şi apăsaţi <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Adaugă din Word',\r
+               title : 'Adaugă din Word',\r
+               advice : 'Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<STRONG>Ctrl+V</STRONG>) şi apăsaţi <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignoră definiţiile Font Face',\r
+               removeStyle : 'Şterge definiţiile stilurilor'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Adaugă ca text simplu (Plain Text)',\r
+               title : 'Adaugă ca text simplu (Plain Text)'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Template-uri (şabloane)',\r
+               title : 'Template-uri (şabloane) de conţinut',\r
+               insertOption: 'Înlocuieşte cuprinsul actual',\r
+               selectPromptMsg: 'Vă rugăm selectaţi template-ul (şablonul) ce se va deschide în editor<br>(conţinutul actual va fi pierdut):',\r
+               emptyListMsg : '(Niciun template (şablon) definit)'\r
+       },\r
+\r
+       showBlocks : 'Arată blocurile',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stil',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formatare',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Formatare',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatted',\r
+               tag_address : 'Address',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Font',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Font',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Mărime',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Mărime',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Culoarea textului',\r
+               bgColorTitle : 'Coloarea fundalului',\r
+               auto : 'Automatic',\r
+               more : 'Mai multe culori...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/ru.js b/_source/lang/ru.js
new file mode 100644 (file)
index 0000000..611f6ac
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Russian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['ru'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Источник',\r
+       newPage                 : 'Новая страница',\r
+       save                    : 'Сохранить',\r
+       preview                 : 'Предварительный просмотр',\r
+       cut                             : 'Вырезать',\r
+       copy                    : 'Копировать',\r
+       paste                   : 'Вставить',\r
+       print                   : 'Печать',\r
+       underline               : 'Подчеркнутый',\r
+       bold                    : 'Жирный',\r
+       italic                  : 'Курсив',\r
+       selectAll               : 'Выделить все',\r
+       removeFormat    : 'Убрать форматирование',\r
+       strike                  : 'Зачеркнутый',\r
+       subscript               : 'Подстрочный индекс',\r
+       superscript             : 'Надстрочный индекс',\r
+       horizontalrule  : 'Вставить горизонтальную линию',\r
+       pagebreak               : 'Вставить разрыв страницы',\r
+       unlink                  : 'Убрать ссылку',\r
+       undo                    : 'Отменить',\r
+       redo                    : 'Повторить',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Просмотреть на сервере',\r
+               url                             : 'URL',\r
+               protocol                : 'Протокол',\r
+               upload                  : 'Закачать',\r
+               uploadSubmit    : 'Послать на сервер',\r
+               image                   : 'Изображение',\r
+               flash                   : 'Flash',\r
+               form                    : 'Форма',\r
+               checkbox                : 'Флаговая кнопка',\r
+               radio           : 'Кнопка выбора',\r
+               textField               : 'Текстовое поле',\r
+               textarea                : 'Текстовая область',\r
+               hiddenField             : 'Скрытое поле',\r
+               button                  : 'Кнопка',\r
+               select  : 'Список',\r
+               imageButton             : 'Кнопка с изображением',\r
+               notSet                  : '<не определено>',\r
+               id                              : 'Идентификатор',\r
+               name                    : 'Имя',\r
+               langDir                 : 'Направление языка',\r
+               langDirLtr              : 'Слева на право (LTR)',\r
+               langDirRtl              : 'Справа на лево (RTL)',\r
+               langCode                : 'Язык',\r
+               longDescr               : 'Длинное описание URL',\r
+               cssClass                : 'Класс CSS',\r
+               advisoryTitle   : 'Заголовок',\r
+               cssStyle                : 'Стиль CSS',\r
+               ok                              : 'ОК',\r
+               cancel                  : 'Отмена',\r
+               generalTab              : 'Информация',\r
+               advancedTab             : 'Расширенный',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Вставить специальный символ',\r
+               title           : 'Выберите специальный символ'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Вставить/Редактировать ссылку',\r
+               menu            : 'Вставить ссылку',\r
+               title           : 'Ссылка',\r
+               info            : 'Информация ссылки',\r
+               target          : 'Цель',\r
+               upload          : 'Закачать',\r
+               advanced        : 'Расширенный',\r
+               type            : 'Тип ссылки',\r
+               toAnchor        : 'Якорь на эту страницу',\r
+               toEmail         : 'Эл. почта',\r
+               target          : 'Цель',\r
+               targetNotSet    : '<не определено>',\r
+               targetFrame     : '<фрейм>',\r
+               targetPopup     : '<всплывающее окно>',\r
+               targetNew       : 'Новое окно (_blank)',\r
+               targetTop       : 'Самое верхнее окно (_top)',\r
+               targetSelf      : 'Тоже окно (_self)',\r
+               targetParent    : 'Родительское окно (_parent)',\r
+               targetFrameName : 'Имя целевого фрейма',\r
+               targetPopupName : 'Имя всплывающего окна',\r
+               popupFeatures   : 'Свойства всплывающего окна',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Строка состояния',\r
+               popupLocationBar        : 'Панель локации',\r
+               popupToolbar    : 'Панель инструментов',\r
+               popupMenuBar    : 'Панель меню',\r
+               popupFullScreen : 'Полный экран (IE)',\r
+               popupScrollBars : 'Полосы прокрутки',\r
+               popupDependent  : 'Зависимый (Netscape)',\r
+               popupWidth              : 'Ширина',\r
+               popupLeft               : 'Позиция слева',\r
+               popupHeight             : 'Высота',\r
+               popupTop                : 'Позиция сверху',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Направление языка',\r
+               langDirNotSet   : '<не определено>',\r
+               langDirLTR              : 'Слева на право (LTR)',\r
+               langDirRTL              : 'Справа на лево (RTL)',\r
+               acccessKey              : 'Горячая клавиша',\r
+               name                    : 'Имя',\r
+               langCode                : 'Направление языка',\r
+               tabIndex                : 'Последовательность перехода',\r
+               advisoryTitle   : 'Заголовок',\r
+               advisoryContentType     : 'Тип содержимого',\r
+               cssClasses              : 'Класс CSS',\r
+               charset                 : 'Кодировка',\r
+               styles                  : 'Стиль CSS',\r
+               selectAnchor    : 'Выберите якорь',\r
+               anchorName              : 'По имени якоря',\r
+               anchorId                : 'По идентификатору элемента',\r
+               emailAddress    : 'Адрес эл. почты',\r
+               emailSubject    : 'Заголовок сообщения',\r
+               emailBody               : 'Тело сообщения',\r
+               noAnchors               : '(Нет якорей доступных в этом документе)',\r
+               noUrl                   : 'Пожалуйста, введите URL ссылки',\r
+               noEmail                 : 'Пожалуйста, введите адрес эл. почты'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Вставить/Редактировать якорь',\r
+               menu            : 'Свойства якоря',\r
+               title           : 'Свойства якоря',\r
+               name            : 'Имя якоря',\r
+               errorName       : 'Пожалуйста, введите имя якоря'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Найти и заменить',\r
+               find                            : 'Найти',\r
+               replace                         : 'Заменить',\r
+               findWhat                        : 'Найти:',\r
+               replaceWith                     : 'Заменить на:',\r
+               notFoundMsg                     : 'Указанный текст не найден.',\r
+               matchCase                       : 'Учитывать регистр',\r
+               matchWord                       : 'Совпадение целых слов',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Заменить все',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Таблица',\r
+               title           : 'Свойства таблицы',\r
+               menu            : 'Свойства таблицы',\r
+               deleteTable     : 'Удалить таблицу',\r
+               rows            : 'Строки',\r
+               columns         : 'Колонки',\r
+               border          : 'Размер бордюра',\r
+               align           : 'Выравнивание',\r
+               alignNotSet     : '<Не уст.>',\r
+               alignLeft       : 'Слева',\r
+               alignCenter     : 'По центру',\r
+               alignRight      : 'Справа',\r
+               width           : 'Ширина',\r
+               widthPx         : 'пикселей',\r
+               widthPc         : 'процентов',\r
+               height          : 'Высота',\r
+               cellSpace       : 'Промежуток (spacing)',\r
+               cellPad         : 'Отступ (padding)',\r
+               caption         : 'Заголовок',\r
+               summary         : 'Резюме',\r
+               headers         : 'Заголовки',\r
+               headersNone             : 'Нет',\r
+               headersColumn   : 'Первый столбец',\r
+               headersRow              : 'Первая строка',\r
+               headersBoth             : 'Оба варианта',\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Ячейка',\r
+                       insertBefore    : 'Вставить ячейку до',\r
+                       insertAfter             : 'Вставить ячейку после',\r
+                       deleteCell              : 'Удалить ячейки',\r
+                       merge                   : 'Соединить ячейки',\r
+                       mergeRight              : 'Соединить вправо',\r
+                       mergeDown               : 'Соединить вниз',\r
+                       splitHorizontal : 'Разбить ячейку горизонтально',\r
+                       splitVertical   : 'Разбить ячейку вертикально',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Строка',\r
+                       insertBefore    : 'Вставить строку до',\r
+                       insertAfter             : 'Вставить строку после',\r
+                       deleteRow               : 'Удалить строки'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Колонка',\r
+                       insertBefore    : 'Вставить колонку до',\r
+                       insertAfter             : 'Вставить колонку после',\r
+                       deleteColumn    : 'Удалить колонки'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Свойства кнопки',\r
+               text            : 'Текст (Значение)',\r
+               type            : 'Тип',\r
+               typeBtn         : 'Кнопка',\r
+               typeSbm         : 'Отправить',\r
+               typeRst         : 'Сбросить'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Свойства флаговой кнопки',\r
+               radioTitle      : 'Свойства кнопки выбора',\r
+               value           : 'Значение',\r
+               selected        : 'Выбранная'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Свойства формы',\r
+               menu            : 'Свойства формы',\r
+               action          : 'Действие',\r
+               method          : 'Метод',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Цель',\r
+               targetNotSet    : '<не определено>',\r
+               targetNew       : 'Новое окно (_blank)',\r
+               targetTop       : 'Самое верхнее окно (_top)',\r
+               targetSelf      : 'Тоже окно (_self)',\r
+               targetParent    : 'Родительское окно (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Свойства списка',\r
+               selectInfo      : 'Информация',\r
+               opAvail         : 'Доступные варианты',\r
+               value           : 'Значение',\r
+               size            : 'Размер',\r
+               lines           : 'линии',\r
+               chkMulti        : 'Разрешить множественный выбор',\r
+               opText          : 'Текст',\r
+               opValue         : 'Значение',\r
+               btnAdd          : 'Добавить',\r
+               btnModify       : 'Модифицировать',\r
+               btnUp           : 'Вверх',\r
+               btnDown         : 'Вниз',\r
+               btnSetValue : 'Установить как выбранное значение',\r
+               btnDelete       : 'Удалить'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Свойства текстовой области',\r
+               cols            : 'Колонки',\r
+               rows            : 'Строки'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Свойства текстового поля',\r
+               name            : 'Имя',\r
+               value           : 'Значение',\r
+               charWidth       : 'Ширина',\r
+               maxChars        : 'Макс. кол-во символов',\r
+               type            : 'Тип',\r
+               typeText        : 'Текст',\r
+               typePass        : 'Пароль'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Свойства скрытого поля',\r
+               name    : 'Имя',\r
+               value   : 'Значение'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Свойства изображения',\r
+               titleButton     : 'Свойства кнопки с изображением',\r
+               menu            : 'Свойства изображения',\r
+               infoTab : 'Информация о изображении',\r
+               btnUpload       : 'Послать на сервер',\r
+               url             : 'URL',\r
+               upload  : 'Закачать',\r
+               alt             : 'Альтернативный текст',\r
+               width           : 'Ширина',\r
+               height  : 'Высота',\r
+               lockRatio       : 'Сохранять пропорции',\r
+               resetSize       : 'Сбросить размер',\r
+               border  : 'Бордюр',\r
+               hSpace  : 'Горизонтальный отступ',\r
+               vSpace  : 'Вертикальный отступ',\r
+               align           : 'Выравнивание',\r
+               alignLeft       : 'По левому краю',\r
+               alignAbsBottom: 'Абс понизу',\r
+               alignAbsMiddle: 'Абс посередине',\r
+               alignBaseline   : 'По базовой линии',\r
+               alignBottom     : 'Понизу',\r
+               alignMiddle     : 'Посередине',\r
+               alignRight      : 'По правому краю',\r
+               alignTextTop    : 'Текст наверху',\r
+               alignTop        : 'По верху',\r
+               preview : 'Предварительный просмотр',\r
+               alertUrl        : 'Пожалуйста, введите URL изображения',\r
+               linkTab : 'Ссылка',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Свойства Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Свойства Flash',\r
+               chkPlay         : 'Авто проигрывание',\r
+               chkLoop         : 'Повтор',\r
+               chkMenu         : 'Включить меню Flash',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Масштабировать',\r
+               scaleAll                : 'Показывать все',\r
+               scaleNoBorder   : 'Без бордюра',\r
+               scaleFit                : 'Точное совпадение',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Выравнивание',\r
+               alignLeft       : 'По левому краю',\r
+               alignAbsBottom: 'Абс понизу',\r
+               alignAbsMiddle: 'Абс посередине',\r
+               alignBaseline   : 'По базовой линии',\r
+               alignBottom     : 'Понизу',\r
+               alignMiddle     : 'Посередине',\r
+               alignRight      : 'По правому краю',\r
+               alignTextTop    : 'Текст наверху',\r
+               alignTop        : 'По верху',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Цвет фона',\r
+               width   : 'Ширина',\r
+               height  : 'Высота',\r
+               hSpace  : 'Горизонтальный отступ',\r
+               vSpace  : 'Вертикальный отступ',\r
+               validateSrc : 'Пожалуйста, введите URL ссылки',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Проверить орфографию',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Нет в словаре',\r
+               changeTo                : 'Заменить на',\r
+               btnIgnore               : 'Игнорировать',\r
+               btnIgnoreAll    : 'Игнорировать все',\r
+               btnReplace              : 'Заменить',\r
+               btnReplaceAll   : 'Заменить все',\r
+               btnUndo                 : 'Отменить',\r
+               noSuggestions   : '- Нет предположений -',\r
+               progress                : 'Идет проверка орфографии...',\r
+               noMispell               : 'Проверка орфографии закончена: ошибок не найдено',\r
+               noChanges               : 'Проверка орфографии закончена: ни одного слова не изменено',\r
+               oneChange               : 'Проверка орфографии закончена: одно слово изменено',\r
+               manyChanges             : 'Проверка орфографии закончена: 1% слов изменен',\r
+               ieSpellDownload : 'Модуль проверки орфографии не установлен. Хотите скачать его сейчас?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Смайлик',\r
+               title   : 'Вставить смайлик'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Нумерованный список',\r
+       bulletedlist : 'Маркированный список',\r
+       indent : 'Увеличить отступ',\r
+       outdent : 'Уменьшить отступ',\r
+\r
+       justify :\r
+       {\r
+               left : 'По левому краю',\r
+               center : 'По центру',\r
+               right : 'По правому краю',\r
+               block : 'По ширине'\r
+       },\r
+\r
+       blockquote : 'Цитата',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Вставить',\r
+               cutError        : 'Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции вырезания. Пожалуйста, используйте клавиатуру для этого (Ctrl+X).',\r
+               copyError       : 'Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции копирования. Пожалуйста, используйте клавиатуру для этого (Ctrl+C).',\r
+               pasteMsg        : 'Пожалуйста, вставьте текст в прямоугольник, используя сочетание клавиш (<STRONG>Ctrl+V</STRONG>), и нажмите <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'По причине настроек безопасности браузера, редактор не имеет доступа к данным буфера обмена напрямую. Вам необходимо вставить текст снова в это окно.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Вставить из Word',\r
+               title : 'Вставить из Word',\r
+               advice : 'Пожалуйста, вставьте текст в прямоугольник, используя сочетание клавиш (<STRONG>Ctrl+V</STRONG>), и нажмите <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Игнорировать определения гарнитуры',\r
+               removeStyle : 'Убрать определения стилей'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Вставить только текст',\r
+               title : 'Вставить только текст'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Шаблоны',\r
+               title : 'Шаблоны содержимого',\r
+               insertOption: 'Заменить текущее содержание',\r
+               selectPromptMsg: 'Пожалуйста, выберете шаблон для открытия в редакторе<br>(текущее содержимое будет потеряно):',\r
+               emptyListMsg : '(Ни одного шаблона не определено)'\r
+       },\r
+\r
+       showBlocks : 'Показать блоки',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Стиль',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Форматирование',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Форматирование',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Нормальный',\r
+               tag_pre : 'Форматированный',\r
+               tag_address : 'Адрес',\r
+               tag_h1 : 'Заголовок 1',\r
+               tag_h2 : 'Заголовок 2',\r
+               tag_h3 : 'Заголовок 3',\r
+               tag_h4 : 'Заголовок 4',\r
+               tag_h5 : 'Заголовок 5',\r
+               tag_h6 : 'Заголовок 6',\r
+               tag_div : 'Нормальный (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Шрифт',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Шрифт',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Размер',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Размер',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Цвет текста',\r
+               bgColorTitle : 'Цвет фона',\r
+               auto : 'Автоматический',\r
+               more : 'Цвета...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/sk.js b/_source/lang/sk.js
new file mode 100644 (file)
index 0000000..19925e4
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Slovak language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['sk'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Zdroj',\r
+       newPage                 : 'Nová stránka',\r
+       save                    : 'Uložiť',\r
+       preview                 : 'Náhľad',\r
+       cut                             : 'Vystrihnúť',\r
+       copy                    : 'Kopírovať',\r
+       paste                   : 'Vložiť',\r
+       print                   : 'Tlač',\r
+       underline               : 'Podčiarknuté',\r
+       bold                    : 'Tučné',\r
+       italic                  : 'Kurzíva',\r
+       selectAll               : 'Vybrať všetko',\r
+       removeFormat    : 'Odstrániť formátovanie',\r
+       strike                  : 'Prečiarknuté',\r
+       subscript               : 'Dolný index',\r
+       superscript             : 'Horný index',\r
+       horizontalrule  : 'Vložiť vodorovnú čiaru',\r
+       pagebreak               : 'Vložiť oddeľovač stránky',\r
+       unlink                  : 'Odstrániť odkaz',\r
+       undo                    : 'Späť',\r
+       redo                    : 'Znovu',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Prechádzať server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokol',\r
+               upload                  : 'Odoslať',\r
+               uploadSubmit    : 'Odoslať na server',\r
+               image                   : 'Obrázok',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formulár',\r
+               checkbox                : 'Zaškrtávacie políčko',\r
+               radio           : 'Prepínač',\r
+               textField               : 'Textové pole',\r
+               textarea                : 'Textová oblasť',\r
+               hiddenField             : 'Skryté pole',\r
+               button                  : 'Tlačidlo',\r
+               select  : 'Rozbaľovací zoznam',\r
+               imageButton             : 'Obrázkové tlačidlo',\r
+               notSet                  : '<nenastavené>',\r
+               id                              : 'Id',\r
+               name                    : 'Meno',\r
+               langDir                 : 'Orientácia jazyka',\r
+               langDirLtr              : 'Zľava doprava (LTR)',\r
+               langDirRtl              : 'Sprava doľava (RTL)',\r
+               langCode                : 'Kód jazyka',\r
+               longDescr               : 'Dlhý popis URL',\r
+               cssClass                : 'Trieda štýlu',\r
+               advisoryTitle   : 'Pomocný titulok',\r
+               cssStyle                : 'Štýl',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Zrušiť',\r
+               generalTab              : 'Hlavné',\r
+               advancedTab             : 'Rozšírené',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Vložiť špeciálne znaky',\r
+               title           : 'Výber špeciálneho znaku'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Vložiť/zmeniť odkaz',\r
+               menu            : 'Zmeniť odkaz',\r
+               title           : 'Odkaz',\r
+               info            : 'Informácie o odkaze',\r
+               target          : 'Cieľ',\r
+               upload          : 'Odoslať',\r
+               advanced        : 'Rozšírené',\r
+               type            : 'Typ odkazu',\r
+               toAnchor        : 'Kotva v tejto stránke',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Cieľ',\r
+               targetNotSet    : '<nenastavené>',\r
+               targetFrame     : '<rámec>',\r
+               targetPopup     : '<vyskakovacie okno>',\r
+               targetNew       : 'Nové okno (_blank)',\r
+               targetTop       : 'Hlavné okno (_top)',\r
+               targetSelf      : 'Rovnaké okno (_self)',\r
+               targetParent    : 'Rodičovské okno (_parent)',\r
+               targetFrameName : 'Meno rámu cieľa',\r
+               targetPopupName : 'Názov vyskakovacieho okna',\r
+               popupFeatures   : 'Vlastnosti vyskakovacieho okna',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Stavový riadok',\r
+               popupLocationBar        : 'Panel umiestnenia',\r
+               popupToolbar    : 'Panel nástrojov',\r
+               popupMenuBar    : 'Panel ponuky',\r
+               popupFullScreen : 'Celá obrazovka (IE)',\r
+               popupScrollBars : 'Posuvníky',\r
+               popupDependent  : 'Závislosť (Netscape)',\r
+               popupWidth              : 'Šírka',\r
+               popupLeft               : 'Ľavý okraj',\r
+               popupHeight             : 'Výška',\r
+               popupTop                : 'Horný okraj',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Orientácia jazyka',\r
+               langDirNotSet   : '<nenastavené>',\r
+               langDirLTR              : 'Zľava doprava (LTR)',\r
+               langDirRTL              : 'Sprava doľava (RTL)',\r
+               acccessKey              : 'Prístupový kľúč',\r
+               name                    : 'Meno',\r
+               langCode                : 'Orientácia jazyka',\r
+               tabIndex                : 'Poradie prvku',\r
+               advisoryTitle   : 'Pomocný titulok',\r
+               advisoryContentType     : 'Pomocný typ obsahu',\r
+               cssClasses              : 'Trieda štýlu',\r
+               charset                 : 'Priradená znaková sada',\r
+               styles                  : 'Štýl',\r
+               selectAnchor    : 'Vybrať kotvu',\r
+               anchorName              : 'Podľa mena kotvy',\r
+               anchorId                : 'Podľa Id objektu',\r
+               emailAddress    : 'E-Mailová adresa',\r
+               emailSubject    : 'Predmet správy',\r
+               emailBody               : 'Telo správy',\r
+               noAnchors               : '(V stránke nie je definovaná žiadna kotva)',\r
+               noUrl                   : 'Zadajte prosím URL odkazu',\r
+               noEmail                 : 'Zadajte prosím e-mailovú adresu'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Vložiť/zmeniť kotvu',\r
+               menu            : 'Vlastnosti kotvy',\r
+               title           : 'Vlastnosti kotvy',\r
+               name            : 'Meno kotvy',\r
+               errorName       : 'Zadajte prosím meno kotvy'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Nájsť a nahradiť',\r
+               find                            : 'Hľadať',\r
+               replace                         : 'Nahradiť',\r
+               findWhat                        : 'Čo hľadať:',\r
+               replaceWith                     : 'Čím nahradiť:',\r
+               notFoundMsg                     : 'Hľadaný text nebol nájdený.',\r
+               matchCase                       : 'Rozlišovať malé/veľké písmená',\r
+               matchWord                       : 'Len celé slová',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Nahradiť všetko',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabuľka',\r
+               title           : 'Vlastnosti tabuľky',\r
+               menu            : 'Vlastnosti tabuľky',\r
+               deleteTable     : 'Vymazať tabuľku',\r
+               rows            : 'Riadky',\r
+               columns         : 'Stĺpce',\r
+               border          : 'Ohraničenie',\r
+               align           : 'Zarovnanie',\r
+               alignNotSet     : '<nenastavené>',\r
+               alignLeft       : 'Vľavo',\r
+               alignCenter     : 'Na stred',\r
+               alignRight      : 'Vpravo',\r
+               width           : 'Šírka',\r
+               widthPx         : 'pixelov',\r
+               widthPc         : 'percent',\r
+               height          : 'Výška',\r
+               cellSpace       : 'Vzdialenosť buniek',\r
+               cellPad         : 'Odsadenie obsahu',\r
+               caption         : 'Popis',\r
+               summary         : 'Prehľad',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Bunka',\r
+                       insertBefore    : 'Vložiť bunku pred',\r
+                       insertAfter             : 'Vložiť bunku za',\r
+                       deleteCell              : 'Vymazať bunky',\r
+                       merge                   : 'Zlúčiť bunky',\r
+                       mergeRight              : 'Zlúčiť doprava',\r
+                       mergeDown               : 'Zlúčiť dole',\r
+                       splitHorizontal : 'Rozdeliť bunky horizontálne',\r
+                       splitVertical   : 'Rozdeliť bunky vertikálne',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Riadok',\r
+                       insertBefore    : 'Vložiť riadok za',\r
+                       insertAfter             : 'Vložiť riadok pred',\r
+                       deleteRow               : 'Vymazať riadok'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Stĺpec',\r
+                       insertBefore    : 'Vložiť stĺpec za',\r
+                       insertAfter             : 'Vložiť stĺpec pred',\r
+                       deleteColumn    : 'Zmazať stĺpec'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Vlastnosti tlačidla',\r
+               text            : 'Text',\r
+               type            : 'Typ',\r
+               typeBtn         : 'Tlačidlo',\r
+               typeSbm         : 'Odoslať',\r
+               typeRst         : 'Vymazať'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Vlastnosti zaškrtávacieho políčka',\r
+               radioTitle      : 'Vlastnosti prepínača',\r
+               value           : 'Hodnota',\r
+               selected        : 'Vybrané'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Vlastnosti formulára',\r
+               menu            : 'Vlastnosti formulára',\r
+               action          : 'Akcie',\r
+               method          : 'Metóda',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Cieľ',\r
+               targetNotSet    : '<nenastavené>',\r
+               targetNew       : 'Nové okno (_blank)',\r
+               targetTop       : 'Hlavné okno (_top)',\r
+               targetSelf      : 'Rovnaké okno (_self)',\r
+               targetParent    : 'Rodičovské okno (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Vlastnosti rozbaľovacieho zoznamu',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Dostupné možnosti',\r
+               value           : 'Hodnota',\r
+               size            : 'Veľkosť',\r
+               lines           : 'riadkov',\r
+               chkMulti        : 'Povoliť viacnásobný výber',\r
+               opText          : 'Text',\r
+               opValue         : 'Hodnota',\r
+               btnAdd          : 'Pridať',\r
+               btnModify       : 'Zmeniť',\r
+               btnUp           : 'Hore',\r
+               btnDown         : 'Dole',\r
+               btnSetValue : 'Nastaviť ako vybranú hodnotu',\r
+               btnDelete       : 'Zmazať'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Vlastnosti textovej oblasti',\r
+               cols            : 'Stĺpce',\r
+               rows            : 'Riadky'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Vlastnosti textového poľa',\r
+               name            : 'Názov',\r
+               value           : 'Hodnota',\r
+               charWidth       : 'Šírka pola (znakov)',\r
+               maxChars        : 'Maximálny počet znakov',\r
+               type            : 'Typ',\r
+               typeText        : 'Text',\r
+               typePass        : 'Heslo'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Vlastnosti skrytého poľa',\r
+               name    : 'Názov',\r
+               value   : 'Hodnota'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Vlastnosti obrázku',\r
+               titleButton     : 'Vlastnosti obrázkového tlačidla',\r
+               menu            : 'Vlastnosti obrázku',\r
+               infoTab : 'Informácie o obrázku',\r
+               btnUpload       : 'Odoslať na server',\r
+               url             : 'URL',\r
+               upload  : 'Odoslať',\r
+               alt             : 'Alternatívny text',\r
+               width           : 'Šírka',\r
+               height  : 'Výška',\r
+               lockRatio       : 'Zámok',\r
+               resetSize       : 'Pôvodná veľkosť',\r
+               border  : 'Okraje',\r
+               hSpace  : 'H-medzera',\r
+               vSpace  : 'V-medzera',\r
+               align           : 'Zarovnanie',\r
+               alignLeft       : 'Vľavo',\r
+               alignAbsBottom: 'Úplne dole',\r
+               alignAbsMiddle: 'Do stredu',\r
+               alignBaseline   : 'Na základňu',\r
+               alignBottom     : 'Dole',\r
+               alignMiddle     : 'Na stred',\r
+               alignRight      : 'Vpravo',\r
+               alignTextTop    : 'Na horný okraj textu',\r
+               alignTop        : 'Nahor',\r
+               preview : 'Náhľad',\r
+               alertUrl        : 'Zadajte prosím URL obrázku',\r
+               linkTab : 'Odkaz',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Vlastnosti Flashu',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Vlastnosti Flashu',\r
+               chkPlay         : 'Automatické prehrávanie',\r
+               chkLoop         : 'Opakovanie',\r
+               chkMenu         : 'Povoliť Flash Menu',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Mierka',\r
+               scaleAll                : 'Zobraziť mierku',\r
+               scaleNoBorder   : 'Bez okrajov',\r
+               scaleFit                : 'Roztiahnuť na celé',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Zarovnanie',\r
+               alignLeft       : 'Vľavo',\r
+               alignAbsBottom: 'Úplne dole',\r
+               alignAbsMiddle: 'Do stredu',\r
+               alignBaseline   : 'Na základňu',\r
+               alignBottom     : 'Dole',\r
+               alignMiddle     : 'Na stred',\r
+               alignRight      : 'Vpravo',\r
+               alignTextTop    : 'Na horný okraj textu',\r
+               alignTop        : 'Nahor',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Farba pozadia',\r
+               width   : 'Šírka',\r
+               height  : 'Výška',\r
+               hSpace  : 'H-medzera',\r
+               vSpace  : 'V-medzera',\r
+               validateSrc : 'Zadajte prosím URL odkazu',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Kontrola pravopisu',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Nie je v slovníku',\r
+               changeTo                : 'Zmeniť na',\r
+               btnIgnore               : 'Ignorovať',\r
+               btnIgnoreAll    : 'Ignorovať všetko',\r
+               btnReplace              : 'Prepísat',\r
+               btnReplaceAll   : 'Prepísat všetko',\r
+               btnUndo                 : 'Späť',\r
+               noSuggestions   : '- Žiadny návrh -',\r
+               progress                : 'Prebieha kontrola pravopisu...',\r
+               noMispell               : 'Kontrola pravopisu dokončená: bez chýb',\r
+               noChanges               : 'Kontrola pravopisu dokončená: žiadne slová nezmenené',\r
+               oneChange               : 'Kontrola pravopisu dokončená: zmenené jedno slovo',\r
+               manyChanges             : 'Kontrola pravopisu dokončená: zmenených %1 slov',\r
+               ieSpellDownload : 'Kontrola pravopisu nie je naištalovaná. Chcete ju hneď stiahnuť?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smajlíky',\r
+               title   : 'Vkladanie smajlíkov'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Číslovanie',\r
+       bulletedlist : 'Odrážky',\r
+       indent : 'Zväčšiť odsadenie',\r
+       outdent : 'Zmenšiť odsadenie',\r
+\r
+       justify :\r
+       {\r
+               left : 'Zarovnať vľavo',\r
+               center : 'Zarovnať na stred',\r
+               right : 'Zarovnať vpravo',\r
+               block : 'Zarovnať do bloku'\r
+       },\r
+\r
+       blockquote : 'Citácia',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Vložiť',\r
+               cutError        : 'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru spustiť funkciu pre vystrihnutie zvoleného textu do schránky. Prosím vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl+X).',\r
+               copyError       : 'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru spustiť funkciu pre kopírovanie zvoleného textu do schránky. Prosím skopírujte zvolený text do schránky pomocou klávesnice (Ctrl+C).',\r
+               pasteMsg        : 'Prosím vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl+V</STRONG>) a stlačte <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru pristupovať priamo k datám v schránke. Musíte ich vložiť znovu do tohto okna.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Vložiť z Wordu',\r
+               title : 'Vložiť z Wordu',\r
+               advice : 'Prosím vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl+V</STRONG>) a stlačte <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignorovať nastavenia typu písma',\r
+               removeStyle : 'Odstrániť formátovanie'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Vložiť ako čistý text',\r
+               title : 'Vložiť ako čistý text'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Šablóny',\r
+               title : 'Šablóny obsahu',\r
+               insertOption: 'Nahradiť aktuálny obsah',\r
+               selectPromptMsg: 'Prosím vyberte šablóny na otvorenie v editore<br>(súšasný obsah bude stratený):',\r
+               emptyListMsg : '(žiadne šablóny nenájdené)'\r
+       },\r
+\r
+       showBlocks : 'Ukázať bloky',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Štýl',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Formát',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Formát',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normálny',\r
+               tag_pre : 'Formátovaný',\r
+               tag_address : 'Adresa',\r
+               tag_h1 : 'Nadpis 1',\r
+               tag_h2 : 'Nadpis 2',\r
+               tag_h3 : 'Nadpis 3',\r
+               tag_h4 : 'Nadpis 4',\r
+               tag_h5 : 'Nadpis 5',\r
+               tag_h6 : 'Nadpis 6',\r
+               tag_div : 'Odsek (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Písmo',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Písmo',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Veľkosť',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Veľkosť',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Farba textu',\r
+               bgColorTitle : 'Farba pozadia',\r
+               auto : 'Automaticky',\r
+               more : 'Viac farieb...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/sl.js b/_source/lang/sl.js
new file mode 100644 (file)
index 0000000..7ec81ab
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Slovenian language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['sl'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Izvorna koda',\r
+       newPage                 : 'Nova stran',\r
+       save                    : 'Shrani',\r
+       preview                 : 'Predogled',\r
+       cut                             : 'Izreži',\r
+       copy                    : 'Kopiraj',\r
+       paste                   : 'Prilepi',\r
+       print                   : 'Natisni',\r
+       underline               : 'Podčrtano',\r
+       bold                    : 'Krepko',\r
+       italic                  : 'Ležeče',\r
+       selectAll               : 'Izberi vse',\r
+       removeFormat    : 'Odstrani oblikovanje',\r
+       strike                  : 'Prečrtano',\r
+       subscript               : 'Podpisano',\r
+       superscript             : 'Nadpisano',\r
+       horizontalrule  : 'Vstavi vodoravno črto',\r
+       pagebreak               : 'Vstavi prelom strani',\r
+       unlink                  : 'Odstrani povezavo',\r
+       undo                    : 'Razveljavi',\r
+       redo                    : 'Ponovi',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Prebrskaj na strežniku',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokol',\r
+               upload                  : 'Prenesi',\r
+               uploadSubmit    : 'Pošlji na strežnik',\r
+               image                   : 'Slika',\r
+               flash                   : 'Flash',\r
+               form                    : 'Obrazec',\r
+               checkbox                : 'Potrditveno polje',\r
+               radio           : 'Izbirno polje',\r
+               textField               : 'Vnosno polje',\r
+               textarea                : 'Vnosno območje',\r
+               hiddenField             : 'Skrito polje',\r
+               button                  : 'Gumb',\r
+               select  : 'Spustni seznam',\r
+               imageButton             : 'Gumb s sliko',\r
+               notSet                  : '<ni postavljen>',\r
+               id                              : 'Id',\r
+               name                    : 'Ime',\r
+               langDir                 : 'Smer jezika',\r
+               langDirLtr              : 'Od leve proti desni (LTR)',\r
+               langDirRtl              : 'Od desne proti levi (RTL)',\r
+               langCode                : 'Oznaka jezika',\r
+               longDescr               : 'Dolg opis URL-ja',\r
+               cssClass                : 'Razred stilne predloge',\r
+               advisoryTitle   : 'Predlagani naslov',\r
+               cssStyle                : 'Slog',\r
+               ok                              : 'V redu',\r
+               cancel                  : 'Prekliči',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Napredno',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Vstavi posebni znak',\r
+               title           : 'Izberi posebni znak'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Vstavi/uredi povezavo',\r
+               menu            : 'Uredi povezavo',\r
+               title           : 'Povezava',\r
+               info            : 'Podatki o povezavi',\r
+               target          : 'Cilj',\r
+               upload          : 'Prenesi',\r
+               advanced        : 'Napredno',\r
+               type            : 'Vrsta povezave',\r
+               toAnchor        : 'Zaznamek na tej strani',\r
+               toEmail         : 'Elektronski naslov',\r
+               target          : 'Cilj',\r
+               targetNotSet    : '<ni postavljen>',\r
+               targetFrame     : '<okvir>',\r
+               targetPopup     : '<pojavno okno>',\r
+               targetNew       : 'Novo okno (_blank)',\r
+               targetTop       : 'Najvišje okno (_top)',\r
+               targetSelf      : 'Isto okno (_self)',\r
+               targetParent    : 'Starševsko okno (_parent)',\r
+               targetFrameName : 'Ime ciljnega okvirja',\r
+               targetPopupName : 'Ime pojavnega okna',\r
+               popupFeatures   : 'Značilnosti pojavnega okna',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Vrstica stanja',\r
+               popupLocationBar        : 'Naslovna vrstica',\r
+               popupToolbar    : 'Orodna vrstica',\r
+               popupMenuBar    : 'Menijska vrstica',\r
+               popupFullScreen : 'Celozaslonska slika (IE)',\r
+               popupScrollBars : 'Drsniki',\r
+               popupDependent  : 'Podokno (Netscape)',\r
+               popupWidth              : 'Širina',\r
+               popupLeft               : 'Lega levo',\r
+               popupHeight             : 'Višina',\r
+               popupTop                : 'Lega na vrhu',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Smer jezika',\r
+               langDirNotSet   : '<ni postavljen>',\r
+               langDirLTR              : 'Od leve proti desni (LTR)',\r
+               langDirRTL              : 'Od desne proti levi (RTL)',\r
+               acccessKey              : 'Vstopno geslo',\r
+               name                    : 'Ime',\r
+               langCode                : 'Smer jezika',\r
+               tabIndex                : 'Številka tabulatorja',\r
+               advisoryTitle   : 'Predlagani naslov',\r
+               advisoryContentType     : 'Predlagani tip vsebine (content-type)',\r
+               cssClasses              : 'Razred stilne predloge',\r
+               charset                 : 'Kodna tabela povezanega vira',\r
+               styles                  : 'Slog',\r
+               selectAnchor    : 'Izberi zaznamek',\r
+               anchorName              : 'Po imenu zaznamka',\r
+               anchorId                : 'Po ID-ju elementa',\r
+               emailAddress    : 'Elektronski naslov',\r
+               emailSubject    : 'Predmet sporočila',\r
+               emailBody               : 'Vsebina sporočila',\r
+               noAnchors               : '(V tem dokumentu ni zaznamkov)',\r
+               noUrl                   : 'Vnesite URL povezave',\r
+               noEmail                 : 'Vnesite elektronski naslov'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Vstavi/uredi zaznamek',\r
+               menu            : 'Lastnosti zaznamka',\r
+               title           : 'Lastnosti zaznamka',\r
+               name            : 'Ime zaznamka',\r
+               errorName       : 'Prosim vnesite ime zaznamka'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Najdi in zamenjaj',\r
+               find                            : 'Najdi',\r
+               replace                         : 'Zamenjaj',\r
+               findWhat                        : 'Najdi:',\r
+               replaceWith                     : 'Zamenjaj z:',\r
+               notFoundMsg                     : 'Navedeno besedilo ni bilo najdeno.',\r
+               matchCase                       : 'Razlikuj velike in male črke',\r
+               matchWord                       : 'Samo cele besede',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Zamenjaj vse',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabela',\r
+               title           : 'Lastnosti tabele',\r
+               menu            : 'Lastnosti tabele',\r
+               deleteTable     : 'Izbriši tabelo',\r
+               rows            : 'Vrstice',\r
+               columns         : 'Stolpci',\r
+               border          : 'Velikost obrobe',\r
+               align           : 'Poravnava',\r
+               alignNotSet     : '<Ni nastavljeno>',\r
+               alignLeft       : 'Levo',\r
+               alignCenter     : 'Sredinsko',\r
+               alignRight      : 'Desno',\r
+               width           : 'Širina',\r
+               widthPx         : 'pik',\r
+               widthPc         : 'procentov',\r
+               height          : 'Višina',\r
+               cellSpace       : 'Razmik med celicami',\r
+               cellPad         : 'Polnilo med celicami',\r
+               caption         : 'Naslov',\r
+               summary         : 'Povzetek',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Celica',\r
+                       insertBefore    : 'Vstavi celico pred',\r
+                       insertAfter             : 'Vstavi celico za',\r
+                       deleteCell              : 'Izbriši celice',\r
+                       merge                   : 'Združi celice',\r
+                       mergeRight              : 'Združi desno',\r
+                       mergeDown               : 'Druži navzdol',\r
+                       splitHorizontal : 'Razdeli celico vodoravno',\r
+                       splitVertical   : 'Razdeli celico navpično',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Vrstica',\r
+                       insertBefore    : 'Vstavi vrstico pred',\r
+                       insertAfter             : 'Vstavi vrstico za',\r
+                       deleteRow               : 'Izbriši vrstice'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Stolpec',\r
+                       insertBefore    : 'Vstavi stolpec pred',\r
+                       insertAfter             : 'Vstavi stolpec za',\r
+                       deleteColumn    : 'Izbriši stolpce'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Lastnosti gumba',\r
+               text            : 'Besedilo (Vrednost)',\r
+               type            : 'Tip',\r
+               typeBtn         : 'Gumb',\r
+               typeSbm         : 'Potrdi',\r
+               typeRst         : 'Ponastavi'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Lastnosti potrditvenega polja',\r
+               radioTitle      : 'Lastnosti izbirnega polja',\r
+               value           : 'Vrednost',\r
+               selected        : 'Izbrano'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Lastnosti obrazca',\r
+               menu            : 'Lastnosti obrazca',\r
+               action          : 'Akcija',\r
+               method          : 'Metoda',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Cilj',\r
+               targetNotSet    : '<ni postavljen>',\r
+               targetNew       : 'Novo okno (_blank)',\r
+               targetTop       : 'Najvišje okno (_top)',\r
+               targetSelf      : 'Isto okno (_self)',\r
+               targetParent    : 'Starševsko okno (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Lastnosti spustnega seznama',\r
+               selectInfo      : 'Podatki',\r
+               opAvail         : 'Razpoložljive izbire',\r
+               value           : 'Vrednost',\r
+               size            : 'Velikost',\r
+               lines           : 'vrstic',\r
+               chkMulti        : 'Dovoli izbor večih vrstic',\r
+               opText          : 'Besedilo',\r
+               opValue         : 'Vrednost',\r
+               btnAdd          : 'Dodaj',\r
+               btnModify       : 'Spremeni',\r
+               btnUp           : 'Gor',\r
+               btnDown         : 'Dol',\r
+               btnSetValue : 'Postavi kot privzeto izbiro',\r
+               btnDelete       : 'Izbriši'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Lastnosti vnosnega območja',\r
+               cols            : 'Stolpcev',\r
+               rows            : 'Vrstic'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Lastnosti vnosnega polja',\r
+               name            : 'Ime',\r
+               value           : 'Vrednost',\r
+               charWidth       : 'Dolžina',\r
+               maxChars        : 'Največje število znakov',\r
+               type            : 'Tip',\r
+               typeText        : 'Besedilo',\r
+               typePass        : 'Geslo'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Lastnosti skritega polja',\r
+               name    : 'Ime',\r
+               value   : 'Vrednost'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Lastnosti slike',\r
+               titleButton     : 'Lastnosti gumba s sliko',\r
+               menu            : 'Lastnosti slike',\r
+               infoTab : 'Podatki o sliki',\r
+               btnUpload       : 'Pošlji na strežnik',\r
+               url             : 'URL',\r
+               upload  : 'Pošlji',\r
+               alt             : 'Nadomestno besedilo',\r
+               width           : 'Širina',\r
+               height  : 'Višina',\r
+               lockRatio       : 'Zakleni razmerje',\r
+               resetSize       : 'Ponastavi velikost',\r
+               border  : 'Obroba',\r
+               hSpace  : 'Vodoravni razmik',\r
+               vSpace  : 'Navpični razmik',\r
+               align           : 'Poravnava',\r
+               alignLeft       : 'Levo',\r
+               alignAbsBottom: 'Popolnoma na dno',\r
+               alignAbsMiddle: 'Popolnoma v sredino',\r
+               alignBaseline   : 'Na osnovno črto',\r
+               alignBottom     : 'Na dno',\r
+               alignMiddle     : 'V sredino',\r
+               alignRight      : 'Desno',\r
+               alignTextTop    : 'Besedilo na vrh',\r
+               alignTop        : 'Na vrh',\r
+               preview : 'Predogled',\r
+               alertUrl        : 'Vnesite URL slike',\r
+               linkTab : 'Povezava',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Lastnosti Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Lastnosti Flash',\r
+               chkPlay         : 'Samodejno predvajaj',\r
+               chkLoop         : 'Ponavljanje',\r
+               chkMenu         : 'Omogoči Flash Meni',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Povečava',\r
+               scaleAll                : 'Pokaži vse',\r
+               scaleNoBorder   : 'Brez obrobe',\r
+               scaleFit                : 'Natančno prileganje',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Poravnava',\r
+               alignLeft       : 'Levo',\r
+               alignAbsBottom: 'Popolnoma na dno',\r
+               alignAbsMiddle: 'Popolnoma v sredino',\r
+               alignBaseline   : 'Na osnovno črto',\r
+               alignBottom     : 'Na dno',\r
+               alignMiddle     : 'V sredino',\r
+               alignRight      : 'Desno',\r
+               alignTextTop    : 'Besedilo na vrh',\r
+               alignTop        : 'Na vrh',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Barva ozadja',\r
+               width   : 'Širina',\r
+               height  : 'Višina',\r
+               hSpace  : 'Vodoravni razmik',\r
+               vSpace  : 'Navpični razmik',\r
+               validateSrc : 'Vnesite URL povezave',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Preveri črkovanje',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Ni v slovarju',\r
+               changeTo                : 'Spremeni v',\r
+               btnIgnore               : 'Prezri',\r
+               btnIgnoreAll    : 'Prezri vse',\r
+               btnReplace              : 'Zamenjaj',\r
+               btnReplaceAll   : 'Zamenjaj vse',\r
+               btnUndo                 : 'Razveljavi',\r
+               noSuggestions   : '- Ni predlogov -',\r
+               progress                : 'Preverjanje črkovanja se izvaja...',\r
+               noMispell               : 'Črkovanje je končano: Brez napak',\r
+               noChanges               : 'Črkovanje je končano: Nobena beseda ni bila spremenjena',\r
+               oneChange               : 'Črkovanje je končano: Spremenjena je bila ena beseda',\r
+               manyChanges             : 'Črkovanje je končano: Spremenjenih je bilo %1 besed',\r
+               ieSpellDownload : 'Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smeško',\r
+               title   : 'Vstavi smeška'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Oštevilčen seznam',\r
+       bulletedlist : 'Označen seznam',\r
+       indent : 'Povečaj zamik',\r
+       outdent : 'Zmanjšaj zamik',\r
+\r
+       justify :\r
+       {\r
+               left : 'Leva poravnava',\r
+               center : 'Sredinska poravnava',\r
+               right : 'Desna poravnava',\r
+               block : 'Obojestranska poravnava'\r
+       },\r
+\r
+       blockquote : 'Citat',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Prilepi',\r
+               cutError        : 'Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+X).',\r
+               copyError       : 'Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+C).',\r
+               pasteMsg        : 'Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.',\r
+               securityMsg     : 'Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Prilepi iz Worda',\r
+               title : 'Prilepi iz Worda',\r
+               advice : 'Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.',\r
+               ignoreFontFace : 'Prezri obliko pisave',\r
+               removeStyle : 'Odstrani nastavitve stila'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Prilepi kot golo besedilo',\r
+               title : 'Prilepi kot golo besedilo'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Predloge',\r
+               title : 'Vsebinske predloge',\r
+               insertOption: 'Zamenjaj trenutno vsebino',\r
+               selectPromptMsg: 'Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):',\r
+               emptyListMsg : '(Ni pripravljenih predlog)'\r
+       },\r
+\r
+       showBlocks : 'Prikaži ograde',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Slog',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Oblika',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Oblika',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Navaden',\r
+               tag_pre : 'Oblikovan',\r
+               tag_address : 'Napis',\r
+               tag_h1 : 'Naslov 1',\r
+               tag_h2 : 'Naslov 2',\r
+               tag_h3 : 'Naslov 3',\r
+               tag_h4 : 'Naslov 4',\r
+               tag_h5 : 'Naslov 5',\r
+               tag_h6 : 'Naslov 6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Pisava',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Pisava',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Velikost',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Velikost',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Barva besedila',\r
+               bgColorTitle : 'Barva ozadja',\r
+               auto : 'Samodejno',\r
+               more : 'Več barv...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/sr-latn.js b/_source/lang/sr-latn.js
new file mode 100644 (file)
index 0000000..8a50fab
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Serbian (Latin) language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['sr-latn'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Kôd',\r
+       newPage                 : 'Nova stranica',\r
+       save                    : 'Sačuvaj',\r
+       preview                 : 'Izgled stranice',\r
+       cut                             : 'Iseci',\r
+       copy                    : 'Kopiraj',\r
+       paste                   : 'Zalepi',\r
+       print                   : 'Štampa',\r
+       underline               : 'Podvučeno',\r
+       bold                    : 'Podebljano',\r
+       italic                  : 'Kurziv',\r
+       selectAll               : 'Označi sve',\r
+       removeFormat    : 'Ukloni formatiranje',\r
+       strike                  : 'Precrtano',\r
+       subscript               : 'Indeks',\r
+       superscript             : 'Stepen',\r
+       horizontalrule  : 'Unesi horizontalnu liniju',\r
+       pagebreak               : 'Insert Page Break for Printing', // MISSING\r
+       unlink                  : 'Ukloni link',\r
+       undo                    : 'Poni�ti akciju',\r
+       redo                    : 'Ponovi akciju',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Pretraži server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokol',\r
+               upload                  : 'Pošalji',\r
+               uploadSubmit    : 'Pošalji na server',\r
+               image                   : 'Slika',\r
+               flash                   : 'Fleš',\r
+               form                    : 'Forma',\r
+               checkbox                : 'Polje za potvrdu',\r
+               radio           : 'Radio-dugme',\r
+               textField               : 'Tekstualno polje',\r
+               textarea                : 'Zona teksta',\r
+               hiddenField             : 'Skriveno polje',\r
+               button                  : 'Dugme',\r
+               select  : 'Izborno polje',\r
+               imageButton             : 'Dugme sa slikom',\r
+               notSet                  : '<nije postavljeno>',\r
+               id                              : 'Id',\r
+               name                    : 'Naziv',\r
+               langDir                 : 'Smer jezika',\r
+               langDirLtr              : 'S leva na desno (LTR)',\r
+               langDirRtl              : 'S desna na levo (RTL)',\r
+               langCode                : 'Kôd jezika',\r
+               longDescr               : 'Pun opis URL',\r
+               cssClass                : 'Stylesheet klase',\r
+               advisoryTitle   : 'Advisory naslov',\r
+               cssStyle                : 'Stil',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Otkaži',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Napredni tagovi',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Unesi specijalni karakter',\r
+               title           : 'Odaberite specijalni karakter'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Unesi/izmeni link',\r
+               menu            : 'Izmeni link',\r
+               title           : 'Link',\r
+               info            : 'Link Info',\r
+               target          : 'Meta',\r
+               upload          : 'Pošalji',\r
+               advanced        : 'Napredni tagovi',\r
+               type            : 'Vrsta linka',\r
+               toAnchor        : 'Sidro na ovoj stranici',\r
+               toEmail         : 'E-Mail',\r
+               target          : 'Meta',\r
+               targetNotSet    : '<nije postavljeno>',\r
+               targetFrame     : '<okvir>',\r
+               targetPopup     : '<popup prozor>',\r
+               targetNew       : 'Novi prozor (_blank)',\r
+               targetTop       : 'Prozor na vrhu (_top)',\r
+               targetSelf      : 'Isti prozor (_self)',\r
+               targetParent    : 'Roditeljski prozor (_parent)',\r
+               targetFrameName : 'Naziv odredišnog frejma',\r
+               targetPopupName : 'Naziv popup prozora',\r
+               popupFeatures   : 'Mogućnosti popup prozora',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Statusna linija',\r
+               popupLocationBar        : 'Lokacija',\r
+               popupToolbar    : 'Toolbar',\r
+               popupMenuBar    : 'Kontekstni meni',\r
+               popupFullScreen : 'Prikaz preko celog ekrana (IE)',\r
+               popupScrollBars : 'Scroll bar',\r
+               popupDependent  : 'Zavisno (Netscape)',\r
+               popupWidth              : 'Širina',\r
+               popupLeft               : 'Od leve ivice ekrana (px)',\r
+               popupHeight             : 'Visina',\r
+               popupTop                : 'Od vrha ekrana (px)',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Smer jezika',\r
+               langDirNotSet   : '<nije postavljeno>',\r
+               langDirLTR              : 'S leva na desno (LTR)',\r
+               langDirRTL              : 'S desna na levo (RTL)',\r
+               acccessKey              : 'Pristupni taster',\r
+               name                    : 'Naziv',\r
+               langCode                : 'Smer jezika',\r
+               tabIndex                : 'Tab indeks',\r
+               advisoryTitle   : 'Advisory naslov',\r
+               advisoryContentType     : 'Advisory vrsta sadržaja',\r
+               cssClasses              : 'Stylesheet klase',\r
+               charset                 : 'Linked Resource Charset',\r
+               styles                  : 'Stil',\r
+               selectAnchor    : 'Odaberi sidro',\r
+               anchorName              : 'Po nazivu sidra',\r
+               anchorId                : 'Po Id-ju elementa',\r
+               emailAddress    : 'E-Mail adresa',\r
+               emailSubject    : 'Naslov',\r
+               emailBody               : 'Sadržaj poruke',\r
+               noAnchors               : '(Nema dostupnih sidra)',\r
+               noUrl                   : 'Unesite URL linka',\r
+               noEmail                 : 'Otkucajte adresu elektronske pote'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Unesi/izmeni sidro',\r
+               menu            : 'Osobine sidra',\r
+               title           : 'Osobine sidra',\r
+               name            : 'Ime sidra',\r
+               errorName       : 'Unesite ime sidra'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'Pretraga',\r
+               replace                         : 'Zamena',\r
+               findWhat                        : 'Pronadi:',\r
+               replaceWith                     : 'Zameni sa:',\r
+               notFoundMsg                     : 'Traženi tekst nije pronađen.',\r
+               matchCase                       : 'Razlikuj mala i velika slova',\r
+               matchWord                       : 'Uporedi cele reci',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Zameni sve',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabela',\r
+               title           : 'Osobine tabele',\r
+               menu            : 'Osobine tabele',\r
+               deleteTable     : 'Delete Table', // MISSING\r
+               rows            : 'Redova',\r
+               columns         : 'Kolona',\r
+               border          : 'Veličina okvira',\r
+               align           : 'Ravnanje',\r
+               alignNotSet     : '<nije postavljeno>',\r
+               alignLeft       : 'Levo',\r
+               alignCenter     : 'Sredina',\r
+               alignRight      : 'Desno',\r
+               width           : 'Širina',\r
+               widthPx         : 'piksela',\r
+               widthPc         : 'procenata',\r
+               height          : 'Visina',\r
+               cellSpace       : 'Ćelijski prostor',\r
+               cellPad         : 'Razmak ćelija',\r
+               caption         : 'Naslov tabele',\r
+               summary         : 'Summary', // MISSING\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell', // MISSING\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'Obriši ćelije',\r
+                       merge                   : 'Spoj celije',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Row', // MISSING\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'Obriši redove'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Column', // MISSING\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'Obriši kolone'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Osobine dugmeta',\r
+               text            : 'Tekst (vrednost)',\r
+               type            : 'Tip',\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Osobine polja za potvrdu',\r
+               radioTitle      : 'Osobine radio-dugmeta',\r
+               value           : 'Vrednost',\r
+               selected        : 'Označeno'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Osobine forme',\r
+               menu            : 'Osobine forme',\r
+               action          : 'Akcija',\r
+               method          : 'Metoda',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Meta',\r
+               targetNotSet    : '<nije postavljeno>',\r
+               targetNew       : 'Novi prozor (_blank)',\r
+               targetTop       : 'Prozor na vrhu (_top)',\r
+               targetSelf      : 'Isti prozor (_self)',\r
+               targetParent    : 'Roditeljski prozor (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Osobine izbornog polja',\r
+               selectInfo      : 'Info',\r
+               opAvail         : 'Dostupne opcije',\r
+               value           : 'Vrednost',\r
+               size            : 'Veličina',\r
+               lines           : 'linija',\r
+               chkMulti        : 'Dozvoli višestruku selekciju',\r
+               opText          : 'Tekst',\r
+               opValue         : 'Vrednost',\r
+               btnAdd          : 'Dodaj',\r
+               btnModify       : 'Izmeni',\r
+               btnUp           : 'Gore',\r
+               btnDown         : 'Dole',\r
+               btnSetValue : 'Podesi kao označenu vrednost',\r
+               btnDelete       : 'Obriši'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Osobine zone teksta',\r
+               cols            : 'Broj kolona',\r
+               rows            : 'Broj redova'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Osobine tekstualnog polja',\r
+               name            : 'Naziv',\r
+               value           : 'Vrednost',\r
+               charWidth       : 'Širina (karaktera)',\r
+               maxChars        : 'Maksimalno karaktera',\r
+               type            : 'Tip',\r
+               typeText        : 'Tekst',\r
+               typePass        : 'Lozinka'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Osobine skrivenog polja',\r
+               name    : 'Naziv',\r
+               value   : 'Vrednost'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Osobine slika',\r
+               titleButton     : 'Osobine dugmeta sa slikom',\r
+               menu            : 'Osobine slika',\r
+               infoTab : 'Info slike',\r
+               btnUpload       : 'Pošalji na server',\r
+               url             : 'URL',\r
+               upload  : 'Pošalji',\r
+               alt             : 'Alternativni tekst',\r
+               width           : 'Širina',\r
+               height  : 'Visina',\r
+               lockRatio       : 'Zaključaj odnos',\r
+               resetSize       : 'Resetuj veličinu',\r
+               border  : 'Okvir',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Ravnanje',\r
+               alignLeft       : 'Levo',\r
+               alignAbsBottom: 'Abs dole',\r
+               alignAbsMiddle: 'Abs sredina',\r
+               alignBaseline   : 'Bazno',\r
+               alignBottom     : 'Dole',\r
+               alignMiddle     : 'Sredina',\r
+               alignRight      : 'Desno',\r
+               alignTextTop    : 'Vrh teksta',\r
+               alignTop        : 'Vrh',\r
+               preview : 'Izgled',\r
+               alertUrl        : 'Unesite URL slike',\r
+               linkTab : 'Link',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Osobine fleša',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Osobine fleša',\r
+               chkPlay         : 'Automatski start',\r
+               chkLoop         : 'Ponavljaj',\r
+               chkMenu         : 'Uključi fleš meni',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Skaliraj',\r
+               scaleAll                : 'Prikaži sve',\r
+               scaleNoBorder   : 'Bez ivice',\r
+               scaleFit                : 'Popuni površinu',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Ravnanje',\r
+               alignLeft       : 'Levo',\r
+               alignAbsBottom: 'Abs dole',\r
+               alignAbsMiddle: 'Abs sredina',\r
+               alignBaseline   : 'Bazno',\r
+               alignBottom     : 'Dole',\r
+               alignMiddle     : 'Sredina',\r
+               alignRight      : 'Desno',\r
+               alignTextTop    : 'Vrh teksta',\r
+               alignTop        : 'Vrh',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Boja pozadine',\r
+               width   : 'Širina',\r
+               height  : 'Visina',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'Unesite URL linka',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Proveri spelovanje',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Nije u rečniku',\r
+               changeTo                : 'Izmeni',\r
+               btnIgnore               : 'Ignoriši',\r
+               btnIgnoreAll    : 'Ignoriši sve',\r
+               btnReplace              : 'Zameni',\r
+               btnReplaceAll   : 'Zameni sve',\r
+               btnUndo                 : 'Vrati akciju',\r
+               noSuggestions   : '- Bez sugestija -',\r
+               progress                : 'Provera spelovanja u toku...',\r
+               noMispell               : 'Provera spelovanja završena: greške nisu pronadene',\r
+               noChanges               : 'Provera spelovanja završena: Nije izmenjena nijedna rec',\r
+               oneChange               : 'Provera spelovanja završena: Izmenjena je jedna reč',\r
+               manyChanges             : 'Provera spelovanja završena: %1 reč(i) je izmenjeno',\r
+               ieSpellDownload : 'Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smajli',\r
+               title   : 'Unesi smajlija'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Nabrojiva lista',\r
+       bulletedlist : 'Nenabrojiva lista',\r
+       indent : 'Uvećaj levu marginu',\r
+       outdent : 'Smanji levu marginu',\r
+\r
+       justify :\r
+       {\r
+               left : 'Levo ravnanje',\r
+               center : 'Centriran tekst',\r
+               right : 'Desno ravnanje',\r
+               block : 'Obostrano ravnanje'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Zalepi',\r
+               cutError        : 'Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+X).',\r
+               copyError       : 'Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+C).',\r
+               pasteMsg        : 'Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Zalepi iz Worda',\r
+               title : 'Zalepi iz Worda',\r
+               advice : 'Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignoriši definicije fontova',\r
+               removeStyle : 'Ukloni definicije stilova'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Zalepi kao čist tekst',\r
+               title : 'Zalepi kao čist tekst'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Obrasci',\r
+               title : 'Obrasci za sadržaj',\r
+               insertOption: 'Replace actual contents', // MISSING\r
+               selectPromptMsg: 'Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):',\r
+               emptyListMsg : '(Nema definisanih obrazaca)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Stil',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Format',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Format',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatirano',\r
+               tag_address : 'Adresa',\r
+               tag_h1 : 'Naslov 1',\r
+               tag_h2 : 'Naslov 2',\r
+               tag_h3 : 'Naslov 3',\r
+               tag_h4 : 'Naslov 4',\r
+               tag_h5 : 'Naslov 5',\r
+               tag_h6 : 'Naslov 6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Font',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Font',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Veličina fonta',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Veličina fonta',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Boja teksta',\r
+               bgColorTitle : 'Boja pozadine',\r
+               auto : 'Automatski',\r
+               more : 'Više boja...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/sr.js b/_source/lang/sr.js
new file mode 100644 (file)
index 0000000..ed91b2e
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Serbian (Cyrillic) language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['sr'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Kôд',\r
+       newPage                 : 'Нова страница',\r
+       save                    : 'Сачувај',\r
+       preview                 : 'Изглед странице',\r
+       cut                             : 'Исеци',\r
+       copy                    : 'Копирај',\r
+       paste                   : 'Залепи',\r
+       print                   : 'Штампа',\r
+       underline               : 'Подвучено',\r
+       bold                    : 'Подебљано',\r
+       italic                  : 'Курзив',\r
+       selectAll               : 'Означи све',\r
+       removeFormat    : 'Уклони форматирање',\r
+       strike                  : 'Прецртано',\r
+       subscript               : 'Индекс',\r
+       superscript             : 'Степен',\r
+       horizontalrule  : 'Унеси хоризонталну линију',\r
+       pagebreak               : 'Insert Page Break for Printing', // MISSING\r
+       unlink                  : 'Уклони линк',\r
+       undo                    : 'Поништи акцију',\r
+       redo                    : 'Понови акцију',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Претражи сервер',\r
+               url                             : 'УРЛ',\r
+               protocol                : 'Протокол',\r
+               upload                  : 'Пошаљи',\r
+               uploadSubmit    : 'Пошаљи на сервер',\r
+               image                   : 'Слика',\r
+               flash                   : 'Флеш елемент',\r
+               form                    : 'Форма',\r
+               checkbox                : 'Поље за потврду',\r
+               radio           : 'Радио-дугме',\r
+               textField               : 'Текстуално поље',\r
+               textarea                : 'Зона текста',\r
+               hiddenField             : 'Скривено поље',\r
+               button                  : 'Дугме',\r
+               select  : 'Изборно поље',\r
+               imageButton             : 'Дугме са сликом',\r
+               notSet                  : '<није постављено>',\r
+               id                              : 'Ид',\r
+               name                    : 'Назив',\r
+               langDir                 : 'Смер језика',\r
+               langDirLtr              : 'С лева на десно (LTR)',\r
+               langDirRtl              : 'С десна на лево (RTL)',\r
+               langCode                : 'Kôд језика',\r
+               longDescr               : 'Пун опис УРЛ',\r
+               cssClass                : 'Stylesheet класе',\r
+               advisoryTitle   : 'Advisory наслов',\r
+               cssStyle                : 'Стил',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Oткажи',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Напредни тагови',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Унеси специјални карактер',\r
+               title           : 'Одаберите специјални карактер'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Унеси/измени линк',\r
+               menu            : 'Промени линк',\r
+               title           : 'Линк',\r
+               info            : 'Линк инфо',\r
+               target          : 'Meтa',\r
+               upload          : 'Пошаљи',\r
+               advanced        : 'Напредни тагови',\r
+               type            : 'Врста линка',\r
+               toAnchor        : 'Сидро на овој страници',\r
+               toEmail         : 'Eлектронска пошта',\r
+               target          : 'Meтa',\r
+               targetNotSet    : '<није постављено>',\r
+               targetFrame     : '<оквир>',\r
+               targetPopup     : '<искачући прозор>',\r
+               targetNew       : 'Нови прозор (_blank)',\r
+               targetTop       : 'Прозор на врху (_top)',\r
+               targetSelf      : 'Исти прозор (_self)',\r
+               targetParent    : 'Родитељски прозор (_parent)',\r
+               targetFrameName : 'Назив одредишног фрејма',\r
+               targetPopupName : 'Назив искачућег прозора',\r
+               popupFeatures   : 'Могућности искачућег прозора',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Статусна линија',\r
+               popupLocationBar        : 'Локација',\r
+               popupToolbar    : 'Toolbar',\r
+               popupMenuBar    : 'Контекстни мени',\r
+               popupFullScreen : 'Приказ преко целог екрана (ИE)',\r
+               popupScrollBars : 'Скрол бар',\r
+               popupDependent  : 'Зависно (Netscape)',\r
+               popupWidth              : 'Ширина',\r
+               popupLeft               : 'Од леве ивице екрана (пиксела)',\r
+               popupHeight             : 'Висина',\r
+               popupTop                : 'Од врха екрана (пиксела)',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Смер језика',\r
+               langDirNotSet   : '<није постављено>',\r
+               langDirLTR              : 'С лева на десно (LTR)',\r
+               langDirRTL              : 'С десна на лево (RTL)',\r
+               acccessKey              : 'Приступни тастер',\r
+               name                    : 'Назив',\r
+               langCode                : 'Смер језика',\r
+               tabIndex                : 'Таб индекс',\r
+               advisoryTitle   : 'Advisory наслов',\r
+               advisoryContentType     : 'Advisory врста садржаја',\r
+               cssClasses              : 'Stylesheet класе',\r
+               charset                 : 'Linked Resource Charset',\r
+               styles                  : 'Стил',\r
+               selectAnchor    : 'Одабери сидро',\r
+               anchorName              : 'По називу сидра',\r
+               anchorId                : 'Пo Ид-jу елемента',\r
+               emailAddress    : 'Адреса електронске поште',\r
+               emailSubject    : 'Наслов',\r
+               emailBody               : 'Садржај поруке',\r
+               noAnchors               : '(Нема доступних сидра)',\r
+               noUrl                   : 'Унесите УРЛ линка',\r
+               noEmail                 : 'Откуцајте адресу електронске поште'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Унеси/измени сидро',\r
+               menu            : 'Особине сидра',\r
+               title           : 'Особине сидра',\r
+               name            : 'Име сидра',\r
+               errorName       : 'Молимо Вас да унесете име сидра'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'Претрага',\r
+               replace                         : 'Замена',\r
+               findWhat                        : 'Пронађи:',\r
+               replaceWith                     : 'Замени са:',\r
+               notFoundMsg                     : 'Тражени текст није пронађен.',\r
+               matchCase                       : 'Разликуј велика и мала слова',\r
+               matchWord                       : 'Упореди целе речи',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Замени све',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Табела',\r
+               title           : 'Особине табеле',\r
+               menu            : 'Особине табеле',\r
+               deleteTable     : 'Delete Table', // MISSING\r
+               rows            : 'Редова',\r
+               columns         : 'Kолона',\r
+               border          : 'Величина оквира',\r
+               align           : 'Равнање',\r
+               alignNotSet     : '<није постављено>',\r
+               alignLeft       : 'Лево',\r
+               alignCenter     : 'Средина',\r
+               alignRight      : 'Десно',\r
+               width           : 'Ширина',\r
+               widthPx         : 'пиксела',\r
+               widthPc         : 'процената',\r
+               height          : 'Висина',\r
+               cellSpace       : 'Ћелијски простор',\r
+               cellPad         : 'Размак ћелија',\r
+               caption         : 'Наслов табеле',\r
+               summary         : 'Summary', // MISSING\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell', // MISSING\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'Обриши ћелије',\r
+                       merge                   : 'Спој ћелије',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Row', // MISSING\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'Обриши редове'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Column', // MISSING\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'Обриши колоне'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Особине дугмета',\r
+               text            : 'Текст (вредност)',\r
+               type            : 'Tип',\r
+               typeBtn         : 'Button', // MISSING\r
+               typeSbm         : 'Submit', // MISSING\r
+               typeRst         : 'Reset' // MISSING\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Особине поља за потврду',\r
+               radioTitle      : 'Особине радио-дугмета',\r
+               value           : 'Вредност',\r
+               selected        : 'Означено'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Особине форме',\r
+               menu            : 'Особине форме',\r
+               action          : 'Aкција',\r
+               method          : 'Mетода',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Meтa',\r
+               targetNotSet    : '<није постављено>',\r
+               targetNew       : 'Нови прозор (_blank)',\r
+               targetTop       : 'Прозор на врху (_top)',\r
+               targetSelf      : 'Исти прозор (_self)',\r
+               targetParent    : 'Родитељски прозор (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Особине изборног поља',\r
+               selectInfo      : 'Инфо',\r
+               opAvail         : 'Доступне опције',\r
+               value           : 'Вредност',\r
+               size            : 'Величина',\r
+               lines           : 'линија',\r
+               chkMulti        : 'Дозволи вишеструку селекцију',\r
+               opText          : 'Текст',\r
+               opValue         : 'Вредност',\r
+               btnAdd          : 'Додај',\r
+               btnModify       : 'Измени',\r
+               btnUp           : 'Горе',\r
+               btnDown         : 'Доле',\r
+               btnSetValue : 'Подеси као означену вредност',\r
+               btnDelete       : 'Обриши'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Особине зоне текста',\r
+               cols            : 'Број колона',\r
+               rows            : 'Број редова'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Особине текстуалног поља',\r
+               name            : 'Назив',\r
+               value           : 'Вредност',\r
+               charWidth       : 'Ширина (карактера)',\r
+               maxChars        : 'Максимално карактера',\r
+               type            : 'Тип',\r
+               typeText        : 'Текст',\r
+               typePass        : 'Лозинка'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Особине скривеног поља',\r
+               name    : 'Назив',\r
+               value   : 'Вредност'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Особине слика',\r
+               titleButton     : 'Особине дугмета са сликом',\r
+               menu            : 'Особине слика',\r
+               infoTab : 'Инфо слике',\r
+               btnUpload       : 'Пошаљи на сервер',\r
+               url             : 'УРЛ',\r
+               upload  : 'Пошаљи',\r
+               alt             : 'Алтернативни текст',\r
+               width           : 'Ширина',\r
+               height  : 'Висина',\r
+               lockRatio       : 'Закључај однос',\r
+               resetSize       : 'Ресетуј величину',\r
+               border  : 'Оквир',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Равнање',\r
+               alignLeft       : 'Лево',\r
+               alignAbsBottom: 'Abs доле',\r
+               alignAbsMiddle: 'Abs средина',\r
+               alignBaseline   : 'Базно',\r
+               alignBottom     : 'Доле',\r
+               alignMiddle     : 'Средина',\r
+               alignRight      : 'Десно',\r
+               alignTextTop    : 'Врх текста',\r
+               alignTop        : 'Врх',\r
+               preview : 'Изглед',\r
+               alertUrl        : 'Унесите УРЛ слике',\r
+               linkTab : 'Линк',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Особине Флеша',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Особине флеша',\r
+               chkPlay         : 'Аутоматски старт',\r
+               chkLoop         : 'Понављај',\r
+               chkMenu         : 'Укључи флеш мени',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Скалирај',\r
+               scaleAll                : 'Прикажи све',\r
+               scaleNoBorder   : 'Без ивице',\r
+               scaleFit                : 'Попуни површину',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Равнање',\r
+               alignLeft       : 'Лево',\r
+               alignAbsBottom: 'Abs доле',\r
+               alignAbsMiddle: 'Abs средина',\r
+               alignBaseline   : 'Базно',\r
+               alignBottom     : 'Доле',\r
+               alignMiddle     : 'Средина',\r
+               alignRight      : 'Десно',\r
+               alignTextTop    : 'Врх текста',\r
+               alignTop        : 'Врх',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Боја позадине',\r
+               width   : 'Ширина',\r
+               height  : 'Висина',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'Унесите УРЛ линка',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Провери спеловање',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Није у речнику',\r
+               changeTo                : 'Измени',\r
+               btnIgnore               : 'Игнориши',\r
+               btnIgnoreAll    : 'Игнориши све',\r
+               btnReplace              : 'Замени',\r
+               btnReplaceAll   : 'Замени све',\r
+               btnUndo                 : 'Врати акцију',\r
+               noSuggestions   : '- Без сугестија -',\r
+               progress                : 'Провера спеловања у току...',\r
+               noMispell               : 'Провера спеловања завршена: грешке нису пронађене',\r
+               noChanges               : 'Провера спеловања завршена: Није измењена ниједна реч',\r
+               oneChange               : 'Провера спеловања завршена: Измењена је једна реч',\r
+               manyChanges             : 'Провера спеловања завршена:  %1 реч(и) је измењено',\r
+               ieSpellDownload : 'Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Смајли',\r
+               title   : 'Унеси смајлија'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Набројиву листу',\r
+       bulletedlist : 'Ненабројива листа',\r
+       indent : 'Увећај леву маргину',\r
+       outdent : 'Смањи леву маргину',\r
+\r
+       justify :\r
+       {\r
+               left : 'Лево равнање',\r
+               center : 'Центриран текст',\r
+               right : 'Десно равнање',\r
+               block : 'Обострано равнање'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Залепи',\r
+               cutError        : 'Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+X).',\r
+               copyError       : 'Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+C).',\r
+               pasteMsg        : 'Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Залепи из Worda',\r
+               title : 'Залепи из Worda',\r
+               advice : 'Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Игнориши Font Face дефиниције',\r
+               removeStyle : 'Уклони дефиниције стилова'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Залепи као чист текст',\r
+               title : 'Залепи као чист текст'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Обрасци',\r
+               title : 'Обрасци за садржај',\r
+               insertOption: 'Replace actual contents', // MISSING\r
+               selectPromptMsg: 'Молимо Вас да одаберете образац који ће бити примењен на страницу (тренутни садржај ће бити обрисан):',\r
+               emptyListMsg : '(Нема дефинисаних образаца)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Стил',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Формат',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Формат',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatirano',\r
+               tag_address : 'Adresa',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Normal (DIV)' // MISSING\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Фонт',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Фонт',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Величина фонта',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Величина фонта',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Боја текста',\r
+               bgColorTitle : 'Боја позадине',\r
+               auto : 'Аутоматски',\r
+               more : 'Више боја...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/sv.js b/_source/lang/sv.js
new file mode 100644 (file)
index 0000000..a735715
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Swedish language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['sv'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Källa',\r
+       newPage                 : 'Ny sida',\r
+       save                    : 'Spara',\r
+       preview                 : 'Förhandsgranska',\r
+       cut                             : 'Klipp ut',\r
+       copy                    : 'Kopiera',\r
+       paste                   : 'Klistra in',\r
+       print                   : 'Skriv ut',\r
+       underline               : 'Understruken',\r
+       bold                    : 'Fet',\r
+       italic                  : 'Kursiv',\r
+       selectAll               : 'Markera allt',\r
+       removeFormat    : 'Radera formatering',\r
+       strike                  : 'Genomstruken',\r
+       subscript               : 'Nedsänkta tecken',\r
+       superscript             : 'Upphöjda tecken',\r
+       horizontalrule  : 'Infoga horisontal linje',\r
+       pagebreak               : 'Infoga sidbrytning',\r
+       unlink                  : 'Radera länk',\r
+       undo                    : 'Ångra',\r
+       redo                    : 'Gör om',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Bläddra på server',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokoll',\r
+               upload                  : 'Ladda upp',\r
+               uploadSubmit    : 'Skicka till server',\r
+               image                   : 'Bild',\r
+               flash                   : 'Flash',\r
+               form                    : 'Formulär',\r
+               checkbox                : 'Kryssruta',\r
+               radio           : 'Alternativknapp',\r
+               textField               : 'Textfält',\r
+               textarea                : 'Textruta',\r
+               hiddenField             : 'Dolt fält',\r
+               button                  : 'Knapp',\r
+               select  : 'Flervalslista',\r
+               imageButton             : 'Bildknapp',\r
+               notSet                  : '<ej angivet>',\r
+               id                              : 'Id',\r
+               name                    : 'Namn',\r
+               langDir                 : 'Språkriktning',\r
+               langDirLtr              : 'Vänster till Höger (VTH)',\r
+               langDirRtl              : 'Höger till Vänster (HTV)',\r
+               langCode                : 'Språkkod',\r
+               longDescr               : 'URL-beskrivning',\r
+               cssClass                : 'Stylesheet class',\r
+               advisoryTitle   : 'Titel',\r
+               cssStyle                : 'Style',\r
+               ok                              : 'OK',\r
+               cancel                  : 'Avbryt',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'Avancerad',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Klistra in utökat tecken',\r
+               title           : 'Välj utökat tecken'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Infoga/Redigera länk',\r
+               menu            : 'Redigera länk',\r
+               title           : 'Länk',\r
+               info            : 'Länkinformation',\r
+               target          : 'Mål',\r
+               upload          : 'Ladda upp',\r
+               advanced        : 'Avancerad',\r
+               type            : 'Länktyp',\r
+               toAnchor        : 'Ankare i sidan',\r
+               toEmail         : 'E-post',\r
+               target          : 'Mål',\r
+               targetNotSet    : '<ej angivet>',\r
+               targetFrame     : '<ram>',\r
+               targetPopup     : '<popup-fönster>',\r
+               targetNew       : 'Nytt fönster (_blank)',\r
+               targetTop       : 'Översta fönstret (_top)',\r
+               targetSelf      : 'Detta fönstret (_self)',\r
+               targetParent    : 'Föregående Window (_parent)',\r
+               targetFrameName : 'Målets ramnamn',\r
+               targetPopupName : 'Popup-fönstrets namn',\r
+               popupFeatures   : 'Popup-fönstrets egenskaper',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Statusfält',\r
+               popupLocationBar        : 'Adressfält',\r
+               popupToolbar    : 'Verktygsfält',\r
+               popupMenuBar    : 'Menyfält',\r
+               popupFullScreen : 'Helskärm (endast IE)',\r
+               popupScrollBars : 'Scrolllista',\r
+               popupDependent  : 'Beroende (endest Netscape)',\r
+               popupWidth              : 'Bredd',\r
+               popupLeft               : 'Position från vänster',\r
+               popupHeight             : 'Höjd',\r
+               popupTop                : 'Position från sidans topp',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Språkriktning',\r
+               langDirNotSet   : '<ej angivet>',\r
+               langDirLTR              : 'Vänster till Höger (VTH)',\r
+               langDirRTL              : 'Höger till Vänster (HTV)',\r
+               acccessKey              : 'Behörighetsnyckel',\r
+               name                    : 'Namn',\r
+               langCode                : 'Språkriktning',\r
+               tabIndex                : 'Tabindex',\r
+               advisoryTitle   : 'Titel',\r
+               advisoryContentType     : 'Innehållstyp',\r
+               cssClasses              : 'Stylesheet class',\r
+               charset                 : 'Teckenuppställning',\r
+               styles                  : 'Style',\r
+               selectAnchor    : 'Välj ett ankare',\r
+               anchorName              : 'efter ankarnamn',\r
+               anchorId                : 'efter objektid',\r
+               emailAddress    : 'E-postadress',\r
+               emailSubject    : 'Ämne',\r
+               emailBody               : 'Innehåll',\r
+               noAnchors               : '(Inga ankare kunde hittas)',\r
+               noUrl                   : 'Var god ange länkens URL',\r
+               noEmail                 : 'Var god ange E-postadress'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Infoga/Redigera ankarlänk',\r
+               menu            : 'Egenskaper för ankarlänk',\r
+               title           : 'Egenskaper för ankarlänk',\r
+               name            : 'Ankarnamn',\r
+               errorName       : 'Var god ange ett ankarnamn'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Sök och ersätt',\r
+               find                            : 'Sök',\r
+               replace                         : 'Ersätt',\r
+               findWhat                        : 'Sök efter:',\r
+               replaceWith                     : 'Ersätt med:',\r
+               notFoundMsg                     : 'Angiven text kunde ej hittas.',\r
+               matchCase                       : 'Skiftläge',\r
+               matchWord                       : 'Inkludera hela ord',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Ersätt alla',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tabell',\r
+               title           : 'Tabellegenskaper',\r
+               menu            : 'Tabellegenskaper',\r
+               deleteTable     : 'Radera tabell',\r
+               rows            : 'Rader',\r
+               columns         : 'Kolumner',\r
+               border          : 'Kantstorlek',\r
+               align           : 'Justering',\r
+               alignNotSet     : '<ej angivet>',\r
+               alignLeft       : 'Vänster',\r
+               alignCenter     : 'Centrerad',\r
+               alignRight      : 'Höger',\r
+               width           : 'Bredd',\r
+               widthPx         : 'pixlar',\r
+               widthPc         : 'procent',\r
+               height          : 'Höjd',\r
+               cellSpace       : 'Cellavstånd',\r
+               cellPad         : 'Cellutfyllnad',\r
+               caption         : 'Rubrik',\r
+               summary         : 'Sammanfattning',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Cell',\r
+                       insertBefore    : 'Lägg till Cell Före',\r
+                       insertAfter             : 'Lägg till Cell Efter',\r
+                       deleteCell              : 'Radera celler',\r
+                       merge                   : 'Sammanfoga celler',\r
+                       mergeRight              : 'Sammanfoga Höger',\r
+                       mergeDown               : 'Sammanfoga Ner',\r
+                       splitHorizontal : 'Dela Cell Horisontellt',\r
+                       splitVertical   : 'Dela Cell Vertikalt',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Rad',\r
+                       insertBefore    : 'Lägg till Rad Före',\r
+                       insertAfter             : 'Lägg till Rad Efter',\r
+                       deleteRow               : 'Radera rad'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Kolumn',\r
+                       insertBefore    : 'Lägg till Kolumn Före',\r
+                       insertAfter             : 'Lägg till Kolumn Efter',\r
+                       deleteColumn    : 'Radera kolumn'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Egenskaper för knapp',\r
+               text            : 'Text (Värde)',\r
+               type            : 'Typ',\r
+               typeBtn         : 'Knapp',\r
+               typeSbm         : 'Skicka',\r
+               typeRst         : 'Återställ'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Egenskaper för kryssruta',\r
+               radioTitle      : 'Egenskaper för alternativknapp',\r
+               value           : 'Värde',\r
+               selected        : 'Vald'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Egenskaper för formulär',\r
+               menu            : 'Egenskaper för formulär',\r
+               action          : 'Funktion',\r
+               method          : 'Metod',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Mål',\r
+               targetNotSet    : '<ej angivet>',\r
+               targetNew       : 'Nytt fönster (_blank)',\r
+               targetTop       : 'Översta fönstret (_top)',\r
+               targetSelf      : 'Detta fönstret (_self)',\r
+               targetParent    : 'Föregående Window (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Egenskaper för flervalslista',\r
+               selectInfo      : 'Information',\r
+               opAvail         : 'Befintliga val',\r
+               value           : 'Värde',\r
+               size            : 'Storlek',\r
+               lines           : 'Linjer',\r
+               chkMulti        : 'Tillåt flerval',\r
+               opText          : 'Text',\r
+               opValue         : 'Värde',\r
+               btnAdd          : 'Lägg till',\r
+               btnModify       : 'Redigera',\r
+               btnUp           : 'Upp',\r
+               btnDown         : 'Ner',\r
+               btnSetValue : 'Markera som valt värde',\r
+               btnDelete       : 'Radera'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Egenskaper för textruta',\r
+               cols            : 'Kolumner',\r
+               rows            : 'Rader'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Egenskaper för textfält',\r
+               name            : 'Namn',\r
+               value           : 'Värde',\r
+               charWidth       : 'Teckenbredd',\r
+               maxChars        : 'Max antal tecken',\r
+               type            : 'Typ',\r
+               typeText        : 'Text',\r
+               typePass        : 'Lösenord'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Egenskaper för dolt fält',\r
+               name    : 'Namn',\r
+               value   : 'Värde'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Bildegenskaper',\r
+               titleButton     : 'Egenskaper för bildknapp',\r
+               menu            : 'Bildegenskaper',\r
+               infoTab : 'Bildinformation',\r
+               btnUpload       : 'Skicka till server',\r
+               url             : 'URL',\r
+               upload  : 'Ladda upp',\r
+               alt             : 'Alternativ text',\r
+               width           : 'Bredd',\r
+               height  : 'Höjd',\r
+               lockRatio       : 'Lås höjd/bredd förhållanden',\r
+               resetSize       : 'Återställ storlek',\r
+               border  : 'Kant',\r
+               hSpace  : 'Horis. marginal',\r
+               vSpace  : 'Vert. marginal',\r
+               align           : 'Justering',\r
+               alignLeft       : 'Vänster',\r
+               alignAbsBottom: 'Absolut nederkant',\r
+               alignAbsMiddle: 'Absolut centrering',\r
+               alignBaseline   : 'Baslinje',\r
+               alignBottom     : 'Nederkant',\r
+               alignMiddle     : 'Mitten',\r
+               alignRight      : 'Höger',\r
+               alignTextTop    : 'Text överkant',\r
+               alignTop        : 'Överkant',\r
+               preview : 'Förhandsgranska',\r
+               alertUrl        : 'Var god och ange bildens URL',\r
+               linkTab : 'Länk',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flashegenskaper',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flashegenskaper',\r
+               chkPlay         : 'Automatisk uppspelning',\r
+               chkLoop         : 'Upprepa/Loopa',\r
+               chkMenu         : 'Aktivera Flashmeny',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Skala',\r
+               scaleAll                : 'Visa allt',\r
+               scaleNoBorder   : 'Ingen ram',\r
+               scaleFit                : 'Exakt passning',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Justering',\r
+               alignLeft       : 'Vänster',\r
+               alignAbsBottom: 'Absolut nederkant',\r
+               alignAbsMiddle: 'Absolut centrering',\r
+               alignBaseline   : 'Baslinje',\r
+               alignBottom     : 'Nederkant',\r
+               alignMiddle     : 'Mitten',\r
+               alignRight      : 'Höger',\r
+               alignTextTop    : 'Text överkant',\r
+               alignTop        : 'Överkant',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Bakgrundsfärg',\r
+               width   : 'Bredd',\r
+               height  : 'Höjd',\r
+               hSpace  : 'Horis. marginal',\r
+               vSpace  : 'Vert. marginal',\r
+               validateSrc : 'Var god ange länkens URL',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Stavningskontroll',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Saknas i ordlistan',\r
+               changeTo                : 'Ändra till',\r
+               btnIgnore               : 'Ignorera',\r
+               btnIgnoreAll    : 'Ignorera alla',\r
+               btnReplace              : 'Ersätt',\r
+               btnReplaceAll   : 'Ersätt alla',\r
+               btnUndo                 : 'Ångra',\r
+               noSuggestions   : '- Förslag saknas -',\r
+               progress                : 'Stavningskontroll pågår...',\r
+               noMispell               : 'Stavningskontroll slutförd: Inga stavfel påträffades.',\r
+               noChanges               : 'Stavningskontroll slutförd: Inga ord rättades.',\r
+               oneChange               : 'Stavningskontroll slutförd: Ett ord rättades.',\r
+               manyChanges             : 'Stavningskontroll slutförd: %1 ord rättades.',\r
+               ieSpellDownload : 'Stavningskontrollen är ej installerad. Vill du göra det nu?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Smiley',\r
+               title   : 'Infoga smiley'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Numrerad lista',\r
+       bulletedlist : 'Punktlista',\r
+       indent : 'Öka indrag',\r
+       outdent : 'Minska indrag',\r
+\r
+       justify :\r
+       {\r
+               left : 'Vänsterjustera',\r
+               center : 'Centrera',\r
+               right : 'Högerjustera',\r
+               block : 'Justera till marginaler'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Klistra in',\r
+               cutError        : 'Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klipp ut. Använd (Ctrl+X) istället.',\r
+               copyError       : 'Säkerhetsinställningar i Er webläsare tillåter inte åtgården Kopiera. Använd (Ctrl+C) istället',\r
+               pasteMsg        : 'Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'På grund av din webläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Klistra in från Word',\r
+               title : 'Klistra in från Word',\r
+               advice : 'Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ignorera typsnittsdefinitioner',\r
+               removeStyle : 'Radera Stildefinitioner'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Klistra in som vanlig text',\r
+               title : 'Klistra in som vanlig text'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Sidmallar',\r
+               title : 'Sidmallar',\r
+               insertOption: 'Ersätt aktuellt innehåll',\r
+               selectPromptMsg: 'Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):',\r
+               emptyListMsg : '(Ingen mall är vald)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Anpassad stil',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Teckenformat',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Teckenformat',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formaterad',\r
+               tag_address : 'Adress',\r
+               tag_h1 : 'Rubrik 1',\r
+               tag_h2 : 'Rubrik 2',\r
+               tag_h3 : 'Rubrik 3',\r
+               tag_h4 : 'Rubrik 4',\r
+               tag_h5 : 'Rubrik 5',\r
+               tag_h6 : 'Rubrik 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Typsnitt',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Typsnitt',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Storlek',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Storlek',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Textfärg',\r
+               bgColorTitle : 'Bakgrundsfärg',\r
+               auto : 'Automatisk',\r
+               more : 'Fler färger...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/th.js b/_source/lang/th.js
new file mode 100644 (file)
index 0000000..9f9d087
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Thai language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['th'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'ดูรหัส HTML',\r
+       newPage                 : 'สร้างหน้าเอกสารใหม่',\r
+       save                    : 'บันทึก',\r
+       preview                 : 'ดูหน้าเอกสารตัวอย่าง',\r
+       cut                             : 'ตัด',\r
+       copy                    : 'สำเนา',\r
+       paste                   : 'วาง',\r
+       print                   : 'สั่งพิมพ์',\r
+       underline               : 'ตัวขีดเส้นใต้',\r
+       bold                    : 'ตัวหนา',\r
+       italic                  : 'ตัวเอียง',\r
+       selectAll               : 'เลือกทั้งหมด',\r
+       removeFormat    : 'ล้างรูปแบบ',\r
+       strike                  : 'ตัวขีดเส้นทับ',\r
+       subscript               : 'ตัวห้อย',\r
+       superscript             : 'ตัวยก',\r
+       horizontalrule  : 'แทรกเส้นคั่นบรรทัด',\r
+       pagebreak               : 'แทรกตัวแบ่งหน้า Page Break',\r
+       unlink                  : 'ลบ ลิงค์',\r
+       undo                    : 'ยกเลิกคำสั่ง',\r
+       redo                    : 'ทำซ้ำคำสั่ง',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'เปิดหน้าต่างจัดการไฟล์อัพโหลด',\r
+               url                             : 'ที่อยู่อ้างอิง URL',\r
+               protocol                : 'โปรโตคอล',\r
+               upload                  : 'อัพโหลดไฟล์',\r
+               uploadSubmit    : 'อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)',\r
+               image                   : 'รูปภาพ',\r
+               flash                   : 'ไฟล์ Flash',\r
+               form                    : 'แบบฟอร์ม',\r
+               checkbox                : 'เช็คบ๊อก',\r
+               radio           : 'เรดิโอบัตตอน',\r
+               textField               : 'เท็กซ์ฟิลด์',\r
+               textarea                : 'เท็กซ์แอเรีย',\r
+               hiddenField             : 'ฮิดเดนฟิลด์',\r
+               button                  : 'ปุ่ม',\r
+               select  : 'แถบตัวเลือก',\r
+               imageButton             : 'ปุ่มแบบรูปภาพ',\r
+               notSet                  : '<ไม่ระบุ>',\r
+               id                              : 'ไอดี',\r
+               name                    : 'ชื่อ',\r
+               langDir                 : 'การเขียน-อ่านภาษา',\r
+               langDirLtr              : 'จากซ้ายไปขวา (LTR)',\r
+               langDirRtl              : 'จากขวามาซ้าย (RTL)',\r
+               langCode                : 'รหัสภาษา',\r
+               longDescr               : 'คำอธิบายประกอบ URL',\r
+               cssClass                : 'คลาสของไฟล์กำหนดลักษณะการแสดงผล',\r
+               advisoryTitle   : 'คำเกริ่นนำ',\r
+               cssStyle                : 'ลักษณะการแสดงผล',\r
+               ok                              : 'ตกลง',\r
+               cancel                  : 'ยกเลิก',\r
+               generalTab              : 'General', // MISSING\r
+               advancedTab             : 'ขั้นสูง',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'แทรกตัวอักษรพิเศษ',\r
+               title           : 'แทรกตัวอักษรพิเศษ'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'แทรก/แก้ไข ลิงค์',\r
+               menu            : 'แก้ไข ลิงค์',\r
+               title           : 'ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ',\r
+               info            : 'รายละเอียด',\r
+               target          : 'การเปิดหน้าลิงค์',\r
+               upload          : 'อัพโหลดไฟล์',\r
+               advanced        : 'ขั้นสูง',\r
+               type            : 'ประเภทของลิงค์',\r
+               toAnchor        : 'จุดเชื่อมโยง (Anchor)',\r
+               toEmail         : 'ส่งอีเมล์ (E-Mail)',\r
+               target          : 'การเปิดหน้าลิงค์',\r
+               targetNotSet    : '<ไม่ระบุ>',\r
+               targetFrame     : '<เปิดในเฟรม>',\r
+               targetPopup     : '<เปิดหน้าจอเล็ก (Pop-up)>',\r
+               targetNew       : 'เปิดหน้าจอใหม่ (_blank)',\r
+               targetTop       : 'เปิดในหน้าบนสุด (_top)',\r
+               targetSelf      : 'เปิดในหน้าปัจจุบัน (_self)',\r
+               targetParent    : 'เปิดในหน้าหลัก (_parent)',\r
+               targetFrameName : 'ชื่อทาร์เก็ตเฟรม',\r
+               targetPopupName : 'ระบุชื่อหน้าจอเล็ก (Pop-up)',\r
+               popupFeatures   : 'คุณสมบัติของหน้าจอเล็ก (Pop-up)',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'แสดงแถบสถานะ',\r
+               popupLocationBar        : 'แสดงที่อยู่ของไฟล์',\r
+               popupToolbar    : 'แสดงแถบเครื่องมือ',\r
+               popupMenuBar    : 'แสดงแถบเมนู',\r
+               popupFullScreen : 'แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)',\r
+               popupScrollBars : 'แสดงแถบเลื่อน',\r
+               popupDependent  : 'แสดงเต็มหน้าจอ (Netscape)',\r
+               popupWidth              : 'กว้าง',\r
+               popupLeft               : 'พิกัดซ้าย (Left Position)',\r
+               popupHeight             : 'สูง',\r
+               popupTop                : 'พิกัดบน (Top Position)',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'การเขียน-อ่านภาษา',\r
+               langDirNotSet   : '<ไม่ระบุ>',\r
+               langDirLTR              : 'จากซ้ายไปขวา (LTR)',\r
+               langDirRTL              : 'จากขวามาซ้าย (RTL)',\r
+               acccessKey              : 'แอคเซส คีย์',\r
+               name                    : 'ชื่อ',\r
+               langCode                : 'การเขียน-อ่านภาษา',\r
+               tabIndex                : 'ลำดับของ แท็บ',\r
+               advisoryTitle   : 'คำเกริ่นนำ',\r
+               advisoryContentType     : 'ชนิดของคำเกริ่นนำ',\r
+               cssClasses              : 'คลาสของไฟล์กำหนดลักษณะการแสดงผล',\r
+               charset                 : 'ลิงค์เชื่อมโยงไปยังชุดตัวอักษร',\r
+               styles                  : 'ลักษณะการแสดงผล',\r
+               selectAnchor    : 'ระบุข้อมูลของจุดเชื่อมโยง (Anchor)',\r
+               anchorName              : 'ชื่อ',\r
+               anchorId                : 'ไอดี',\r
+               emailAddress    : 'อีเมล์ (E-Mail)',\r
+               emailSubject    : 'หัวเรื่อง',\r
+               emailBody               : 'ข้อความ',\r
+               noAnchors               : '(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)',\r
+               noUrl                   : 'กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)',\r
+               noEmail                 : 'กรุณาระบุอีเมล์ (E-mail)'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'แทรก/แก้ไข Anchor',\r
+               menu            : 'รายละเอียด Anchor',\r
+               title           : 'รายละเอียด Anchor',\r
+               name            : 'ชื่อ Anchor',\r
+               errorName       : 'กรุณาระบุชื่อของ Anchor'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Find and Replace', // MISSING\r
+               find                            : 'ค้นหา',\r
+               replace                         : 'ค้นหาและแทนที่',\r
+               findWhat                        : 'ค้นหาคำว่า:',\r
+               replaceWith                     : 'แทนที่ด้วย:',\r
+               notFoundMsg                     : 'ไม่พบคำที่ค้นหา.',\r
+               matchCase                       : 'ตัวโหญ่-เล็ก ต้องตรงกัน',\r
+               matchWord                       : 'ต้องตรงกันทุกคำ',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'แทนที่ทั้งหมดที่พบ',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'ตาราง',\r
+               title           : 'คุณสมบัติของ ตาราง',\r
+               menu            : 'คุณสมบัติของ ตาราง',\r
+               deleteTable     : 'ลบตาราง',\r
+               rows            : 'แถว',\r
+               columns         : 'สดมน์',\r
+               border          : 'ขนาดเส้นขอบ',\r
+               align           : 'การจัดตำแหน่ง',\r
+               alignNotSet     : '<ไม่ระบุ>',\r
+               alignLeft       : 'ชิดซ้าย',\r
+               alignCenter     : 'กึ่งกลาง',\r
+               alignRight      : 'ชิดขวา',\r
+               width           : 'กว้าง',\r
+               widthPx         : 'จุดสี',\r
+               widthPc         : 'เปอร์เซ็น',\r
+               height          : 'สูง',\r
+               cellSpace       : 'ระยะแนวนอนน',\r
+               cellPad         : 'ระยะแนวตั้ง',\r
+               caption         : 'หัวเรื่องของตาราง',\r
+               summary         : 'สรุปความ',\r
+               headers         : 'Headers', // MISSING\r
+               headersNone             : 'None', // MISSING\r
+               headersColumn   : 'First column', // MISSING\r
+               headersRow              : 'First Row', // MISSING\r
+               headersBoth             : 'Both', // MISSING\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'ช่องตาราง',\r
+                       insertBefore    : 'Insert Cell Before', // MISSING\r
+                       insertAfter             : 'Insert Cell After', // MISSING\r
+                       deleteCell              : 'ลบช่อง',\r
+                       merge                   : 'ผสานช่อง',\r
+                       mergeRight              : 'Merge Right', // MISSING\r
+                       mergeDown               : 'Merge Down', // MISSING\r
+                       splitHorizontal : 'Split Cell Horizontally', // MISSING\r
+                       splitVertical   : 'Split Cell Vertically', // MISSING\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'แถว',\r
+                       insertBefore    : 'Insert Row Before', // MISSING\r
+                       insertAfter             : 'Insert Row After', // MISSING\r
+                       deleteRow               : 'ลบแถว'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'คอลัมน์',\r
+                       insertBefore    : 'Insert Column Before', // MISSING\r
+                       insertAfter             : 'Insert Column After', // MISSING\r
+                       deleteColumn    : 'ลบสดมน์'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'รายละเอียดของ ปุ่ม',\r
+               text            : 'ข้อความ (ค่าตัวแปร)',\r
+               type            : 'ข้อความ',\r
+               typeBtn         : 'Button',\r
+               typeSbm         : 'Submit',\r
+               typeRst         : 'Reset'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'คุณสมบัติของ เช็คบ๊อก',\r
+               radioTitle      : 'คุณสมบัติของ เรดิโอบัตตอน',\r
+               value           : 'ค่าตัวแปร',\r
+               selected        : 'เลือกเป็นค่าเริ่มต้น'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'คุณสมบัติของ แบบฟอร์ม',\r
+               menu            : 'คุณสมบัติของ แบบฟอร์ม',\r
+               action          : 'แอคชั่น',\r
+               method          : 'เมธอด',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'การเปิดหน้าลิงค์',\r
+               targetNotSet    : '<ไม่ระบุ>',\r
+               targetNew       : 'เปิดหน้าจอใหม่ (_blank)',\r
+               targetTop       : 'เปิดในหน้าบนสุด (_top)',\r
+               targetSelf      : 'เปิดในหน้าปัจจุบัน (_self)',\r
+               targetParent    : 'เปิดในหน้าหลัก (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'คุณสมบัติของ แถบตัวเลือก',\r
+               selectInfo      : 'อินโฟ',\r
+               opAvail         : 'รายการตัวเลือก',\r
+               value           : 'ค่าตัวแปร',\r
+               size            : 'ขนาด',\r
+               lines           : 'บรรทัด',\r
+               chkMulti        : 'เลือกหลายค่าได้',\r
+               opText          : 'ข้อความ',\r
+               opValue         : 'ค่าตัวแปร',\r
+               btnAdd          : 'เพิ่ม',\r
+               btnModify       : 'แก้ไข',\r
+               btnUp           : 'บน',\r
+               btnDown         : 'ล่าง',\r
+               btnSetValue : 'เลือกเป็นค่าเริ่มต้น',\r
+               btnDelete       : 'ลบ'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'คุณสมบัติของ เท็กแอเรีย',\r
+               cols            : 'สดมภ์',\r
+               rows            : 'แถว'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'คุณสมบัติของ เท็กซ์ฟิลด์',\r
+               name            : 'ชื่อ',\r
+               value           : 'ค่าตัวแปร',\r
+               charWidth       : 'ความกว้าง',\r
+               maxChars        : 'จำนวนตัวอักษรสูงสุด',\r
+               type            : 'ชนิด',\r
+               typeText        : 'ข้อความ',\r
+               typePass        : 'รหัสผ่าน'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'คุณสมบัติของ ฮิดเดนฟิลด์',\r
+               name    : 'ชื่อ',\r
+               value   : 'ค่าตัวแปร'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'คุณสมบัติของ รูปภาพ',\r
+               titleButton     : 'คุณสมบัติของ ปุ่มแบบรูปภาพ',\r
+               menu            : 'คุณสมบัติของ รูปภาพ',\r
+               infoTab : 'ข้อมูลของรูปภาพ',\r
+               btnUpload       : 'อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)',\r
+               url             : 'ที่อยู่อ้างอิง URL',\r
+               upload  : 'อัพโหลดไฟล์',\r
+               alt             : 'คำประกอบรูปภาพ',\r
+               width           : 'ความกว้าง',\r
+               height  : 'ความสูง',\r
+               lockRatio       : 'กำหนดอัตราส่วน กว้าง-สูง แบบคงที่',\r
+               resetSize       : 'กำหนดรูปเท่าขนาดจริง',\r
+               border  : 'ขนาดขอบรูป',\r
+               hSpace  : 'ระยะแนวนอน',\r
+               vSpace  : 'ระยะแนวตั้ง',\r
+               align           : 'การจัดวาง',\r
+               alignLeft       : 'ชิดซ้าย',\r
+               alignAbsBottom: 'ชิดด้านล่างสุด',\r
+               alignAbsMiddle: 'กึ่งกลาง',\r
+               alignBaseline   : 'ชิดบรรทัด',\r
+               alignBottom     : 'ชิดด้านล่าง',\r
+               alignMiddle     : 'กึ่งกลางแนวตั้ง',\r
+               alignRight      : 'ชิดขวา',\r
+               alignTextTop    : 'ใต้ตัวอักษร',\r
+               alignTop        : 'บนสุด',\r
+               preview : 'หน้าเอกสารตัวอย่าง',\r
+               alertUrl        : 'กรุณาระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)',\r
+               linkTab : 'ลิ้งค์',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'คุณสมบัติของไฟล์ Flash',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'คุณสมบัติของไฟล์ Flash',\r
+               chkPlay         : 'เล่นอัตโนมัติ Auto Play',\r
+               chkLoop         : 'เล่นวนรอบ Loop',\r
+               chkMenu         : 'ให้ใช้งานเมนูของ Flash',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'อัตราส่วน Scale',\r
+               scaleAll                : 'แสดงให้เห็นทั้งหมด Show all',\r
+               scaleNoBorder   : 'ไม่แสดงเส้นขอบ No Border',\r
+               scaleFit                : 'แสดงให้พอดีกับพื้นที่ Exact Fit',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'การจัดวาง',\r
+               alignLeft       : 'ชิดซ้าย',\r
+               alignAbsBottom: 'ชิดด้านล่างสุด',\r
+               alignAbsMiddle: 'กึ่งกลาง',\r
+               alignBaseline   : 'ชิดบรรทัด',\r
+               alignBottom     : 'ชิดด้านล่าง',\r
+               alignMiddle     : 'กึ่งกลางแนวตั้ง',\r
+               alignRight      : 'ชิดขวา',\r
+               alignTextTop    : 'ใต้ตัวอักษร',\r
+               alignTop        : 'บนสุด',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'สีพื้นหลัง',\r
+               width   : 'ความกว้าง',\r
+               height  : 'ความสูง',\r
+               hSpace  : 'ระยะแนวนอน',\r
+               vSpace  : 'ระยะแนวตั้ง',\r
+               validateSrc : 'กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'ตรวจการสะกดคำ',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'ไม่พบในดิกชันนารี',\r
+               changeTo                : 'แก้ไขเป็น',\r
+               btnIgnore               : 'ยกเว้น',\r
+               btnIgnoreAll    : 'ยกเว้นทั้งหมด',\r
+               btnReplace              : 'แทนที่',\r
+               btnReplaceAll   : 'แทนที่ทั้งหมด',\r
+               btnUndo                 : 'ยกเลิก',\r
+               noSuggestions   : '- ไม่มีคำแนะนำใดๆ -',\r
+               progress                : 'กำลังตรวจสอบคำสะกด...',\r
+               noMispell               : 'ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด',\r
+               noChanges               : 'ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ',\r
+               oneChange               : 'ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ',\r
+               manyChanges             : 'ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ',\r
+               ieSpellDownload : 'ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'รูปสื่ออารมณ์',\r
+               title   : 'แทรกสัญลักษณ์สื่ออารมณ์'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'ลำดับรายการแบบตัวเลข',\r
+       bulletedlist : 'ลำดับรายการแบบสัญลักษณ์',\r
+       indent : 'เพิ่มระยะย่อหน้า',\r
+       outdent : 'ลดระยะย่อหน้า',\r
+\r
+       justify :\r
+       {\r
+               left : 'จัดชิดซ้าย',\r
+               center : 'จัดกึ่งกลาง',\r
+               right : 'จัดชิดขวา',\r
+               block : 'จัดพอดีหน้ากระดาษ'\r
+       },\r
+\r
+       blockquote : 'Blockquote', // MISSING\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'วาง',\r
+               cutError        : 'ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว X พร้อมกัน).',\r
+               copyError       : 'ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว C พร้อมกัน).',\r
+               pasteMsg        : 'กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.',\r
+               securityMsg     : 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.' // MISSING\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'วางสำเนาจากตัวอักษรเวิร์ด',\r
+               title : 'วางสำเนาจากตัวอักษรเวิร์ด',\r
+               advice : 'กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.',\r
+               ignoreFontFace : 'ไม่สนใจ Font Face definitions',\r
+               removeStyle : 'ลบ Styles definitions'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'วางแบบตัวอักษรธรรมดา',\r
+               title : 'วางแบบตัวอักษรธรรมดา'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'เทมเพลต',\r
+               title : 'เทมเพลตของส่วนเนื้อหาเว็บไซต์',\r
+               insertOption: 'แทนที่เนื้อหาเว็บไซต์ที่เลือก',\r
+               selectPromptMsg: 'กรุณาเลือก เทมเพลต เพื่อนำไปแก้ไขในอีดิตเตอร์<br />(เนื้อหาส่วนนี้จะหายไป):',\r
+               emptyListMsg : '(ยังไม่มีการกำหนดเทมเพลต)'\r
+       },\r
+\r
+       showBlocks : 'Show Blocks', // MISSING\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'ลักษณะ',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'รูปแบบ',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'รูปแบบ',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatted',\r
+               tag_address : 'Address',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Paragraph (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'แบบอักษร',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'แบบอักษร',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'ขนาด',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'ขนาด',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'สีตัวอักษร',\r
+               bgColorTitle : 'สีพื้นหลัง',\r
+               auto : 'สีอัตโนมัติ',\r
+               more : 'เลือกสีอื่นๆ...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/tr.js b/_source/lang/tr.js
new file mode 100644 (file)
index 0000000..365eb53
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Turkish language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['tr'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Rich text editor, %1', // MISSING\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Kaynak',\r
+       newPage                 : 'Yeni Sayfa',\r
+       save                    : 'Kaydet',\r
+       preview                 : 'Ön İzleme',\r
+       cut                             : 'Kes',\r
+       copy                    : 'Kopyala',\r
+       paste                   : 'Yapıştır',\r
+       print                   : 'Yazdır',\r
+       underline               : 'Altı Çizgili',\r
+       bold                    : 'Kalın',\r
+       italic                  : 'İtalik',\r
+       selectAll               : 'Tümünü Seç',\r
+       removeFormat    : 'Biçimi Kaldır',\r
+       strike                  : 'Üstü Çizgili',\r
+       subscript               : 'Alt Simge',\r
+       superscript             : 'Üst Simge',\r
+       horizontalrule  : 'Yatay Satır Ekle',\r
+       pagebreak               : 'Sayfa Sonu Ekle',\r
+       unlink                  : 'Köprü Kaldır',\r
+       undo                    : 'Geri Al',\r
+       redo                    : 'Tekrarla',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Sunucuyu Gez',\r
+               url                             : 'URL',\r
+               protocol                : 'Protokol',\r
+               upload                  : 'Karşıya Yükle',\r
+               uploadSubmit    : 'Sunucuya Yolla',\r
+               image                   : 'Resim',\r
+               flash                   : 'Flash',\r
+               form                    : 'Form',\r
+               checkbox                : 'Onay Kutusu',\r
+               radio           : 'Seçenek Düğmesi',\r
+               textField               : 'Metin Girişi',\r
+               textarea                : 'Çok Satırlı Metin',\r
+               hiddenField             : 'Gizli Veri',\r
+               button                  : 'Düğme',\r
+               select  : 'Seçim Menüsü',\r
+               imageButton             : 'Resimli Düğme',\r
+               notSet                  : '<tanımlanmamış>',\r
+               id                              : 'Kimlik',\r
+               name                    : 'Ad',\r
+               langDir                 : 'Dil Yönü',\r
+               langDirLtr              : 'Soldan Sağa (LTR)',\r
+               langDirRtl              : 'Sağdan Sola (RTL)',\r
+               langCode                : 'Dil Kodlaması',\r
+               longDescr               : 'Uzun Tanımlı URL',\r
+               cssClass                : 'Biçem Sayfası Sınıfları',\r
+               advisoryTitle   : 'Danışma Başlığı',\r
+               cssStyle                : 'Biçem',\r
+               ok                              : 'Tamam',\r
+               cancel                  : 'İptal',\r
+               generalTab              : 'Genel',\r
+               advancedTab             : 'Gelişmiş',\r
+               validateNumberFailed    : 'This value is not a number.', // MISSING\r
+               confirmNewPage  : 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING\r
+               confirmCancel   : 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, unavailable</span>' // MISSING\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Özel Karakter Ekle',\r
+               title           : 'Özel Karakter Seç'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Köprü Ekle/Düzenle',\r
+               menu            : 'Köprü Düzenle',\r
+               title           : 'Köprü',\r
+               info            : 'Köprü Bilgisi',\r
+               target          : 'Hedef',\r
+               upload          : 'Karşıya Yükle',\r
+               advanced        : 'Gelişmiş',\r
+               type            : 'Köprü Türü',\r
+               toAnchor        : 'Bu sayfada çapa',\r
+               toEmail         : 'E-Posta',\r
+               target          : 'Hedef',\r
+               targetNotSet    : '<tanımlanmamış>',\r
+               targetFrame     : '<çerçeve>',\r
+               targetPopup     : '<yeni açılan pencere>',\r
+               targetNew       : 'Yeni Pencere(_blank)',\r
+               targetTop       : 'En Üst Pencere (_top)',\r
+               targetSelf      : 'Kendi Penceresi (_self)',\r
+               targetParent    : 'Anne Pencere (_parent)',\r
+               targetFrameName : 'Hedef Çerçeve Adı',\r
+               targetPopupName : 'Yeni Açılan Pencere Adı',\r
+               popupFeatures   : 'Yeni Açılan Pencere Özellikleri',\r
+               popupResizable  : 'Resizable', // MISSING\r
+               popupStatusBar  : 'Durum Çubuğu',\r
+               popupLocationBar        : 'Yer Çubuğu',\r
+               popupToolbar    : 'Araç Çubuğu',\r
+               popupMenuBar    : 'Menü Çubuğu',\r
+               popupFullScreen : 'Tam Ekran (IE)',\r
+               popupScrollBars : 'Kaydırma Çubukları',\r
+               popupDependent  : 'Bağımlı (Netscape)',\r
+               popupWidth              : 'Genişlik',\r
+               popupLeft               : 'Sola Göre Konum',\r
+               popupHeight             : 'Yükseklik',\r
+               popupTop                : 'Yukarıya Göre Konum',\r
+               id                              : 'Id', // MISSING\r
+               langDir                 : 'Dil Yönü',\r
+               langDirNotSet   : '<tanımlanmamış>',\r
+               langDirLTR              : 'Soldan Sağa (LTR)',\r
+               langDirRTL              : 'Sağdan Sola (RTL)',\r
+               acccessKey              : 'Erişim Tuşu',\r
+               name                    : 'Ad',\r
+               langCode                : 'Dil Yönü',\r
+               tabIndex                : 'Sekme İndeksi',\r
+               advisoryTitle   : 'Danışma Başlığı',\r
+               advisoryContentType     : 'Danışma İçerik Türü',\r
+               cssClasses              : 'Biçem Sayfası Sınıfları',\r
+               charset                 : 'Bağlı Kaynak Karakter Gurubu',\r
+               styles                  : 'Biçem',\r
+               selectAnchor    : 'Çapa Seç',\r
+               anchorName              : 'Çapa Adı ile',\r
+               anchorId                : 'Eleman Kimlik Numarası ile',\r
+               emailAddress    : 'E-Posta Adresi',\r
+               emailSubject    : 'İleti Konusu',\r
+               emailBody               : 'İleti Gövdesi',\r
+               noAnchors               : '(Bu belgede hiç çapa yok)',\r
+               noUrl                   : 'Lütfen köprü URL\'sini yazın',\r
+               noEmail                 : 'Lütfen E-posta adresini yazın'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Çapa Ekle/Düzenle',\r
+               menu            : 'Çapa Özellikleri',\r
+               title           : 'Çapa Özellikleri',\r
+               name            : 'Çapa Adı',\r
+               errorName       : 'Lütfen çapa için ad giriniz'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Bul ve Değiştir',\r
+               find                            : 'Bul',\r
+               replace                         : 'Değiştir',\r
+               findWhat                        : 'Aranan:',\r
+               replaceWith                     : 'Bununla değiştir:',\r
+               notFoundMsg                     : 'Belirtilen yazı bulunamadı.',\r
+               matchCase                       : 'Büyük/küçük harf duyarlı',\r
+               matchWord                       : 'Kelimenin tamamı uysun',\r
+               matchCyclic                     : 'Match cyclic', // MISSING\r
+               replaceAll                      : 'Tümünü Değiştir',\r
+               replaceSuccessMsg       : '%1 occurrence(s) replaced.' // MISSING\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Tablo',\r
+               title           : 'Tablo Özellikleri',\r
+               menu            : 'Tablo Özellikleri',\r
+               deleteTable     : 'Tabloyu Sil',\r
+               rows            : 'Satırlar',\r
+               columns         : 'Sütunlar',\r
+               border          : 'Kenar Kalınlığı',\r
+               align           : 'Hizalama',\r
+               alignNotSet     : '<Tanımlanmamış>',\r
+               alignLeft       : 'Sol',\r
+               alignCenter     : 'Merkez',\r
+               alignRight      : 'Sağ',\r
+               width           : 'Genişlik',\r
+               widthPx         : 'piksel',\r
+               widthPc         : 'yüzde',\r
+               height          : 'Yükseklik',\r
+               cellSpace       : 'Izgara kalınlığı',\r
+               cellPad         : 'Izgara yazı arası',\r
+               caption         : 'Başlık',\r
+               summary         : 'Özet',\r
+               headers         : 'Başlıklar',\r
+               headersNone             : 'Yok',\r
+               headersColumn   : 'İlk Sütun',\r
+               headersRow              : 'İlk Satır',\r
+               headersBoth             : 'Her İkisi',\r
+               invalidRows             : 'Number of rows must be a number greater than 0.', // MISSING\r
+               invalidCols             : 'Number of columns must be a number greater than 0.', // MISSING\r
+               invalidBorder   : 'Border size must be a number.', // MISSING\r
+               invalidWidth    : 'Table width must be a number.', // MISSING\r
+               invalidHeight   : 'Table height must be a number.', // MISSING\r
+               invalidCellSpacing      : 'Cell spacing must be a number.', // MISSING\r
+               invalidCellPadding      : 'Cell padding must be a number.', // MISSING\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Hücre',\r
+                       insertBefore    : 'Hücre Ekle - Önce',\r
+                       insertAfter             : 'Hücre Ekle - Sonra',\r
+                       deleteCell              : 'Hücre Sil',\r
+                       merge                   : 'Hücreleri Birleştir',\r
+                       mergeRight              : 'Birleştir - Sağdaki İle ',\r
+                       mergeDown               : 'Birleştir - Aşağıdaki İle ',\r
+                       splitHorizontal : 'Hücreyi Yatay Böl',\r
+                       splitVertical   : 'Hücreyi Dikey Böl',\r
+                       title                   : 'Cell Properties', // MISSING\r
+                       cellType                : 'Cell Type', // MISSING\r
+                       rowSpan                 : 'Rows Span', // MISSING\r
+                       colSpan                 : 'Columns Span', // MISSING\r
+                       wordWrap                : 'Word Wrap', // MISSING\r
+                       hAlign                  : 'Horizontal Alignment', // MISSING\r
+                       vAlign                  : 'Vertical Alignment', // MISSING\r
+                       alignTop                : 'Top', // MISSING\r
+                       alignMiddle             : 'Middle', // MISSING\r
+                       alignBottom             : 'Bottom', // MISSING\r
+                       alignBaseline   : 'Baseline', // MISSING\r
+                       bgColor                 : 'Background Color', // MISSING\r
+                       borderColor             : 'Border Color', // MISSING\r
+                       data                    : 'Data', // MISSING\r
+                       header                  : 'Header', // MISSING\r
+                       yes                             : 'Yes', // MISSING\r
+                       no                              : 'No', // MISSING\r
+                       invalidWidth    : 'Cell width must be a number.', // MISSING\r
+                       invalidHeight   : 'Cell height must be a number.', // MISSING\r
+                       invalidRowSpan  : 'Rows span must be a whole number.', // MISSING\r
+                       invalidColSpan  : 'Columns span must be a whole number.' // MISSING\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Satır',\r
+                       insertBefore    : 'Satır Ekle - Önce',\r
+                       insertAfter             : 'Satır Ekle - Sonra',\r
+                       deleteRow               : 'Satır Sil'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Sütun',\r
+                       insertBefore    : 'Kolon Ekle - Önce',\r
+                       insertAfter             : 'Kolon Ekle - Sonra',\r
+                       deleteColumn    : 'Sütun Sil'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Düğme Özellikleri',\r
+               text            : 'Metin (Değer)',\r
+               type            : 'Tip',\r
+               typeBtn         : 'Düğme',\r
+               typeSbm         : 'Gönder',\r
+               typeRst         : 'Sıfırla'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Onay Kutusu Özellikleri',\r
+               radioTitle      : 'Seçenek Düğmesi Özellikleri',\r
+               value           : 'Değer',\r
+               selected        : 'Seçili'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Form Özellikleri',\r
+               menu            : 'Form Özellikleri',\r
+               action          : 'İşlem',\r
+               method          : 'Yöntem',\r
+               encoding        : 'Encoding', // MISSING\r
+               target          : 'Hedef',\r
+               targetNotSet    : '<tanımlanmamış>',\r
+               targetNew       : 'Yeni Pencere(_blank)',\r
+               targetTop       : 'En Üst Pencere (_top)',\r
+               targetSelf      : 'Kendi Penceresi (_self)',\r
+               targetParent    : 'Anne Pencere (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Seçim Menüsü Özellikleri',\r
+               selectInfo      : 'Bilgi',\r
+               opAvail         : 'Mevcut Seçenekler',\r
+               value           : 'Değer',\r
+               size            : 'Boyut',\r
+               lines           : 'satır',\r
+               chkMulti        : 'Çoklu seçime izin ver',\r
+               opText          : 'Metin',\r
+               opValue         : 'Değer',\r
+               btnAdd          : 'Ekle',\r
+               btnModify       : 'Düzenle',\r
+               btnUp           : 'Yukarı',\r
+               btnDown         : 'Aşağı',\r
+               btnSetValue : 'Seçili değer olarak ata',\r
+               btnDelete       : 'Sil'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Çok Satırlı Metin Özellikleri',\r
+               cols            : 'Sütunlar',\r
+               rows            : 'Satırlar'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Metin Girişi Özellikleri',\r
+               name            : 'Ad',\r
+               value           : 'Değer',\r
+               charWidth       : 'Karakter Genişliği',\r
+               maxChars        : 'En Fazla Karakter',\r
+               type            : 'Tür',\r
+               typeText        : 'Metin',\r
+               typePass        : 'Parola'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Gizli Veri Özellikleri',\r
+               name    : 'Ad',\r
+               value   : 'Değer'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Resim Özellikleri',\r
+               titleButton     : 'Resimli Düğme Özellikleri',\r
+               menu            : 'Resim Özellikleri',\r
+               infoTab : 'Resim Bilgisi',\r
+               btnUpload       : 'Sunucuya Yolla',\r
+               url             : 'URL',\r
+               upload  : 'Karşıya Yükle',\r
+               alt             : 'Alternatif Yazı',\r
+               width           : 'Genişlik',\r
+               height  : 'Yükseklik',\r
+               lockRatio       : 'Oranı Kilitle',\r
+               resetSize       : 'Boyutu Başa Döndür',\r
+               border  : 'Kenar',\r
+               hSpace  : 'Yatay Boşluk',\r
+               vSpace  : 'Dikey Boşluk',\r
+               align           : 'Hizalama',\r
+               alignLeft       : 'Sol',\r
+               alignAbsBottom: 'Tam Altı',\r
+               alignAbsMiddle: 'Tam Ortası',\r
+               alignBaseline   : 'Taban Çizgisi',\r
+               alignBottom     : 'Alt',\r
+               alignMiddle     : 'Orta',\r
+               alignRight      : 'Sağ',\r
+               alignTextTop    : 'Yazı Tepeye',\r
+               alignTop        : 'Tepe',\r
+               preview : 'Ön İzleme',\r
+               alertUrl        : 'Lütfen resmin URL\'sini yazınız',\r
+               linkTab : 'Köprü',\r
+               button2Img      : 'Do you want to transform the selected image button on a simple image?', // MISSING\r
+               img2Button      : 'Do you want to transform the selected image on a image button?' // MISSING\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash Özellikleri',\r
+               propertiesTab   : 'Properties', // MISSING\r
+               title           : 'Flash Özellikleri',\r
+               chkPlay         : 'Otomatik Oynat',\r
+               chkLoop         : 'Döngü',\r
+               chkMenu         : 'Flash Menüsünü Kullan',\r
+               chkFull         : 'Allow Fullscreen', // MISSING\r
+               scale           : 'Boyutlandır',\r
+               scaleAll                : 'Hepsini Göster',\r
+               scaleNoBorder   : 'Kenar Yok',\r
+               scaleFit                : 'Tam Sığdır',\r
+               access                  : 'Script Access', // MISSING\r
+               accessAlways    : 'Always', // MISSING\r
+               accessSameDomain        : 'Same domain', // MISSING\r
+               accessNever     : 'Never', // MISSING\r
+               align           : 'Hizalama',\r
+               alignLeft       : 'Sol',\r
+               alignAbsBottom: 'Tam Altı',\r
+               alignAbsMiddle: 'Tam Ortası',\r
+               alignBaseline   : 'Taban Çizgisi',\r
+               alignBottom     : 'Alt',\r
+               alignMiddle     : 'Orta',\r
+               alignRight      : 'Sağ',\r
+               alignTextTop    : 'Yazı Tepeye',\r
+               alignTop        : 'Tepe',\r
+               quality         : 'Quality', // MISSING\r
+               qualityBest              : 'Best', // MISSING\r
+               qualityHigh              : 'High', // MISSING\r
+               qualityAutoHigh  : 'Auto High', // MISSING\r
+               qualityMedium    : 'Medium', // MISSING\r
+               qualityAutoLow   : 'Auto Low', // MISSING\r
+               qualityLow               : 'Low', // MISSING\r
+               windowModeWindow         : 'Window', // MISSING\r
+               windowModeOpaque         : 'Opaque', // MISSING\r
+               windowModeTransparent    : 'Transparent', // MISSING\r
+               windowMode      : 'Window mode', // MISSING\r
+               flashvars       : 'Variables for Flash', // MISSING\r
+               bgcolor : 'Arka Renk',\r
+               width   : 'Genişlik',\r
+               height  : 'Yükseklik',\r
+               hSpace  : 'Yatay Boşluk',\r
+               vSpace  : 'Dikey Boşluk',\r
+               validateSrc : 'Lütfen köprü URL\'sini yazın',\r
+               validateWidth : 'Width must be a number.', // MISSING\r
+               validateHeight : 'Height must be a number.', // MISSING\r
+               validateHSpace : 'HSpace must be a number.', // MISSING\r
+               validateVSpace : 'VSpace must be a number.' // MISSING\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Yazım Denetimi',\r
+               title                   : 'Spell Check', // MISSING\r
+               notAvailable    : 'Sorry, but service is unavailable now.', // MISSING\r
+               errorLoading    : 'Error loading application service host: %s.', // MISSING\r
+               notInDic                : 'Sözlükte Yok',\r
+               changeTo                : 'Şuna değiştir:',\r
+               btnIgnore               : 'Yoksay',\r
+               btnIgnoreAll    : 'Tümünü Yoksay',\r
+               btnReplace              : 'Değiştir',\r
+               btnReplaceAll   : 'Tümünü Değiştir',\r
+               btnUndo                 : 'Geri Al',\r
+               noSuggestions   : '- Öneri Yok -',\r
+               progress                : 'Yazım denetimi işlemde...',\r
+               noMispell               : 'Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı',\r
+               noChanges               : 'Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi',\r
+               oneChange               : 'Yazım denetimi tamamlandı: Bir kelime değiştirildi',\r
+               manyChanges             : 'Yazım denetimi tamamlandı: %1 kelime değiştirildi',\r
+               ieSpellDownload : 'Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'İfade',\r
+               title   : 'İfade Ekle'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 element' // MISSING\r
+       },\r
+\r
+       numberedlist : 'Numaralı Liste',\r
+       bulletedlist : 'Simgeli Liste',\r
+       indent : 'Sekme Arttır',\r
+       outdent : 'Sekme Azalt',\r
+\r
+       justify :\r
+       {\r
+               left : 'Sola Dayalı',\r
+               center : 'Ortalanmış',\r
+               right : 'Sağa Dayalı',\r
+               block : 'İki Kenara Yaslanmış'\r
+       },\r
+\r
+       blockquote : 'Blok Oluştur',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Yapıştır',\r
+               cutError        : 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl+X) tuşlarını kullanın.',\r
+               copyError       : 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl+C) tuşlarını kullanın.',\r
+               pasteMsg        : 'Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.',\r
+               securityMsg     : 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Word\'den Yapıştır',\r
+               title : 'Word\'den Yapıştır',\r
+               advice : 'Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.',\r
+               ignoreFontFace : 'Yazı Tipi tanımlarını yoksay',\r
+               removeStyle : 'Biçem Tanımlarını çıkar'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Düz Metin Olarak Yapıştır',\r
+               title : 'Düz Metin Olarak Yapıştır'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Şablonlar',\r
+               title : 'İçerik Şablonları',\r
+               insertOption: 'Mevcut içerik ile değiştir',\r
+               selectPromptMsg: 'Düzenleyicide açmak için lütfen bir şablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):',\r
+               emptyListMsg : '(Belirli bir şablon seçilmedi)'\r
+       },\r
+\r
+       showBlocks : 'Blokları Göster',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Biçem',\r
+               voiceLabel : 'Styles', // MISSING\r
+               panelVoiceLabel : 'Select a style', // MISSING\r
+               panelTitle1 : 'Block Styles', // MISSING\r
+               panelTitle2 : 'Inline Styles', // MISSING\r
+               panelTitle3 : 'Object Styles' // MISSING\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Biçim',\r
+               voiceLabel : 'Format', // MISSING\r
+               panelTitle : 'Biçim',\r
+               panelVoiceLabel : 'Select a paragraph format', // MISSING\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Biçimli',\r
+               tag_address : 'Adres',\r
+               tag_h1 : 'Başlık 1',\r
+               tag_h2 : 'Başlık 2',\r
+               tag_h3 : 'Başlık 3',\r
+               tag_h4 : 'Başlık 4',\r
+               tag_h5 : 'Başlık 5',\r
+               tag_h6 : 'Başlık 6',\r
+               tag_div : 'Paragraf (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Yazı Türü',\r
+               voiceLabel : 'Font', // MISSING\r
+               panelTitle : 'Yazı Türü',\r
+               panelVoiceLabel : 'Select a font' // MISSING\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Boyut',\r
+               voiceLabel : 'Font Size', // MISSING\r
+               panelTitle : 'Boyut',\r
+               panelVoiceLabel : 'Select a font size' // MISSING\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Yazı Rengi',\r
+               bgColorTitle : 'Arka Renk',\r
+               auto : 'Otomatik',\r
+               more : 'Diğer renkler...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Spell Check As You Type', // MISSING\r
+               enable : 'Enable SCAYT', // MISSING\r
+               disable : 'Disable SCAYT', // MISSING\r
+               about : 'About SCAYT', // MISSING\r
+               toggle : 'Toggle SCAYT', // MISSING\r
+               options : 'Options', // MISSING\r
+               langs : 'Languages', // MISSING\r
+               moreSuggestions : 'More suggestions', // MISSING\r
+               ignore : 'Ignore', // MISSING\r
+               ignoreAll : 'Ignore All', // MISSING\r
+               addWord : 'Add Word', // MISSING\r
+               emptyDic : 'Dictionary name should not be empty.', // MISSING\r
+               optionsTab : 'Options', // MISSING\r
+               languagesTab : 'Languages', // MISSING\r
+               dictionariesTab : 'Dictionaries', // MISSING\r
+               aboutTab : 'About' // MISSING\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'About CKEditor', // MISSING\r
+               dlgTitle : 'About CKEditor', // MISSING\r
+               moreInfo : 'For licensing information please visit our web site:', // MISSING\r
+               copy : 'Copyright &copy; $1. All rights reserved.' // MISSING\r
+       },\r
+\r
+       maximize : 'Maximize', // MISSING\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Anchor', // MISSING\r
+               flash : 'Flash Animation', // MISSING\r
+               div : 'Page Break', // MISSING\r
+               unknown : 'Unknown Object' // MISSING\r
+       },\r
+\r
+       resize : 'Drag to resize' // MISSING\r
+};\r
diff --git a/_source/lang/uk.js b/_source/lang/uk.js
new file mode 100644 (file)
index 0000000..f675600
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Ukrainian language. Translated by Alexander Pervak.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['uk'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Візуальний текстовий редактор, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Джерело',\r
+       newPage                 : 'Нова сторінка',\r
+       save                    : 'Зберегти',\r
+       preview                 : 'Попередній перегляд',\r
+       cut                             : 'Вирізати',\r
+       copy                    : 'Копіювати',\r
+       paste                   : 'Вставити',\r
+       print                   : 'Друк',\r
+       underline               : 'Підкреслений',\r
+       bold                    : 'Жирний',\r
+       italic                  : 'Курсив',\r
+       selectAll               : 'Виділити все',\r
+       removeFormat    : 'Прибрати форматування',\r
+       strike                  : 'Закреслений',\r
+       subscript               : 'Підрядковий індекс',\r
+       superscript             : 'Надрядковий индекс',\r
+       horizontalrule  : 'Вставити горизонтальну лінію',\r
+       pagebreak               : 'Вставити розривши сторінки',\r
+       unlink                  : 'Знищити посилання',\r
+       undo                    : 'Повернути',\r
+       redo                    : 'Повторити',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Передивитися на сервері',\r
+               url                             : 'URL',\r
+               protocol                : 'Протокол',\r
+               upload                  : 'Закачати',\r
+               uploadSubmit    : 'Надіслати на сервер',\r
+               image                   : 'Зображення',\r
+               flash                   : 'Flash',\r
+               form                    : 'Форма',\r
+               checkbox                : 'Флагова кнопка',\r
+               radio           : 'Кнопка вибору',\r
+               textField               : 'Текстове поле',\r
+               textarea                : 'Текстова область',\r
+               hiddenField             : 'Приховане поле',\r
+               button                  : 'Кнопка',\r
+               select  : 'Список',\r
+               imageButton             : 'Кнопка із зображенням',\r
+               notSet                  : '<не визначено>',\r
+               id                              : 'Ідентифікатор',\r
+               name                    : 'Им\'я',\r
+               langDir                 : 'Напрямок мови',\r
+               langDirLtr              : 'Зліва на право (LTR)',\r
+               langDirRtl              : 'Зправа на ліво (RTL)',\r
+               langCode                : 'Мова',\r
+               longDescr               : 'Довгий опис URL',\r
+               cssClass                : 'Клас CSS',\r
+               advisoryTitle   : 'Заголовок',\r
+               cssStyle                : 'Стиль CSS',\r
+               ok                              : 'ОК',\r
+               cancel                  : 'Скасувати',\r
+               generalTab              : 'Загальна',\r
+               advancedTab             : 'Розширений',\r
+               validateNumberFailed    : 'Значення не є числом.',\r
+               confirmNewPage  : 'Всі не збережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову сторінку?',\r
+               confirmCancel   : 'Деякі опції були змінені. Закрити вікно?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, не доступне</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Вставити спеціальний символ',\r
+               title           : 'Оберіть спеціальний символ'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Вставити/Редагувати посилання',\r
+               menu            : 'Вставити посилання',\r
+               title           : 'Посилання',\r
+               info            : 'Інформація посилання',\r
+               target          : 'Ціль',\r
+               upload          : 'Закачати',\r
+               advanced        : 'Розширений',\r
+               type            : 'Тип посилання',\r
+               toAnchor        : 'Якір на цю сторінку',\r
+               toEmail         : 'Эл. пошта',\r
+               target          : 'Ціль',\r
+               targetNotSet    : '<не визначено>',\r
+               targetFrame     : '<фрейм>',\r
+               targetPopup     : '<спливаюче вікно>',\r
+               targetNew       : 'Нове вікно (_blank)',\r
+               targetTop       : 'Найвище вікно (_top)',\r
+               targetSelf      : 'Теж вікно (_self)',\r
+               targetParent    : 'Батьківське вікно (_parent)',\r
+               targetFrameName : 'Ім\'я целевого фрейма',\r
+               targetPopupName : 'Ім\'я спливаючого вікна',\r
+               popupFeatures   : 'Властивості спливаючого вікна',\r
+               popupResizable  : 'Масштабоване',\r
+               popupStatusBar  : 'Строка статусу',\r
+               popupLocationBar        : 'Панель локації',\r
+               popupToolbar    : 'Панель інструментів',\r
+               popupMenuBar    : 'Панель меню',\r
+               popupFullScreen : 'Повний екран (IE)',\r
+               popupScrollBars : 'Полоси прокрутки',\r
+               popupDependent  : 'Залежний (Netscape)',\r
+               popupWidth              : 'Ширина',\r
+               popupLeft               : 'Позиція зліва',\r
+               popupHeight             : 'Висота',\r
+               popupTop                : 'Позиція зверху',\r
+               id                              : 'Ідентифікатор (Id)',\r
+               langDir                 : 'Напрямок мови',\r
+               langDirNotSet   : '<не визначено>',\r
+               langDirLTR              : 'Зліва на право (LTR)',\r
+               langDirRTL              : 'Зправа на ліво (RTL)',\r
+               acccessKey              : 'Гаряча клавіша',\r
+               name                    : 'Им\'я',\r
+               langCode                : 'Напрямок мови',\r
+               tabIndex                : 'Послідовність переходу',\r
+               advisoryTitle   : 'Заголовок',\r
+               advisoryContentType     : 'Тип вмісту',\r
+               cssClasses              : 'Клас CSS',\r
+               charset                 : 'Кодировка',\r
+               styles                  : 'Стиль CSS',\r
+               selectAnchor    : 'Оберіть якір',\r
+               anchorName              : 'За ім\'ям якоря',\r
+               anchorId                : 'За ідентифікатором елемента',\r
+               emailAddress    : 'Адреса ел. пошти',\r
+               emailSubject    : 'Тема листа',\r
+               emailBody               : 'Тіло повідомлення',\r
+               noAnchors               : '(Немає якорів доступних в цьому документі)',\r
+               noUrl                   : 'Будь ласка, занесіть URL посилання',\r
+               noEmail                 : 'Будь ласка, занесіть адрес эл. почты'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Вставити/Редагувати якір',\r
+               menu            : 'Властивості якоря',\r
+               title           : 'Властивості якоря',\r
+               name            : 'Ім\'я якоря',\r
+               errorName       : 'Будь ласка, занесіть ім\'я якоря'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Знайти і замінити',\r
+               find                            : 'Пошук',\r
+               replace                         : 'Заміна',\r
+               findWhat                        : 'Шукати:',\r
+               replaceWith                     : 'Замінити на:',\r
+               notFoundMsg                     : 'Вказаний текст не знайдений.',\r
+               matchCase                       : 'Враховувати регістр',\r
+               matchWord                       : 'Збіг цілих слів',\r
+               matchCyclic                     : 'Циклічна заміна',\r
+               replaceAll                      : 'Замінити все',\r
+               replaceSuccessMsg       : '%1 співпадінь(я) замінено.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Таблиця',\r
+               title           : 'Властивості таблиці',\r
+               menu            : 'Властивості таблиці',\r
+               deleteTable     : 'Видалити таблицю',\r
+               rows            : 'Строки',\r
+               columns         : 'Колонки',\r
+               border          : 'Розмір бордюра',\r
+               align           : 'Вирівнювання',\r
+               alignNotSet     : '<Не вст.>',\r
+               alignLeft       : 'Зліва',\r
+               alignCenter     : 'По центру',\r
+               alignRight      : 'Зправа',\r
+               width           : 'Ширина',\r
+               widthPx         : 'пікселів',\r
+               widthPc         : 'відсотків',\r
+               height          : 'Висота',\r
+               cellSpace       : 'Проміжок (spacing)',\r
+               cellPad         : 'Відступ (padding)',\r
+               caption         : 'Заголовок',\r
+               summary         : 'Резюме',\r
+               headers         : 'Заголовки',\r
+               headersNone             : 'Жодного',\r
+               headersColumn   : 'Перша колонка',\r
+               headersRow              : 'Перший рядок',\r
+               headersBoth             : 'Обидва',\r
+               invalidRows             : 'Кількість рядків повинна бути числом більше за 0.',\r
+               invalidCols             : 'Кількість колонок повинна бути числом більше за  0.',\r
+               invalidBorder   : 'Розмір бордюра повинен бути числом.',\r
+               invalidWidth    : 'Ширина таблиці повинна бути числом.',\r
+               invalidHeight   : 'Висота таблиці повинна бути числом.',\r
+               invalidCellSpacing      : 'Проміжок (spacing) комірки повинен бути числом.',\r
+               invalidCellPadding      : 'Відступ (padding) комірки повинен бути числом.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Осередок',\r
+                       insertBefore    : 'Вставити комірку до',\r
+                       insertAfter             : 'Вставити комірку після',\r
+                       deleteCell              : 'Видалити комірки',\r
+                       merge                   : 'Об\'єднати комірки',\r
+                       mergeRight              : 'Об\'єднати зправа',\r
+                       mergeDown               : 'Об\'єднати до низу',\r
+                       splitHorizontal : 'Розділити комірку по горизонталі',\r
+                       splitVertical   : 'Розділити комірку по вертикалі',\r
+                       title                   : 'Властивості комірки',\r
+                       cellType                : 'Тип комірки',\r
+                       rowSpan                 : 'Обєднання рядків (Rows Span)',\r
+                       colSpan                 : 'Обєднання стовпчиків (Columns Span)',\r
+                       wordWrap                : 'Авто згортання тексту (Word Wrap)',\r
+                       hAlign                  : 'Горизонтальне вирівнювання',\r
+                       vAlign                  : 'Вертикальне вирівнювання',\r
+                       alignTop                : 'До верху',\r
+                       alignMiddle             : 'Посередині',\r
+                       alignBottom             : 'До низу',\r
+                       alignBaseline   : 'По базовій лінії',\r
+                       bgColor                 : 'Колір фону',\r
+                       borderColor             : 'Колір бордюру',\r
+                       data                    : 'Дані',\r
+                       header                  : 'Заголовок',\r
+                       yes                             : 'Так',\r
+                       no                              : 'Ні',\r
+                       invalidWidth    : 'Ширина комірки повинна бути числом.',\r
+                       invalidHeight   : 'Висота комірки повинна бути числом.',\r
+                       invalidRowSpan  : 'Кількість обєднуваних рядків повинна бути цілим числом.',\r
+                       invalidColSpan  : 'Кількість обєднуваних стовпчиків повинна бути цілим числом.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Рядок',\r
+                       insertBefore    : 'Вставити рядок до',\r
+                       insertAfter             : 'Вставити рядок після',\r
+                       deleteRow               : 'Видалити строки'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Колонка',\r
+                       insertBefore    : 'Вставити колонку до',\r
+                       insertAfter             : 'Вставити колонку після',\r
+                       deleteColumn    : 'Видалити колонки'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Властивості кнопки',\r
+               text            : 'Текст (Значення)',\r
+               type            : 'Тип',\r
+               typeBtn         : 'Кнопка',\r
+               typeSbm         : 'Відправити',\r
+               typeRst         : 'Скинути'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Властивості флагової кнопки',\r
+               radioTitle      : 'Властивості кнопки вибору',\r
+               value           : 'Значення',\r
+               selected        : 'Обрана'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Властивості форми',\r
+               menu            : 'Властивості форми',\r
+               action          : 'Дія',\r
+               method          : 'Метод',\r
+               encoding        : 'Кодування',\r
+               target          : 'Ціль',\r
+               targetNotSet    : '<не визначено>',\r
+               targetNew       : 'Нове вікно (_blank)',\r
+               targetTop       : 'Найвище вікно (_top)',\r
+               targetSelf      : 'Теж вікно (_self)',\r
+               targetParent    : 'Батьківське вікно (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Властивості списку',\r
+               selectInfo      : 'Інфо',\r
+               opAvail         : 'Доступні варіанти',\r
+               value           : 'Значення',\r
+               size            : 'Розмір',\r
+               lines           : 'лінії',\r
+               chkMulti        : 'Дозволити обрання декількох позицій',\r
+               opText          : 'Текст',\r
+               opValue         : 'Значення',\r
+               btnAdd          : 'Добавити',\r
+               btnModify       : 'Змінити',\r
+               btnUp           : 'Вгору',\r
+               btnDown         : 'Вниз',\r
+               btnSetValue : 'Встановити як вибране значення',\r
+               btnDelete       : 'Видалити'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Властивості текстової області',\r
+               cols            : 'Колонки',\r
+               rows            : 'Строки'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Властивості текстового поля',\r
+               name            : 'Ім\'я',\r
+               value           : 'Значення',\r
+               charWidth       : 'Ширина',\r
+               maxChars        : 'Макс. кіл-ть символів',\r
+               type            : 'Тип',\r
+               typeText        : 'Текст',\r
+               typePass        : 'Пароль'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Властивості прихованого поля',\r
+               name    : 'Ім\'я',\r
+               value   : 'Значення'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Властивості зображення',\r
+               titleButton     : 'Властивості кнопки із зображенням',\r
+               menu            : 'Властивості зображення',\r
+               infoTab : 'Інформація про изображении',\r
+               btnUpload       : 'Надіслати на сервер',\r
+               url             : 'URL',\r
+               upload  : 'Закачати',\r
+               alt             : 'Альтернативний текст',\r
+               width           : 'Ширина',\r
+               height  : 'Висота',\r
+               lockRatio       : 'Зберегти пропорції',\r
+               resetSize       : 'Скинути розмір',\r
+               border  : 'Бордюр',\r
+               hSpace  : 'Горизонтальний відступ',\r
+               vSpace  : 'Вертикальний відступ',\r
+               align           : 'Вирівнювання',\r
+               alignLeft       : 'По лівому краю',\r
+               alignAbsBottom: 'Абс по низу',\r
+               alignAbsMiddle: 'Абс по середині',\r
+               alignBaseline   : 'По базовій лінії',\r
+               alignBottom     : 'По низу',\r
+               alignMiddle     : 'По середині',\r
+               alignRight      : 'По правому краю',\r
+               alignTextTop    : 'Текст на верху',\r
+               alignTop        : 'По верху',\r
+               preview : 'Попередній перегляд',\r
+               alertUrl        : 'Будь ласка, введіть URL зображення',\r
+               linkTab : 'Посилання',\r
+               button2Img      : 'Ви хочете перетворити обрану кнопку-зображення на просте зображення?',\r
+               img2Button      : 'Ви хочете перетворити обране зображення на кнопку-зображення?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Властивості Flash',\r
+               propertiesTab   : 'Властивості',\r
+               title           : 'Властивості Flash',\r
+               chkPlay         : 'Авто програвання',\r
+               chkLoop         : 'Зациклити',\r
+               chkMenu         : 'Дозволити меню Flash',\r
+               chkFull         : 'Дозволити повноекранний перегляд',\r
+               scale           : 'Масштаб',\r
+               scaleAll                : 'Показати всі',\r
+               scaleNoBorder   : 'Без рамки',\r
+               scaleFit                : 'Дійсний розмір',\r
+               access                  : 'Доступ до скрипта',\r
+               accessAlways    : 'Завжди',\r
+               accessSameDomain        : 'З того ж домена',\r
+               accessNever     : 'Ніколи',\r
+               align           : 'Вирівнювання',\r
+               alignLeft       : 'По лівому краю',\r
+               alignAbsBottom: 'Абс по низу',\r
+               alignAbsMiddle: 'Абс по середині',\r
+               alignBaseline   : 'По базовій лінії',\r
+               alignBottom     : 'По низу',\r
+               alignMiddle     : 'По середині',\r
+               alignRight      : 'По правому краю',\r
+               alignTextTop    : 'Текст на верху',\r
+               alignTop        : 'По верху',\r
+               quality         : 'Якість',\r
+               qualityBest              : 'Відмінна',\r
+               qualityHigh              : 'Висока',\r
+               qualityAutoHigh  : 'Авто відмінна',\r
+               qualityMedium    : 'Середня',\r
+               qualityAutoLow   : 'Авто низька',\r
+               qualityLow               : 'Низька',\r
+               windowModeWindow         : 'Вікно',\r
+               windowModeOpaque         : 'Непрозорість (Opaque)',\r
+               windowModeTransparent    : 'Прозорість (Transparent)',\r
+               windowMode      : 'Режим вікна',\r
+               flashvars       : 'Змінні Flash',\r
+               bgcolor : 'Колір фону',\r
+               width   : 'Ширина',\r
+               height  : 'Висота',\r
+               hSpace  : 'Горизонтальний відступ',\r
+               vSpace  : 'Вертикальний відступ',\r
+               validateSrc : 'Будь ласка, занесіть URL посилання',\r
+               validateWidth : 'Ширина повинна бути числом.',\r
+               validateHeight : 'Висота повинна бути числом.',\r
+               validateHSpace : 'HSpace повинна бути числом.',\r
+               validateVSpace : 'VSpace повинна бути числом.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Перевірити орфографію',\r
+               title                   : 'Перевірка орфографії',\r
+               notAvailable    : 'Вибачте, але сервіс наразі недоступний.',\r
+               errorLoading    : 'Помилка завантаження : %s.',\r
+               notInDic                : 'Не має в словнику',\r
+               changeTo                : 'Замінити на',\r
+               btnIgnore               : 'Ігнорувати',\r
+               btnIgnoreAll    : 'Ігнорувати все',\r
+               btnReplace              : 'Замінити',\r
+               btnReplaceAll   : 'Замінити все',\r
+               btnUndo                 : 'Назад',\r
+               noSuggestions   : '- Немає припущень -',\r
+               progress                : 'Виконується перевірка орфографії...',\r
+               noMispell               : 'Перевірку орфографії завершено: помилок не знайдено',\r
+               noChanges               : 'Перевірку орфографії завершено: жодне слово не змінено',\r
+               oneChange               : 'Перевірку орфографії завершено: змінено одно слово',\r
+               manyChanges             : 'Перевірку орфографії завершено: 1% слів змінено',\r
+               ieSpellDownload : 'Модуль перевірки орфографії не встановлено. Бажаєтн завантажити його зараз?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Смайлик',\r
+               title   : 'Вставити смайлик'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 елемент'\r
+       },\r
+\r
+       numberedlist : 'Нумерований список',\r
+       bulletedlist : 'Маркований список',\r
+       indent : 'Збільшити відступ',\r
+       outdent : 'Зменшити відступ',\r
+\r
+       justify :\r
+       {\r
+               left : 'По лівому краю',\r
+               center : 'По центру',\r
+               right : 'По правому краю',\r
+               block : 'По ширині'\r
+       },\r
+\r
+       blockquote : 'Цитата',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Вставити',\r
+               cutError        : 'Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl+X).',\r
+               copyError       : 'Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl+C).',\r
+               pasteMsg        : 'Будь ласка, вставте з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl+V</STRONG>) та натисніть <STRONG>OK</STRONG>.',\r
+               securityMsg     : 'Редактор не може отримати прямий доступ до буферу обміну у зв\'язку з налаштуваннями вашого браузера. Вам потрібно вставити інформацію повторно в це вікно.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Вставити з Word',\r
+               title : 'Вставити з Word',\r
+               advice : 'Будь-ласка, вставте з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl+V</STRONG>) та натисніть <STRONG>OK</STRONG>.',\r
+               ignoreFontFace : 'Ігнорувати налаштування шрифтів',\r
+               removeStyle : 'Видалити налаштування стилів'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Вставити тільки текст',\r
+               title : 'Вставити тільки текст'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Шаблони',\r
+               title : 'Шаблони змісту',\r
+               insertOption: 'Замінити поточний вміст',\r
+               selectPromptMsg: 'Оберіть, будь ласка, шаблон для відкриття в редакторі<br>(поточний зміст буде втрачено):',\r
+               emptyListMsg : '(Не визначено жодного шаблону)'\r
+       },\r
+\r
+       showBlocks : 'Показувати блоки',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Стиль',\r
+               voiceLabel : 'Стилі',\r
+               panelVoiceLabel : 'Оберіть стиль',\r
+               panelTitle1 : 'Block стилі',\r
+               panelTitle2 : 'Inline стилі',\r
+               panelTitle3 : 'Object стилі'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Форматування',\r
+               voiceLabel : 'Формат',\r
+               panelTitle : 'Форматування',\r
+               panelVoiceLabel : 'Оберіть формат абзацу',\r
+\r
+               tag_p : 'Нормальний',\r
+               tag_pre : 'Форматований',\r
+               tag_address : 'Адреса',\r
+               tag_h1 : 'Заголовок 1',\r
+               tag_h2 : 'Заголовок 2',\r
+               tag_h3 : 'Заголовок 3',\r
+               tag_h4 : 'Заголовок 4',\r
+               tag_h5 : 'Заголовок 5',\r
+               tag_h6 : 'Заголовок 6',\r
+               tag_div : 'Нормальний (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Шрифт',\r
+               voiceLabel : 'Шрифт',\r
+               panelTitle : 'Шрифт',\r
+               panelVoiceLabel : 'Оберіть шрифт'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Розмір',\r
+               voiceLabel : 'Розмір шрифта',\r
+               panelTitle : 'Розмір',\r
+               panelVoiceLabel : 'Оберіть розмір шрифта'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Колір тексту',\r
+               bgColorTitle : 'Колір фону',\r
+               auto : 'Автоматичний',\r
+               more : 'Кольори...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Перефірка орфографії по мірі набору',\r
+               enable : 'Включити SCAYT',\r
+               disable : 'Відключити SCAYT',\r
+               about : 'Про SCAYT',\r
+               toggle : 'Перемкнути SCAYT',\r
+               options : 'Опції',\r
+               langs : 'Мови',\r
+               moreSuggestions : 'Більше пропозицій',\r
+               ignore : 'Ігнорувати',\r
+               ignoreAll : 'Ігнорувати всі',\r
+               addWord : 'Додати слово',\r
+               emptyDic : 'Назва словника повинна бути заповнена.',\r
+               optionsTab : 'Опції',\r
+               languagesTab : 'Мови',\r
+               dictionariesTab : 'Словники',\r
+               aboutTab : 'Про'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'Про CKEditor',\r
+               dlgTitle : 'Про CKEditor',\r
+               moreInfo : 'Щодо інформації з ліцензування завітайте до нашого сайту:',\r
+               copy : 'Copyright &copy; $1. Всі права застережено.'\r
+       },\r
+\r
+       maximize : 'Максимізувати',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Якір',\r
+               flash : 'Flash анімація',\r
+               div : 'Розрив сторінки',\r
+               unknown : 'Невідомий об`єкт'\r
+       },\r
+\r
+       resize : 'Пересувайте для зміни розміру'\r
+};\r
diff --git a/_source/lang/vi.js b/_source/lang/vi.js
new file mode 100644 (file)
index 0000000..1f0f0c8
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Vietnamese language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['vi'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : 'Trình biên tập trực quan, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : 'Mã HTML',\r
+       newPage                 : 'Trang mới',\r
+       save                    : 'Lưu',\r
+       preview                 : 'Xem trước',\r
+       cut                             : 'Cắt',\r
+       copy                    : 'Sao chép',\r
+       paste                   : 'Dán',\r
+       print                   : 'In',\r
+       underline               : 'Gạch chân',\r
+       bold                    : 'Đậm',\r
+       italic                  : 'Nghiêng',\r
+       selectAll               : 'Chọn Tất cả',\r
+       removeFormat    : 'Xoá Định dạng',\r
+       strike                  : 'Gạch xuyên ngang',\r
+       subscript               : 'Chỉ số dưới',\r
+       superscript             : 'Chỉ số trên',\r
+       horizontalrule  : 'Chèn Đường phân cách ngang',\r
+       pagebreak               : 'Chèn Ngắt trang',\r
+       unlink                  : 'Xoá Liên kết',\r
+       undo                    : 'Khôi phục thao tác',\r
+       redo                    : 'Làm lại thao tác',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : 'Duyệt trên máy chủ',\r
+               url                             : 'URL',\r
+               protocol                : 'Giao thức',\r
+               upload                  : 'Tải lên',\r
+               uploadSubmit    : 'Tải lên Máy chủ',\r
+               image                   : 'Hình ảnh',\r
+               flash                   : 'Flash',\r
+               form                    : 'Biểu mẫu',\r
+               checkbox                : 'Nút kiểm',\r
+               radio           : 'Nút chọn',\r
+               textField               : 'Trường văn bản',\r
+               textarea                : 'Vùng văn bản',\r
+               hiddenField             : 'Trường ẩn',\r
+               button                  : 'Nút',\r
+               select  : 'Ô chọn',\r
+               imageButton             : 'Nút hình ảnh',\r
+               notSet                  : '<không thiết lập>',\r
+               id                              : 'Định danh',\r
+               name                    : 'Tên',\r
+               langDir                 : 'Đường dẫn Ngôn ngữ',\r
+               langDirLtr              : 'Trái sang Phải (LTR)',\r
+               langDirRtl              : 'Phải sang Trái (RTL)',\r
+               langCode                : 'Mã Ngôn ngữ',\r
+               longDescr               : 'Mô tả URL',\r
+               cssClass                : 'Lớp Stylesheet',\r
+               advisoryTitle   : 'Advisory Title',\r
+               cssStyle                : 'Mẫu',\r
+               ok                              : 'Đồng ý',\r
+               cancel                  : 'Bỏ qua',\r
+               generalTab              : 'Chung',\r
+               advancedTab             : 'Mở rộng',\r
+               validateNumberFailed    : 'Giá trị này không phải là số.',\r
+               confirmNewPage  : 'Mọi thay đổi không được không được lưu lại của nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?',\r
+               confirmCancel   : 'Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, không có</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : 'Chèn Ký tự đặc biệt',\r
+               title           : 'Hãy chọn Ký tự đặc biệt'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : 'Chèn/Sửa Liên kết',\r
+               menu            : 'Sửa Liên kết',\r
+               title           : 'Liên kết',\r
+               info            : 'Thông tin Liên kết',\r
+               target          : 'Đích',\r
+               upload          : 'Tải lên',\r
+               advanced        : 'Mở rộng',\r
+               type            : 'Kiểu Liên kết',\r
+               toAnchor        : 'Neo trong trang này',\r
+               toEmail         : 'Thư điện tử',\r
+               target          : 'Đích',\r
+               targetNotSet    : '<không thiết lập>',\r
+               targetFrame     : '<khung>',\r
+               targetPopup     : '<cửa sổ popup>',\r
+               targetNew       : 'Cửa sổ mới (_blank)',\r
+               targetTop       : 'Cửa sổ trên cùng(_top)',\r
+               targetSelf      : 'Cùng cửa sổ (_self)',\r
+               targetParent    : 'Cửa sổ cha (_parent)',\r
+               targetFrameName : 'Tên Khung đích',\r
+               targetPopupName : 'Tên Cửa sổ Popup',\r
+               popupFeatures   : 'Đặc điểm của Cửa sổ Popup',\r
+               popupResizable  : 'Có thể thay đổi kích cỡ',\r
+               popupStatusBar  : 'Thanh trạng thái',\r
+               popupLocationBar        : 'Thanh vị trí',\r
+               popupToolbar    : 'Thanh công cụ',\r
+               popupMenuBar    : 'Thanh Menu',\r
+               popupFullScreen : 'Toàn màn hình (IE)',\r
+               popupScrollBars : 'Thanh cuộn',\r
+               popupDependent  : 'Phụ thuộc (Netscape)',\r
+               popupWidth              : 'Rộng',\r
+               popupLeft               : 'Vị trí Trái',\r
+               popupHeight             : 'Cao',\r
+               popupTop                : 'Vị trí Trên',\r
+               id                              : 'Định danh',\r
+               langDir                 : 'Đường dẫn Ngôn ngữ',\r
+               langDirNotSet   : '<không thiết lập>',\r
+               langDirLTR              : 'Trái sang Phải (LTR)',\r
+               langDirRTL              : 'Phải sang Trái (RTL)',\r
+               acccessKey              : 'Phím Hỗ trợ truy cập',\r
+               name                    : 'Tên',\r
+               langCode                : 'Đường dẫn Ngôn ngữ',\r
+               tabIndex                : 'Chỉ số của Tab',\r
+               advisoryTitle   : 'Advisory Title',\r
+               advisoryContentType     : 'Advisory Content Type',\r
+               cssClasses              : 'Lớp Stylesheet',\r
+               charset                 : 'Bảng mã của tài nguyên được liên kết đến',\r
+               styles                  : 'Mẫu',\r
+               selectAnchor    : 'Chọn một Neo',\r
+               anchorName              : 'Theo Tên Neo',\r
+               anchorId                : 'Theo Định danh Thành phần',\r
+               emailAddress    : 'Thư điện tử',\r
+               emailSubject    : 'Tiêu đề Thông điệp',\r
+               emailBody               : 'Nội dung Thông điệp',\r
+               noAnchors               : '(Không có Neo nào trong tài liệu)',\r
+               noUrl                   : 'Hãy đưa vào Liên kết URL',\r
+               noEmail                 : 'Hãy đưa vào địa chỉ thư điện tử'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : 'Chèn/Sửa Neo',\r
+               menu            : 'Thuộc tính Neo',\r
+               title           : 'Thuộc tính Neo',\r
+               name            : 'Tên của Neo',\r
+               errorName       : 'Hãy nhập vào tên của Neo'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : 'Tìm kiếm và Thay Thế',\r
+               find                            : 'Tìm kiếm',\r
+               replace                         : 'Thay thế',\r
+               findWhat                        : 'Tìm chuỗi:',\r
+               replaceWith                     : 'Thay bằng:',\r
+               notFoundMsg                     : 'Không tìm thấy chuỗi cần tìm.',\r
+               matchCase                       : 'Phân biệt chữ hoa/thường',\r
+               matchWord                       : 'Giống toàn bộ từ',\r
+               matchCyclic                     : 'Giống một phần',\r
+               replaceAll                      : 'Thay thế Tất cả',\r
+               replaceSuccessMsg       : '%1 vị trí đã được thay thế.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : 'Bảng',\r
+               title           : 'Thuộc tính bảng',\r
+               menu            : 'Thuộc tính bảng',\r
+               deleteTable     : 'Xóa Bảng',\r
+               rows            : 'Hàng',\r
+               columns         : 'Cột',\r
+               border          : 'Cỡ Đường viền',\r
+               align           : 'Canh lề',\r
+               alignNotSet     : '<Chưa thiết lập>',\r
+               alignLeft       : 'Trái',\r
+               alignCenter     : 'Giữa',\r
+               alignRight      : 'Phải',\r
+               width           : 'Rộng',\r
+               widthPx         : 'điểm (px)',\r
+               widthPc         : '%',\r
+               height          : 'Cao',\r
+               cellSpace       : 'Khoảng cách Ô',\r
+               cellPad         : 'Đệm Ô',\r
+               caption         : 'Đầu đề',\r
+               summary         : 'Tóm lược',\r
+               headers         : 'Đầu đề',\r
+               headersNone             : 'Không có',\r
+               headersColumn   : 'Cột Đầu tiên',\r
+               headersRow              : 'Hàng Đầu tiên',\r
+               headersBoth             : 'Cả hai',\r
+               invalidRows             : 'Số lượng hàng phải là một số lớn hơn 0.',\r
+               invalidCols             : 'Số lượng cột phải là một số lớn hơn 0.',\r
+               invalidBorder   : 'Kích cỡ của đường biên phải là một số nguyên.',\r
+               invalidWidth    : 'Chiều rộng của Bảng phải là một số nguyên.',\r
+               invalidHeight   : 'Chiều cao của Bảng phải là một số nguyên.',\r
+               invalidCellSpacing      : 'Khoảng cách giữa các ô phải là một số nguyên.',\r
+               invalidCellPadding      : 'Đệm giữa các ô phải là một số nguyên.',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : 'Ô',\r
+                       insertBefore    : 'Chèn Ô Phía trước',\r
+                       insertAfter             : 'Chèn Ô Phía sau',\r
+                       deleteCell              : 'Xoá Ô',\r
+                       merge                   : 'Kết hợp Ô',\r
+                       mergeRight              : 'Kết hợp Sang phải',\r
+                       mergeDown               : 'Kết hợp Xuống dưới',\r
+                       splitHorizontal : 'Tách ngang Ô',\r
+                       splitVertical   : 'Tách dọc Ô',\r
+                       title                   : 'Thuộc tính của Ô',\r
+                       cellType                : 'Kiểu của Ô',\r
+                       rowSpan                 : 'Kết hợp hàng',\r
+                       colSpan                 : 'Kết hợp cột',\r
+                       wordWrap                : 'Word Wrap',\r
+                       hAlign                  : 'Canh lề ngang',\r
+                       vAlign                  : 'Canh lề dọc',\r
+                       alignTop                : 'Trên cùng',\r
+                       alignMiddle             : 'Chính giữa',\r
+                       alignBottom             : 'Dưới cùng',\r
+                       alignBaseline   : 'Đường cơ sở',\r
+                       bgColor                 : 'Màu nền',\r
+                       borderColor             : 'Màu viền',\r
+                       data                    : 'Dữ liệu',\r
+                       header                  : 'Đầu đề',\r
+                       yes                             : 'Có',\r
+                       no                              : 'Không',\r
+                       invalidWidth    : 'Chiều rộng của Ô phải là một số nguyên.',\r
+                       invalidHeight   : 'Chiều cao của Ô phải là một số nguyên.',\r
+                       invalidRowSpan  : 'Số hàng kết hợp phải là một số nguyên.',\r
+                       invalidColSpan  : 'Số cột kết hợp phải là một số nguyên.'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : 'Hàng',\r
+                       insertBefore    : 'Chèn Hàng Phía trước',\r
+                       insertAfter             : 'Chèn Hàng Phía sau',\r
+                       deleteRow               : 'Xoá Hàng'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : 'Cột',\r
+                       insertBefore    : 'Chèn Cột Phía trước',\r
+                       insertAfter             : 'Chèn Cột Phía sau',\r
+                       deleteColumn    : 'Xoá Cột'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : 'Thuộc tính Nút',\r
+               text            : 'Chuỗi hiển thị (Giá trị)',\r
+               type            : 'Kiểu',\r
+               typeBtn         : 'Nút Bấm',\r
+               typeSbm         : 'Nút Gửi',\r
+               typeRst         : 'Nút Nhập lại'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : 'Thuộc tính Nút kiểm',\r
+               radioTitle      : 'Thuộc tính Nút chọn',\r
+               value           : 'Giá trị',\r
+               selected        : 'Được chọn'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : 'Thuộc tính Biểu mẫu',\r
+               menu            : 'Thuộc tính Biểu mẫu',\r
+               action          : 'Hành động',\r
+               method          : 'Phương thức',\r
+               encoding        : 'Bảng mã',\r
+               target          : 'Đích',\r
+               targetNotSet    : '<không thiết lập>',\r
+               targetNew       : 'Cửa sổ mới (_blank)',\r
+               targetTop       : 'Cửa sổ trên cùng(_top)',\r
+               targetSelf      : 'Cùng cửa sổ (_self)',\r
+               targetParent    : 'Cửa sổ cha (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : 'Thuộc tính Ô chọn',\r
+               selectInfo      : 'Thông tin',\r
+               opAvail         : 'Các tùy chọn có thể sử dụng',\r
+               value           : 'Giá trị',\r
+               size            : 'Kích cỡ',\r
+               lines           : 'dòng',\r
+               chkMulti        : 'Cho phép chọn nhiều',\r
+               opText          : 'Văn bản',\r
+               opValue         : 'Giá trị',\r
+               btnAdd          : 'Thêm',\r
+               btnModify       : 'Thay đổi',\r
+               btnUp           : 'Lên',\r
+               btnDown         : 'Xuống',\r
+               btnSetValue : 'Giá trị được chọn',\r
+               btnDelete       : 'Xoá'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : 'Thuộc tính Vùng văn bản',\r
+               cols            : 'Cột',\r
+               rows            : 'Hàng'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : 'Thuộc tính Trường văn bản',\r
+               name            : 'Tên',\r
+               value           : 'Giá trị',\r
+               charWidth       : 'Rộng',\r
+               maxChars        : 'Số Ký tự tối đa',\r
+               type            : 'Kiểu',\r
+               typeText        : 'Ký tự',\r
+               typePass        : 'Mật khẩu'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : 'Thuộc tính Trường ẩn',\r
+               name    : 'Tên',\r
+               value   : 'Giá trị'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : 'Thuộc tính Hình ảnh',\r
+               titleButton     : 'Thuộc tính Nút hình ảnh',\r
+               menu            : 'Thuộc tính Hình ảnh',\r
+               infoTab : 'Thông tin Hình ảnh',\r
+               btnUpload       : 'Tải lên Máy chủ',\r
+               url             : 'URL',\r
+               upload  : 'Tải lên',\r
+               alt             : 'Chú thích Hình ảnh',\r
+               width           : 'Rộng',\r
+               height  : 'Cao',\r
+               lockRatio       : 'Giữ nguyên tỷ lệ',\r
+               resetSize       : 'Kích thước gốc',\r
+               border  : 'Đường viền',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               align           : 'Vị trí',\r
+               alignLeft       : 'Trái',\r
+               alignAbsBottom: 'Dưới tuyệt đối',\r
+               alignAbsMiddle: 'Giữa tuyệt đối',\r
+               alignBaseline   : 'Đường cơ sở',\r
+               alignBottom     : 'Dưới',\r
+               alignMiddle     : 'Giữa',\r
+               alignRight      : 'Phải',\r
+               alignTextTop    : 'Phía trên chữ',\r
+               alignTop        : 'Trên',\r
+               preview : 'Xem trước',\r
+               alertUrl        : 'Hãy đưa vào URL của hình ảnh',\r
+               linkTab : 'Liên kết',\r
+               button2Img      : 'Bạn có muốn chuyển nút bấm bằng hình ảnh được chọn thành hình ảnh?',\r
+               img2Button      : 'Bạn có muốn chuyển đổi hình ảnh được chọn thành nút bấm bằng hình ảnh?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Thuộc tính Flash',\r
+               propertiesTab   : 'Thuộc tính',\r
+               title           : 'Thuộc tính Flash',\r
+               chkPlay         : 'Tự động chạy',\r
+               chkLoop         : 'Lặp',\r
+               chkMenu         : 'Cho phép bật Menu của Flash',\r
+               chkFull         : 'Cho phép Toàn màn hình',\r
+               scale           : 'Tỷ lệ',\r
+               scaleAll                : 'Hiển thị tất cả',\r
+               scaleNoBorder   : 'Không đường viền',\r
+               scaleFit                : 'Vừa vặn',\r
+               access                  : 'Truy cập Mã',\r
+               accessAlways    : 'Luôn luôn',\r
+               accessSameDomain        : 'Cùng tên miền',\r
+               accessNever     : 'Không bao giờ',\r
+               align           : 'Vị trí',\r
+               alignLeft       : 'Trái',\r
+               alignAbsBottom: 'Dưới tuyệt đối',\r
+               alignAbsMiddle: 'Giữa tuyệt đối',\r
+               alignBaseline   : 'Đường cơ sở',\r
+               alignBottom     : 'Dưới',\r
+               alignMiddle     : 'Giữa',\r
+               alignRight      : 'Phải',\r
+               alignTextTop    : 'Phía trên chữ',\r
+               alignTop        : 'Trên',\r
+               quality         : 'Chất lượng',\r
+               qualityBest              : 'TỐt nhất',\r
+               qualityHigh              : 'Cao',\r
+               qualityAutoHigh  : 'Cao Tự động',\r
+               qualityMedium    : 'Trung bình',\r
+               qualityAutoLow   : 'Thấp Tự động',\r
+               qualityLow               : 'Thấp',\r
+               windowModeWindow         : 'Cửa sổ',\r
+               windowModeOpaque         : 'Mờ đục',\r
+               windowModeTransparent    : 'Trong suốt',\r
+               windowMode      : 'Chế độ Cửa sổ',\r
+               flashvars       : 'Các biến số dành cho Flash',\r
+               bgcolor : 'Màu nền',\r
+               width   : 'Rộng',\r
+               height  : 'Cao',\r
+               hSpace  : 'HSpace',\r
+               vSpace  : 'VSpace',\r
+               validateSrc : 'Hãy đưa vào Liên kết URL',\r
+               validateWidth : 'Chiều rộng phải là số nguyên.',\r
+               validateHeight : 'Chiều cao phải là số nguyên.',\r
+               validateHSpace : 'HSpace phải là số nguyên.',\r
+               validateVSpace : 'VSpace phải là số nguyên.'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : 'Kiểm tra Chính tả',\r
+               title                   : 'Kiểm tra Chính tả',\r
+               notAvailable    : 'Xin lỗi, dịch vụ này hiện tại không có.',\r
+               errorLoading    : 'Lỗi khi đang nạp dịch vụ ứng dụng: %s.',\r
+               notInDic                : 'Không có trong từ điển',\r
+               changeTo                : 'Chuyển thành',\r
+               btnIgnore               : 'Bỏ qua',\r
+               btnIgnoreAll    : 'Bỏ qua Tất cả',\r
+               btnReplace              : 'Thay thế',\r
+               btnReplaceAll   : 'Thay thế Tất cả',\r
+               btnUndo                 : 'Phục hồi lại',\r
+               noSuggestions   : '- Không đưa ra gợi ý về từ -',\r
+               progress                : 'Đang tiến hành kiểm tra chính tả...',\r
+               noMispell               : 'Hoàn tất kiểm tra chính tả: Không có lỗi chính tả',\r
+               noChanges               : 'Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi',\r
+               oneChange               : 'Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi',\r
+               manyChanges             : 'Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi',\r
+               ieSpellDownload : 'Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có muốn tải về ngay bây giờ?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : 'Hình biểu lộ cảm xúc (mặt cười)',\r
+               title   : 'Chèn Hình biểu lộ cảm xúc (mặt cười)'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 thành phần'\r
+       },\r
+\r
+       numberedlist : 'Danh sách có thứ tự',\r
+       bulletedlist : 'Danh sách không thứ tự',\r
+       indent : 'Dịch vào trong',\r
+       outdent : 'Dịch ra ngoài',\r
+\r
+       justify :\r
+       {\r
+               left : 'Canh trái',\r
+               center : 'Canh giữa',\r
+               right : 'Canh phải',\r
+               block : 'Canh đều'\r
+       },\r
+\r
+       blockquote : 'Khối Trích dẫn',\r
+\r
+       clipboard :\r
+       {\r
+               title           : 'Dán',\r
+               cutError        : 'Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl+X).',\r
+               copyError       : 'Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl+C).',\r
+               pasteMsg        : 'Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.',\r
+               securityMsg     : 'Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trực tiếp vào nội dung đã sao chép. Bạn cần phải dán lại nội dung vào cửa sổ này.'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : 'Dán với định dạng Word',\r
+               title : 'Dán với định dạng Word',\r
+               advice : 'Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.',\r
+               ignoreFontFace : 'Chấp nhận các định dạng phông',\r
+               removeStyle : 'Gỡ bỏ các định dạng Styles'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : 'Dán theo định dạng văn bản thuần',\r
+               title : 'Dán theo định dạng văn bản thuần'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : 'Mẫu dựng sẵn',\r
+               title : 'Nội dung Mẫu dựng sẵn',\r
+               insertOption: 'Thay thế nội dung hiện tại',\r
+               selectPromptMsg: 'Hãy chọn Mẫu dựng sẵn để mở trong trình biên tập<br>(nội dung hiện tại sẽ bị mất):',\r
+               emptyListMsg : '(Không có Mẫu dựng sẵn nào được định nghĩa)'\r
+       },\r
+\r
+       showBlocks : 'Hiển thị các Khối',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : 'Kiểu',\r
+               voiceLabel : 'Kiểu',\r
+               panelVoiceLabel : 'Chọn một kiểu',\r
+               panelTitle1 : 'Kiểu Khối',\r
+               panelTitle2 : 'Kiểu Trực tiếp',\r
+               panelTitle3 : 'Kiểu Đối tượng'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : 'Định dạng',\r
+               voiceLabel : 'Định dạng',\r
+               panelTitle : 'Định dạng',\r
+               panelVoiceLabel : 'Chọn định dạng đoạn văn bản',\r
+\r
+               tag_p : 'Normal',\r
+               tag_pre : 'Formatted',\r
+               tag_address : 'Address',\r
+               tag_h1 : 'Heading 1',\r
+               tag_h2 : 'Heading 2',\r
+               tag_h3 : 'Heading 3',\r
+               tag_h4 : 'Heading 4',\r
+               tag_h5 : 'Heading 5',\r
+               tag_h6 : 'Heading 6',\r
+               tag_div : 'Normal (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : 'Phông',\r
+               voiceLabel : 'Phông',\r
+               panelTitle : 'Phông',\r
+               panelVoiceLabel : 'Chọn phông'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : 'Cỡ chữ',\r
+               voiceLabel : 'Kích cỡ phông',\r
+               panelTitle : 'Cỡ chữ',\r
+               panelVoiceLabel : 'Chọn kích cỡ phông'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : 'Màu chữ',\r
+               bgColorTitle : 'Màu nền',\r
+               auto : 'Tự động',\r
+               more : 'Màu khác...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : 'Kiểm tra chính tả ngay khi gõ chữ (SCAYT)',\r
+               enable : 'Bật SCAYT',\r
+               disable : 'Tắt SCAYT',\r
+               about : 'Thông tin về SCAYT',\r
+               toggle : 'Bật tắt SCAYT',\r
+               options : 'Tùy chọn',\r
+               langs : 'Ngôn ngữ',\r
+               moreSuggestions : 'Đề xuất thêm',\r
+               ignore : 'Bỏ qua',\r
+               ignoreAll : 'Bỏ qua Tất cả',\r
+               addWord : 'Thêm Từ',\r
+               emptyDic : 'Tên của từ điển không được để trống.',\r
+               optionsTab : 'Tùy chọn',\r
+               languagesTab : 'Ngôn ngữ',\r
+               dictionariesTab : 'Từ điển',\r
+               aboutTab : 'Thông tin'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : 'Thông tin về CKEditor',\r
+               dlgTitle : 'Thông tin về CKEditor',\r
+               moreInfo : 'Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:',\r
+               copy : 'Bản quyền &copy; $1. Giữ toàn quyền.'\r
+       },\r
+\r
+       maximize : 'Phóng to tối đa',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : 'Neo',\r
+               flash : 'Hoạt họa Flash',\r
+               div : 'Ngắt Trang',\r
+               unknown : 'Đối tượng không rõ ràng'\r
+       },\r
+\r
+       resize : 'Kéo rê để thay đổi kích cỡ'\r
+};\r
diff --git a/_source/lang/zh-cn.js b/_source/lang/zh-cn.js
new file mode 100644 (file)
index 0000000..be4b44b
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Chinese Simplified language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['zh-cn'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : '富文本编辑器, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : '源码',\r
+       newPage                 : '新建',\r
+       save                    : '保存',\r
+       preview                 : '预览',\r
+       cut                             : '剪切',\r
+       copy                    : '复制',\r
+       paste                   : '粘贴',\r
+       print                   : '打印',\r
+       underline               : '下划线',\r
+       bold                    : '加粗',\r
+       italic                  : '倾斜',\r
+       selectAll               : '全选',\r
+       removeFormat    : '清除格式',\r
+       strike                  : '删除线',\r
+       subscript               : '下标',\r
+       superscript             : '上标',\r
+       horizontalrule  : '插入水平线',\r
+       pagebreak               : '插入分页符',\r
+       unlink                  : '取消超链接',\r
+       undo                    : '撤消',\r
+       redo                    : '重做',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : '浏览服务器',\r
+               url                             : '源文件',\r
+               protocol                : '协议',\r
+               upload                  : '上传',\r
+               uploadSubmit    : '发送到服务器上',\r
+               image                   : '图象',\r
+               flash                   : 'Flash',\r
+               form                    : '表单',\r
+               checkbox                : '复选框',\r
+               radio           : '单选按钮',\r
+               textField               : '单行文本',\r
+               textarea                : '多行文本',\r
+               hiddenField             : '隐藏域',\r
+               button                  : '按钮',\r
+               select  : '列表/菜单',\r
+               imageButton             : '图像域',\r
+               notSet                  : '<没有设置>',\r
+               id                              : 'ID',\r
+               name                    : '名称',\r
+               langDir                 : '语言方向',\r
+               langDirLtr              : '从左到右 (LTR)',\r
+               langDirRtl              : '从右到左 (RTL)',\r
+               langCode                : '语言代码',\r
+               longDescr               : '详细说明地址',\r
+               cssClass                : '样式类名称',\r
+               advisoryTitle   : '标题',\r
+               cssStyle                : '行内样式',\r
+               ok                              : '确定',\r
+               cancel                  : '取消',\r
+               generalTab              : '常规',\r
+               advancedTab             : '高级',\r
+               validateNumberFailed    : '需要输入数字格式',\r
+               confirmNewPage  : '当前文档内容未保存,是否确认新建文档?',\r
+               confirmCancel   : '部分选项尚未保存,是否确认关闭对话框?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, 不可用</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : '插入特殊符号',\r
+               title           : '选择特殊符号'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : '插入/编辑超链接',\r
+               menu            : '编辑超链接',\r
+               title           : '超链接',\r
+               info            : '超链接信息',\r
+               target          : '目标',\r
+               upload          : '上传',\r
+               advanced        : '高级',\r
+               type            : '超链接类型',\r
+               toAnchor        : '页内锚点链接',\r
+               toEmail         : '电子邮件',\r
+               target          : '目标',\r
+               targetNotSet    : '<没有设置>',\r
+               targetFrame     : '<框架>',\r
+               targetPopup     : '<弹出窗口>',\r
+               targetNew       : '新窗口 (_blank)',\r
+               targetTop       : '整页 (_top)',\r
+               targetSelf      : '本窗口 (_self)',\r
+               targetParent    : '父窗口 (_parent)',\r
+               targetFrameName : '目标框架名称',\r
+               targetPopupName : '弹出窗口名称',\r
+               popupFeatures   : '弹出窗口属性',\r
+               popupResizable  : '可缩放',\r
+               popupStatusBar  : '状态栏',\r
+               popupLocationBar        : '地址栏',\r
+               popupToolbar    : '工具栏',\r
+               popupMenuBar    : '菜单栏',\r
+               popupFullScreen : '全屏 (IE)',\r
+               popupScrollBars : '滚动条',\r
+               popupDependent  : '依附 (NS)',\r
+               popupWidth              : '宽',\r
+               popupLeft               : '左',\r
+               popupHeight             : '高',\r
+               popupTop                : '右',\r
+               id                              : 'ID',\r
+               langDir                 : '语言方向',\r
+               langDirNotSet   : '<没有设置>',\r
+               langDirLTR              : '从左到右 (LTR)',\r
+               langDirRTL              : '从右到左 (RTL)',\r
+               acccessKey              : '访问键',\r
+               name                    : '名称',\r
+               langCode                : '语言方向',\r
+               tabIndex                : 'Tab 键次序',\r
+               advisoryTitle   : '标题',\r
+               advisoryContentType     : '内容类型',\r
+               cssClasses              : '样式类名称',\r
+               charset                 : '字符编码',\r
+               styles                  : '行内样式',\r
+               selectAnchor    : '选择一个锚点',\r
+               anchorName              : '按锚点名称',\r
+               anchorId                : '按锚点 ID',\r
+               emailAddress    : '地址',\r
+               emailSubject    : '主题',\r
+               emailBody               : '内容',\r
+               noAnchors               : '(此文档没有可用的锚点)',\r
+               noUrl                   : '请输入超链接地址',\r
+               noEmail                 : '请输入电子邮件地址'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : '插入/编辑锚点链接',\r
+               menu            : '锚点链接属性',\r
+               title           : '锚点链接属性',\r
+               name            : '锚点名称',\r
+               errorName       : '请输入锚点名称'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : '查找和替换',\r
+               find                            : '查找',\r
+               replace                         : '替换',\r
+               findWhat                        : '查找:',\r
+               replaceWith                     : '替换:',\r
+               notFoundMsg                     : '指定文本没有找到',\r
+               matchCase                       : '区分大小写',\r
+               matchWord                       : '全字匹配',\r
+               matchCyclic                     : '循环匹配',\r
+               replaceAll                      : '全部替换',\r
+               replaceSuccessMsg       : '共完成 %1 处替换.'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : '表格',\r
+               title           : '表格属性',\r
+               menu            : '表格属性',\r
+               deleteTable     : '删除表格',\r
+               rows            : '行数',\r
+               columns         : '列数',\r
+               border          : '边框',\r
+               align           : '对齐',\r
+               alignNotSet     : '<没有设置>',\r
+               alignLeft       : '左对齐',\r
+               alignCenter     : '居中',\r
+               alignRight      : '右对齐',\r
+               width           : '宽度',\r
+               widthPx         : '像素',\r
+               widthPc         : '百分比',\r
+               height          : '高度',\r
+               cellSpace       : '间距',\r
+               cellPad         : '边距',\r
+               caption         : '标题',\r
+               summary         : '摘要',\r
+               headers         : '标题单元格',\r
+               headersNone             : '无',\r
+               headersColumn   : '第一列',\r
+               headersRow              : '第一行',\r
+               headersBoth             : '第一列和第一行',\r
+               invalidRows             : '指定的列数必须大于零',\r
+               invalidCols             : '指定的行数必须大于零',\r
+               invalidBorder   : '边框粗细必须为数字格式',\r
+               invalidWidth    : '表格宽度必须为数字格式',\r
+               invalidHeight   : '表格高度必须为数字格式',\r
+               invalidCellSpacing      : '单元格间距必须为数字格式',\r
+               invalidCellPadding      : '单元格填充必须为数字格式',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : '单元格',\r
+                       insertBefore    : '在左侧插入单元格',\r
+                       insertAfter             : '在右侧插入单元格',\r
+                       deleteCell              : '删除单元格',\r
+                       merge                   : '合并单元格',\r
+                       mergeRight              : '向右合并单元格',\r
+                       mergeDown               : '向下合并单元格',\r
+                       splitHorizontal : '水平拆分单元格',\r
+                       splitVertical   : '垂直拆分单元格',\r
+                       title                   : '单元格属性',\r
+                       cellType                : '单元格类型',\r
+                       rowSpan                 : '行跨度',\r
+                       colSpan                 : '列跨度',\r
+                       wordWrap                : '自动换行',\r
+                       hAlign                  : '水平对齐',\r
+                       vAlign                  : '垂直对齐',\r
+                       alignTop                : '顶对齐',\r
+                       alignMiddle             : '中对齐',\r
+                       alignBottom             : '底对齐',\r
+                       alignBaseline   : '基线对齐',\r
+                       bgColor                 : '背景颜色',\r
+                       borderColor             : '边框颜色',\r
+                       data                    : '数据',\r
+                       header                  : '表头',\r
+                       yes                             : '是',\r
+                       no                              : '否',\r
+                       invalidWidth    : '单元格宽度必须为数字格式',\r
+                       invalidHeight   : '单元格高度必须为数字格式',\r
+                       invalidRowSpan  : '行跨度必须为整数格式',\r
+                       invalidColSpan  : '列跨度必须为整数格式'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : '行',\r
+                       insertBefore    : '在上方插入行',\r
+                       insertAfter             : '在下方插入行',\r
+                       deleteRow               : '删除行'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : '列',\r
+                       insertBefore    : '在左侧插入列',\r
+                       insertAfter             : '在右侧插入列',\r
+                       deleteColumn    : '删除列'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : '按钮属性',\r
+               text            : '标签(值)',\r
+               type            : '类型',\r
+               typeBtn         : '按钮',\r
+               typeSbm         : '提交',\r
+               typeRst         : '重设'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : '复选框属性',\r
+               radioTitle      : '单选按钮属性',\r
+               value           : '选定值',\r
+               selected        : '已勾选'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : '表单属性',\r
+               menu            : '表单属性',\r
+               action          : '动作',\r
+               method          : '方法',\r
+               encoding        : '表单编码',\r
+               target          : '目标',\r
+               targetNotSet    : '<没有设置>',\r
+               targetNew       : '新窗口 (_blank)',\r
+               targetTop       : '整页 (_top)',\r
+               targetSelf      : '本窗口 (_self)',\r
+               targetParent    : '父窗口 (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : '菜单/列表属性',\r
+               selectInfo      : '信息',\r
+               opAvail         : '列表值',\r
+               value           : '值',\r
+               size            : '高度',\r
+               lines           : '行',\r
+               chkMulti        : '允许多选',\r
+               opText          : '标签',\r
+               opValue         : '选定',\r
+               btnAdd          : '新增',\r
+               btnModify       : '修改',\r
+               btnUp           : '上移',\r
+               btnDown         : '下移',\r
+               btnSetValue : '设为初始化时选定',\r
+               btnDelete       : '删除'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : '多行文本属性',\r
+               cols            : '字符宽度',\r
+               rows            : '行数'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : '单行文本属性',\r
+               name            : '名称',\r
+               value           : '初始值',\r
+               charWidth       : '字符宽度',\r
+               maxChars        : '最多字符数',\r
+               type            : '类型',\r
+               typeText        : '文本',\r
+               typePass        : '密码'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : '隐藏域属性',\r
+               name    : '名称',\r
+               value   : '初始值'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : '图象属性',\r
+               titleButton     : '图像域属性',\r
+               menu            : '图象属性',\r
+               infoTab : '图象',\r
+               btnUpload       : '发送到服务器上',\r
+               url             : '源文件',\r
+               upload  : '上传',\r
+               alt             : '替换文本',\r
+               width           : '宽度',\r
+               height  : '高度',\r
+               lockRatio       : '锁定比例',\r
+               resetSize       : '恢复尺寸',\r
+               border  : '边框大小',\r
+               hSpace  : '水平间距',\r
+               vSpace  : '垂直间距',\r
+               align           : '对齐方式',\r
+               alignLeft       : '左对齐',\r
+               alignAbsBottom: '绝对底边',\r
+               alignAbsMiddle: '绝对居中',\r
+               alignBaseline   : '基线',\r
+               alignBottom     : '底边',\r
+               alignMiddle     : '居中',\r
+               alignRight      : '右对齐',\r
+               alignTextTop    : '文本上方',\r
+               alignTop        : '顶端',\r
+               preview : '预览',\r
+               alertUrl        : '请输入图象地址',\r
+               linkTab : '链接',\r
+               button2Img      : '确定要把当前按钮改变为图像吗?',\r
+               img2Button      : '确定要把当前图像改变为按钮吗?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash 属性',\r
+               propertiesTab   : '属性',\r
+               title           : '标题',\r
+               chkPlay         : '自动播放',\r
+               chkLoop         : '循环',\r
+               chkMenu         : '启用 Flash 菜单',\r
+               chkFull         : '启用全屏',\r
+               scale           : '缩放',\r
+               scaleAll                : '全部显示',\r
+               scaleNoBorder   : '无边框',\r
+               scaleFit                : '严格匹配',\r
+               access                  : '允许脚本访问',\r
+               accessAlways    : '总是',\r
+               accessSameDomain        : '同域',\r
+               accessNever     : '从不',\r
+               align           : '对齐方式',\r
+               alignLeft       : '左对齐',\r
+               alignAbsBottom: '绝对底边',\r
+               alignAbsMiddle: '绝对居中',\r
+               alignBaseline   : '基线',\r
+               alignBottom     : '底边',\r
+               alignMiddle     : '居中',\r
+               alignRight      : '右对齐',\r
+               alignTextTop    : '文本上方',\r
+               alignTop        : '顶端',\r
+               quality         : '质量',\r
+               qualityBest              : '最好',\r
+               qualityHigh              : '高',\r
+               qualityAutoHigh  : '高(自动)',\r
+               qualityMedium    : '中(自动)',\r
+               qualityAutoLow   : '低(自动)',\r
+               qualityLow               : '低',\r
+               windowModeWindow         : '窗体',\r
+               windowModeOpaque         : '不透明',\r
+               windowModeTransparent    : '透明',\r
+               windowMode      : '窗体模式',\r
+               flashvars       : 'Flash变量',\r
+               bgcolor : '背景颜色',\r
+               width   : '宽度',\r
+               height  : '高度',\r
+               hSpace  : '水平间距',\r
+               vSpace  : '垂直间距',\r
+               validateSrc : '请输入超链接地址',\r
+               validateWidth : '宽度必须为数字格式',\r
+               validateHeight : '高度必须为数字格式',\r
+               validateHSpace : '水平间距必须为数字格式',\r
+               validateVSpace : '垂直间距必须为数字格式'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : '拼写检查',\r
+               title                   : '拼写检查',\r
+               notAvailable    : '抱歉,服务目前暂不可用',\r
+               errorLoading    : '无法联系该应用的主机: %s.',\r
+               notInDic                : '没有在字典里',\r
+               changeTo                : '更改为',\r
+               btnIgnore               : '忽略',\r
+               btnIgnoreAll    : '全部忽略',\r
+               btnReplace              : '替换',\r
+               btnReplaceAll   : '全部替换',\r
+               btnUndo                 : '撤消',\r
+               noSuggestions   : '- 没有建议 -',\r
+               progress                : '正在进行拼写检查...',\r
+               noMispell               : '拼写检查完成:没有发现拼写错误',\r
+               noChanges               : '拼写检查完成:没有更改任何单词',\r
+               oneChange               : '拼写检查完成:更改了一个单词',\r
+               manyChanges             : '拼写检查完成:更改了 %1 个单词',\r
+               ieSpellDownload : '拼写检查插件还没安装,你是否想现在就下载?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : '表情符',\r
+               title   : '插入表情图标'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 元素'\r
+       },\r
+\r
+       numberedlist : '编号列表',\r
+       bulletedlist : '项目列表',\r
+       indent : '增加缩进量',\r
+       outdent : '减少缩进量',\r
+\r
+       justify :\r
+       {\r
+               left : '左对齐',\r
+               center : '居中对齐',\r
+               right : '右对齐',\r
+               block : '两端对齐'\r
+       },\r
+\r
+       blockquote : '块引用',\r
+\r
+       clipboard :\r
+       {\r
+               title           : '粘贴',\r
+               cutError        : '您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl+X)来完成',\r
+               copyError       : '您的浏览器安全设置不允许编辑器自动执行复制操作,请使用键盘快捷键(Ctrl+C)来完成',\r
+               pasteMsg        : '请使用键盘快捷键(<STRONG>Ctrl+V</STRONG>)把内容粘贴到下面的方框里,再按 <STRONG>确定</STRONG>',\r
+               securityMsg     : '因为你的浏览器的安全设置原因,本编辑器不能直接访问你的剪贴板内容,你需要在本窗口重新粘贴一次'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : '从 MS Word 粘贴',\r
+               title : '从 MS Word 粘贴',\r
+               advice : '请使用键盘快捷键(<STRONG>Ctrl+V</STRONG>)把内容粘贴到下面的方框里,再按 <STRONG>确定</STRONG>',\r
+               ignoreFontFace : '忽略 Font 标签',\r
+               removeStyle : '清理 CSS 样式'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : '粘贴为无格式文本',\r
+               title : '粘贴为无格式文本'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : '模板',\r
+               title : '内容模板',\r
+               insertOption: '替换当前内容',\r
+               selectPromptMsg: '请选择编辑器内容模板:',\r
+               emptyListMsg : '(没有模板)'\r
+       },\r
+\r
+       showBlocks : '显示区块',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : '样式',\r
+               voiceLabel : '样式',\r
+               panelVoiceLabel : '选择样式',\r
+               panelTitle1 : '块级元素样式',\r
+               panelTitle2 : '内联元素样式',\r
+               panelTitle3 : '对象元素样式'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : '格式',\r
+               voiceLabel : '格式',\r
+               panelTitle : '格式',\r
+               panelVoiceLabel : '选择格式',\r
+\r
+               tag_p : '普通',\r
+               tag_pre : '已编排格式',\r
+               tag_address : '地址',\r
+               tag_h1 : '标题 1',\r
+               tag_h2 : '标题 2',\r
+               tag_h3 : '标题 3',\r
+               tag_h4 : '标题 4',\r
+               tag_h5 : '标题 5',\r
+               tag_h6 : '标题 6',\r
+               tag_div : '段落(DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : '字体',\r
+               voiceLabel : '字体',\r
+               panelTitle : '字体',\r
+               panelVoiceLabel : '选择字体'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : '大小',\r
+               voiceLabel : '文字大小',\r
+               panelTitle : '大小',\r
+               panelVoiceLabel : '选择文字大小'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : '文本颜色',\r
+               bgColorTitle : '背景颜色',\r
+               auto : '自动',\r
+               more : '其它颜色...'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : '即时拼写检查',\r
+               enable : '启用即时拼写检查',\r
+               disable : '禁用即时拼写检查',\r
+               about : '关于即时拼写检查',\r
+               toggle : '暂停/启用即时拼写检查',\r
+               options : '选项',\r
+               langs : '语言',\r
+               moreSuggestions : '更多拼写建议',\r
+               ignore : '忽略',\r
+               ignoreAll : '全部忽略',\r
+               addWord : '添加单词',\r
+               emptyDic : '字典名不应为空.',\r
+               optionsTab : '选项',\r
+               languagesTab : '语言',\r
+               dictionariesTab : '字典',\r
+               aboutTab : '关于'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : '关于CKEditor',\r
+               dlgTitle : '关于CKEditor',\r
+               moreInfo : '访问我们的网站以获取更多关于协议的信息',\r
+               copy : 'Copyright &copy; $1. All rights reserved.'\r
+       },\r
+\r
+       maximize : '全屏',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : '锚点',\r
+               flash : 'Flash',\r
+               div : '分页',\r
+               unknown : '位置对象'\r
+       },\r
+\r
+       resize : '拖拽以改变尺寸'\r
+};\r
diff --git a/_source/lang/zh.js b/_source/lang/zh.js
new file mode 100644 (file)
index 0000000..3e18036
--- /dev/null
@@ -0,0 +1,674 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the\r
+ * Chinese Traditional language.\r
+ */\r
+\r
+/**#@+\r
+   @type String\r
+   @example\r
+*/\r
+\r
+/**\r
+ * Constains the dictionary of language entries.\r
+ * @namespace\r
+ */\r
+CKEDITOR.lang['zh'] =\r
+{\r
+       /**\r
+        * The language reading direction. Possible values are "rtl" for\r
+        * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right\r
+        * languages (like English).\r
+        * @default 'ltr'\r
+        */\r
+       dir : 'ltr',\r
+\r
+       /*\r
+        * Screenreader titles. Please note that screenreaders are not always capable\r
+        * of reading non-English words. So be careful while translating it.\r
+        */\r
+       editorTitle             : '文書處理器, %1',\r
+\r
+       // Toolbar buttons without dialogs.\r
+       source                  : '原始碼',\r
+       newPage                 : '開新檔案',\r
+       save                    : '儲存',\r
+       preview                 : '預覽',\r
+       cut                             : '剪下',\r
+       copy                    : '複製',\r
+       paste                   : '貼上',\r
+       print                   : '列印',\r
+       underline               : '底線',\r
+       bold                    : '粗體',\r
+       italic                  : '斜體',\r
+       selectAll               : '全選',\r
+       removeFormat    : '清除格式',\r
+       strike                  : '刪除線',\r
+       subscript               : '下標',\r
+       superscript             : '上標',\r
+       horizontalrule  : '插入水平線',\r
+       pagebreak               : '插入分頁符號',\r
+       unlink                  : '移除超連結',\r
+       undo                    : '復原',\r
+       redo                    : '重複',\r
+\r
+       // Common messages and labels.\r
+       common :\r
+       {\r
+               browseServer    : '瀏覽伺服器端',\r
+               url                             : 'URL',\r
+               protocol                : '通訊協定',\r
+               upload                  : '上傳',\r
+               uploadSubmit    : '上傳至伺服器',\r
+               image                   : '影像',\r
+               flash                   : 'Flash',\r
+               form                    : '表單',\r
+               checkbox                : '核取方塊',\r
+               radio           : '選項按鈕',\r
+               textField               : '文字方塊',\r
+               textarea                : '文字區域',\r
+               hiddenField             : '隱藏欄位',\r
+               button                  : '按鈕',\r
+               select  : '清單/選單',\r
+               imageButton             : '影像按鈕',\r
+               notSet                  : '<尚未設定>',\r
+               id                              : 'ID',\r
+               name                    : '名稱',\r
+               langDir                 : '語言方向',\r
+               langDirLtr              : '由左而右 (LTR)',\r
+               langDirRtl              : '由右而左 (RTL)',\r
+               langCode                : '語言代碼',\r
+               longDescr               : '詳細 URL',\r
+               cssClass                : '樣式表類別',\r
+               advisoryTitle   : '標題',\r
+               cssStyle                : '樣式',\r
+               ok                              : '確定',\r
+               cancel                  : '取消',\r
+               generalTab              : '一般',\r
+               advancedTab             : '進階',\r
+               validateNumberFailed    : '需要輸入數字格式',\r
+               confirmNewPage  : '現存的修改尚未儲存,要開新檔案?',\r
+               confirmCancel   : '部份選項尚未儲存,要關閉對話盒?',\r
+\r
+               // Put the voice-only part of the label in the span.\r
+               unavailable             : '%1<span class="cke_accessibility">, 已關閉</span>'\r
+       },\r
+\r
+       // Special char dialog.\r
+       specialChar             :\r
+       {\r
+               toolbar         : '插入特殊符號',\r
+               title           : '請選擇特殊符號'\r
+       },\r
+\r
+       // Link dialog.\r
+       link :\r
+       {\r
+               toolbar         : '插入/編輯超連結',\r
+               menu            : '編輯超連結',\r
+               title           : '超連結',\r
+               info            : '超連結資訊',\r
+               target          : '目標',\r
+               upload          : '上傳',\r
+               advanced        : '進階',\r
+               type            : '超連接類型',\r
+               toAnchor        : '本頁錨點',\r
+               toEmail         : '電子郵件',\r
+               target          : '目標',\r
+               targetNotSet    : '<尚未設定>',\r
+               targetFrame     : '<框架>',\r
+               targetPopup     : '<快顯視窗>',\r
+               targetNew       : '新視窗 (_blank)',\r
+               targetTop       : '最上層視窗 (_top)',\r
+               targetSelf      : '本視窗 (_self)',\r
+               targetParent    : '父視窗 (_parent)',\r
+               targetFrameName : '目標框架名稱',\r
+               targetPopupName : '快顯視窗名稱',\r
+               popupFeatures   : '快顯視窗屬性',\r
+               popupResizable  : '可縮放',\r
+               popupStatusBar  : '狀態列',\r
+               popupLocationBar        : '網址列',\r
+               popupToolbar    : '工具列',\r
+               popupMenuBar    : '選單列',\r
+               popupFullScreen : '全螢幕 (IE)',\r
+               popupScrollBars : '捲軸',\r
+               popupDependent  : '從屬 (NS)',\r
+               popupWidth              : '寬',\r
+               popupLeft               : '左',\r
+               popupHeight             : '高',\r
+               popupTop                : '右',\r
+               id                              : 'ID',\r
+               langDir                 : '語言方向',\r
+               langDirNotSet   : '<尚未設定>',\r
+               langDirLTR              : '由左而右 (LTR)',\r
+               langDirRTL              : '由右而左 (RTL)',\r
+               acccessKey              : '存取鍵',\r
+               name                    : '名稱',\r
+               langCode                : '語言方向',\r
+               tabIndex                : '定位順序',\r
+               advisoryTitle   : '標題',\r
+               advisoryContentType     : '內容類型',\r
+               cssClasses              : '樣式表類別',\r
+               charset                 : '連結資源之編碼',\r
+               styles                  : '樣式',\r
+               selectAnchor    : '請選擇錨點',\r
+               anchorName              : '依錨點名稱',\r
+               anchorId                : '依元件 ID',\r
+               emailAddress    : '電子郵件',\r
+               emailSubject    : '郵件主旨',\r
+               emailBody               : '郵件內容',\r
+               noAnchors               : '(本文件尚無可用之錨點)',\r
+               noUrl                   : '請輸入欲連結的 URL',\r
+               noEmail                 : '請輸入電子郵件位址'\r
+       },\r
+\r
+       // Anchor dialog\r
+       anchor :\r
+       {\r
+               toolbar         : '插入/編輯錨點',\r
+               menu            : '錨點屬性',\r
+               title           : '錨點屬性',\r
+               name            : '錨點名稱',\r
+               errorName       : '請輸入錨點名稱'\r
+       },\r
+\r
+       // Find And Replace Dialog\r
+       findAndReplace :\r
+       {\r
+               title                           : '尋找與取代',\r
+               find                            : '尋找',\r
+               replace                         : '取代',\r
+               findWhat                        : '尋找:',\r
+               replaceWith                     : '取代:',\r
+               notFoundMsg                     : '未找到指定的文字。',\r
+               matchCase                       : '大小寫須相符',\r
+               matchWord                       : '全字相符',\r
+               matchCyclic                     : '循環搜索',\r
+               replaceAll                      : '全部取代',\r
+               replaceSuccessMsg       : '共完成 %1 次取代'\r
+       },\r
+\r
+       // Table Dialog\r
+       table :\r
+       {\r
+               toolbar         : '表格',\r
+               title           : '表格屬性',\r
+               menu            : '表格屬性',\r
+               deleteTable     : '刪除表格',\r
+               rows            : '列數',\r
+               columns         : '欄數',\r
+               border          : '邊框',\r
+               align           : '對齊',\r
+               alignNotSet     : '<未設定>',\r
+               alignLeft       : '靠左對齊',\r
+               alignCenter     : '置中',\r
+               alignRight      : '靠右對齊',\r
+               width           : '寬度',\r
+               widthPx         : '像素',\r
+               widthPc         : '百分比',\r
+               height          : '高度',\r
+               cellSpace       : '間距',\r
+               cellPad         : '內距',\r
+               caption         : '標題',\r
+               summary         : '摘要',\r
+               headers         : '標題',\r
+               headersNone             : '無標題',\r
+               headersColumn   : '第一欄',\r
+               headersRow              : '第一列',\r
+               headersBoth             : '第一欄和第一列',\r
+               invalidRows             : '必須有一或更多的列',\r
+               invalidCols             : '必須有一或更多的欄',\r
+               invalidBorder   : '邊框大小必須為數字格式',\r
+               invalidWidth    : '表格寬度必須為數字格式',\r
+               invalidHeight   : '表格高度必須為數字格式',\r
+               invalidCellSpacing      : '儲存格間距必須為數字格式',\r
+               invalidCellPadding      : '儲存格內距必須為數字格式',\r
+\r
+               cell :\r
+               {\r
+                       menu                    : '儲存格',\r
+                       insertBefore    : '向左插入儲存格',\r
+                       insertAfter             : '向右插入儲存格',\r
+                       deleteCell              : '刪除儲存格',\r
+                       merge                   : '合併儲存格',\r
+                       mergeRight              : '向右合併儲存格',\r
+                       mergeDown               : '向下合併儲存格',\r
+                       splitHorizontal : '橫向分割儲存格',\r
+                       splitVertical   : '縱向分割儲存格',\r
+                       title                   : '儲存格屬性',\r
+                       cellType                : '儲存格類別',\r
+                       rowSpan                 : '儲存格列數',\r
+                       colSpan                 : '儲存格欄數',\r
+                       wordWrap                : '自動換行',\r
+                       hAlign                  : '水平對齊',\r
+                       vAlign                  : '垂直對齊',\r
+                       alignTop                : '向上對齊',\r
+                       alignMiddle             : '置中對齊',\r
+                       alignBottom             : '向下對齊',\r
+                       alignBaseline   : '基線對齊',\r
+                       bgColor                 : '背景顏色',\r
+                       borderColor             : '邊框顏色',\r
+                       data                    : '數據',\r
+                       header                  : '標題',\r
+                       yes                             : '是',\r
+                       no                              : '否',\r
+                       invalidWidth    : '儲存格寬度必須為數字格式',\r
+                       invalidHeight   : '儲存格高度必須為數字格式',\r
+                       invalidRowSpan  : '儲存格列數必須為整數格式',\r
+                       invalidColSpan  : '儲存格欄數度必須為整數格式'\r
+               },\r
+\r
+               row :\r
+               {\r
+                       menu                    : '列',\r
+                       insertBefore    : '向上插入列',\r
+                       insertAfter             : '向下插入列',\r
+                       deleteRow               : '刪除列'\r
+               },\r
+\r
+               column :\r
+               {\r
+                       menu                    : '欄',\r
+                       insertBefore    : '向左插入欄',\r
+                       insertAfter             : '向右插入欄',\r
+                       deleteColumn    : '刪除欄'\r
+               }\r
+       },\r
+\r
+       // Button Dialog.\r
+       button :\r
+       {\r
+               title           : '按鈕屬性',\r
+               text            : '顯示文字 (值)',\r
+               type            : '類型',\r
+               typeBtn         : '按鈕 (Button)',\r
+               typeSbm         : '送出 (Submit)',\r
+               typeRst         : '重設 (Reset)'\r
+       },\r
+\r
+       // Checkbox and Radio Button Dialogs.\r
+       checkboxAndRadio :\r
+       {\r
+               checkboxTitle : '核取方塊屬性',\r
+               radioTitle      : '選項按鈕屬性',\r
+               value           : '選取值',\r
+               selected        : '已選取'\r
+       },\r
+\r
+       // Form Dialog.\r
+       form :\r
+       {\r
+               title           : '表單屬性',\r
+               menu            : '表單屬性',\r
+               action          : '動作',\r
+               method          : '方法',\r
+               encoding        : '表單編碼',\r
+               target          : '目標',\r
+               targetNotSet    : '<尚未設定>',\r
+               targetNew       : '新視窗 (_blank)',\r
+               targetTop       : '最上層視窗 (_top)',\r
+               targetSelf      : '本視窗 (_self)',\r
+               targetParent    : '父視窗 (_parent)'\r
+       },\r
+\r
+       // Select Field Dialog.\r
+       select :\r
+       {\r
+               title           : '清單/選單屬性',\r
+               selectInfo      : '資訊',\r
+               opAvail         : '可用選項',\r
+               value           : '值',\r
+               size            : '大小',\r
+               lines           : '行',\r
+               chkMulti        : '可多選',\r
+               opText          : '顯示文字',\r
+               opValue         : '選取值',\r
+               btnAdd          : '新增',\r
+               btnModify       : '修改',\r
+               btnUp           : '上移',\r
+               btnDown         : '下移',\r
+               btnSetValue : '設為預設值',\r
+               btnDelete       : '刪除'\r
+       },\r
+\r
+       // Textarea Dialog.\r
+       textarea :\r
+       {\r
+               title           : '文字區域屬性',\r
+               cols            : '字元寬度',\r
+               rows            : '列數'\r
+       },\r
+\r
+       // Text Field Dialog.\r
+       textfield :\r
+       {\r
+               title           : '文字方塊屬性',\r
+               name            : '名稱',\r
+               value           : '值',\r
+               charWidth       : '字元寬度',\r
+               maxChars        : '最多字元數',\r
+               type            : '類型',\r
+               typeText        : '文字',\r
+               typePass        : '密碼'\r
+       },\r
+\r
+       // Hidden Field Dialog.\r
+       hidden :\r
+       {\r
+               title   : '隱藏欄位屬性',\r
+               name    : '名稱',\r
+               value   : '值'\r
+       },\r
+\r
+       // Image Dialog.\r
+       image :\r
+       {\r
+               title           : '影像屬性',\r
+               titleButton     : '影像按鈕屬性',\r
+               menu            : '影像屬性',\r
+               infoTab : '影像資訊',\r
+               btnUpload       : '上傳至伺服器',\r
+               url             : 'URL',\r
+               upload  : '上傳',\r
+               alt             : '替代文字',\r
+               width           : '寬度',\r
+               height  : '高度',\r
+               lockRatio       : '等比例',\r
+               resetSize       : '重設為原大小',\r
+               border  : '邊框',\r
+               hSpace  : '水平距離',\r
+               vSpace  : '垂直距離',\r
+               align           : '對齊',\r
+               alignLeft       : '靠左對齊',\r
+               alignAbsBottom: '絕對下方',\r
+               alignAbsMiddle: '絕對中間',\r
+               alignBaseline   : '基準線',\r
+               alignBottom     : '靠下對齊',\r
+               alignMiddle     : '置中對齊',\r
+               alignRight      : '靠右對齊',\r
+               alignTextTop    : '文字上方',\r
+               alignTop        : '靠上對齊',\r
+               preview : '預覽',\r
+               alertUrl        : '請輸入影像 URL',\r
+               linkTab : '超連結',\r
+               button2Img      : '要把影像按鈕改成影像嗎?',\r
+               img2Button      : '要把影像改成影像按鈕嗎?'\r
+       },\r
+\r
+       // Flash Dialog\r
+       flash :\r
+       {\r
+               properties              : 'Flash 屬性',\r
+               propertiesTab   : '屬性',\r
+               title           : 'Flash 屬性',\r
+               chkPlay         : '自動播放',\r
+               chkLoop         : '重複',\r
+               chkMenu         : '開啟選單',\r
+               chkFull         : '啟動全螢幕顯示',\r
+               scale           : '縮放',\r
+               scaleAll                : '全部顯示',\r
+               scaleNoBorder   : '無邊框',\r
+               scaleFit                : '精確符合',\r
+               access                  : '允許腳本訪問',\r
+               accessAlways    : '永遠',\r
+               accessSameDomain        : '相同域名',\r
+               accessNever     : '永不',\r
+               align           : '對齊',\r
+               alignLeft       : '靠左對齊',\r
+               alignAbsBottom: '絕對下方',\r
+               alignAbsMiddle: '絕對中間',\r
+               alignBaseline   : '基準線',\r
+               alignBottom     : '靠下對齊',\r
+               alignMiddle     : '置中對齊',\r
+               alignRight      : '靠右對齊',\r
+               alignTextTop    : '文字上方',\r
+               alignTop        : '靠上對齊',\r
+               quality         : '質素',\r
+               qualityBest              : '最好',\r
+               qualityHigh              : '高',\r
+               qualityAutoHigh  : '高(自動)',\r
+               qualityMedium    : '中(自動)',\r
+               qualityAutoLow   : '低(自動)',\r
+               qualityLow               : '低',\r
+               windowModeWindow         : '視窗',\r
+               windowModeOpaque         : '不透明',\r
+               windowModeTransparent    : '透明',\r
+               windowMode      : '視窗模式',\r
+               flashvars       : 'Flash 變數',\r
+               bgcolor : '背景顏色',\r
+               width   : '寬度',\r
+               height  : '高度',\r
+               hSpace  : '水平距離',\r
+               vSpace  : '垂直距離',\r
+               validateSrc : '請輸入欲連結的 URL',\r
+               validateWidth : '寬度必須為數字格式',\r
+               validateHeight : '高度必須為數字格式',\r
+               validateHSpace : '水平間距必須為數字格式',\r
+               validateVSpace : '垂直間距必須為數字格式'\r
+       },\r
+\r
+       // Speller Pages Dialog\r
+       spellCheck :\r
+       {\r
+               toolbar                 : '拼字檢查',\r
+               title                   : '拼字檢查',\r
+               notAvailable    : '抱歉,服務目前暫不可用',\r
+               errorLoading    : '無法聯系侍服器: %s.',\r
+               notInDic                : '不在字典中',\r
+               changeTo                : '更改為',\r
+               btnIgnore               : '忽略',\r
+               btnIgnoreAll    : '全部忽略',\r
+               btnReplace              : '取代',\r
+               btnReplaceAll   : '全部取代',\r
+               btnUndo                 : '復原',\r
+               noSuggestions   : '- 無建議值 -',\r
+               progress                : '進行拼字檢查中…',\r
+               noMispell               : '拼字檢查完成:未發現拼字錯誤',\r
+               noChanges               : '拼字檢查完成:未更改任何單字',\r
+               oneChange               : '拼字檢查完成:更改了 1 個單字',\r
+               manyChanges             : '拼字檢查完成:更改了 %1 個單字',\r
+               ieSpellDownload : '尚未安裝拼字檢查元件。您是否想要現在下載?'\r
+       },\r
+\r
+       smiley :\r
+       {\r
+               toolbar : '表情符號',\r
+               title   : '插入表情符號'\r
+       },\r
+\r
+       elementsPath :\r
+       {\r
+               eleTitle : '%1 元素'\r
+       },\r
+\r
+       numberedlist : '編號清單',\r
+       bulletedlist : '項目清單',\r
+       indent : '增加縮排',\r
+       outdent : '減少縮排',\r
+\r
+       justify :\r
+       {\r
+               left : '靠左對齊',\r
+               center : '置中',\r
+               right : '靠右對齊',\r
+               block : '左右對齊'\r
+       },\r
+\r
+       blockquote : '引用文字',\r
+\r
+       clipboard :\r
+       {\r
+               title           : '貼上',\r
+               cutError        : '瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用快捷鍵 (Ctrl+X) 剪下。',\r
+               copyError       : '瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用快捷鍵 (Ctrl+C) 複製。',\r
+               pasteMsg        : '請使用快捷鍵 (<strong>Ctrl+V</strong>) 貼到下方區域中並按下 <strong>確定</strong>',\r
+               securityMsg     : '因為瀏覽器的安全性設定,本編輯器無法直接存取您的剪貼簿資料,請您自行在本視窗進行貼上動作。'\r
+       },\r
+\r
+       pastefromword :\r
+       {\r
+               toolbar : '自 Word 貼上',\r
+               title : '自 Word 貼上',\r
+               advice : '請使用快捷鍵 (<strong>Ctrl+V</strong>) 貼到下方區域中並按下 <strong>確定</strong>',\r
+               ignoreFontFace : '移除字型設定',\r
+               removeStyle : '移除樣式設定'\r
+       },\r
+\r
+       pasteText :\r
+       {\r
+               button : '貼為純文字格式',\r
+               title : '貼為純文字格式'\r
+       },\r
+\r
+       templates :\r
+       {\r
+               button : '樣版',\r
+               title : '內容樣版',\r
+               insertOption: '取代原有內容',\r
+               selectPromptMsg: '請選擇欲開啟的樣版<br> (原有的內容將會被清除):',\r
+               emptyListMsg : '(無樣版)'\r
+       },\r
+\r
+       showBlocks : '顯示區塊',\r
+\r
+       stylesCombo :\r
+       {\r
+               label : '樣式',\r
+               voiceLabel : '樣式',\r
+               panelVoiceLabel : '選擇樣式',\r
+               panelTitle1 : '塊級元素樣式',\r
+               panelTitle2 : '內聯元素樣式',\r
+               panelTitle3 : '物件元素樣式'\r
+       },\r
+\r
+       format :\r
+       {\r
+               label : '格式',\r
+               voiceLabel : '格式',\r
+               panelTitle : '格式',\r
+               panelVoiceLabel : '選擇段落格式',\r
+\r
+               tag_p : '一般',\r
+               tag_pre : '已格式化',\r
+               tag_address : '位址',\r
+               tag_h1 : '標題 1',\r
+               tag_h2 : '標題 2',\r
+               tag_h3 : '標題 3',\r
+               tag_h4 : '標題 4',\r
+               tag_h5 : '標題 5',\r
+               tag_h6 : '標題 6',\r
+               tag_div : '一般 (DIV)'\r
+       },\r
+\r
+       font :\r
+       {\r
+               label : '字體',\r
+               voiceLabel : '字體',\r
+               panelTitle : '字體',\r
+               panelVoiceLabel : '選擇字體'\r
+       },\r
+\r
+       fontSize :\r
+       {\r
+               label : '大小',\r
+               voiceLabel : '文字大小',\r
+               panelTitle : '大小',\r
+               panelVoiceLabel : '選擇文字大小'\r
+       },\r
+\r
+       colorButton :\r
+       {\r
+               textColorTitle : '文字顏色',\r
+               bgColorTitle : '背景顏色',\r
+               auto : '自動',\r
+               more : '更多顏色…'\r
+       },\r
+\r
+       colors :\r
+       {\r
+               '000' : 'Black',\r
+               '800000' : 'Maroon',\r
+               '8B4513' : 'Saddle Brown',\r
+               '2F4F4F' : 'Dark Slate Gray',\r
+               '008080' : 'Teal',\r
+               '000080' : 'Navy',\r
+               '4B0082' : 'Indigo',\r
+               '696969' : 'Dim Gray',\r
+               'B22222' : 'Fire Brick',\r
+               'A52A2A' : 'Brown',\r
+               'DAA520' : 'Golden Rod',\r
+               '006400' : 'Dark Green',\r
+               '40E0D0' : 'Turquoise',\r
+               '0000CD' : 'Medium Blue',\r
+               '800080' : 'Purple',\r
+               '808080' : 'Gray',\r
+               'F00' : 'Red',\r
+               'FF8C00' : 'Dark Orange',\r
+               'FFD700' : 'Gold',\r
+               '008000' : 'Green',\r
+               '0FF' : 'Cyan',\r
+               '00F' : 'Blue',\r
+               'EE82EE' : 'Violet',\r
+               'A9A9A9' : 'Dark Gray',\r
+               'FFA07A' : 'Light Salmon',\r
+               'FFA500' : 'Orange',\r
+               'FFFF00' : 'Yellow',\r
+               '00FF00' : 'Lime',\r
+               'AFEEEE' : 'Pale Turquoise',\r
+               'ADD8E6' : 'Light Blue',\r
+               'DDA0DD' : 'Plum',\r
+               'D3D3D3' : 'Light Grey',\r
+               'FFF0F5' : 'Lavender Blush',\r
+               'FAEBD7' : 'Antique White',\r
+               'FFFFE0' : 'Light Yellow',\r
+               'F0FFF0' : 'Honeydew',\r
+               'F0FFFF' : 'Azure',\r
+               'F0F8FF' : 'Alice Blue',\r
+               'E6E6FA' : 'Lavender',\r
+               'FFF' : 'White'\r
+       },\r
+\r
+       scayt :\r
+       {\r
+               title : '即時拼寫檢查',\r
+               enable : '啟用即時拼寫檢查',\r
+               disable : '關閉即時拼寫檢查',\r
+               about : '關於即時拼寫檢查',\r
+               toggle : '啟用/關閉即時拼寫檢查',\r
+               options : '選項',\r
+               langs : '語言',\r
+               moreSuggestions : '更多拼寫建議',\r
+               ignore : '忽略',\r
+               ignoreAll : '全部忽略',\r
+               addWord : '添加單詞',\r
+               emptyDic : '字典名不應為空.',\r
+               optionsTab : '選項',\r
+               languagesTab : '語言',\r
+               dictionariesTab : '字典',\r
+               aboutTab : '關於'\r
+       },\r
+\r
+       about :\r
+       {\r
+               title : '關於 CKEditor',\r
+               dlgTitle : '關於 CKEditor',\r
+               moreInfo : '訪問我們的網站以獲取更多關於協議的信息',\r
+               copy : 'Copyright &copy; $1. All rights reserved.'\r
+       },\r
+\r
+       maximize : '最大化',\r
+\r
+       fakeobjects :\r
+       {\r
+               anchor : '錨點',\r
+               flash : 'Flash 動畫',\r
+               div : '分頁',\r
+               unknown : '不明物件'\r
+       },\r
+\r
+       resize : '拖拽改變大小'\r
+};\r
diff --git a/_source/plugins/about/dialogs/about.js b/_source/plugins/about/dialogs/about.js
new file mode 100644 (file)
index 0000000..3d09a26
--- /dev/null
@@ -0,0 +1,73 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'about', function( editor )\r
+{\r
+       var lang = editor.lang.about;\r
+\r
+       return {\r
+               title : CKEDITOR.env.ie ? lang.dlgTitle : lang.title,\r
+               minWidth : 390,\r
+               minHeight : 230,\r
+               contents : [\r
+                       {\r
+                               id : 'tab1',\r
+                               label : '',\r
+                               title : '',\r
+                               expand : true,\r
+                               padding : 0,\r
+                               elements :\r
+                               [\r
+                                       {\r
+                                               type : 'html',\r
+                                               html :\r
+                                                       '<style type="text/css">' +\r
+                                                               '.cke_about_container' +\r
+                                                               '{' +\r
+                                                                       'color:#000 !important;' +\r
+                                                                       'padding:10px 10px 0;' +\r
+                                                                       'margin-top:5px' +\r
+                                                               '}' +\r
+                                                               '.cke_about_container p' +\r
+                                                               '{' +\r
+                                                                       'margin: 0 0 10px;' +\r
+                                                               '}' +\r
+                                                               '.cke_about_container .cke_about_logo' +\r
+                                                               '{' +\r
+                                                                       'height:81px;' +\r
+                                                                       'background-color:#fff;' +\r
+                                                                       'background-image:url(' + CKEDITOR.plugins.get( 'about' ).path + 'dialogs/logo_ckeditor.png);' +\r
+                                                                       'background-position:center; ' +\r
+                                                                       'background-repeat:no-repeat;' +\r
+                                                                       'margin-bottom:10px;' +\r
+                                                               '}' +\r
+                                                               '.cke_about_container a' +\r
+                                                               '{' +\r
+                                                                       'cursor:pointer !important;' +\r
+                                                                       'color:blue !important;' +\r
+                                                                       'text-decoration:underline !important;' +\r
+                                                               '}' +\r
+                                                       '</style>' +\r
+                                                       '<div class="cke_about_container">' +\r
+                                                               '<div class="cke_about_logo"></div>' +\r
+                                                               '<p>' +\r
+                                                                       'CKEditor ' + CKEDITOR.version + ' (revision ' + CKEDITOR.revision + ')<br>' +\r
+                                                                       '<a href="http://ckeditor.com/">http://ckeditor.com</a>' +\r
+                                                               '</p>' +\r
+                                                               '<p>' +\r
+                                                                       lang.moreInfo + '<br>' +\r
+                                                                       '<a href="http://ckeditor.com/license">http://ckeditor.com/license</a>' +\r
+                                                               '</p>' +\r
+                                                               '<p>' +\r
+                                                                       lang.copy.replace( '$1', '<a href="http://cksource.com/">CKSource</a> - Frederico Knabben' ) +\r
+                                                               '</p>' +\r
+                                                       '</div>'\r
+                                       }\r
+                               ]\r
+                       }\r
+               ],\r
+               buttons : [ CKEDITOR.dialog.cancelButton ]\r
+       };\r
+} );\r
diff --git a/_source/plugins/about/dialogs/logo_ckeditor.png b/_source/plugins/about/dialogs/logo_ckeditor.png
new file mode 100644 (file)
index 0000000..ad01902
Binary files /dev/null and b/_source/plugins/about/dialogs/logo_ckeditor.png differ
diff --git a/_source/plugins/about/plugin.js b/_source/plugins/about/plugin.js
new file mode 100644 (file)
index 0000000..13b2d07
--- /dev/null
@@ -0,0 +1,22 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'about',\r
+{\r
+       init : function( editor )\r
+       {\r
+               var command = editor.addCommand( 'about', new CKEDITOR.dialogCommand( 'about' ) );\r
+               command.modes = { wysiwyg:1, source:1 };\r
+               command.canUndo = false;\r
+\r
+               editor.ui.addButton( 'About',\r
+                       {\r
+                               label : editor.lang.about.title,\r
+                               command : 'about'\r
+                       });\r
+\r
+               CKEDITOR.dialog.add( 'about', this.path + 'dialogs/about.js' );\r
+       }\r
+});\r
diff --git a/_source/plugins/basicstyles/plugin.js b/_source/plugins/basicstyles/plugin.js
new file mode 100644 (file)
index 0000000..b023ab7
--- /dev/null
@@ -0,0 +1,50 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'basicstyles',\r
+{\r
+       requires : [ 'styles', 'button' ],\r
+\r
+       init : function( editor )\r
+       {\r
+               // All buttons use the same code to register. So, to avoid\r
+               // duplications, let's use this tool function.\r
+               var addButtonCommand = function( buttonName, buttonLabel, commandName, styleDefiniton )\r
+               {\r
+                       var style = new CKEDITOR.style( styleDefiniton );\r
+\r
+                       editor.attachStyleStateChange( style, function( state )\r
+                               {\r
+                                       editor.getCommand( commandName ).setState( state );\r
+                               });\r
+\r
+                       editor.addCommand( commandName, new CKEDITOR.styleCommand( style ) );\r
+\r
+                       editor.ui.addButton( buttonName,\r
+                               {\r
+                                       label : buttonLabel,\r
+                                       command : commandName\r
+                               });\r
+               };\r
+\r
+               var config = editor.config;\r
+               var lang = editor.lang;\r
+\r
+               addButtonCommand( 'Bold'                , lang.bold                     , 'bold'                , config.coreStyles_bold );\r
+               addButtonCommand( 'Italic'              , lang.italic           , 'italic'              , config.coreStyles_italic );\r
+               addButtonCommand( 'Underline'   , lang.underline        , 'underline'   , config.coreStyles_underline );\r
+               addButtonCommand( 'Strike'              , lang.strike           , 'strike'              , config.coreStyles_strike );\r
+               addButtonCommand( 'Subscript'   , lang.subscript        , 'subscript'   , config.coreStyles_subscript );\r
+               addButtonCommand( 'Superscript' , lang.superscript      , 'superscript' , config.coreStyles_superscript );\r
+       }\r
+});\r
+\r
+// Basic Inline Styles.\r
+CKEDITOR.config.coreStyles_bold                        = { element : 'strong', overrides : 'b' };\r
+CKEDITOR.config.coreStyles_italic              = { element : 'em', overrides : 'i' };\r
+CKEDITOR.config.coreStyles_underline   = { element : 'u' };\r
+CKEDITOR.config.coreStyles_strike              = { element : 'strike' };\r
+CKEDITOR.config.coreStyles_subscript   = { element : 'sub' };\r
+CKEDITOR.config.coreStyles_superscript = { element : 'sup' };\r
diff --git a/_source/plugins/blockquote/plugin.js b/_source/plugins/blockquote/plugin.js
new file mode 100644 (file)
index 0000000..4015bee
--- /dev/null
@@ -0,0 +1,301 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Blockquote.\r
+ */\r
+\r
+(function()\r
+{\r
+       function getState( editor, path )\r
+       {\r
+               var firstBlock = path.block || path.blockLimit;\r
+\r
+               if ( !firstBlock || firstBlock.getName() == 'body' )\r
+                       return CKEDITOR.TRISTATE_OFF;\r
+\r
+               // See if the first block has a blockquote parent.\r
+               if ( firstBlock.getAscendant( 'blockquote', true ) )\r
+                       return CKEDITOR.TRISTATE_ON;\r
+\r
+               return CKEDITOR.TRISTATE_OFF;\r
+       }\r
+\r
+       function onSelectionChange( evt )\r
+       {\r
+               var editor = evt.editor,\r
+                       command = editor.getCommand( 'blockquote' );\r
+               command.state = getState( editor, evt.data.path );\r
+               command.fire( 'state' );\r
+       }\r
+\r
+       function noBlockLeft( bqBlock )\r
+       {\r
+               for ( var i = 0, length = bqBlock.getChildCount(), child ; i < length && ( child = bqBlock.getChild( i ) ) ; i++ )\r
+               {\r
+                       if ( child.type == CKEDITOR.NODE_ELEMENT && child.isBlockBoundary() )\r
+                               return false;\r
+               }\r
+               return true;\r
+       }\r
+\r
+       var commandObject =\r
+       {\r
+               exec : function( editor )\r
+               {\r
+                       var state = editor.getCommand( 'blockquote' ).state,\r
+                               selection = editor.getSelection(),\r
+                               range = selection && selection.getRanges()[0];\r
+\r
+                       if ( !range )\r
+                               return;\r
+\r
+                       var bookmarks = selection.createBookmarks();\r
+\r
+                       // Kludge for #1592: if the bookmark nodes are in the beginning of\r
+                       // blockquote, then move them to the nearest block element in the\r
+                       // blockquote.\r
+                       if ( CKEDITOR.env.ie )\r
+                       {\r
+                               var bookmarkStart = bookmarks[0].startNode,\r
+                                       bookmarkEnd = bookmarks[0].endNode,\r
+                                       cursor;\r
+\r
+                               if ( bookmarkStart && bookmarkStart.getParent().getName() == 'blockquote' )\r
+                               {\r
+                                       cursor = bookmarkStart;\r
+                                       while ( ( cursor = cursor.getNext() ) )\r
+                                       {\r
+                                               if ( cursor.type == CKEDITOR.NODE_ELEMENT &&\r
+                                                               cursor.isBlockBoundary() )\r
+                                               {\r
+                                                       bookmarkStart.move( cursor, true );\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               if ( bookmarkEnd\r
+                                               && bookmarkEnd.getParent().getName() == 'blockquote' )\r
+                               {\r
+                                       cursor = bookmarkEnd;\r
+                                       while ( ( cursor = cursor.getPrevious() ) )\r
+                                       {\r
+                                               if ( cursor.type == CKEDITOR.NODE_ELEMENT &&\r
+                                                               cursor.isBlockBoundary() )\r
+                                               {\r
+                                                       bookmarkEnd.move( cursor );\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       var iterator = range.createIterator(),\r
+                               block;\r
+\r
+                       if ( state == CKEDITOR.TRISTATE_OFF )\r
+                       {\r
+                               var paragraphs = [];\r
+                               while ( ( block = iterator.getNextParagraph() ) )\r
+                                       paragraphs.push( block );\r
+\r
+                               // If no paragraphs, create one from the current selection position.\r
+                               if ( paragraphs.length < 1 )\r
+                               {\r
+                                       var para = editor.document.createElement( editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ),\r
+                                               firstBookmark = bookmarks.shift();\r
+                                       range.insertNode( para );\r
+                                       para.append( new CKEDITOR.dom.text( '\ufeff', editor.document ) );\r
+                                       range.moveToBookmark( firstBookmark );\r
+                                       range.selectNodeContents( para );\r
+                                       range.collapse( true );\r
+                                       firstBookmark = range.createBookmark();\r
+                                       paragraphs.push( para );\r
+                                       bookmarks.unshift( firstBookmark );\r
+                               }\r
+\r
+                               // Make sure all paragraphs have the same parent.\r
+                               var commonParent = paragraphs[0].getParent(),\r
+                                       tmp = [];\r
+                               for ( var i = 0 ; i < paragraphs.length ; i++ )\r
+                               {\r
+                                       block = paragraphs[i];\r
+                                       commonParent = commonParent.getCommonAncestor( block.getParent() );\r
+                               }\r
+\r
+                               // The common parent must not be the following tags: table, tbody, tr, ol, ul.\r
+                               var denyTags = { table : 1, tbody : 1, tr : 1, ol : 1, ul : 1 };\r
+                               while ( denyTags[ commonParent.getName() ] )\r
+                                       commonParent = commonParent.getParent();\r
+\r
+                               // Reconstruct the block list to be processed such that all resulting blocks\r
+                               // satisfy parentNode.equals( commonParent ).\r
+                               var lastBlock = null;\r
+                               while ( paragraphs.length > 0 )\r
+                               {\r
+                                       block = paragraphs.shift();\r
+                                       while ( !block.getParent().equals( commonParent ) )\r
+                                               block = block.getParent();\r
+                                       if ( !block.equals( lastBlock ) )\r
+                                               tmp.push( block );\r
+                                       lastBlock = block;\r
+                               }\r
+\r
+                               // If any of the selected blocks is a blockquote, remove it to prevent\r
+                               // nested blockquotes.\r
+                               while ( tmp.length > 0 )\r
+                               {\r
+                                       block = tmp.shift();\r
+                                       if ( block.getName() == 'blockquote' )\r
+                                       {\r
+                                               var docFrag = new CKEDITOR.dom.documentFragment( editor.document );\r
+                                               while ( block.getFirst() )\r
+                                               {\r
+                                                       docFrag.append( block.getFirst().remove() );\r
+                                                       paragraphs.push( docFrag.getLast() );\r
+                                               }\r
+\r
+                                               docFrag.replace( block );\r
+                                       }\r
+                                       else\r
+                                               paragraphs.push( block );\r
+                               }\r
+\r
+                               // Now we have all the blocks to be included in a new blockquote node.\r
+                               var bqBlock = editor.document.createElement( 'blockquote' );\r
+                               bqBlock.insertBefore( paragraphs[0] );\r
+                               while ( paragraphs.length > 0 )\r
+                               {\r
+                                       block = paragraphs.shift();\r
+                                       bqBlock.append( block );\r
+                               }\r
+                       }\r
+                       else if ( state == CKEDITOR.TRISTATE_ON )\r
+                       {\r
+                               var moveOutNodes = [],\r
+                                       database = {};\r
+\r
+                               while ( ( block = iterator.getNextParagraph() ) )\r
+                               {\r
+                                       var bqParent = null,\r
+                                               bqChild = null;\r
+                                       while ( block.getParent() )\r
+                                       {\r
+                                               if ( block.getParent().getName() == 'blockquote' )\r
+                                               {\r
+                                                       bqParent = block.getParent();\r
+                                                       bqChild = block;\r
+                                                       break;\r
+                                               }\r
+                                               block = block.getParent();\r
+                                       }\r
+\r
+                                       // Remember the blocks that were recorded down in the moveOutNodes array\r
+                                       // to prevent duplicates.\r
+                                       if ( bqParent && bqChild && !bqChild.getCustomData( 'blockquote_moveout' ) )\r
+                                       {\r
+                                               moveOutNodes.push( bqChild );\r
+                                               CKEDITOR.dom.element.setMarker( database, bqChild, 'blockquote_moveout', true );\r
+                                       }\r
+                               }\r
+\r
+                               CKEDITOR.dom.element.clearAllMarkers( database );\r
+\r
+                               var movedNodes = [],\r
+                                       processedBlockquoteBlocks = [];\r
+\r
+                               database = {};\r
+                               while ( moveOutNodes.length > 0 )\r
+                               {\r
+                                       var node = moveOutNodes.shift();\r
+                                       bqBlock = node.getParent();\r
+\r
+                                       // If the node is located at the beginning or the end, just take it out\r
+                                       // without splitting. Otherwise, split the blockquote node and move the\r
+                                       // paragraph in between the two blockquote nodes.\r
+                                       if ( !node.getPrevious() )\r
+                                               node.remove().insertBefore( bqBlock );\r
+                                       else if ( !node.getNext() )\r
+                                               node.remove().insertAfter( bqBlock );\r
+                                       else\r
+                                       {\r
+                                               node.breakParent( node.getParent() );\r
+                                               processedBlockquoteBlocks.push( node.getNext() );\r
+                                       }\r
+\r
+                                       // Remember the blockquote node so we can clear it later (if it becomes empty).\r
+                                       if ( !bqBlock.getCustomData( 'blockquote_processed' ) )\r
+                                       {\r
+                                               processedBlockquoteBlocks.push( bqBlock );\r
+                                               CKEDITOR.dom.element.setMarker( database, bqBlock, 'blockquote_processed', true );\r
+                                       }\r
+\r
+                                       movedNodes.push( node );\r
+                               }\r
+\r
+                               CKEDITOR.dom.element.clearAllMarkers( database );\r
+\r
+                               // Clear blockquote nodes that have become empty.\r
+                               for ( i = processedBlockquoteBlocks.length - 1 ; i >= 0 ; i-- )\r
+                               {\r
+                                       bqBlock = processedBlockquoteBlocks[i];\r
+                                       if ( noBlockLeft( bqBlock ) )\r
+                                               bqBlock.remove();\r
+                               }\r
+\r
+                               if ( editor.config.enterMode == CKEDITOR.ENTER_BR )\r
+                               {\r
+                                       var firstTime = true;\r
+                                       while ( movedNodes.length )\r
+                                       {\r
+                                               node = movedNodes.shift();\r
+\r
+                                               if ( node.getName() == 'div' )\r
+                                               {\r
+                                                       docFrag = new CKEDITOR.dom.documentFragment( editor.document );\r
+                                                       var needBeginBr = firstTime && node.getPrevious() &&\r
+                                                                       !( node.getPrevious().type == CKEDITOR.NODE_ELEMENT && node.getPrevious().isBlockBoundary() );\r
+                                                       if ( needBeginBr )\r
+                                                               docFrag.append( editor.document.createElement( 'br' ) );\r
+\r
+                                                       var needEndBr = node.getNext() &&\r
+                                                               !( node.getNext().type == CKEDITOR.NODE_ELEMENT && node.getNext().isBlockBoundary() );\r
+                                                       while ( node.getFirst() )\r
+                                                               node.getFirst().remove().appendTo( docFrag );\r
+\r
+                                                       if ( needEndBr )\r
+                                                               docFrag.append( editor.document.createElement( 'br' ) );\r
+\r
+                                                       docFrag.replace( node );\r
+                                                       firstTime = false;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       selection.selectBookmarks( bookmarks );\r
+                       editor.focus();\r
+               }\r
+       };\r
+\r
+       CKEDITOR.plugins.add( 'blockquote',\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       editor.addCommand( 'blockquote', commandObject );\r
+\r
+                       editor.ui.addButton( 'Blockquote',\r
+                               {\r
+                                       label : editor.lang.blockquote,\r
+                                       command : 'blockquote'\r
+                               } );\r
+\r
+                       editor.on( 'selectionChange', onSelectionChange );\r
+               },\r
+\r
+               requires : [ 'domiterator' ]\r
+       } );\r
+})();\r
diff --git a/_source/plugins/button/plugin.js b/_source/plugins/button/plugin.js
new file mode 100644 (file)
index 0000000..db982d5
--- /dev/null
@@ -0,0 +1,264 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'button',\r
+{\r
+       beforeInit : function( editor )\r
+       {\r
+               editor.ui.addHandler( CKEDITOR.UI_BUTTON, CKEDITOR.ui.button.handler );\r
+       }\r
+});\r
+\r
+/**\r
+ * Button UI element.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.UI_BUTTON = 1;\r
+\r
+/**\r
+ * Represents a button UI element. This class should not be called directly. To\r
+ * create new buttons use {@link CKEDITOR.ui.prototype.addButton} instead.\r
+ * @constructor\r
+ * @param {Object} definition The button definition.\r
+ * @example\r
+ */\r
+CKEDITOR.ui.button = function( definition )\r
+{\r
+       // Copy all definition properties to this object.\r
+       CKEDITOR.tools.extend( this, definition,\r
+               // Set defaults.\r
+               {\r
+                       title           : definition.label,\r
+                       className       : definition.className || ( definition.command && 'cke_button_' + definition.command ) || '',\r
+                       click           : definition.click || function( editor )\r
+                               {\r
+                                       editor.execCommand( definition.command );\r
+                               }\r
+               });\r
+\r
+       this._ = {};\r
+};\r
+\r
+/**\r
+ * Transforms a button definition in a {@link CKEDITOR.ui.button} instance.\r
+ * @type Object\r
+ * @example\r
+ */\r
+CKEDITOR.ui.button.handler =\r
+{\r
+       create : function( definition )\r
+       {\r
+               return new CKEDITOR.ui.button( definition );\r
+       }\r
+};\r
+\r
+CKEDITOR.ui.button.prototype =\r
+{\r
+       canGroup : true,\r
+\r
+       /**\r
+        * Renders the button.\r
+        * @param {CKEDITOR.editor} editor The editor instance which this button is\r
+        *              to be used by.\r
+        * @param {Array} output The output array to which append the HTML relative\r
+        *              to this button.\r
+        * @example\r
+        */\r
+       render : function( editor, output )\r
+       {\r
+               var env = CKEDITOR.env;\r
+\r
+               var id = this._.id = 'cke_' + CKEDITOR.tools.getNextNumber();\r
+               this._.editor = editor;\r
+\r
+               var instance =\r
+               {\r
+                       id : id,\r
+                       button : this,\r
+                       editor : editor,\r
+                       focus : function()\r
+                       {\r
+                               var element = CKEDITOR.document.getById( id );\r
+                               element.focus();\r
+                       },\r
+                       execute : function()\r
+                       {\r
+                               this.button.click( editor );\r
+                       }\r
+               };\r
+\r
+               var clickFn = CKEDITOR.tools.addFunction( instance.execute, instance );\r
+\r
+               var index = CKEDITOR.ui.button._.instances.push( instance ) - 1;\r
+\r
+               var classes = '';\r
+\r
+               // Get the command name.\r
+               var command = this.command;\r
+\r
+               if ( this.modes )\r
+               {\r
+                       editor.on( 'mode', function()\r
+                               {\r
+                                       this.setState( this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );\r
+                               }, this);\r
+               }\r
+               else if ( command )\r
+               {\r
+                       // Get the command instance.\r
+                       command = editor.getCommand( command );\r
+\r
+                       if ( command )\r
+                       {\r
+                               command.on( 'state', function()\r
+                                       {\r
+                                               this.setState( command.state );\r
+                                       }, this);\r
+\r
+                               classes += 'cke_' + (\r
+                                       command.state == CKEDITOR.TRISTATE_ON ? 'on' :\r
+                                       command.state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' :\r
+                                       'off' );\r
+                       }\r
+               }\r
+\r
+               if ( !command )\r
+                       classes += 'cke_off';\r
+\r
+               if ( this.className )\r
+                       classes += ' ' + this.className;\r
+\r
+               output.push(\r
+                       '<span class="cke_button">',\r
+                       '<a id="', id, '"' +\r
+                               ' class="', classes, '" href="javascript:void(\'', ( this.title || '' ).replace( "'", '' ), '\')"' +\r
+                               ' title="', this.title, '"' +\r
+                               ' tabindex="-1"' +\r
+                               ' hidefocus="true"' );\r
+\r
+               // Some browsers don't cancel key events in the keydown but in the\r
+               // keypress.\r
+               // TODO: Check if really needed for Gecko+Mac.\r
+               if ( env.opera || ( env.gecko && env.mac ) )\r
+               {\r
+                       output.push(\r
+                               ' onkeypress="return false;"' );\r
+               }\r
+\r
+               // With Firefox, we need to force the button to redraw, otherwise it\r
+               // will remain in the focus state.\r
+               if ( env.gecko )\r
+               {\r
+                       output.push(\r
+                               ' onblur="this.style.cssText = this.style.cssText;"' );\r
+               }\r
+\r
+               output.push(\r
+                               ' onkeydown="return CKEDITOR.ui.button._.keydown(', index, ', event);"' +\r
+                               ' onfocus="return CKEDITOR.ui.button._.focus(', index, ', event);"' +\r
+                               ' onclick="CKEDITOR.tools.callFunction(', clickFn, ', this); return false;">' +\r
+                                       '<span class="cke_icon"' );\r
+\r
+               if ( this.icon )\r
+               {\r
+                       var offset = ( this.iconOffset || 0 ) * -16;\r
+                       output.push( ' style="background-image:url(', CKEDITOR.getUrl( this.icon ), ');background-position:0 ' + offset + 'px;"' );\r
+               }\r
+\r
+               output.push(\r
+                                       '></span>' +\r
+                                       '<span class="cke_label">', this.label, '</span>' );\r
+\r
+               if ( this.hasArrow )\r
+               {\r
+                       output.push(\r
+                                       '<span class="cke_buttonarrow"></span>' );\r
+               }\r
+\r
+               output.push(\r
+                       '</a>',\r
+                       '</span>' );\r
+\r
+               if ( this.onRender )\r
+                       this.onRender();\r
+\r
+               return instance;\r
+       },\r
+\r
+       setState : function( state )\r
+       {\r
+               if ( this._.state == state )\r
+                       return;\r
+\r
+               var element = CKEDITOR.document.getById( this._.id );\r
+\r
+               if ( element )\r
+               {\r
+                       element.setState( state );\r
+\r
+                       var htmlTitle = this.title,\r
+                               unavailable = this._.editor.lang.common.unavailable,\r
+                               labelElement = element.getChild( 1 );\r
+\r
+                       if ( state == CKEDITOR.TRISTATE_DISABLED )\r
+                               htmlTitle = unavailable.replace( '%1', this.title );\r
+\r
+                       labelElement.setHtml( htmlTitle );\r
+               }\r
+\r
+               this._.state = state;\r
+       }\r
+};\r
+\r
+/**\r
+ * Handles a button click.\r
+ * @private\r
+ */\r
+CKEDITOR.ui.button._ =\r
+{\r
+       instances : [],\r
+\r
+       keydown : function( index, ev )\r
+       {\r
+               var instance = CKEDITOR.ui.button._.instances[ index ];\r
+\r
+               if ( instance.onkey )\r
+               {\r
+                       ev = new CKEDITOR.dom.event( ev );\r
+                       return ( instance.onkey( instance, ev.getKeystroke() ) !== false );\r
+               }\r
+       },\r
+\r
+       focus : function( index, ev )\r
+       {\r
+               var instance = CKEDITOR.ui.button._.instances[ index ],\r
+                       retVal;\r
+\r
+               if ( instance.onfocus )\r
+                       retVal = ( instance.onfocus( instance, new CKEDITOR.dom.event( ev ) ) !== false );\r
+\r
+               // FF2: prevent focus event been bubbled up to editor container, which caused unexpected editor focus.\r
+               if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 )\r
+                       ev.preventBubble();\r
+               return retVal;\r
+       }\r
+};\r
+\r
+/**\r
+ * Adds a button definition to the UI elements list.\r
+ * @param {String} The button name.\r
+ * @param {Object} The button definition.\r
+ * @example\r
+ * editorInstance.ui.addButton( 'MyBold',\r
+ *     {\r
+ *         label : 'My Bold',\r
+ *         command : 'bold'\r
+ *     });\r
+ */\r
+CKEDITOR.ui.prototype.addButton = function( name, definition )\r
+{\r
+       this.add( name, CKEDITOR.UI_BUTTON, definition );\r
+};\r
diff --git a/_source/plugins/clipboard/dialogs/paste.js b/_source/plugins/clipboard/dialogs/paste.js
new file mode 100644 (file)
index 0000000..a9e2c82
--- /dev/null
@@ -0,0 +1,167 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'paste', function( editor )\r
+{\r
+       var isCustomDomain = CKEDITOR.env.ie && document.domain != window.location.hostname;\r
+\r
+       return {\r
+               title : editor.lang.clipboard.title,\r
+\r
+               minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks ? 370 : 350,\r
+               minHeight : CKEDITOR.env.quirks ? 250 : 245,\r
+               htmlToLoad : '<!doctype html><script type="text/javascript">'\r
+                               + 'window.onload = function()'\r
+                               + '{'\r
+                                       + 'if ( ' + CKEDITOR.env.ie + ' ) '\r
+                                               + 'document.body.contentEditable = "true";'\r
+                                       + 'else '\r
+                                               + 'document.designMode = "on";'\r
+                                       + 'var iframe = new window.parent.CKEDITOR.dom.element( frameElement );'\r
+                                       + 'var dialog = iframe.getCustomData( "dialog" );'\r
+                     + ''\r
+                                       + 'iframe.getFrameDocument().on( "keydown", function( e )\\r
+                                               {\\r
+                                                       if ( e.data.getKeystroke() == 27 )\\r
+                                                               dialog.hide();\\r
+                                               });'\r
+                               + '};'\r
+                               + '</script><style>body { margin: 3px; height: 95%; } </style><body></body>',\r
+\r
+               onShow : function()\r
+               {\r
+                       if ( CKEDITOR.env.ie )\r
+                               this.getParentEditor().document.getBody().$.contentEditable = 'false';\r
+\r
+                       // FIREFOX BUG: Force the browser to render the dialog to make the to-be-\r
+                       // inserted iframe editable. (#3366)\r
+                       this.parts.dialog.$.offsetHeight;\r
+\r
+                       var container = this.getContentElement( 'general', 'editing_area' ).getElement(),\r
+                               iframe = CKEDITOR.dom.element.createFromHtml( '<iframe src="javascript:void(0)" frameborder="0" allowtransparency="1"></iframe>' );\r
+\r
+                       var lang = this.getParentEditor().lang;\r
+\r
+                       iframe.setStyles(\r
+                               {\r
+                                       width : '346px',\r
+                                       height : '130px',\r
+                                       'background-color' : 'white',\r
+                                       border : '1px solid black'\r
+                               } );\r
+                       iframe.setCustomData( 'dialog', this );\r
+\r
+                       var accTitle = lang.editorTitle.replace( '%1', lang.clipboard.title );\r
+\r
+                       if ( CKEDITOR.env.ie )\r
+                               container.setHtml( '<legend style="position:absolute;top:-1000000px;left:-1000000px;">'\r
+                                               + CKEDITOR.tools.htmlEncode( accTitle )\r
+                                               + '</legend>' );\r
+                       else\r
+                       {\r
+                               container.setHtml( '' );\r
+                               container.setAttributes(\r
+                                       {\r
+                                               role : 'region',\r
+                                               title : accTitle\r
+                                       } );\r
+                               iframe.setAttributes(\r
+                                       {\r
+                                               role : 'region',\r
+                                               title : ' '\r
+                                       } );\r
+                       }\r
+                       container.append( iframe );\r
+                       if ( CKEDITOR.env.ie )\r
+                               container.setStyle( 'height', ( iframe.$.offsetHeight + 2 ) + 'px' );\r
+\r
+                       if ( isCustomDomain )\r
+                       {\r
+                               CKEDITOR._cke_htmlToLoad = this.definition.htmlToLoad;\r
+                               iframe.setAttribute( 'src',\r
+                                       'javascript:void( (function(){' +\r
+                                                  'document.open();' +\r
+                                                  'document.domain="' + document.domain + '";' +\r
+                                                  'document.write( window.parent.CKEDITOR._cke_htmlToLoad );' +\r
+                                                  'delete window.parent.CKEDITOR._cke_htmlToLoad;' +\r
+                                                  'document.close();' +\r
+                                       '})() )' );\r
+                       }\r
+                       else\r
+                       {\r
+                               var doc = iframe.$.contentWindow.document;\r
+                               doc.open();\r
+                               doc.write( this.definition.htmlToLoad );\r
+                               doc.close();\r
+                       }\r
+               },\r
+\r
+               onHide : function()\r
+               {\r
+                       if ( CKEDITOR.env.ie )\r
+                               this.getParentEditor().document.getBody().$.contentEditable = 'true';\r
+               },\r
+\r
+               onLoad : function()\r
+               {\r
+                       if ( ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) && editor.lang.dir == 'rtl' )\r
+                               this.parts.contents.setStyle( 'overflow', 'hidden' );\r
+               },\r
+\r
+               onOk : function()\r
+               {\r
+                       var container = this.getContentElement( 'general', 'editing_area' ).getElement(),\r
+                               iframe = container.getElementsByTag( 'iframe' ).getItem( 0 ),\r
+                               editor = this.getParentEditor(),\r
+                               html = iframe.$.contentWindow.document.body.innerHTML;\r
+\r
+                       setTimeout( function(){\r
+                               editor.insertHtml( html );\r
+                       }, 0 );\r
+\r
+               },\r
+\r
+               contents : [\r
+                       {\r
+                               id : 'general',\r
+                               label : editor.lang.common.generalTab,\r
+                               elements : [\r
+                                       {\r
+                                               type : 'html',\r
+                                               id : 'securityMsg',\r
+                                               html : '<div style="white-space:normal;width:340px;">' + editor.lang.clipboard.securityMsg + '</div>'\r
+                                       },\r
+                                       {\r
+                                               type : 'html',\r
+                                               id : 'pasteMsg',\r
+                                               html : '<div style="white-space:normal;width:340px;">'+editor.lang.clipboard.pasteMsg +'</div>'\r
+                                       },\r
+                                       {\r
+                                               type : 'html',\r
+                                               id : 'editing_area',\r
+                                               style : 'width: 100%; height: 100%;',\r
+                                               html : '<fieldset></fieldset>',\r
+                                               focus : function()\r
+                                               {\r
+                                                       var div = this.getElement();\r
+                                                       var iframe = div.getElementsByTag( 'iframe' );\r
+                                                       if ( iframe.count() < 1 )\r
+                                                               return;\r
+                                                       iframe = iframe.getItem( 0 );\r
+\r
+                                                       // #3291 : JAWS needs the 500ms delay to detect that the editor iframe\r
+                                                       // iframe is no longer editable. So that it will put the focus into the\r
+                                                       // Paste from Word dialog's editable area instead.\r
+                                                       setTimeout( function()\r
+                                                       {\r
+                                                               iframe.$.contentWindow.focus();\r
+                                                       }, 500 );\r
+                                               }\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+});\r
diff --git a/_source/plugins/clipboard/plugin.js b/_source/plugins/clipboard/plugin.js
new file mode 100644 (file)
index 0000000..c063b41
--- /dev/null
@@ -0,0 +1,208 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Clipboard support\r
+ */\r
+\r
+(function()\r
+{\r
+       // Tries to execute any of the paste, cut or copy commands in IE. Returns a\r
+       // boolean indicating that the operation succeeded.\r
+       var execIECommand = function( editor, command )\r
+       {\r
+               var doc = editor.document,\r
+                       body = doc.getBody();\r
+\r
+               var     enabled = false;\r
+               var onExec = function()\r
+               {\r
+                       enabled = true;\r
+               };\r
+\r
+               // The following seems to be the only reliable way to detect that\r
+               // clipboard commands are enabled in IE. It will fire the\r
+               // onpaste/oncut/oncopy events only if the security settings allowed\r
+               // the command to execute.\r
+               body.on( command, onExec );\r
+\r
+               doc.$.execCommand( command );\r
+\r
+               body.removeListener( command, onExec );\r
+\r
+               return enabled;\r
+       };\r
+\r
+       // Attempts to execute the Cut and Copy operations.\r
+       var tryToCutCopy =\r
+               CKEDITOR.env.ie ?\r
+                       function( editor, type )\r
+                       {\r
+                               return execIECommand( editor, type );\r
+                       }\r
+               :               // !IE.\r
+                       function( editor, type )\r
+                       {\r
+                               try\r
+                               {\r
+                                       // Other browsers throw an error if the command is disabled.\r
+                                       return editor.document.$.execCommand( type );\r
+                               }\r
+                               catch( e )\r
+                               {\r
+                                       return false;\r
+                               }\r
+                       };\r
+\r
+       // A class that represents one of the cut or copy commands.\r
+       var cutCopyCmd = function( type )\r
+       {\r
+               this.type = type;\r
+               this.canUndo = ( this.type == 'cut' );          // We can't undo copy to clipboard.\r
+       };\r
+\r
+       cutCopyCmd.prototype =\r
+       {\r
+               exec : function( editor, data )\r
+               {\r
+                       var success = tryToCutCopy( editor, this.type );\r
+\r
+                       if ( !success )\r
+                               alert( editor.lang.clipboard[ this.type + 'Error' ] );          // Show cutError or copyError.\r
+\r
+                       return success;\r
+               }\r
+       };\r
+\r
+       // Paste command.\r
+       var pasteCmd =\r
+               CKEDITOR.env.ie ?\r
+                       {\r
+                               exec : function( editor, data )\r
+                               {\r
+                                       // Prevent IE from pasting at the begining of the document.\r
+                                       editor.focus();\r
+\r
+                                       if ( !editor.fire( 'beforePaste' )\r
+                                               && !execIECommand( editor, 'paste' ) )\r
+                                       {\r
+                                                       editor.openDialog( 'paste' );\r
+                                       }\r
+                               }\r
+                       }\r
+               :\r
+                       {\r
+                               exec : function( editor )\r
+                               {\r
+                                       try\r
+                                       {\r
+                                               if ( !editor.fire( 'beforePaste' )\r
+                                                       && !editor.document.$.execCommand( 'Paste', false, null ) )\r
+                                               {\r
+                                                       throw 0;\r
+                                               }\r
+                                       }\r
+                                       catch ( e )\r
+                                       {\r
+                                               // Open the paste dialog.\r
+                                               editor.openDialog( 'paste' );\r
+                                       }\r
+                               }\r
+                       };\r
+\r
+       // Listens for some clipboard related keystrokes, so they get customized.\r
+       var onKey = function( event )\r
+       {\r
+               switch ( event.data.keyCode )\r
+               {\r
+                       // Paste\r
+                       case CKEDITOR.CTRL + 86 :               // CTRL+V\r
+                       case CKEDITOR.SHIFT + 45 :              // SHIFT+INS\r
+\r
+                               var editor = this;\r
+                               editor.fire( 'saveSnapshot' );          // Save before paste\r
+\r
+                               if ( editor.fire( 'beforePaste' ) )\r
+                                       event.cancel();\r
+\r
+                               setTimeout( function()\r
+                                       {\r
+                                               editor.fire( 'saveSnapshot' );          // Save after paste\r
+                                       }, 0 );\r
+                               return;\r
+\r
+                       // Cut\r
+                       case CKEDITOR.CTRL + 88 :               // CTRL+X\r
+                       case CKEDITOR.SHIFT + 46 :              // SHIFT+DEL\r
+\r
+                               // Save Undo snapshot.\r
+                               editor = this;\r
+                               editor.fire( 'saveSnapshot' );          // Save before paste\r
+                               setTimeout( function()\r
+                                       {\r
+                                               editor.fire( 'saveSnapshot' );          // Save after paste\r
+                                       }, 0 );\r
+               }\r
+       };\r
+\r
+       // Register the plugin.\r
+       CKEDITOR.plugins.add( 'clipboard',\r
+               {\r
+                       init : function( editor )\r
+                       {\r
+                               function addButtonCommand( buttonName, commandName, command, ctxMenuOrder )\r
+                               {\r
+                                       var lang = editor.lang[ commandName ];\r
+\r
+                                       editor.addCommand( commandName, command );\r
+                                       editor.ui.addButton( buttonName,\r
+                                               {\r
+                                                       label : lang,\r
+                                                       command : commandName\r
+                                               });\r
+\r
+                                       // If the "menu" plugin is loaded, register the menu item.\r
+                                       if ( editor.addMenuItems )\r
+                                       {\r
+                                               editor.addMenuItem( commandName,\r
+                                                       {\r
+                                                               label : lang,\r
+                                                               command : commandName,\r
+                                                               group : 'clipboard',\r
+                                                               order : ctxMenuOrder\r
+                                                       });\r
+                                       }\r
+                               }\r
+\r
+                               addButtonCommand( 'Cut', 'cut', new cutCopyCmd( 'cut' ), 1 );\r
+                               addButtonCommand( 'Copy', 'copy', new cutCopyCmd( 'copy' ), 4 );\r
+                               addButtonCommand( 'Paste', 'paste', pasteCmd, 8 );\r
+\r
+                               CKEDITOR.dialog.add( 'paste', CKEDITOR.getUrl( this.path + 'dialogs/paste.js' ) );\r
+\r
+                               editor.on( 'key', onKey, editor );\r
+\r
+                               // If the "contextmenu" plugin is loaded, register the listeners.\r
+                               if ( editor.contextMenu )\r
+                               {\r
+                                       function stateFromNamedCommand( command )\r
+                                       {\r
+                                               return editor.document.$.queryCommandEnabled( command ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED;\r
+                                       }\r
+\r
+                                       editor.contextMenu.addListener( function()\r
+                                               {\r
+                                                       return {\r
+                                                               cut : stateFromNamedCommand( 'Cut' ),\r
+\r
+                                                               // Browser bug: 'Cut' has the correct states for both Copy and Cut.\r
+                                                               copy : stateFromNamedCommand( 'Cut' ),\r
+                                                               paste : CKEDITOR.env.webkit ? CKEDITOR.TRISTATE_OFF : stateFromNamedCommand( 'Paste' )\r
+                                                       };\r
+                                               });\r
+                               }\r
+                       }\r
+               });\r
+})();\r
diff --git a/_source/plugins/colorbutton/plugin.js b/_source/plugins/colorbutton/plugin.js
new file mode 100644 (file)
index 0000000..747716e
--- /dev/null
@@ -0,0 +1,202 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'colorbutton',\r
+{\r
+       requires : [ 'panelbutton', 'floatpanel', 'styles' ],\r
+\r
+       init : function( editor )\r
+       {\r
+               var config = editor.config,\r
+                       lang = editor.lang.colorButton;\r
+\r
+               var clickFn;\r
+\r
+               if ( !CKEDITOR.env.hc )\r
+               {\r
+                       addButton( 'TextColor', 'fore', lang.textColorTitle );\r
+                       addButton( 'BGColor', 'back', lang.bgColorTitle );\r
+               }\r
+\r
+               function addButton( name, type, title )\r
+               {\r
+                       editor.ui.add( name, CKEDITOR.UI_PANELBUTTON,\r
+                               {\r
+                                       label : title,\r
+                                       title : title,\r
+                                       className : 'cke_button_' + name.toLowerCase(),\r
+                                       modes : { wysiwyg : 1 },\r
+\r
+                                       panel :\r
+                                       {\r
+                                               css : [ CKEDITOR.getUrl( editor.skinPath + 'editor.css' ) ]\r
+                                       },\r
+\r
+                                       onBlock : function( panel, blockName )\r
+                                       {\r
+                                               var block = panel.addBlock( blockName );\r
+                                               block.autoSize = true;\r
+                                               block.element.addClass( 'cke_colorblock' );\r
+                                               block.element.setHtml( renderColors( panel, type ) );\r
+\r
+                                               var keys = block.keys;\r
+                                               keys[ 39 ]      = 'next';                                       // ARROW-RIGHT\r
+                                               keys[ 9 ]       = 'next';                                       // TAB\r
+                                               keys[ 37 ]      = 'prev';                                       // ARROW-LEFT\r
+                                               keys[ CKEDITOR.SHIFT + 9 ]      = 'prev';       // SHIFT + TAB\r
+                                               keys[ 32 ]      = 'click';                                      // SPACE\r
+                                       }\r
+                               });\r
+               }\r
+\r
+\r
+               function renderColors( panel, type )\r
+               {\r
+                       var output = [],\r
+                               colors = config.colorButton_colors.split( ',' );\r
+\r
+                       var clickFn = CKEDITOR.tools.addFunction( function( color, type )\r
+                               {\r
+                                       if ( color == '?' )\r
+                                       {\r
+                                               // TODO : Implement the colors dialog.\r
+                                               // editor.openDialog( '' );\r
+                                               return;\r
+                                       }\r
+\r
+                                       editor.focus();\r
+\r
+                                       panel.hide();\r
+\r
+                                       var style = new CKEDITOR.style( config['colorButton_' + type + 'Style'], color && { color : color } );\r
+\r
+                                       editor.fire( 'saveSnapshot' );\r
+                                       if ( color )\r
+                                               style.apply( editor.document );\r
+                                       else\r
+                                               style.remove( editor.document );\r
+                                       editor.fire( 'saveSnapshot' );\r
+                               });\r
+\r
+                       // Render the "Automatic" button.\r
+                       output.push(\r
+                               '<a class="cke_colorauto" _cke_focus=1 hidefocus=true' +\r
+                                       ' title="', lang.auto, '"' +\r
+                                       ' onclick="CKEDITOR.tools.callFunction(', clickFn, ',null,\'', type, '\');return false;"' +\r
+                                       ' href="javascript:void(\'', lang.auto, '\')">' +\r
+                                       '<table cellspacing=0 cellpadding=0 width="100%">' +\r
+                                               '<tr>' +\r
+                                                       '<td>' +\r
+                                                               '<span class="cke_colorbox" style="background-color:#000"></span>' +\r
+                                                       '</td>' +\r
+                                                       '<td colspan=7 align=center>',\r
+                                                               lang.auto,\r
+                                                       '</td>' +\r
+                                               '</tr>' +\r
+                                       '</table>' +\r
+                               '</a>' +\r
+                               '<table cellspacing=0 cellpadding=0 width="100%">' );\r
+\r
+                       // Render the color boxes.\r
+                       for ( var i = 0 ; i < colors.length ; i++ )\r
+                       {\r
+                               if ( ( i % 8 ) === 0 )\r
+                                       output.push( '</tr><tr>' );\r
+\r
+                               var colorCode = colors[ i ];\r
+                               var colorLabel = editor.lang.colors[ colorCode ] || colorCode;\r
+                               output.push(\r
+                                       '<td>' +\r
+                                               '<a class="cke_colorbox" _cke_focus=1 hidefocus=true' +\r
+                                                       ' title="', colorLabel, '"' +\r
+                                                       ' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'#', colorCode, '\',\'', type, '\'); return false;"' +\r
+                                                       ' href="javascript:void(\'', colorLabel, '\')">' +\r
+                                                       '<span class="cke_colorbox" style="background-color:#', colorCode, '"></span>' +\r
+                                               '</a>' +\r
+                                       '</td>' );\r
+                       }\r
+\r
+                       // Render the "More Colors" button.\r
+                       if ( config.colorButton_enableMore )\r
+                       {\r
+                               output.push(\r
+                                       '</tr>' +\r
+                                       '<tr>' +\r
+                                               '<td colspan=8 align=center>' +\r
+                                                       '<a class="cke_colormore" _cke_focus=1 hidefocus=true' +\r
+                                                               ' title="', lang.more, '"' +\r
+                                                               ' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'?\',\'', type, '\');return false;"' +\r
+                                                               ' href="javascript:void(\'', lang.more, '\')">',\r
+                                                               lang.more,\r
+                                                       '</a>' +\r
+                                               '</td>' );      // It is later in the code.\r
+                       }\r
+\r
+                       output.push( '</tr></table>' );\r
+\r
+                       return output.join( '' );\r
+               }\r
+       }\r
+});\r
+\r
+/**\r
+ * Whether to enable the "More Colors..." button in the color selectors.\r
+ * @default false\r
+ * @type Boolean\r
+ * @example\r
+ * config.colorButton_enableMore = false;\r
+ */\r
+CKEDITOR.config.colorButton_enableMore = false;\r
+\r
+/**\r
+ * Defines the colors to be displayed in the color selectors. It's a string\r
+ * containing the hexadecimal notation for HTML colors, without the "#" prefix.\r
+ * @type String\r
+ * @default '000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF'\r
+ * @example\r
+ * // Brazil colors only.\r
+ * config.colorButton_colors = '00923E,F8C100,28166F';\r
+ */\r
+CKEDITOR.config.colorButton_colors =\r
+       '000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,' +\r
+       'B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,' +\r
+       'F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,' +\r
+       'FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,' +\r
+       'FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF';\r
+\r
+/**\r
+ * Holds the style definition to be used to apply the text foreground color.\r
+ * @type Object\r
+ * @example\r
+ * // This is basically the default setting value.\r
+ * config.colorButton_foreStyle =\r
+ *     {\r
+ *         element : 'span',\r
+ *         styles : { 'color' : '#(color)' }\r
+ *     };\r
+ */\r
+CKEDITOR.config.colorButton_foreStyle =\r
+       {\r
+               element         : 'span',\r
+               styles          : { 'color' : '#(color)' },\r
+               overrides       : [ { element : 'font', attributes : { 'color' : null } } ]\r
+       };\r
+\r
+/**\r
+ * Holds the style definition to be used to apply the text background color.\r
+ * @type Object\r
+ * @example\r
+ * // This is basically the default setting value.\r
+ * config.colorButton_backStyle =\r
+ *     {\r
+ *         element : 'span',\r
+ *         styles : { 'background-color' : '#(color)' }\r
+ *     };\r
+ */\r
+CKEDITOR.config.colorButton_backStyle =\r
+       {\r
+               element         : 'span',\r
+               styles          : { 'background-color' : '#(color)' }\r
+       };\r
diff --git a/_source/plugins/contextmenu/plugin.js b/_source/plugins/contextmenu/plugin.js
new file mode 100644 (file)
index 0000000..25b794d
--- /dev/null
@@ -0,0 +1,178 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'contextmenu',\r
+{\r
+       requires : [ 'menu' ],\r
+\r
+       beforeInit : function( editor )\r
+       {\r
+               editor.contextMenu = new CKEDITOR.plugins.contextMenu( editor );\r
+\r
+               editor.addCommand( 'contextMenu',\r
+                       {\r
+                               exec : function()\r
+                                       {\r
+                                               editor.contextMenu.show();\r
+                                       }\r
+                       });\r
+       }\r
+});\r
+\r
+CKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass(\r
+{\r
+       $ : function( editor )\r
+       {\r
+               this.id = 'cke_' + CKEDITOR.tools.getNextNumber();\r
+               this.editor = editor;\r
+               this._.listeners = [];\r
+               this._.functionId = CKEDITOR.tools.addFunction( function( commandName )\r
+                       {\r
+                               this._.panel.hide();\r
+                               editor.focus();\r
+                               editor.execCommand( commandName );\r
+                       },\r
+                       this);\r
+       },\r
+\r
+       _ :\r
+       {\r
+               onMenu : function( offsetParent, corner, offsetX, offsetY )\r
+               {\r
+                       var menu = this._.menu,\r
+                               editor = this.editor;\r
+\r
+                       if ( menu )\r
+                       {\r
+                               menu.hide();\r
+                               menu.removeAll();\r
+                       }\r
+                       else\r
+                       {\r
+                               menu = this._.menu = new CKEDITOR.menu( editor );\r
+                               menu.onClick = CKEDITOR.tools.bind( function( item )\r
+                               {\r
+                                       var noUnlock = true;\r
+                                       menu.hide();\r
+\r
+                                       if ( CKEDITOR.env.ie )\r
+                                               menu.onEscape();\r
+\r
+                                       if ( item.onClick )\r
+                                               item.onClick();\r
+                                       else if ( item.command )\r
+                                               editor.execCommand( item.command );\r
+\r
+                                       noUnlock = false;\r
+                               }, this );\r
+\r
+                               menu.onEscape = function()\r
+                               {\r
+                                       editor.focus();\r
+\r
+                                       if ( CKEDITOR.env.ie )\r
+                                               editor.getSelection().unlock( true );\r
+                               };\r
+                       }\r
+\r
+                       var listeners = this._.listeners,\r
+                               includedItems = [];\r
+\r
+                       var selection = this.editor.getSelection(),\r
+                               element = selection && selection.getStartElement();\r
+\r
+                       // Lock the selection in IE, so it can be restored when closing the\r
+                       // menu.\r
+                       if ( CKEDITOR.env.ie )\r
+                               selection.lock();\r
+\r
+                       menu.onHide = CKEDITOR.tools.bind( function()\r
+                               {\r
+                                       menu.onHide = null;\r
+\r
+                                       if ( CKEDITOR.env.ie )\r
+                                               editor.getSelection().unlock();\r
+\r
+                                       this.onHide && this.onHide();\r
+                               },\r
+                               this );\r
+\r
+                       // Call all listeners, filling the list of items to be displayed.\r
+                       for ( var i = 0 ; i < listeners.length ; i++ )\r
+                       {\r
+                               var listenerItems = listeners[ i ]( element, selection );\r
+\r
+                               if ( listenerItems )\r
+                               {\r
+                                       for ( var itemName in listenerItems )\r
+                                       {\r
+                                               var item = this.editor.getMenuItem( itemName );\r
+\r
+                                               if ( item )\r
+                                               {\r
+                                                       item.state = listenerItems[ itemName ];\r
+                                                       menu.add( item );\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       menu.show( offsetParent, corner || ( editor.lang.dir == 'rtl' ? 2 : 1 ), offsetX, offsetY );\r
+               }\r
+       },\r
+\r
+       proto :\r
+       {\r
+               addTarget : function( element )\r
+               {\r
+                       element.on( 'contextmenu', function( event )\r
+                               {\r
+                                       var domEvent = event.data;\r
+\r
+                                       // Cancel the browser context menu.\r
+                                       domEvent.preventDefault();\r
+\r
+                                       var offsetParent = domEvent.getTarget().getDocument().getDocumentElement(),\r
+                                               offsetX = domEvent.$.clientX,\r
+                                               offsetY = domEvent.$.clientY;\r
+\r
+                                       CKEDITOR.tools.setTimeout( function()\r
+                                               {\r
+                                                       this._.onMenu( offsetParent, null, offsetX, offsetY );\r
+                                               },\r
+                                               0, this );\r
+                               },\r
+                               this );\r
+               },\r
+\r
+               addListener : function( listenerFn )\r
+               {\r
+                       this._.listeners.push( listenerFn );\r
+               },\r
+\r
+               show : function( offsetParent, corner, offsetX, offsetY )\r
+               {\r
+                       this.editor.focus();\r
+                       this._.onMenu( offsetParent || CKEDITOR.document.getDocumentElement(), corner, offsetX || 0, offsetY || 0 );\r
+               }\r
+       }\r
+});\r
+\r
+// Fix the "contextmenu" event for DOM elements.\r
+// We may do this if we identify browsers that don't support the context meny\r
+// event on element directly. Leaving here for reference.\r
+//if ( <specific browsers> )\r
+//{\r
+//     CKEDITOR.dom.element.prototype.on = CKEDITOR.tools.override( CKEDITOR.dom.element.prototype.on, function( originalOn )\r
+//             {\r
+//                     return function( eventName )\r
+//                             {\r
+//                                     if ( eventName != 'contextmenu' )\r
+//                                             return originalOn.apply( this, arguments );\r
+//\r
+//                                     // TODO : Implement the fix.\r
+//                             };\r
+//             });\r
+//}\r
diff --git a/_source/plugins/dialog/dialogDefinition.js b/_source/plugins/dialog/dialogDefinition.js
new file mode 100644 (file)
index 0000000..992f969
--- /dev/null
@@ -0,0 +1,315 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Defines the "virtual" dialog, dialog content and dialog button\r
+ * definition classes.\r
+ */\r
+\r
+/**\r
+ * This class is not really part of the API. It just illustrates the properties\r
+ * that developers can use to define and create dialogs.\r
+ * @name CKEDITOR.dialog.dialogDefinition\r
+ * @constructor\r
+ * @example\r
+ * // There is no constructor for this class, the user just has to define an\r
+ * // object with the appropriate properties.\r
+ *\r
+ * CKEDITOR.dialog.add( 'testOnly', function( editor )\r
+ *       {\r
+ *           return {\r
+ *               title : 'Test Dialog',\r
+ *               resizable : CKEDITOR.DIALOG_RESIZE_BOTH,\r
+ *               minWidth : 500,\r
+ *               minHeight : 400,\r
+ *               contents : [\r
+ *                   {\r
+ *                       id : 'tab1',\r
+ *                       label : 'First Tab',\r
+ *                       title : 'First Tab Title',\r
+ *                       accessKey : 'Q',\r
+ *                       elements : [\r
+ *                           {\r
+ *                               type : 'text',\r
+ *                               label : 'Test Text 1',\r
+ *                               id : 'testText1',\r
+ *                               'default' : 'hello world!'\r
+ *                           }\r
+ *                       ]\r
+ *                    }\r
+ *               ]\r
+ *           };\r
+ *       });\r
+ */\r
+\r
+/**\r
+ * The dialog title, displayed in the dialog's header. Required.\r
+ * @name CKEDITOR.dialog.dialogDefinition.prototype.title\r
+ * @field\r
+ * @type String\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * How the dialog can be resized, must be one of the four contents defined below.\r
+ * <br /><br />\r
+ * <strong>CKEDITOR.DIALOG_RESIZE_NONE</strong><br />\r
+ * <strong>CKEDITOR.DIALOG_RESIZE_WIDTH</strong><br />\r
+ * <strong>CKEDITOR.DIALOG_RESIZE_HEIGHT</strong><br />\r
+ * <strong>CKEDITOR.DIALOG_RESIZE_BOTH</strong><br />\r
+ * @name CKEDITOR.dialog.dialogDefinition.prototype.resizable\r
+ * @field\r
+ * @type Number\r
+ * @default CKEDITOR.DIALOG_RESIZE_NONE\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The minimum width of the dialog, in pixels.\r
+ * @name CKEDITOR.dialog.dialogDefinition.prototype.minWidth\r
+ * @field\r
+ * @type Number\r
+ * @default 600\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The minimum height of the dialog, in pixels.\r
+ * @name CKEDITOR.dialog.dialogDefinition.prototype.minHeight\r
+ * @field\r
+ * @type Number\r
+ * @default 400\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The buttons in the dialog, defined as an array of\r
+ * {@link CKEDITOR.dialog.buttonDefinition} objects.\r
+ * @name CKEDITOR.dialog.dialogDefinition.prototype.buttons\r
+ * @field\r
+ * @type Array\r
+ * @default [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ]\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The contents in the dialog, defined as an array of\r
+ * {@link CKEDITOR.dialog.contentDefinition} objects. Required.\r
+ * @name CKEDITOR.dialog.dialogDefinition.prototype.contents\r
+ * @field\r
+ * @type Array\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The function to execute when OK is pressed.\r
+ * @name CKEDITOR.dialog.dialogDefinition.prototype.onOk\r
+ * @field\r
+ * @type Function\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The function to execute when Cancel is pressed.\r
+ * @name CKEDITOR.dialog.dialogDefinition.prototype.onCancel\r
+ * @field\r
+ * @type Function\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The function to execute when the dialog is displayed for the first time.\r
+ * @name CKEDITOR.dialog.dialogDefinition.prototype.onLoad\r
+ * @field\r
+ * @type Function\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * This class is not really part of the API. It just illustrates the properties\r
+ * that developers can use to define and create dialog content pages.\r
+ * @name CKEDITOR.dialog.contentDefinition\r
+ * @constructor\r
+ * @example\r
+ * // There is no constructor for this class, the user just has to define an\r
+ * // object with the appropriate properties.\r
+ */\r
+\r
+/**\r
+ * The id of the content page.\r
+ * @name CKEDITOR.dialog.contentDefinition.prototype.id\r
+ * @field\r
+ * @type String\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The tab label of the content page.\r
+ * @name CKEDITOR.dialog.contentDefinition.prototype.label\r
+ * @field\r
+ * @type String\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The popup message of the tab label.\r
+ * @name CKEDITOR.dialog.contentDefinition.prototype.title\r
+ * @field\r
+ * @type String\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The CTRL hotkey for switching to the tab.\r
+ * @name CKEDITOR.dialog.contentDefinition.prototype.accessKey\r
+ * @field\r
+ * @type String\r
+ * @example\r
+ * contentDefinition.accessKey = 'Q';  // Switch to this page when CTRL-Q is pressed.\r
+ */\r
+\r
+/**\r
+ * The UI elements contained in this content page, defined as an array of\r
+ * {@link CKEDITOR.dialog.uiElementDefinition} objects.\r
+ * @name CKEDITOR.dialog.contentDefinition.prototype.elements\r
+ * @field\r
+ * @type Array\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * This class is not really part of the API. It just illustrates the properties\r
+ * that developers can use to define and create dialog buttons.\r
+ * @name CKEDITOR.dialog.buttonDefinition\r
+ * @constructor\r
+ * @example\r
+ * // There is no constructor for this class, the user just has to define an\r
+ * // object with the appropriate properties.\r
+ */\r
+\r
+/**\r
+ * The id of the dialog button. Required.\r
+ * @name CKEDITOR.dialog.buttonDefinition.prototype.id\r
+ * @type String\r
+ * @field\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The label of the dialog button. Required.\r
+ * @name CKEDITOR.dialog.buttonDefinition.prototype.label\r
+ * @type String\r
+ * @field\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The popup message of the dialog button.\r
+ * @name CKEDITOR.dialog.buttonDefinition.prototype.title\r
+ * @type String\r
+ * @field\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The CTRL hotkey for the button.\r
+ * @name CKEDITOR.dialog.buttonDefinition.prototype.accessKey\r
+ * @type String\r
+ * @field\r
+ * @example\r
+ * exitButton.accessKey = 'X';         // Button will be pressed when user presses CTRL-X\r
+ */\r
+\r
+/**\r
+ * Whether the button is disabled.\r
+ * @name CKEDITOR.dialog.buttonDefinition.prototype.disabled\r
+ * @type Boolean\r
+ * @field\r
+ * @default false\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The function to execute when the button is clicked.\r
+ * @name CKEDITOR.dialog.buttonDefinition.prototype.onClick\r
+ * @type Function\r
+ * @field\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * This class is not really part of the API. It just illustrates the properties\r
+ * that developers can use to define and create dialog UI elements.\r
+ * @name CKEDITOR.dialog.uiElementDefinition\r
+ * @constructor\r
+ * @see CKEDITOR.ui.dialog.uiElement\r
+ * @example\r
+ * // There is no constructor for this class, the user just has to define an\r
+ * // object with the appropriate properties.\r
+ */\r
+\r
+/**\r
+ * The id of the UI element.\r
+ * @name CKEDITOR.dialog.uiElementDefinition.prototype.id\r
+ * @field\r
+ * @type String\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The type of the UI element. Required.\r
+ * @name CKEDITOR.dialog.uiElementDefinition.prototype.type\r
+ * @field\r
+ * @type String\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * The popup label of the UI element.\r
+ * @name CKEDITOR.dialog.uiElementDefinition.prototype.title\r
+ * @field\r
+ * @type String\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * CSS class names to append to the UI element.\r
+ * @name CKEDITOR.dialog.uiElementDefinition.prototype.className\r
+ * @field\r
+ * @type String\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * Inline CSS classes to append to the UI element.\r
+ * @name CKEDITOR.dialog.uiElementDefinition.prototype.style\r
+ * @field\r
+ * @type String\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * Function to execute the first time the UI element is displayed.\r
+ * @name CKEDITOR.dialog.uiElementDefinition.prototype.onLoad\r
+ * @field\r
+ * @type Function\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * Function to execute whenever the UI element's parent dialog is displayed.\r
+ * @name CKEDITOR.dialog.uiElementDefinition.prototype.onShow\r
+ * @field\r
+ * @type Function\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * Function to execute whenever the UI element's parent dialog is closed.\r
+ * @name CKEDITOR.dialog.uiElementDefinition.prototype.onHide\r
+ * @field\r
+ * @type Function\r
+ * @example\r
+ */\r
diff --git a/_source/plugins/dialog/plugin.js b/_source/plugins/dialog/plugin.js
new file mode 100644 (file)
index 0000000..c052120
--- /dev/null
@@ -0,0 +1,2742 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview The floating dialog plugin.\r
+ */\r
+\r
+CKEDITOR.plugins.add( 'dialog',\r
+       {\r
+               requires : [ 'dialogui' ]\r
+       });\r
+\r
+/**\r
+ * No resize for this dialog.\r
+ * @constant\r
+ */\r
+CKEDITOR.DIALOG_RESIZE_NONE = 0;\r
+\r
+/**\r
+ * Only allow horizontal resizing for this dialog, disable vertical resizing.\r
+ * @constant\r
+ */\r
+CKEDITOR.DIALOG_RESIZE_WIDTH = 1;\r
+\r
+/**\r
+ * Only allow vertical resizing for this dialog, disable horizontal resizing.\r
+ * @constant\r
+ */\r
+CKEDITOR.DIALOG_RESIZE_HEIGHT = 2;\r
+\r
+/*\r
+ * Allow the dialog to be resized in both directions.\r
+ * @constant\r
+ */\r
+CKEDITOR.DIALOG_RESIZE_BOTH = 3;\r
+\r
+(function()\r
+{\r
+       function isTabVisible( tabId )\r
+       {\r
+               return !!this._.tabs[ tabId ][ 0 ].$.offsetHeight;\r
+       }\r
+\r
+       function getPreviousVisibleTab()\r
+       {\r
+               var tabId = this._.currentTabId,\r
+                       length = this._.tabIdList.length,\r
+                       tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId ) + length;\r
+\r
+               for ( var i = tabIndex - 1 ; i > tabIndex - length ; i-- )\r
+               {\r
+                       if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) )\r
+                               return this._.tabIdList[ i % length ];\r
+               }\r
+\r
+               return null;\r
+       }\r
+\r
+       function getNextVisibleTab()\r
+       {\r
+               var tabId = this._.currentTabId,\r
+                       length = this._.tabIdList.length,\r
+                       tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId );\r
+\r
+               for ( var i = tabIndex + 1 ; i < tabIndex + length ; i++ )\r
+               {\r
+                       if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) )\r
+                               return this._.tabIdList[ i % length ];\r
+               }\r
+\r
+               return null;\r
+       }\r
+\r
+       // Stores dialog related data from skin definitions. e.g. margin sizes.\r
+       var skinData = {};\r
+\r
+       /**\r
+        * This is the base class for runtime dialog objects. An instance of this\r
+        * class represents a single named dialog for a single editor instance.\r
+        * @param {Object} editor The editor which created the dialog.\r
+        * @param {String} dialogName The dialog's registered name.\r
+        * @constructor\r
+        * @example\r
+        * var dialogObj = new CKEDITOR.dialog( editor, 'smiley' );\r
+        */\r
+       CKEDITOR.dialog = function( editor, dialogName )\r
+       {\r
+               // Load the dialog definition.\r
+               var definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ];\r
+               if ( !definition )\r
+               {\r
+                       console.log( 'Error: The dialog "' + dialogName + '" is not defined.' );\r
+                       return;\r
+               }\r
+\r
+               // Completes the definition with the default values.\r
+               definition = CKEDITOR.tools.extend( definition( editor ), defaultDialogDefinition );\r
+\r
+               // Clone a functionally independent copy for this dialog.\r
+               definition = CKEDITOR.tools.clone( definition );\r
+\r
+               // Create a complex definition object, extending it with the API\r
+               // functions.\r
+               definition = new definitionObject( this, definition );\r
+\r
+               // Fire the "dialogDefinition" event, making it possible to customize\r
+               // the dialog definition.\r
+               this.definition = definition = CKEDITOR.fire( 'dialogDefinition',\r
+                       {\r
+                               name : dialogName,\r
+                               definition : definition\r
+                       }\r
+                       , editor ).definition;\r
+\r
+               var doc = CKEDITOR.document;\r
+\r
+               var themeBuilt = editor.theme.buildDialog( editor );\r
+\r
+               // Initialize some basic parameters.\r
+               this._ =\r
+               {\r
+                       editor : editor,\r
+                       element : themeBuilt.element,\r
+                       name : dialogName,\r
+                       contentSize : { width : 0, height : 0 },\r
+                       size : { width : 0, height : 0 },\r
+                       updateSize : false,\r
+                       contents : {},\r
+                       buttons : {},\r
+                       accessKeyMap : {},\r
+\r
+                       // Initialize the tab and page map.\r
+                       tabs : {},\r
+                       tabIdList : [],\r
+                       currentTabId : null,\r
+                       currentTabIndex : null,\r
+                       pageCount : 0,\r
+                       lastTab : null,\r
+                       tabBarMode : false,\r
+\r
+                       // Initialize the tab order array for input widgets.\r
+                       focusList : [],\r
+                       currentFocusIndex : 0,\r
+                       hasFocus : false\r
+               };\r
+\r
+               this.parts = themeBuilt.parts;\r
+\r
+               // Set the startup styles for the dialog, avoiding it enlarging the\r
+               // page size on the dialog creation.\r
+               this.parts.dialog.setStyles(\r
+                       {\r
+                               position : CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed',\r
+                               top : 0,\r
+                               left: 0,\r
+                               visibility : 'hidden'\r
+                       });\r
+\r
+               // Call the CKEDITOR.event constructor to initialize this instance.\r
+               CKEDITOR.event.call( this );\r
+\r
+               // Initialize load, show, hide, ok and cancel events.\r
+               if ( definition.onLoad )\r
+                       this.on( 'load', definition.onLoad );\r
+\r
+               if ( definition.onShow )\r
+                       this.on( 'show', definition.onShow );\r
+\r
+               if ( definition.onHide )\r
+                       this.on( 'hide', definition.onHide );\r
+\r
+               if ( definition.onOk )\r
+               {\r
+                       this.on( 'ok', function( evt )\r
+                               {\r
+                                       if ( definition.onOk.call( this, evt ) === false )\r
+                                               evt.data.hide = false;\r
+                               });\r
+               }\r
+\r
+               if ( definition.onCancel )\r
+               {\r
+                       this.on( 'cancel', function( evt )\r
+                               {\r
+                                       if ( definition.onCancel.call( this, evt ) === false )\r
+                                               evt.data.hide = false;\r
+                               });\r
+               }\r
+\r
+               var me = this;\r
+\r
+               // Iterates over all items inside all content in the dialog, calling a\r
+               // function for each of them.\r
+               var iterContents = function( func )\r
+               {\r
+                       var contents = me._.contents,\r
+                               stop = false;\r
+\r
+                       for ( var i in contents )\r
+                       {\r
+                               for ( var j in contents[i] )\r
+                               {\r
+                                       stop = func.call( this, contents[i][j] );\r
+                                       if ( stop )\r
+                                               return;\r
+                               }\r
+                       }\r
+               };\r
+\r
+               this.on( 'ok', function( evt )\r
+                       {\r
+                               iterContents( function( item )\r
+                                       {\r
+                                               if ( item.validate )\r
+                                               {\r
+                                                       var isValid = item.validate( this );\r
+\r
+                                                       if ( typeof isValid == 'string' )\r
+                                                       {\r
+                                                               alert( isValid );\r
+                                                               isValid = false;\r
+                                                       }\r
+\r
+                                                       if ( isValid === false )\r
+                                                       {\r
+                                                               if ( item.select )\r
+                                                                       item.select();\r
+                                                               else\r
+                                                                       item.focus();\r
+\r
+                                                               evt.data.hide = false;\r
+                                                               evt.stop();\r
+                                                               return true;\r
+                                                       }\r
+                                               }\r
+                                       });\r
+                       }, this, null, 0 );\r
+\r
+               this.on( 'cancel', function( evt )\r
+                       {\r
+                               iterContents( function( item )\r
+                                       {\r
+                                               if ( item.isChanged() )\r
+                                               {\r
+                                                       if ( !confirm( editor.lang.common.confirmCancel ) )\r
+                                                               evt.data.hide = false;\r
+                                                       return true;\r
+                                               }\r
+                                       });\r
+                       }, this, null, 0 );\r
+\r
+               this.parts.close.on( 'click', function( evt )\r
+                               {\r
+                                       if ( this.fire( 'cancel', { hide : true } ).hide !== false )\r
+                                               this.hide();\r
+                               }, this );\r
+\r
+               function changeFocus( forward )\r
+               {\r
+                       var focusList = me._.focusList,\r
+                               offset = forward ? 1 : -1;\r
+                       if ( focusList.length < 1 )\r
+                               return;\r
+\r
+                       var currentIndex = ( me._.currentFocusIndex + offset + focusList.length ) % focusList.length;\r
+                       while ( !focusList[ currentIndex ].isFocusable() )\r
+                       {\r
+                               currentIndex = ( currentIndex + offset + focusList.length ) % focusList.length;\r
+                               if ( currentIndex == me._.currentFocusIndex )\r
+                                       break;\r
+                       }\r
+                       focusList[ currentIndex ].focus();\r
+               }\r
+\r
+               function focusKeydownHandler( evt )\r
+               {\r
+                       // If I'm not the top dialog, ignore.\r
+                       if ( me != CKEDITOR.dialog._.currentTop )\r
+                               return;\r
+\r
+                       var keystroke = evt.data.getKeystroke(),\r
+                               processed = false;\r
+                       if ( keystroke == 9 || keystroke == CKEDITOR.SHIFT + 9 )\r
+                       {\r
+                               var shiftPressed = ( keystroke == CKEDITOR.SHIFT + 9 );\r
+\r
+                               // Handling Tab and Shift-Tab.\r
+                               if ( me._.tabBarMode )\r
+                               {\r
+                                       // Change tabs.\r
+                                       var nextId = shiftPressed ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me );\r
+                                       me.selectPage( nextId );\r
+                                       me._.tabs[ nextId ][ 0 ].focus();\r
+                               }\r
+                               else\r
+                               {\r
+                                       // Change the focus of inputs.\r
+                                       changeFocus( !shiftPressed );\r
+                               }\r
+\r
+                               processed = true;\r
+                       }\r
+                       else if ( keystroke == CKEDITOR.ALT + 121 && !me._.tabBarMode )\r
+                       {\r
+                               // Alt-F10 puts focus into the current tab item in the tab bar.\r
+                               me._.tabBarMode = true;\r
+                               me._.tabs[ me._.currentTabId ][ 0 ].focus();\r
+                               processed = true;\r
+                       }\r
+                       else if ( ( keystroke == 37 || keystroke == 39 ) && me._.tabBarMode )\r
+                       {\r
+                               // Arrow keys - used for changing tabs.\r
+                               nextId = ( keystroke == 37 ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me ) );\r
+                               me.selectPage( nextId );\r
+                               me._.tabs[ nextId ][ 0 ].focus();\r
+                               processed = true;\r
+                       }\r
+\r
+                       if ( processed )\r
+                       {\r
+                               evt.stop();\r
+                               evt.data.preventDefault();\r
+                       }\r
+               }\r
+\r
+               // Add the dialog keyboard handlers.\r
+               this.on( 'show', function()\r
+                       {\r
+                               CKEDITOR.document.on( 'keydown', focusKeydownHandler, this, null, 0 );\r
+\r
+                               if ( CKEDITOR.env.ie6Compat )\r
+                               {\r
+                                       var coverDoc = coverElement.getChild( 0 ).getFrameDocument();\r
+                                       coverDoc.on( 'keydown', focusKeydownHandler, this, null, 0 );\r
+                               }\r
+                       } );\r
+               this.on( 'hide', function()\r
+                       {\r
+                               CKEDITOR.document.removeListener( 'keydown', focusKeydownHandler );\r
+                       } );\r
+               this.on( 'iframeAdded', function( evt )\r
+                       {\r
+                               var doc = new CKEDITOR.dom.document( evt.data.iframe.$.contentWindow.document );\r
+                               doc.on( 'keydown', focusKeydownHandler, this, null, 0 );\r
+                       } );\r
+\r
+               // Auto-focus logic in dialog.\r
+               this.on( 'show', function()\r
+                       {\r
+                               if ( !this._.hasFocus )\r
+                               {\r
+                                       this._.currentFocusIndex = -1;\r
+                                       changeFocus( true );\r
+\r
+                                       /*\r
+                                        * IE BUG: If the initial focus went into a non-text element (e.g. button),\r
+                                        * then IE would still leave the caret inside the editing area.\r
+                                        */\r
+                                       if ( this._.editor.mode == 'wysiwyg' && CKEDITOR.env.ie )\r
+                                       {\r
+                                               var $selection = editor.document.$.selection,\r
+                                                       $range = $selection.createRange();\r
+\r
+                                               if ( $range )\r
+                                               {\r
+                                                       if ( $range.parentElement && $range.parentElement().ownerDocument == editor.document.$\r
+                                                         || $range.item && $range.item( 0 ).ownerDocument == editor.document.$ )\r
+                                                       {\r
+                                                               var $myRange = document.body.createTextRange();\r
+                                                               $myRange.moveToElementText( this.getElement().getFirst().$ );\r
+                                                               $myRange.collapse( true );\r
+                                                               $myRange.select();\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }, this, null, 0xffffffff );\r
+\r
+               // IE6 BUG: Text fields and text areas are only half-rendered the first time the dialog appears in IE6 (#2661).\r
+               // This is still needed after [2708] and [2709] because text fields in hidden TR tags are still broken.\r
+               if ( CKEDITOR.env.ie6Compat )\r
+               {\r
+                       this.on( 'load', function( evt )\r
+                                       {\r
+                                               var outer = this.getElement(),\r
+                                                       inner = outer.getFirst();\r
+                                               inner.remove();\r
+                                               inner.appendTo( outer );\r
+                                       }, this );\r
+               }\r
+\r
+               initDragAndDrop( this );\r
+               initResizeHandles( this );\r
+\r
+               // Insert the title.\r
+               ( new CKEDITOR.dom.text( definition.title, CKEDITOR.document ) ).appendTo( this.parts.title );\r
+\r
+               // Insert the tabs and contents.\r
+               for ( var i = 0 ; i < definition.contents.length ; i++ )\r
+                       this.addPage( definition.contents[i] );\r
+\r
+               var tabRegex = /cke_dialog_tab(\s|$|_)/,\r
+                       tabOuterRegex = /cke_dialog_tab(\s|$)/;\r
+               this.parts['tabs'].on( 'click', function( evt )\r
+                               {\r
+                                       var target = evt.data.getTarget(), firstNode = target, id, page;\r
+\r
+                                       // If we aren't inside a tab, bail out.\r
+                                       if ( !( tabRegex.test( target.$.className ) || target.getName() == 'a' ) )\r
+                                               return;\r
+\r
+                                       // Find the outer <td> container of the tab.\r
+                                       id = target.$.id.substr( 0, target.$.id.lastIndexOf( '_' ) );\r
+                                       this.selectPage( id );\r
+\r
+                                       if ( this._.tabBarMode )\r
+                                       {\r
+                                               this._.tabBarMode = false;\r
+                                               this._.currentFocusIndex = -1;\r
+                                               changeFocus( true );\r
+                                       }\r
+\r
+                                       evt.data.preventDefault();\r
+                               }, this );\r
+\r
+               // Insert buttons.\r
+               var buttonsHtml = [],\r
+                       buttons = CKEDITOR.dialog._.uiElementBuilders.hbox.build( this,\r
+                               {\r
+                                       type : 'hbox',\r
+                                       className : 'cke_dialog_footer_buttons',\r
+                                       widths : [],\r
+                                       children : definition.buttons\r
+                               }, buttonsHtml ).getChild();\r
+               this.parts.footer.setHtml( buttonsHtml.join( '' ) );\r
+\r
+               for ( i = 0 ; i < buttons.length ; i++ )\r
+                       this._.buttons[ buttons[i].id ] = buttons[i];\r
+\r
+               CKEDITOR.skins.load( editor, 'dialog' );\r
+       };\r
+\r
+       // Focusable interface. Use it via dialog.addFocusable.\r
+       function Focusable( dialog, element, index ) {\r
+               this.element = element;\r
+               this.focusIndex = index;\r
+               this.isFocusable = function()\r
+               {\r
+                       return true;\r
+               };\r
+               this.focus = function()\r
+               {\r
+                       dialog._.currentFocusIndex = this.focusIndex;\r
+                       this.element.focus();\r
+               };\r
+               // Bind events\r
+               element.on( 'keydown', function( e )\r
+                       {\r
+                               if ( e.data.getKeystroke() in { 32:1, 13:1 }  )\r
+                                       this.fire( 'click' );\r
+                       } );\r
+               element.on( 'focus', function()\r
+                       {\r
+                               this.fire( 'mouseover' );\r
+                       } );\r
+               element.on( 'blur', function()\r
+                       {\r
+                               this.fire( 'mouseout' );\r
+                       } );\r
+       }\r
+\r
+       CKEDITOR.dialog.prototype =\r
+       {\r
+               /**\r
+                * Resizes the dialog.\r
+                * @param {Number} width The width of the dialog in pixels.\r
+                * @param {Number} height The height of the dialog in pixels.\r
+                * @function\r
+                * @example\r
+                * dialogObj.resize( 800, 640 );\r
+                */\r
+               resize : (function()\r
+               {\r
+                       return function( width, height )\r
+                       {\r
+                               if ( this._.contentSize && this._.contentSize.width == width && this._.contentSize.height == height )\r
+                                       return;\r
+\r
+                               CKEDITOR.dialog.fire( 'resize',\r
+                                       {\r
+                                               dialog : this,\r
+                                               skin : this._.editor.skinName,\r
+                                               width : width,\r
+                                               height : height\r
+                                       }, this._.editor );\r
+\r
+                               this._.contentSize = { width : width, height : height };\r
+                               this._.updateSize = true;\r
+                       };\r
+               })(),\r
+\r
+               /**\r
+                * Gets the current size of the dialog in pixels.\r
+                * @returns {Object} An object with "width" and "height" properties.\r
+                * @example\r
+                * var width = dialogObj.getSize().width;\r
+                */\r
+               getSize : function()\r
+               {\r
+                       if ( !this._.updateSize )\r
+                               return this._.size;\r
+                       var element = this._.element.getFirst();\r
+                       var size = this._.size = { width : element.$.offsetWidth || 0, height : element.$.offsetHeight || 0};\r
+\r
+                       // If either the offsetWidth or offsetHeight is 0, the element isn't visible.\r
+                       this._.updateSize = !size.width || !size.height;\r
+\r
+                       return size;\r
+               },\r
+\r
+               /**\r
+                * Moves the dialog to an (x, y) coordinate relative to the window.\r
+                * @function\r
+                * @param {Number} x The target x-coordinate.\r
+                * @param {Number} y The target y-coordinate.\r
+                * @example\r
+                * dialogObj.move( 10, 40 );\r
+                */\r
+               move : (function()\r
+               {\r
+                       var isFixed;\r
+                       return function( x, y )\r
+                       {\r
+                               // The dialog may be fixed positioned or absolute positioned. Ask the\r
+                               // browser what is the current situation first.\r
+                               var element = this._.element.getFirst();\r
+                               if ( isFixed === undefined )\r
+                                       isFixed = element.getComputedStyle( 'position' ) == 'fixed';\r
+\r
+                               if ( isFixed && this._.position && this._.position.x == x && this._.position.y == y )\r
+                                       return;\r
+\r
+                               // Save the current position.\r
+                               this._.position = { x : x, y : y };\r
+\r
+                               // If not fixed positioned, add scroll position to the coordinates.\r
+                               if ( !isFixed )\r
+                               {\r
+                                       var scrollPosition = CKEDITOR.document.getWindow().getScrollPosition();\r
+                                       x += scrollPosition.x;\r
+                                       y += scrollPosition.y;\r
+                               }\r
+\r
+                               element.setStyles(\r
+                                               {\r
+                                                       'left'  : ( x > 0 ? x : 0 ) + 'px',\r
+                                                       'top'   : ( y > 0 ? y : 0 ) + 'px'\r
+                                               });\r
+                       };\r
+               })(),\r
+\r
+               /**\r
+                * Gets the dialog's position in the window.\r
+                * @returns {Object} An object with "x" and "y" properties.\r
+                * @example\r
+                * var dialogX = dialogObj.getPosition().x;\r
+                */\r
+               getPosition : function(){ return CKEDITOR.tools.extend( {}, this._.position ); },\r
+\r
+               /**\r
+                * Shows the dialog box.\r
+                * @example\r
+                * dialogObj.show();\r
+                */\r
+               show : function()\r
+               {\r
+                       if ( this._.editor.mode == 'wysiwyg' && CKEDITOR.env.ie )\r
+                               this._.editor.getSelection().lock();\r
+\r
+                       // Insert the dialog's element to the root document.\r
+                       var element = this._.element;\r
+                       var definition = this.definition;\r
+                       if ( !( element.getParent() && element.getParent().equals( CKEDITOR.document.getBody() ) ) )\r
+                               element.appendTo( CKEDITOR.document.getBody() );\r
+                       else\r
+                               return;\r
+\r
+                       // FIREFOX BUG: Fix vanishing caret for Firefox 2 or Gecko 1.8.\r
+                       if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 )\r
+                       {\r
+                               var dialogElement = this.parts.dialog;\r
+                               dialogElement.setStyle( 'position', 'absolute' );\r
+                               setTimeout( function()\r
+                                       {\r
+                                               dialogElement.setStyle( 'position', 'fixed' );\r
+                                       }, 0 );\r
+                       }\r
+\r
+\r
+                       // First, set the dialog to an appropriate size.\r
+                       this.resize( definition.minWidth, definition.minHeight );\r
+\r
+                       // Select the first tab by default.\r
+                       this.selectPage( this.definition.contents[0].id );\r
+\r
+                       // Reset all inputs back to their default value.\r
+                       this.reset();\r
+\r
+                       // Set z-index.\r
+                       if ( CKEDITOR.dialog._.currentZIndex === null )\r
+                               CKEDITOR.dialog._.currentZIndex = this._.editor.config.baseFloatZIndex;\r
+                       this._.element.getFirst().setStyle( 'z-index', CKEDITOR.dialog._.currentZIndex += 10 );\r
+\r
+                       // Maintain the dialog ordering and dialog cover.\r
+                       // Also register key handlers if first dialog.\r
+                       if ( CKEDITOR.dialog._.currentTop === null )\r
+                       {\r
+                               CKEDITOR.dialog._.currentTop = this;\r
+                               this._.parentDialog = null;\r
+                               addCover( this._.editor );\r
+\r
+                               CKEDITOR.document.on( 'keydown', accessKeyDownHandler );\r
+                               CKEDITOR.document.on( 'keyup', accessKeyUpHandler );\r
+                       }\r
+                       else\r
+                       {\r
+                               this._.parentDialog = CKEDITOR.dialog._.currentTop;\r
+                               var parentElement = this._.parentDialog.getElement().getFirst();\r
+                               parentElement.$.style.zIndex  -= Math.floor( this._.editor.config.baseFloatZIndex / 2 );\r
+                               CKEDITOR.dialog._.currentTop = this;\r
+                       }\r
+\r
+                       // Register the Esc hotkeys.\r
+                       registerAccessKey( this, this, '\x1b', null, function()\r
+                                       {\r
+                                               this.getButton( 'cancel' ) && this.getButton( 'cancel' ).click();\r
+                                       } );\r
+\r
+                       // Reset the hasFocus state.\r
+                       this._.hasFocus = false;\r
+\r
+                       // Rearrange the dialog to the middle of the window.\r
+                       CKEDITOR.tools.setTimeout( function()\r
+                               {\r
+                                       var viewSize = CKEDITOR.document.getWindow().getViewPaneSize();\r
+                                       var dialogSize = this.getSize();\r
+\r
+                                       // We're using definition size for initial position because of\r
+                                       // offten corrupted data in offsetWidth at this point. (#4084)\r
+                                       this.move( ( viewSize.width - definition.minWidth ) / 2, ( viewSize.height - dialogSize.height ) / 2 );\r
+\r
+                                       this.parts.dialog.setStyle( 'visibility', '' );\r
+\r
+                                       // Execute onLoad for the first show.\r
+                                       this.fireOnce( 'load', {} );\r
+                                       this.fire( 'show', {} );\r
+\r
+                                       // Save the initial values of the dialog.\r
+                                       this.foreach( function( contentObj ) { contentObj.setInitValue && contentObj.setInitValue(); } );\r
+\r
+                               },\r
+                               100, this );\r
+               },\r
+\r
+               /**\r
+                * Executes a function for each UI element.\r
+                * @param {Function} fn Function to execute for each UI element.\r
+                * @returns {CKEDITOR.dialog} The current dialog object.\r
+                */\r
+               foreach : function( fn )\r
+               {\r
+                       for ( var i in this._.contents )\r
+                       {\r
+                               for ( var j in this._.contents[i] )\r
+                                       fn( this._.contents[i][j]);\r
+                       }\r
+                       return this;\r
+               },\r
+\r
+               /**\r
+                * Resets all input values in the dialog.\r
+                * @example\r
+                * dialogObj.reset();\r
+                * @returns {CKEDITOR.dialog} The current dialog object.\r
+                */\r
+               reset : (function()\r
+               {\r
+                       var fn = function( widget ){ if ( widget.reset ) widget.reset(); };\r
+                       return function(){ this.foreach( fn ); return this; };\r
+               })(),\r
+\r
+               setupContent : function()\r
+               {\r
+                       var args = arguments;\r
+                       this.foreach( function( widget )\r
+                               {\r
+                                       if ( widget.setup )\r
+                                               widget.setup.apply( widget, args );\r
+                               });\r
+               },\r
+\r
+               commitContent : function()\r
+               {\r
+                       var args = arguments;\r
+                       this.foreach( function( widget )\r
+                               {\r
+                                       if ( widget.commit )\r
+                                               widget.commit.apply( widget, args );\r
+                               });\r
+               },\r
+\r
+               /**\r
+                * Hides the dialog box.\r
+                * @example\r
+                * dialogObj.hide();\r
+                */\r
+               hide : function()\r
+               {\r
+                       this.fire( 'hide', {} );\r
+\r
+                       // Remove the dialog's element from the root document.\r
+                       var element = this._.element;\r
+                       if ( !element.getParent() )\r
+                               return;\r
+\r
+                       element.remove();\r
+                       this.parts.dialog.setStyle( 'visibility', 'hidden' );\r
+\r
+                       // Unregister all access keys associated with this dialog.\r
+                       unregisterAccessKey( this );\r
+\r
+                       // Maintain dialog ordering and remove cover if needed.\r
+                       if ( !this._.parentDialog )\r
+                               removeCover();\r
+                       else\r
+                       {\r
+                               var parentElement = this._.parentDialog.getElement().getFirst();\r
+                               parentElement.setStyle( 'z-index', parseInt( parentElement.$.style.zIndex, 10 ) + Math.floor( this._.editor.config.baseFloatZIndex / 2 ) );\r
+                       }\r
+                       CKEDITOR.dialog._.currentTop = this._.parentDialog;\r
+\r
+                       // Deduct or clear the z-index.\r
+                       if ( !this._.parentDialog )\r
+                       {\r
+                               CKEDITOR.dialog._.currentZIndex = null;\r
+\r
+                               // Remove access key handlers.\r
+                               CKEDITOR.document.removeListener( 'keydown', accessKeyDownHandler );\r
+                               CKEDITOR.document.removeListener( 'keyup', accessKeyUpHandler );\r
+\r
+                               var editor = this._.editor;\r
+                               editor.focus();\r
+\r
+                               if ( editor.mode == 'wysiwyg' && CKEDITOR.env.ie )\r
+                                       editor.getSelection().unlock( true );\r
+                       }\r
+                       else\r
+                               CKEDITOR.dialog._.currentZIndex -= 10;\r
+\r
+\r
+                       // Reset the initial values of the dialog.\r
+                       this.foreach( function( contentObj ) { contentObj.resetInitValue && contentObj.resetInitValue(); } );\r
+               },\r
+\r
+               /**\r
+                * Adds a tabbed page into the dialog.\r
+                * @param {Object} contents Content definition.\r
+                * @example\r
+                */\r
+               addPage : function( contents )\r
+               {\r
+                       var pageHtml = [],\r
+                               titleHtml = contents.label ? ' title="' + CKEDITOR.tools.htmlEncode( contents.label ) + '"' : '',\r
+                               elements = contents.elements,\r
+                               vbox = CKEDITOR.dialog._.uiElementBuilders.vbox.build( this,\r
+                                               {\r
+                                                       type : 'vbox',\r
+                                                       className : 'cke_dialog_page_contents',\r
+                                                       children : contents.elements,\r
+                                                       expand : !!contents.expand,\r
+                                                       padding : contents.padding,\r
+                                                       style : contents.style || 'width: 100%; height: 100%;'\r
+                                               }, pageHtml );\r
+\r
+                       // Create the HTML for the tab and the content block.\r
+                       var page = CKEDITOR.dom.element.createFromHtml( pageHtml.join( '' ) );\r
+                       var tab = CKEDITOR.dom.element.createFromHtml( [\r
+                                       '<a class="cke_dialog_tab"',\r
+                                               ( this._.pageCount > 0 ? ' cke_last' : 'cke_first' ),\r
+                                               titleHtml,\r
+                                               ( !!contents.hidden ? ' style="display:none"' : '' ),\r
+                                               ' id="', contents.id + '_', CKEDITOR.tools.getNextNumber(), '"' +\r
+                                               ' href="javascript:void(0)"',\r
+                                               ' hidefocus="true">',\r
+                                                       contents.label,\r
+                                       '</a>'\r
+                               ].join( '' ) );\r
+\r
+                       // If only a single page exist, a different style is used in the central pane.\r
+                       if ( this._.pageCount === 0 )\r
+                               this.parts.dialog.addClass( 'cke_single_page' );\r
+                       else\r
+                               this.parts.dialog.removeClass( 'cke_single_page' );\r
+\r
+                       // Take records for the tabs and elements created.\r
+                       this._.tabs[ contents.id ] = [ tab, page ];\r
+                       this._.tabIdList.push( contents.id );\r
+                       this._.pageCount++;\r
+                       this._.lastTab = tab;\r
+\r
+                       var contentMap = this._.contents[ contents.id ] = {},\r
+                               cursor,\r
+                               children = vbox.getChild();\r
+\r
+                       while ( ( cursor = children.shift() ) )\r
+                       {\r
+                               contentMap[ cursor.id ] = cursor;\r
+                               if ( typeof( cursor.getChild ) == 'function' )\r
+                                       children.push.apply( children, cursor.getChild() );\r
+                       }\r
+\r
+                       // Attach the DOM nodes.\r
+\r
+                       page.setAttribute( 'name', contents.id );\r
+                       page.appendTo( this.parts.contents );\r
+\r
+                       tab.unselectable();\r
+                       this.parts.tabs.append( tab );\r
+\r
+                       // Add access key handlers if access key is defined.\r
+                       if ( contents.accessKey )\r
+                       {\r
+                               registerAccessKey( this, this, 'CTRL+' + contents.accessKey,\r
+                                       tabAccessKeyDown, tabAccessKeyUp );\r
+                               this._.accessKeyMap[ 'CTRL+' + contents.accessKey ] = contents.id;\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * Activates a tab page in the dialog by its id.\r
+                * @param {String} id The id of the dialog tab to be activated.\r
+                * @example\r
+                * dialogObj.selectPage( 'tab_1' );\r
+                */\r
+               selectPage : function( id )\r
+               {\r
+                       // Hide the non-selected tabs and pages.\r
+                       for ( var i in this._.tabs )\r
+                       {\r
+                               var tab = this._.tabs[i][0],\r
+                                       page = this._.tabs[i][1];\r
+                               if ( i != id )\r
+                               {\r
+                                       tab.removeClass( 'cke_dialog_tab_selected' );\r
+                                       page.hide();\r
+                               }\r
+                       }\r
+\r
+                       var selected = this._.tabs[id];\r
+                       selected[0].addClass( 'cke_dialog_tab_selected' );\r
+                       selected[1].show();\r
+                       this._.currentTabId = id;\r
+                       this._.currentTabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, id );\r
+               },\r
+\r
+               /**\r
+                * Hides a page's tab away from the dialog.\r
+                * @param {String} id The page's Id.\r
+                * @example\r
+                * dialog.hidePage( 'tab_3' );\r
+                */\r
+               hidePage : function( id )\r
+               {\r
+                       var tab = this._.tabs[id] && this._.tabs[id][0];\r
+                       if ( !tab )\r
+                               return;\r
+                       tab.hide();\r
+               },\r
+\r
+               /**\r
+                * Unhides a page's tab.\r
+                * @param {String} id The page's Id.\r
+                * @example\r
+                * dialog.showPage( 'tab_2' );\r
+                */\r
+               showPage : function( id )\r
+               {\r
+                       var tab = this._.tabs[id] && this._.tabs[id][0];\r
+                       if ( !tab )\r
+                               return;\r
+                       tab.show();\r
+               },\r
+\r
+               /**\r
+                * Gets the root DOM element of the dialog.\r
+                * @returns {CKEDITOR.dom.element} The &lt;span&gt; element containing this dialog.\r
+                * @example\r
+                * var dialogElement = dialogObj.getElement().getFirst();\r
+                * dialogElement.setStyle( 'padding', '5px' );\r
+                */\r
+               getElement : function()\r
+               {\r
+                       return this._.element;\r
+               },\r
+\r
+               /**\r
+                * Gets the name of the dialog.\r
+                * @returns {String} The name of this dialog.\r
+                * @example\r
+                * var dialogName = dialogObj.getName();\r
+                */\r
+               getName : function()\r
+               {\r
+                       return this._.name;\r
+               },\r
+\r
+               /**\r
+                * Gets a dialog UI element object from a dialog page.\r
+                * @param {String} pageId id of dialog page.\r
+                * @param {String} elementId id of UI element.\r
+                * @example\r
+                * @returns {CKEDITOR.ui.dialog.uiElement} The dialog UI element.\r
+                */\r
+               getContentElement : function( pageId, elementId )\r
+               {\r
+                       return this._.contents[pageId][elementId];\r
+               },\r
+\r
+               /**\r
+                * Gets the value of a dialog UI element.\r
+                * @param {String} pageId id of dialog page.\r
+                * @param {String} elementId id of UI element.\r
+                * @example\r
+                * @returns {Object} The value of the UI element.\r
+                */\r
+               getValueOf : function( pageId, elementId )\r
+               {\r
+                       return this.getContentElement( pageId, elementId ).getValue();\r
+               },\r
+\r
+               /**\r
+                * Sets the value of a dialog UI element.\r
+                * @param {String} pageId id of the dialog page.\r
+                * @param {String} elementId id of the UI element.\r
+                * @param {Object} value The new value of the UI element.\r
+                * @example\r
+                */\r
+               setValueOf : function( pageId, elementId, value )\r
+               {\r
+                       return this.getContentElement( pageId, elementId ).setValue( value );\r
+               },\r
+\r
+               /**\r
+                * Gets the UI element of a button in the dialog's button row.\r
+                * @param {String} id The id of the button.\r
+                * @example\r
+                * @returns {CKEDITOR.ui.dialog.button} The button object.\r
+                */\r
+               getButton : function( id )\r
+               {\r
+                       return this._.buttons[ id ];\r
+               },\r
+\r
+               /**\r
+                * Simulates a click to a dialog button in the dialog's button row.\r
+                * @param {String} id The id of the button.\r
+                * @example\r
+                * @returns The return value of the dialog's "click" event.\r
+                */\r
+               click : function( id )\r
+               {\r
+                       return this._.buttons[ id ].click();\r
+               },\r
+\r
+               /**\r
+                * Disables a dialog button.\r
+                * @param {String} id The id of the button.\r
+                * @example\r
+                */\r
+               disableButton : function( id )\r
+               {\r
+                       return this._.buttons[ id ].disable();\r
+               },\r
+\r
+               /**\r
+                * Enables a dialog button.\r
+                * @param {String} id The id of the button.\r
+                * @example\r
+                */\r
+               enableButton : function( id )\r
+               {\r
+                       return this._.buttons[ id ].enable();\r
+               },\r
+\r
+               /**\r
+                * Gets the number of pages in the dialog.\r
+                * @returns {Number} Page count.\r
+                */\r
+               getPageCount : function()\r
+               {\r
+                       return this._.pageCount;\r
+               },\r
+\r
+               /**\r
+                * Gets the editor instance which opened this dialog.\r
+                * @returns {CKEDITOR.editor} Parent editor instances.\r
+                */\r
+               getParentEditor : function()\r
+               {\r
+                       return this._.editor;\r
+               },\r
+\r
+               /**\r
+                * Gets the element that was selected when opening the dialog, if any.\r
+                * @returns {CKEDITOR.dom.element} The element that was selected, or null.\r
+                */\r
+               getSelectedElement : function()\r
+               {\r
+                       return this.getParentEditor().getSelection().getSelectedElement();\r
+               },\r
+\r
+               /**\r
+                * Adds element to dialog's focusable list.\r
+                *\r
+                * @param {CKEDITOR.dom.element} element\r
+                * @param {Number} [index]\r
+                */\r
+               addFocusable: function( element, index ) {\r
+                       if ( typeof index == 'undefined' )\r
+                       {\r
+                               index = this._.focusList.length;\r
+                               this._.focusList.push( new Focusable( this, element, index ) );\r
+                       }\r
+                       else\r
+                       {\r
+                               this._.focusList.splice( index, 0, new Focusable( this, element, index ) );\r
+                               for ( var i = index + 1 ; i < this._.focusList.length ; i++ )\r
+                                       this._.focusList[ i ].focusIndex++;\r
+                       }\r
+               }\r
+       };\r
+\r
+       CKEDITOR.tools.extend( CKEDITOR.dialog,\r
+               /**\r
+                * @lends CKEDITOR.dialog\r
+                */\r
+               {\r
+                       /**\r
+                        * Registers a dialog.\r
+                        * @param {String} name The dialog's name.\r
+                        * @param {Function|String} dialogDefinition\r
+                        * A function returning the dialog's definition, or the URL to the .js file holding the function.\r
+                        * The function should accept an argument "editor" which is the current editor instance, and\r
+                        * return an object conforming to {@link CKEDITOR.dialog.dialogDefinition}.\r
+                        * @example\r
+                        * @see CKEDITOR.dialog.dialogDefinition\r
+                        */\r
+                       add : function( name, dialogDefinition )\r
+                       {\r
+                               // Avoid path registration from multiple instances override definition.\r
+                               if ( !this._.dialogDefinitions[name]\r
+                                       || typeof  dialogDefinition == 'function' )\r
+                                       this._.dialogDefinitions[name] = dialogDefinition;\r
+                       },\r
+\r
+                       exists : function( name )\r
+                       {\r
+                               return !!this._.dialogDefinitions[ name ];\r
+                       },\r
+\r
+                       getCurrent : function()\r
+                       {\r
+                               return CKEDITOR.dialog._.currentTop;\r
+                       },\r
+\r
+                       /**\r
+                        * The default OK button for dialogs. Fires the "ok" event and closes the dialog if the event succeeds.\r
+                        * @static\r
+                        * @field\r
+                        * @example\r
+                        * @type Function\r
+                        */\r
+                       okButton : (function()\r
+                       {\r
+                               var retval = function( editor, override )\r
+                               {\r
+                                       override = override || {};\r
+                                       return CKEDITOR.tools.extend( {\r
+                                               id : 'ok',\r
+                                               type : 'button',\r
+                                               label : editor.lang.common.ok,\r
+                                               'class' : 'cke_dialog_ui_button_ok',\r
+                                               onClick : function( evt )\r
+                                               {\r
+                                                       var dialog = evt.data.dialog;\r
+                                                       if ( dialog.fire( 'ok', { hide : true } ).hide !== false )\r
+                                                               dialog.hide();\r
+                                               }\r
+                                       }, override, true );\r
+                               };\r
+                               retval.type = 'button';\r
+                               retval.override = function( override )\r
+                               {\r
+                                       return CKEDITOR.tools.extend( function( editor ){ return retval( editor, override ); },\r
+                                                       { type : 'button' }, true );\r
+                               };\r
+                               return retval;\r
+                       })(),\r
+\r
+                       /**\r
+                        * The default cancel button for dialogs. Fires the "cancel" event and closes the dialog if no UI element value changed.\r
+                        * @static\r
+                        * @field\r
+                        * @example\r
+                        * @type Function\r
+                        */\r
+                       cancelButton : (function()\r
+                       {\r
+                               var retval = function( editor, override )\r
+                               {\r
+                                       override = override || {};\r
+                                       return CKEDITOR.tools.extend( {\r
+                                               id : 'cancel',\r
+                                               type : 'button',\r
+                                               label : editor.lang.common.cancel,\r
+                                               'class' : 'cke_dialog_ui_button_cancel',\r
+                                               onClick : function( evt )\r
+                                               {\r
+                                                       var dialog = evt.data.dialog;\r
+                                                       if ( dialog.fire( 'cancel', { hide : true } ).hide !== false )\r
+                                                               dialog.hide();\r
+                                               }\r
+                                       }, override, true );\r
+                               };\r
+                               retval.type = 'button';\r
+                               retval.override = function( override )\r
+                               {\r
+                                       return CKEDITOR.tools.extend( function( editor ){ return retval( editor, override ); },\r
+                                                       { type : 'button' }, true );\r
+                               };\r
+                               return retval;\r
+                       })(),\r
+\r
+                       /**\r
+                        * Registers a dialog UI element.\r
+                        * @param {String} typeName The name of the UI element.\r
+                        * @param {Function} builder The function to build the UI element.\r
+                        * @example\r
+                        */\r
+                       addUIElement : function( typeName, builder )\r
+                       {\r
+                               this._.uiElementBuilders[ typeName ] = builder;\r
+                       }\r
+               });\r
+\r
+       CKEDITOR.dialog._ =\r
+       {\r
+               uiElementBuilders : {},\r
+\r
+               dialogDefinitions : {},\r
+\r
+               currentTop : null,\r
+\r
+               currentZIndex : null\r
+       };\r
+\r
+       // "Inherit" (copy actually) from CKEDITOR.event.\r
+       CKEDITOR.event.implementOn( CKEDITOR.dialog );\r
+       CKEDITOR.event.implementOn( CKEDITOR.dialog.prototype, true );\r
+\r
+       var defaultDialogDefinition =\r
+       {\r
+               resizable : CKEDITOR.DIALOG_RESIZE_NONE,\r
+               minWidth : 600,\r
+               minHeight : 400,\r
+               buttons : [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ]\r
+       };\r
+\r
+       // Tool function used to return an item from an array based on its id\r
+       // property.\r
+       var getById = function( array, id, recurse )\r
+       {\r
+               for ( var i = 0, item ; ( item = array[ i ] ) ; i++ )\r
+               {\r
+                       if ( item.id == id )\r
+                               return item;\r
+                       if ( recurse && item[ recurse ] )\r
+                       {\r
+                               var retval = getById( item[ recurse ], id, recurse ) ;\r
+                               if ( retval )\r
+                                       return retval;\r
+                       }\r
+               }\r
+               return null;\r
+       };\r
+\r
+       // Tool function used to add an item into an array.\r
+       var addById = function( array, newItem, nextSiblingId, recurse, nullIfNotFound )\r
+       {\r
+               if ( nextSiblingId )\r
+               {\r
+                       for ( var i = 0, item ; ( item = array[ i ] ) ; i++ )\r
+                       {\r
+                               if ( item.id == nextSiblingId )\r
+                               {\r
+                                       array.splice( i, 0, newItem );\r
+                                       return newItem;\r
+                               }\r
+\r
+                               if ( recurse && item[ recurse ] )\r
+                               {\r
+                                       var retval = addById( item[ recurse ], newItem, nextSiblingId, recurse, true );\r
+                                       if ( retval )\r
+                                               return retval;\r
+                               }\r
+                       }\r
+\r
+                       if ( nullIfNotFound )\r
+                               return null;\r
+               }\r
+\r
+               array.push( newItem );\r
+               return newItem;\r
+       };\r
+\r
+       // Tool function used to remove an item from an array based on its id.\r
+       var removeById = function( array, id, recurse )\r
+       {\r
+               for ( var i = 0, item ; ( item = array[ i ] ) ; i++ )\r
+               {\r
+                       if ( item.id == id )\r
+                               return array.splice( i, 1 );\r
+                       if ( recurse && item[ recurse ] )\r
+                       {\r
+                               var retval = removeById( item[ recurse ], id, recurse );\r
+                               if ( retval )\r
+                                       return retval;\r
+                       }\r
+               }\r
+               return null;\r
+       };\r
+\r
+       /**\r
+        * This class is not really part of the API. It is the "definition" property value\r
+        * passed to "dialogDefinition" event handlers.\r
+        * @constructor\r
+        * @name CKEDITOR.dialog.dialogDefinitionObject\r
+        * @extends CKEDITOR.dialog.dialogDefinition\r
+        * @example\r
+        * CKEDITOR.on( 'dialogDefinition', function( evt )\r
+        *      {\r
+        *              var definition = evt.data.definition;\r
+        *              var content = definition.getContents( 'page1' );\r
+        *              ...\r
+        *      } );\r
+        */\r
+       var definitionObject = function( dialog, dialogDefinition )\r
+       {\r
+               // TODO : Check if needed.\r
+               this.dialog = dialog;\r
+\r
+               // Transform the contents entries in contentObjects.\r
+               var contents = dialogDefinition.contents;\r
+               for ( var i = 0, content ; ( content = contents[i] ) ; i++ )\r
+                       contents[ i ] = new contentObject( dialog, content );\r
+\r
+               CKEDITOR.tools.extend( this, dialogDefinition );\r
+       };\r
+\r
+       definitionObject.prototype =\r
+       /** @lends CKEDITOR.dialog.dialogDefinitionObject.prototype */\r
+       {\r
+               /**\r
+                * Gets a content definition.\r
+                * @param {String} id The id of the content definition.\r
+                * @returns {CKEDITOR.dialog.contentDefinition} The content definition\r
+                *              matching id.\r
+                */\r
+               getContents : function( id )\r
+               {\r
+                       return getById( this.contents, id );\r
+               },\r
+\r
+               /**\r
+                * Gets a button definition.\r
+                * @param {String} id The id of the button definition.\r
+                * @returns {CKEDITOR.dialog.buttonDefinition} The button definition\r
+                *              matching id.\r
+                */\r
+               getButton : function( id )\r
+               {\r
+                       return getById( this.buttons, id );\r
+               },\r
+\r
+               /**\r
+                * Adds a content definition object under this dialog definition.\r
+                * @param {CKEDITOR.dialog.contentDefinition} contentDefinition The\r
+                *              content definition.\r
+                * @param {String} [nextSiblingId] The id of an existing content\r
+                *              definition which the new content definition will be inserted\r
+                *              before. Omit if the new content definition is to be inserted as\r
+                *              the last item.\r
+                * @returns {CKEDITOR.dialog.contentDefinition} The inserted content\r
+                *              definition.\r
+                */\r
+               addContents : function( contentDefinition, nextSiblingId )\r
+               {\r
+                       return addById( this.contents, contentDefinition, nextSiblingId );\r
+               },\r
+\r
+               /**\r
+                * Adds a button definition object under this dialog definition.\r
+                * @param {CKEDITOR.dialog.buttonDefinition} buttonDefinition The\r
+                *              button definition.\r
+                * @param {String} [nextSiblingId] The id of an existing button\r
+                *              definition which the new button definition will be inserted\r
+                *              before. Omit if the new button definition is to be inserted as\r
+                *              the last item.\r
+                * @returns {CKEDITOR.dialog.buttonDefinition} The inserted button\r
+                *              definition.\r
+                */\r
+               addButton : function( buttonDefinition, nextSiblingId )\r
+               {\r
+                       return addById( this.buttons, buttonDefinition, nextSiblingId );\r
+               },\r
+\r
+               /**\r
+                * Removes a content definition from this dialog definition.\r
+                * @param {String} id The id of the content definition to be removed.\r
+                * @returns {CKEDITOR.dialog.contentDefinition} The removed content\r
+                *              definition.\r
+                */\r
+               removeContents : function( id )\r
+               {\r
+                       removeById( this.contents, id );\r
+               },\r
+\r
+               /**\r
+                * Removes a button definition from the dialog definition.\r
+                * @param {String} id The id of the button definition to be removed.\r
+                * @returns {CKEDITOR.dialog.buttonDefinition} The removed button\r
+                *              definition.\r
+                */\r
+               removeButton : function( id )\r
+               {\r
+                       removeById( this.buttons, id );\r
+               }\r
+       };\r
+\r
+       /**\r
+        * This class is not really part of the API. It is the template of the\r
+        * objects representing content pages inside the\r
+        * CKEDITOR.dialog.dialogDefinitionObject.\r
+        * @constructor\r
+        * @name CKEDITOR.dialog.contentDefinitionObject\r
+        * @example\r
+        * CKEDITOR.on( 'dialogDefinition', function( evt )\r
+        *      {\r
+        *              var definition = evt.data.definition;\r
+        *              var content = definition.getContents( 'page1' );\r
+        *              content.remove( 'textInput1' );\r
+        *              ...\r
+        *      } );\r
+        */\r
+       function contentObject( dialog, contentDefinition )\r
+       {\r
+               this._ =\r
+               {\r
+                       dialog : dialog\r
+               };\r
+\r
+               CKEDITOR.tools.extend( this, contentDefinition );\r
+       }\r
+\r
+       contentObject.prototype =\r
+       /** @lends CKEDITOR.dialog.contentDefinitionObject.prototype */\r
+       {\r
+               /**\r
+                * Gets a UI element definition under the content definition.\r
+                * @param {String} id The id of the UI element definition.\r
+                * @returns {CKEDITOR.dialog.uiElementDefinition}\r
+                */\r
+               get : function( id )\r
+               {\r
+                       return getById( this.elements, id, 'children' );\r
+               },\r
+\r
+               /**\r
+                * Adds a UI element definition to the content definition.\r
+                * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition The\r
+                *              UI elemnet definition to be added.\r
+                * @param {String} nextSiblingId The id of an existing UI element\r
+                *              definition which the new UI element definition will be inserted\r
+                *              before. Omit if the new button definition is to be inserted as\r
+                *              the last item.\r
+                * @returns {CKEDITOR.dialog.uiElementDefinition} The element\r
+                *              definition inserted.\r
+                */\r
+               add : function( elementDefinition, nextSiblingId )\r
+               {\r
+                       return addById( this.elements, elementDefinition, nextSiblingId, 'children' );\r
+               },\r
+\r
+               /**\r
+                * Removes a UI element definition from the content definition.\r
+                * @param {String} id The id of the UI element definition to be\r
+                *              removed.\r
+                * @returns {CKEDITOR.dialog.uiElementDefinition} The element\r
+                *              definition removed.\r
+                * @example\r
+                */\r
+               remove : function( id )\r
+               {\r
+                       removeById( this.elements, id, 'children' );\r
+               }\r
+       };\r
+\r
+       function initDragAndDrop( dialog )\r
+       {\r
+               var lastCoords = null,\r
+                       abstractDialogCoords = null,\r
+                       element = dialog.getElement().getFirst(),\r
+                       editor = dialog.getParentEditor(),\r
+                       magnetDistance = editor.config.dialog_magnetDistance,\r
+                       margins = skinData[ editor.skinName ].margins || [ 0, 0, 0, 0 ];\r
+\r
+               function mouseMoveHandler( evt )\r
+               {\r
+                       var dialogSize = dialog.getSize(),\r
+                               viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(),\r
+                               x = evt.data.$.screenX,\r
+                               y = evt.data.$.screenY,\r
+                               dx = x - lastCoords.x,\r
+                               dy = y - lastCoords.y,\r
+                               realX, realY;\r
+\r
+                       lastCoords = { x : x, y : y };\r
+                       abstractDialogCoords.x += dx;\r
+                       abstractDialogCoords.y += dy;\r
+\r
+                       if ( abstractDialogCoords.x + margins[3] < magnetDistance )\r
+                               realX = - margins[3];\r
+                       else if ( abstractDialogCoords.x - margins[1] > viewPaneSize.width - dialogSize.width - magnetDistance )\r
+                               realX = viewPaneSize.width - dialogSize.width + margins[1];\r
+                       else\r
+                               realX = abstractDialogCoords.x;\r
+\r
+                       if ( abstractDialogCoords.y + margins[0] < magnetDistance )\r
+                               realY = - margins[0];\r
+                       else if ( abstractDialogCoords.y - margins[2] > viewPaneSize.height - dialogSize.height - magnetDistance )\r
+                               realY = viewPaneSize.height - dialogSize.height + margins[2];\r
+                       else\r
+                               realY = abstractDialogCoords.y;\r
+\r
+                       dialog.move( realX, realY );\r
+\r
+                       evt.data.preventDefault();\r
+               }\r
+\r
+               function mouseUpHandler( evt )\r
+               {\r
+                       CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler );\r
+                       CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler );\r
+\r
+                       if ( CKEDITOR.env.ie6Compat )\r
+                       {\r
+                               var coverDoc = coverElement.getChild( 0 ).getFrameDocument();\r
+                               coverDoc.removeListener( 'mousemove', mouseMoveHandler );\r
+                               coverDoc.removeListener( 'mouseup', mouseUpHandler );\r
+                       }\r
+               }\r
+\r
+               dialog.parts.title.on( 'mousedown', function( evt )\r
+                       {\r
+                               dialog._.updateSize = true;\r
+\r
+                               lastCoords = { x : evt.data.$.screenX, y : evt.data.$.screenY };\r
+\r
+                               CKEDITOR.document.on( 'mousemove', mouseMoveHandler );\r
+                               CKEDITOR.document.on( 'mouseup', mouseUpHandler );\r
+                               abstractDialogCoords = dialog.getPosition();\r
+\r
+                               if ( CKEDITOR.env.ie6Compat )\r
+                               {\r
+                                       var coverDoc = coverElement.getChild( 0 ).getFrameDocument();\r
+                                       coverDoc.on( 'mousemove', mouseMoveHandler );\r
+                                       coverDoc.on( 'mouseup', mouseUpHandler );\r
+                               }\r
+\r
+                               evt.data.preventDefault();\r
+                       }, dialog );\r
+       }\r
+\r
+       function initResizeHandles( dialog )\r
+       {\r
+               var definition = dialog.definition,\r
+                       minWidth = definition.minWidth || 0,\r
+                       minHeight = definition.minHeight || 0,\r
+                       resizable = definition.resizable,\r
+                       margins = skinData[ dialog.getParentEditor().skinName ].margins || [ 0, 0, 0, 0 ];\r
+\r
+               function topSizer( coords, dy )\r
+               {\r
+                       coords.y += dy;\r
+               }\r
+\r
+               function rightSizer( coords, dx )\r
+               {\r
+                       coords.x2 += dx;\r
+               }\r
+\r
+               function bottomSizer( coords, dy )\r
+               {\r
+                       coords.y2 += dy;\r
+               }\r
+\r
+               function leftSizer( coords, dx )\r
+               {\r
+                       coords.x += dx;\r
+               }\r
+\r
+               var lastCoords = null,\r
+                       abstractDialogCoords = null,\r
+                       magnetDistance = dialog._.editor.config.magnetDistance,\r
+                       parts = [ 'tl', 't', 'tr', 'l', 'r', 'bl', 'b', 'br' ];\r
+\r
+               function mouseDownHandler( evt )\r
+               {\r
+                       var partName = evt.listenerData.part, size = dialog.getSize();\r
+                       abstractDialogCoords = dialog.getPosition();\r
+                       CKEDITOR.tools.extend( abstractDialogCoords,\r
+                               {\r
+                                       x2 : abstractDialogCoords.x + size.width,\r
+                                       y2 : abstractDialogCoords.y + size.height\r
+                               } );\r
+                       lastCoords = { x : evt.data.$.screenX, y : evt.data.$.screenY };\r
+\r
+                       CKEDITOR.document.on( 'mousemove', mouseMoveHandler, dialog, { part : partName } );\r
+                       CKEDITOR.document.on( 'mouseup', mouseUpHandler, dialog, { part : partName } );\r
+\r
+                       if ( CKEDITOR.env.ie6Compat )\r
+                       {\r
+                               var coverDoc = coverElement.getChild( 0 ).getFrameDocument();\r
+                               coverDoc.on( 'mousemove', mouseMoveHandler, dialog, { part : partName } );\r
+                               coverDoc.on( 'mouseup', mouseUpHandler, dialog, { part : partName } );\r
+                       }\r
+\r
+                       evt.data.preventDefault();\r
+               }\r
+\r
+               function mouseMoveHandler( evt )\r
+               {\r
+                       var x = evt.data.$.screenX,\r
+                               y = evt.data.$.screenY,\r
+                               dx = x - lastCoords.x,\r
+                               dy = y - lastCoords.y,\r
+                               viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(),\r
+                               partName = evt.listenerData.part;\r
+\r
+                       if ( partName.search( 't' ) != -1 )\r
+                               topSizer( abstractDialogCoords, dy );\r
+                       if ( partName.search( 'l' ) != -1 )\r
+                               leftSizer( abstractDialogCoords, dx );\r
+                       if ( partName.search( 'b' ) != -1 )\r
+                               bottomSizer( abstractDialogCoords, dy );\r
+                       if ( partName.search( 'r' ) != -1 )\r
+                               rightSizer( abstractDialogCoords, dx );\r
+\r
+                       lastCoords = { x : x, y : y };\r
+\r
+                       var realX, realY, realX2, realY2;\r
+\r
+                       if ( abstractDialogCoords.x + margins[3] < magnetDistance )\r
+                               realX = - margins[3];\r
+                       else if ( partName.search( 'l' ) != -1 && abstractDialogCoords.x2 - abstractDialogCoords.x < minWidth + magnetDistance )\r
+                               realX = abstractDialogCoords.x2 - minWidth;\r
+                       else\r
+                               realX = abstractDialogCoords.x;\r
+\r
+                       if ( abstractDialogCoords.y + margins[0] < magnetDistance )\r
+                               realY = - margins[0];\r
+                       else if ( partName.search( 't' ) != -1 && abstractDialogCoords.y2 - abstractDialogCoords.y < minHeight + magnetDistance )\r
+                               realY = abstractDialogCoords.y2 - minHeight;\r
+                       else\r
+                               realY = abstractDialogCoords.y;\r
+\r
+                       if ( abstractDialogCoords.x2 - margins[1] > viewPaneSize.width - magnetDistance )\r
+                               realX2 = viewPaneSize.width + margins[1] ;\r
+                       else if ( partName.search( 'r' ) != -1 && abstractDialogCoords.x2 - abstractDialogCoords.x < minWidth + magnetDistance )\r
+                               realX2 = abstractDialogCoords.x + minWidth;\r
+                       else\r
+                               realX2 = abstractDialogCoords.x2;\r
+\r
+                       if ( abstractDialogCoords.y2 - margins[2] > viewPaneSize.height - magnetDistance )\r
+                               realY2= viewPaneSize.height + margins[2] ;\r
+                       else if ( partName.search( 'b' ) != -1 && abstractDialogCoords.y2 - abstractDialogCoords.y < minHeight + magnetDistance )\r
+                               realY2 = abstractDialogCoords.y + minHeight;\r
+                       else\r
+                               realY2 = abstractDialogCoords.y2 ;\r
+\r
+                       dialog.move( realX, realY );\r
+                       dialog.resize( realX2 - realX, realY2 - realY );\r
+\r
+                       evt.data.preventDefault();\r
+               }\r
+\r
+               function mouseUpHandler( evt )\r
+               {\r
+                       CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler );\r
+                       CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler );\r
+\r
+                       if ( CKEDITOR.env.ie6Compat )\r
+                       {\r
+                               var coverDoc = coverElement.getChild( 0 ).getFrameDocument();\r
+                               coverDoc.removeListener( 'mouseup', mouseUpHandler );\r
+                               coverDoc.removeListener( 'mousemove', mouseMoveHandler );\r
+                       }\r
+               }\r
+\r
+// TODO : Simplify the resize logic, having just a single resize grip <div>.\r
+//             var widthTest = /[lr]/,\r
+//                     heightTest = /[tb]/;\r
+//             for ( var i = 0 ; i < parts.length ; i++ )\r
+//             {\r
+//                     var element = dialog.parts[ parts[i] + '_resize' ];\r
+//                     if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE ||\r
+//                                     resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT && widthTest.test( parts[i] ) ||\r
+//                                     resizable == CKEDITOR.DIALOG_RESIZE_WIDTH && heightTest.test( parts[i] ) )\r
+//                     {\r
+//                             element.hide();\r
+//                             continue;\r
+//                     }\r
+//                     element.on( 'mousedown', mouseDownHandler, dialog, { part : parts[i] } );\r
+//             }\r
+       }\r
+\r
+       var resizeCover;\r
+       var coverElement;\r
+\r
+       var addCover = function( editor )\r
+       {\r
+               var win = CKEDITOR.document.getWindow();\r
+\r
+               if ( !coverElement )\r
+               {\r
+                       var html = [\r
+                                       '<div style="position: ', ( CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed' ),\r
+                                       '; z-index: ', editor.config.baseFloatZIndex,\r
+                                       '; top: 0px; left: 0px; ',\r
+                                       'background-color: ', editor.config.dialog_backgroundCoverColor,\r
+                                       '" id="cke_dialog_background_cover">'\r
+                               ];\r
+\r
+\r
+                       if ( CKEDITOR.env.ie6Compat )\r
+                       {\r
+                               // Support for custom document.domain in IE.\r
+                               var isCustomDomain = CKEDITOR.env.isCustomDomain();\r
+\r
+                               html.push(\r
+                                       '<iframe' +\r
+                                               ' hidefocus="true"' +\r
+                                               ' frameborder="0"' +\r
+                                               ' id="cke_dialog_background_iframe"' +\r
+                                               ' src="javascript:' );\r
+\r
+                               html.push(\r
+                                               isCustomDomain ?\r
+                                                       'void((function(){' +\r
+                                                               'document.open();' +\r
+                                                               'document.domain=\'' + document.domain + '\';' +\r
+                                                               'document.close();' +\r
+                                                       '})())'\r
+                                               :\r
+                                                       '\'\'' );\r
+\r
+                               html.push(\r
+                                               '"' +\r
+                                               ' style="' +\r
+                                                       'position:absolute;' +\r
+                                                       'left:0;' +\r
+                                                       'top:0;' +\r
+                                                       'width:100%;' +\r
+                                                       'height: 100%;' +\r
+                                                       'progid:DXImageTransform.Microsoft.Alpha(opacity=0)">' +\r
+                                       '</iframe>' );\r
+                       }\r
+\r
+                       html.push( '</div>' );\r
+\r
+                       coverElement = CKEDITOR.dom.element.createFromHtml( html.join( '' ) );\r
+               }\r
+\r
+               var element = coverElement;\r
+\r
+               var resizeFunc = function()\r
+               {\r
+                       var size = win.getViewPaneSize();\r
+                       element.setStyles(\r
+                               {\r
+                                       width : size.width + 'px',\r
+                                       height : size.height + 'px'\r
+                               } );\r
+               };\r
+\r
+               var scrollFunc = function()\r
+               {\r
+                       var pos = win.getScrollPosition(),\r
+                               cursor = CKEDITOR.dialog._.currentTop;\r
+                       element.setStyles(\r
+                                       {\r
+                                               left : pos.x + 'px',\r
+                                               top : pos.y + 'px'\r
+                                       });\r
+\r
+                       do\r
+                       {\r
+                               var dialogPos = cursor.getPosition();\r
+                               cursor.move( dialogPos.x, dialogPos.y );\r
+                       } while( ( cursor = cursor._.parentDialog ) );\r
+               };\r
+\r
+               resizeCover = resizeFunc;\r
+               win.on( 'resize', resizeFunc );\r
+               resizeFunc();\r
+               if ( CKEDITOR.env.ie6Compat )\r
+               {\r
+                       // IE BUG: win.$.onscroll assignment doesn't work.. it must be window.onscroll.\r
+                       // So we need to invent a really funny way to make it work.\r
+                       var myScrollHandler = function()\r
+                               {\r
+                                       scrollFunc();\r
+                                       arguments.callee.prevScrollHandler.apply( this, arguments );\r
+                               };\r
+                       win.$.setTimeout( function()\r
+                               {\r
+                                       myScrollHandler.prevScrollHandler = window.onscroll || function(){};\r
+                                       window.onscroll = myScrollHandler;\r
+                               }, 0 );\r
+                       scrollFunc();\r
+               }\r
+               element.setOpacity( editor.config.dialog_backgroundCoverOpacity );\r
+               element.appendTo( CKEDITOR.document.getBody() );\r
+       };\r
+\r
+       var removeCover = function()\r
+       {\r
+               if ( !coverElement )\r
+                       return;\r
+\r
+               var win = CKEDITOR.document.getWindow();\r
+               coverElement.remove();\r
+               win.removeListener( 'resize', resizeCover );\r
+\r
+               if ( CKEDITOR.env.ie6Compat )\r
+               {\r
+                       win.$.setTimeout( function()\r
+                               {\r
+                                       var prevScrollHandler = window.onscroll && window.onscroll.prevScrollHandler;\r
+                                       window.onscroll = prevScrollHandler || null;\r
+                               }, 0 );\r
+               }\r
+               resizeCover = null;\r
+       };\r
+\r
+       var accessKeyProcessors = {};\r
+\r
+       var accessKeyDownHandler = function( evt )\r
+       {\r
+               var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey,\r
+                       alt = evt.data.$.altKey,\r
+                       shift = evt.data.$.shiftKey,\r
+                       key = String.fromCharCode( evt.data.$.keyCode ),\r
+                       keyProcessor = accessKeyProcessors[( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '') + ( shift ? 'SHIFT+' : '' ) + key];\r
+\r
+               if ( !keyProcessor || !keyProcessor.length )\r
+                       return;\r
+\r
+               keyProcessor = keyProcessor[keyProcessor.length - 1];\r
+               keyProcessor.keydown && keyProcessor.keydown.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key );\r
+               evt.data.preventDefault();\r
+       };\r
+\r
+       var accessKeyUpHandler = function( evt )\r
+       {\r
+               var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey,\r
+                       alt = evt.data.$.altKey,\r
+                       shift = evt.data.$.shiftKey,\r
+                       key = String.fromCharCode( evt.data.$.keyCode ),\r
+                       keyProcessor = accessKeyProcessors[( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '') + ( shift ? 'SHIFT+' : '' ) + key];\r
+\r
+               if ( !keyProcessor || !keyProcessor.length )\r
+                       return;\r
+\r
+               keyProcessor = keyProcessor[keyProcessor.length - 1];\r
+               keyProcessor.keyup && keyProcessor.keyup.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key );\r
+               evt.data.preventDefault();\r
+       };\r
+\r
+       var registerAccessKey = function( uiElement, dialog, key, downFunc, upFunc )\r
+       {\r
+               var procList = accessKeyProcessors[key] || ( accessKeyProcessors[key] = [] );\r
+               procList.push( {\r
+                               uiElement : uiElement,\r
+                               dialog : dialog,\r
+                               key : key,\r
+                               keyup : upFunc || uiElement.accessKeyUp,\r
+                               keydown : downFunc || uiElement.accessKeyDown\r
+                       } );\r
+       };\r
+\r
+       var unregisterAccessKey = function( obj )\r
+       {\r
+               for ( var i in accessKeyProcessors )\r
+               {\r
+                       var list = accessKeyProcessors[i];\r
+                       for ( var j = list.length - 1 ; j >= 0 ; j-- )\r
+                       {\r
+                               if ( list[j].dialog == obj || list[j].uiElement == obj )\r
+                                       list.splice( j, 1 );\r
+                       }\r
+                       if ( list.length === 0 )\r
+                               delete accessKeyProcessors[i];\r
+               }\r
+       };\r
+\r
+       var tabAccessKeyUp = function( dialog, key )\r
+       {\r
+               if ( dialog._.accessKeyMap[key] )\r
+                       dialog.selectPage( dialog._.accessKeyMap[key] );\r
+       };\r
+\r
+       var tabAccessKeyDown = function( dialog, key )\r
+       {\r
+       };\r
+\r
+       (function()\r
+       {\r
+               CKEDITOR.ui.dialog =\r
+               {\r
+                       /**\r
+                        * The base class of all dialog UI elements.\r
+                        * @constructor\r
+                        * @param {CKEDITOR.dialog} dialog Parent dialog object.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition Element\r
+                        * definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>id</strong> (Required) The id of the UI element. See {@link\r
+                        *      CKEDITOR.dialog#getContentElement}</li>\r
+                        *      <li><strong>type</strong> (Required) The type of the UI element. The\r
+                        *      value to this field specifies which UI element class will be used to\r
+                        *      generate the final widget.</li>\r
+                        *      <li><strong>title</strong> (Optional) The popup tooltip for the UI\r
+                        *      element.</li>\r
+                        *      <li><strong>hidden</strong> (Optional) A flag that tells if the element\r
+                        *      should be initially visible.</li>\r
+                        *      <li><strong>className</strong> (Optional) Additional CSS class names\r
+                        *      to add to the UI element. Separated by space.</li>\r
+                        *      <li><strong>style</strong> (Optional) Additional CSS inline styles\r
+                        *      to add to the UI element. A semicolon (;) is required after the last\r
+                        *      style declaration.</li>\r
+                        *      <li><strong>accessKey</strong> (Optional) The alphanumeric access key\r
+                        *      for this element. Access keys are automatically prefixed by CTRL.</li>\r
+                        *      <li><strong>on*</strong> (Optional) Any UI element definition field that\r
+                        *      starts with <em>on</em> followed immediately by a capital letter and\r
+                        *      probably more letters is an event handler. Event handlers may be further\r
+                        *      divided into registered event handlers and DOM event handlers. Please\r
+                        *      refer to {@link CKEDITOR.ui.dialog.uiElement#registerEvents} and\r
+                        *      {@link CKEDITOR.ui.dialog.uiElement#eventProcessors} for more\r
+                        *      information.</li>\r
+                        * </ul>\r
+                        * @param {Array} htmlList\r
+                        * List of HTML code to be added to the dialog's content area.\r
+                        * @param {Function|String} nodeNameArg\r
+                        * A function returning a string, or a simple string for the node name for\r
+                        * the root DOM node. Default is 'div'.\r
+                        * @param {Function|Object} stylesArg\r
+                        * A function returning an object, or a simple object for CSS styles applied\r
+                        * to the DOM node. Default is empty object.\r
+                        * @param {Function|Object} attributesArg\r
+                        * A fucntion returning an object, or a simple object for attributes applied\r
+                        * to the DOM node. Default is empty object.\r
+                        * @param {Function|String} contentsArg\r
+                        * A function returning a string, or a simple string for the HTML code inside\r
+                        * the root DOM node. Default is empty string.\r
+                        * @example\r
+                        */\r
+                       uiElement : function( dialog, elementDefinition, htmlList, nodeNameArg, stylesArg, attributesArg, contentsArg )\r
+                       {\r
+                               if ( arguments.length < 4 )\r
+                                       return;\r
+\r
+                               var nodeName = ( nodeNameArg.call ? nodeNameArg( elementDefinition ) : nodeNameArg ) || 'div',\r
+                                       html = [ '<', nodeName, ' ' ],\r
+                                       styles = ( stylesArg && stylesArg.call ? stylesArg( elementDefinition ) : stylesArg ) || {},\r
+                                       attributes = ( attributesArg && attributesArg.call ? attributesArg( elementDefinition ) : attributesArg ) || {},\r
+                                       innerHTML = ( contentsArg && contentsArg.call ? contentsArg( dialog, elementDefinition ) : contentsArg ) || '',\r
+                                       domId = this.domId = attributes.id || CKEDITOR.tools.getNextNumber() + '_uiElement',\r
+                                       id = this.id = elementDefinition.id,\r
+                                       i;\r
+\r
+                               // Set the id, a unique id is required for getElement() to work.\r
+                               attributes.id = domId;\r
+\r
+                               // Set the type and definition CSS class names.\r
+                               var classes = {};\r
+                               if ( elementDefinition.type )\r
+                                       classes[ 'cke_dialog_ui_' + elementDefinition.type ] = 1;\r
+                               if ( elementDefinition.className )\r
+                                       classes[ elementDefinition.className ] = 1;\r
+                               var attributeClasses = ( attributes['class'] && attributes['class'].split ) ? attributes['class'].split( ' ' ) : [];\r
+                               for ( i = 0 ; i < attributeClasses.length ; i++ )\r
+                               {\r
+                                       if ( attributeClasses[i] )\r
+                                               classes[ attributeClasses[i] ] = 1;\r
+                               }\r
+                               var finalClasses = [];\r
+                               for ( i in classes )\r
+                                       finalClasses.push( i );\r
+                               attributes['class'] = finalClasses.join( ' ' );\r
+\r
+                               // Set the popup tooltop.\r
+                               if ( elementDefinition.title )\r
+                                       attributes.title = elementDefinition.title;\r
+\r
+                               // Write the inline CSS styles.\r
+                               var styleStr = ( elementDefinition.style || '' ).split( ';' );\r
+                               for ( i in styles )\r
+                                       styleStr.push( i + ':' + styles[i] );\r
+                               if ( elementDefinition.hidden )\r
+                                       styleStr.push( 'display:none' );\r
+                               for ( i = styleStr.length - 1 ; i >= 0 ; i-- )\r
+                               {\r
+                                       if ( styleStr[i] === '' )\r
+                                               styleStr.splice( i, 1 );\r
+                               }\r
+                               if ( styleStr.length > 0 )\r
+                                       attributes.style = ( attributes.style ? ( attributes.style + '; ' ) : '' ) + styleStr.join( '; ' );\r
+\r
+                               // Write the attributes.\r
+                               for ( i in attributes )\r
+                                       html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[i] ) + '" ');\r
+\r
+                               // Write the content HTML.\r
+                               html.push( '>', innerHTML, '</', nodeName, '>' );\r
+\r
+                               // Add contents to the parent HTML array.\r
+                               htmlList.push( html.join( '' ) );\r
+\r
+                               ( this._ || ( this._ = {} ) ).dialog = dialog;\r
+\r
+                               // Override isChanged if it is defined in element definition.\r
+                               if ( typeof( elementDefinition.isChanged ) == 'boolean' )\r
+                                       this.isChanged = function(){ return elementDefinition.isChanged; };\r
+                               if ( typeof( elementDefinition.isChanged ) == 'function' )\r
+                                       this.isChanged = elementDefinition.isChanged;\r
+\r
+                               // Add events.\r
+                               CKEDITOR.event.implementOn( this );\r
+\r
+                               this.registerEvents( elementDefinition );\r
+                               if ( this.accessKeyUp && this.accessKeyDown && elementDefinition.accessKey )\r
+                                       registerAccessKey( this, dialog, 'CTRL+' + elementDefinition.accessKey );\r
+\r
+                               var me = this;\r
+                               dialog.on( 'load', function()\r
+                                       {\r
+                                               if ( me.getInputElement() )\r
+                                               {\r
+                                                       me.getInputElement().on( 'focus', function()\r
+                                                               {\r
+                                                                       dialog._.tabBarMode = false;\r
+                                                                       dialog._.hasFocus = true;\r
+                                                                       me.fire( 'focus' );\r
+                                                               }, me );\r
+                                               }\r
+                                       } );\r
+\r
+                               // Register the object as a tab focus if it can be included.\r
+                               if ( this.keyboardFocusable )\r
+                               {\r
+                                       this.focusIndex = dialog._.focusList.push( this ) - 1;\r
+                                       this.on( 'focus', function()\r
+                                               {\r
+                                                       dialog._.currentFocusIndex = me.focusIndex;\r
+                                               } );\r
+                               }\r
+\r
+                               // Completes this object with everything we have in the\r
+                               // definition.\r
+                               CKEDITOR.tools.extend( this, elementDefinition );\r
+                       },\r
+\r
+                       /**\r
+                        * Horizontal layout box for dialog UI elements, auto-expends to available width of container.\r
+                        * @constructor\r
+                        * @extends CKEDITOR.ui.dialog.uiElement\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {Array} childObjList\r
+                        * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this\r
+                        * container.\r
+                        * @param {Array} childHtmlList\r
+                        * Array of HTML code that correspond to the HTML output of all the\r
+                        * objects in childObjList.\r
+                        * @param {Array} htmlList\r
+                        * Array of HTML code that this element will output to.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>widths</strong> (Optional) The widths of child cells.</li>\r
+                        *      <li><strong>height</strong> (Optional) The height of the layout.</li>\r
+                        *      <li><strong>padding</strong> (Optional) The padding width inside child\r
+                        *       cells.</li>\r
+                        *      <li><strong>align</strong> (Optional) The alignment of the whole layout\r
+                        *      </li>\r
+                        * </ul>\r
+                        * @example\r
+                        */\r
+                       hbox : function( dialog, childObjList, childHtmlList, htmlList, elementDefinition )\r
+                       {\r
+                               if ( arguments.length < 4 )\r
+                                       return;\r
+\r
+                               this._ || ( this._ = {} );\r
+\r
+                               var children = this._.children = childObjList,\r
+                                       widths = elementDefinition && elementDefinition.widths || null,\r
+                                       height = elementDefinition && elementDefinition.height || null,\r
+                                       styles = {},\r
+                                       i;\r
+                               /** @ignore */\r
+                               var innerHTML = function()\r
+                               {\r
+                                       var html = [ '<tbody><tr class="cke_dialog_ui_hbox">' ];\r
+                                       for ( i = 0 ; i < childHtmlList.length ; i++ )\r
+                                       {\r
+                                               var className = 'cke_dialog_ui_hbox_child',\r
+                                                       styles = [];\r
+                                               if ( i === 0 )\r
+                                                       className = 'cke_dialog_ui_hbox_first';\r
+                                               if ( i == childHtmlList.length - 1 )\r
+                                                       className = 'cke_dialog_ui_hbox_last';\r
+                                               html.push( '<td class="', className, '" ' );\r
+                                               if ( widths )\r
+                                               {\r
+                                                       if ( widths[i] )\r
+                                                               styles.push( 'width:' + CKEDITOR.tools.cssLength( widths[i] ) );\r
+                                               }\r
+                                               else\r
+                                                       styles.push( 'width:' + Math.floor( 100 / childHtmlList.length ) + '%' );\r
+                                               if ( height )\r
+                                                       styles.push( 'height:' + CKEDITOR.tools.cssLength( height ) );\r
+                                               if ( elementDefinition && elementDefinition.padding != undefined )\r
+                                                       styles.push( 'padding:' + CKEDITOR.tools.cssLength( elementDefinition.padding ) );\r
+                                               if ( styles.length > 0 )\r
+                                                       html.push( 'style="' + styles.join('; ') + '" ' );\r
+                                               html.push( '>', childHtmlList[i], '</td>' );\r
+                                       }\r
+                                       html.push( '</tr></tbody>' );\r
+                                       return html.join( '' );\r
+                               };\r
+\r
+                               CKEDITOR.ui.dialog.uiElement.call(\r
+                                       this,\r
+                                       dialog,\r
+                                       elementDefinition || { type : 'hbox' },\r
+                                       htmlList,\r
+                                       'table',\r
+                                       styles,\r
+                                       elementDefinition && elementDefinition.align && { align : elementDefinition.align } || null,\r
+                                       innerHTML );\r
+                       },\r
+\r
+                       /**\r
+                        * Vertical layout box for dialog UI elements.\r
+                        * @constructor\r
+                        * @extends CKEDITOR.ui.dialog.hbox\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {Array} childObjList\r
+                        * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this\r
+                        * container.\r
+                        * @param {Array} childHtmlList\r
+                        * Array of HTML code that correspond to the HTML output of all the\r
+                        * objects in childObjList.\r
+                        * @param {Array} htmlList\r
+                        * Array of HTML code that this element will output to.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>width</strong> (Optional) The width of the layout.</li>\r
+                        *      <li><strong>heights</strong> (Optional) The heights of individual cells.\r
+                        *      </li>\r
+                        *      <li><strong>align</strong> (Optional) The alignment of the layout.</li>\r
+                        *      <li><strong>padding</strong> (Optional) The padding width inside child\r
+                        *      cells.</li>\r
+                        *      <li><strong>expand</strong> (Optional) Whether the layout should expand\r
+                        *      vertically to fill its container.</li>\r
+                        * </ul>\r
+                        * @example\r
+                        */\r
+                       vbox : function( dialog, childObjList, childHtmlList, htmlList, elementDefinition )\r
+                       {\r
+                               if (arguments.length < 3 )\r
+                                       return;\r
+\r
+                               this._ || ( this._ = {} );\r
+\r
+                               var children = this._.children = childObjList,\r
+                                       width = elementDefinition && elementDefinition.width || null,\r
+                                       heights = elementDefinition && elementDefinition.heights || null;\r
+                               /** @ignore */\r
+                               var innerHTML = function()\r
+                               {\r
+                                       var html = [ '<table cellspacing="0" border="0" ' ];\r
+                                       html.push( 'style="' );\r
+                                       if ( elementDefinition && elementDefinition.expand )\r
+                                               html.push( 'height:100%;' );\r
+                                       html.push( 'width:' + CKEDITOR.tools.cssLength( width || '100%' ), ';' );\r
+                                       html.push( '"' );\r
+                                       html.push( 'align="', CKEDITOR.tools.htmlEncode(\r
+                                               ( elementDefinition && elementDefinition.align ) || ( dialog.getParentEditor().lang.dir == 'ltr' ? 'left' : 'right' ) ), '" ' );\r
+\r
+                                       html.push( '><tbody>' );\r
+                                       for ( var i = 0 ; i < childHtmlList.length ; i++ )\r
+                                       {\r
+                                               var styles = [];\r
+                                               html.push( '<tr><td ' );\r
+                                               if ( width )\r
+                                                       styles.push( 'width:' + CKEDITOR.tools.cssLength( width || '100%' ) );\r
+                                               if ( heights )\r
+                                                       styles.push( 'height:' + CKEDITOR.tools.cssLength( heights[i] ) );\r
+                                               else if ( elementDefinition && elementDefinition.expand )\r
+                                                       styles.push( 'height:' + Math.floor( 100 / childHtmlList.length ) + '%' );\r
+                                               if ( elementDefinition && elementDefinition.padding != undefined )\r
+                                                       styles.push( 'padding:' + CKEDITOR.tools.cssLength( elementDefinition.padding ) );\r
+                                               if ( styles.length > 0 )\r
+                                                       html.push( 'style="', styles.join( '; ' ), '" ' );\r
+                                               html.push( ' class="cke_dialog_ui_vbox_child">', childHtmlList[i], '</td></tr>' );\r
+                                       }\r
+                                       html.push( '</tbody></table>' );\r
+                                       return html.join( '' );\r
+                               };\r
+                               CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type : 'vbox' }, htmlList, 'div', null, null, innerHTML );\r
+                       }\r
+               };\r
+       })();\r
+\r
+       CKEDITOR.ui.dialog.uiElement.prototype =\r
+       {\r
+               /**\r
+                * Gets the root DOM element of this dialog UI object.\r
+                * @returns {CKEDITOR.dom.element} Root DOM element of UI object.\r
+                * @example\r
+                * uiElement.getElement().hide();\r
+                */\r
+               getElement : function()\r
+               {\r
+                       return CKEDITOR.document.getById( this.domId );\r
+               },\r
+\r
+               /**\r
+                * Gets the DOM element that the user inputs values.\r
+                * This function is used by setValue(), getValue() and focus(). It should\r
+                * be overrided in child classes where the input element isn't the root\r
+                * element.\r
+                * @returns {CKEDITOR.dom.element} The element where the user input values.\r
+                * @example\r
+                * var rawValue = textInput.getInputElement().$.value;\r
+                */\r
+               getInputElement : function()\r
+               {\r
+                       return this.getElement();\r
+               },\r
+\r
+               /**\r
+                * Gets the parent dialog object containing this UI element.\r
+                * @returns {CKEDITOR.dialog} Parent dialog object.\r
+                * @example\r
+                * var dialog = uiElement.getDialog();\r
+                */\r
+               getDialog : function()\r
+               {\r
+                       return this._.dialog;\r
+               },\r
+\r
+               /**\r
+                * Sets the value of this dialog UI object.\r
+                * @param {Object} value The new value.\r
+                * @returns {CKEDITOR.dialog.uiElement} The current UI element.\r
+                * @example\r
+                * uiElement.setValue( 'Dingo' );\r
+                */\r
+               setValue : function( value )\r
+               {\r
+                       this.getInputElement().setValue( value );\r
+                       this.fire( 'change', { value : value } );\r
+                       return this;\r
+               },\r
+\r
+               /**\r
+                * Gets the current value of this dialog UI object.\r
+                * @returns {Object} The current value.\r
+                * @example\r
+                * var myValue = uiElement.getValue();\r
+                */\r
+               getValue : function()\r
+               {\r
+                       return this.getInputElement().getValue();\r
+               },\r
+\r
+               /**\r
+                * Tells whether the UI object's value has changed.\r
+                * @returns {Boolean} true if changed, false if not changed.\r
+                * @example\r
+                * if ( uiElement.isChanged() )\r
+                * &nbsp;&nbsp;confirm( 'Value changed! Continue?' );\r
+                */\r
+               isChanged : function()\r
+               {\r
+                       // Override in input classes.\r
+                       return false;\r
+               },\r
+\r
+               /**\r
+                * Selects the parent tab of this element. Usually called by focus() or overridden focus() methods.\r
+                * @returns {CKEDITOR.dialog.uiElement} The current UI element.\r
+                * @example\r
+                * focus : function()\r
+                * {\r
+                *              this.selectParentTab();\r
+                *              // do something else.\r
+                * }\r
+                */\r
+               selectParentTab : function()\r
+               {\r
+                       var element = this.getInputElement(),\r
+                               cursor = element,\r
+                               tabId;\r
+                       while ( ( cursor = cursor.getParent() ) && cursor.$.className.search( 'cke_dialog_page_contents' ) == -1 )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       // Some widgets don't have parent tabs (e.g. OK and Cancel buttons).\r
+                       if ( !cursor )\r
+                               return this;\r
+\r
+                       tabId = cursor.getAttribute( 'name' );\r
+                       // Avoid duplicate select.\r
+                       if ( this._.dialog._.currentTabId != tabId )\r
+                               this._.dialog.selectPage( tabId );\r
+                       return this;\r
+               },\r
+\r
+               /**\r
+                * Puts the focus to the UI object. Switches tabs if the UI object isn't in the active tab page.\r
+                * @returns {CKEDITOR.dialog.uiElement} The current UI element.\r
+                * @example\r
+                * uiElement.focus();\r
+                */\r
+               focus : function()\r
+               {\r
+                       this.selectParentTab().getInputElement().focus();\r
+                       return this;\r
+               },\r
+\r
+               /**\r
+                * Registers the on* event handlers defined in the element definition.\r
+                * The default behavior of this function is:\r
+                * <ol>\r
+                *  <li>\r
+                *      If the on* event is defined in the class's eventProcesors list,\r
+                *      then the registration is delegated to the corresponding function\r
+                *      in the eventProcessors list.\r
+                *  </li>\r
+                *  <li>\r
+                *      If the on* event is not defined in the eventProcessors list, then\r
+                *      register the event handler under the corresponding DOM event of\r
+                *      the UI element's input DOM element (as defined by the return value\r
+                *      of {@link CKEDITOR.ui.dialog.uiElement#getInputElement}).\r
+                *  </li>\r
+                * </ol>\r
+                * This function is only called at UI element instantiation, but can\r
+                * be overridded in child classes if they require more flexibility.\r
+                * @param {CKEDITOR.dialog.uiElementDefinition} definition The UI element\r
+                * definition.\r
+                * @returns {CKEDITOR.dialog.uiElement} The current UI element.\r
+                * @example\r
+                */\r
+               registerEvents : function( definition )\r
+               {\r
+                       var regex = /^on([A-Z]\w+)/,\r
+                               match;\r
+\r
+                       var registerDomEvent = function( uiElement, dialog, eventName, func )\r
+                       {\r
+                               dialog.on( 'load', function()\r
+                               {\r
+                                       uiElement.getInputElement().on( eventName, func, uiElement );\r
+                               });\r
+                       };\r
+\r
+                       for ( var i in definition )\r
+                       {\r
+                               if ( !( match = i.match( regex ) ) )\r
+                                       continue;\r
+                               if ( this.eventProcessors[i] )\r
+                                       this.eventProcessors[i].call( this, this._.dialog, definition[i] );\r
+                               else\r
+                                       registerDomEvent( this, this._.dialog, match[1].toLowerCase(), definition[i] );\r
+                       }\r
+\r
+                       return this;\r
+               },\r
+\r
+               /**\r
+                * The event processor list used by\r
+                * {@link CKEDITOR.ui.dialog.uiElement#getInputElement} at UI element\r
+                * instantiation. The default list defines three on* events:\r
+                * <ol>\r
+                *  <li>onLoad - Called when the element's parent dialog opens for the\r
+                *  first time</li>\r
+                *  <li>onShow - Called whenever the element's parent dialog opens.</li>\r
+                *  <li>onHide - Called whenever the element's parent dialog closes.</li>\r
+                * </ol>\r
+                * @field\r
+                * @type Object\r
+                * @example\r
+                * // This connects the 'click' event in CKEDITOR.ui.dialog.button to onClick\r
+                * // handlers in the UI element's definitions.\r
+                * CKEDITOR.ui.dialog.button.eventProcessors = CKEDITOR.tools.extend( {},\r
+                * &nbsp;&nbsp;CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,\r
+                * &nbsp;&nbsp;{ onClick : function( dialog, func ) { this.on( 'click', func ); } },\r
+                * &nbsp;&nbsp;true );\r
+                */\r
+               eventProcessors :\r
+               {\r
+                       onLoad : function( dialog, func )\r
+                       {\r
+                               dialog.on( 'load', func, this );\r
+                       },\r
+\r
+                       onShow : function( dialog, func )\r
+                       {\r
+                               dialog.on( 'show', func, this );\r
+                       },\r
+\r
+                       onHide : function( dialog, func )\r
+                       {\r
+                               dialog.on( 'hide', func, this );\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * The default handler for a UI element's access key down event, which\r
+                * tries to put focus to the UI element.<br />\r
+                * Can be overridded in child classes for more sophisticaed behavior.\r
+                * @param {CKEDITOR.dialog} dialog The parent dialog object.\r
+                * @param {String} key The key combination pressed. Since access keys\r
+                * are defined to always include the CTRL key, its value should always\r
+                * include a 'CTRL+' prefix.\r
+                * @example\r
+                */\r
+               accessKeyDown : function( dialog, key )\r
+               {\r
+                       this.focus();\r
+               },\r
+\r
+               /**\r
+                * The default handler for a UI element's access key up event, which\r
+                * does nothing.<br />\r
+                * Can be overridded in child classes for more sophisticated behavior.\r
+                * @param {CKEDITOR.dialog} dialog The parent dialog object.\r
+                * @param {String} key The key combination pressed. Since access keys\r
+                * are defined to always include the CTRL key, its value should always\r
+                * include a 'CTRL+' prefix.\r
+                * @example\r
+                */\r
+               accessKeyUp : function( dialog, key )\r
+               {\r
+               },\r
+\r
+               /**\r
+                * Disables a UI element.\r
+                * @example\r
+                */\r
+               disable : function()\r
+               {\r
+                       var element = this.getInputElement();\r
+                       element.setAttribute( 'disabled', 'true' );\r
+                       element.addClass( 'cke_disabled' );\r
+               },\r
+\r
+               /**\r
+                * Enables a UI element.\r
+                * @example\r
+                */\r
+               enable : function()\r
+               {\r
+                       var element = this.getInputElement();\r
+                       element.removeAttribute( 'disabled' );\r
+                       element.removeClass( 'cke_disabled' );\r
+               },\r
+\r
+               /**\r
+                * Determines whether an UI element is enabled or not.\r
+                * @returns {Boolean} Whether the UI element is enabled.\r
+                * @example\r
+                */\r
+               isEnabled : function()\r
+               {\r
+                       return !this.getInputElement().getAttribute( 'disabled' );\r
+               },\r
+\r
+               /**\r
+                * Determines whether an UI element is visible or not.\r
+                * @returns {Boolean} Whether the UI element is visible.\r
+                * @example\r
+                */\r
+               isVisible : function()\r
+               {\r
+                       return !!this.getInputElement().$.offsetHeight;\r
+               },\r
+\r
+               /**\r
+                * Determines whether an UI element is focus-able or not.\r
+                * Focus-able is defined as being both visible and enabled.\r
+                * @returns {Boolean} Whether the UI element can be focused.\r
+                * @example\r
+                */\r
+               isFocusable : function()\r
+               {\r
+                       if ( !this.isEnabled() || !this.isVisible() )\r
+                               return false;\r
+                       return true;\r
+               }\r
+       };\r
+\r
+       CKEDITOR.ui.dialog.hbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement,\r
+               /**\r
+                * @lends CKEDITOR.ui.dialog.hbox.prototype\r
+                */\r
+               {\r
+                       /**\r
+                        * Gets a child UI element inside this container.\r
+                        * @param {Array|Number} indices An array or a single number to indicate the child's\r
+                        * position in the container's descendant tree. Omit to get all the children in an array.\r
+                        * @returns {Array|CKEDITOR.ui.dialog.uiElement} Array of all UI elements in the container\r
+                        * if no argument given, or the specified UI element if indices is given.\r
+                        * @example\r
+                        * var checkbox = hbox.getChild( [0,1] );\r
+                        * checkbox.setValue( true );\r
+                        */\r
+                       getChild : function( indices )\r
+                       {\r
+                               // If no arguments, return a clone of the children array.\r
+                               if ( arguments.length < 1 )\r
+                                       return this._.children.concat();\r
+\r
+                               // If indices isn't array, make it one.\r
+                               if ( !indices.splice )\r
+                                       indices = [ indices ];\r
+\r
+                               // Retrieve the child element according to tree position.\r
+                               if ( indices.length < 2 )\r
+                                       return this._.children[ indices[0] ];\r
+                               else\r
+                                       return ( this._.children[ indices[0] ] && this._.children[ indices[0] ].getChild ) ?\r
+                                               this._.children[ indices[0] ].getChild( indices.slice( 1, indices.length ) ) :\r
+                                               null;\r
+                       }\r
+               }, true );\r
+\r
+       CKEDITOR.ui.dialog.vbox.prototype = new CKEDITOR.ui.dialog.hbox();\r
+\r
+\r
+\r
+       (function()\r
+       {\r
+               var commonBuilder = {\r
+                       build : function( dialog, elementDefinition, output )\r
+                       {\r
+                               var children = elementDefinition.children,\r
+                                       child,\r
+                                       childHtmlList = [],\r
+                                       childObjList = [];\r
+                               for ( var i = 0 ; ( i < children.length && ( child = children[i] ) ) ; i++ )\r
+                               {\r
+                                       var childHtml = [];\r
+                                       childHtmlList.push( childHtml );\r
+                                       childObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) );\r
+                               }\r
+                               return new CKEDITOR.ui.dialog[elementDefinition.type]( dialog, childObjList, childHtmlList, output, elementDefinition );\r
+                       }\r
+               };\r
+\r
+               CKEDITOR.dialog.addUIElement( 'hbox', commonBuilder );\r
+               CKEDITOR.dialog.addUIElement( 'vbox', commonBuilder );\r
+       })();\r
+\r
+       /**\r
+        * Generic dialog command. It opens a specific dialog when executed.\r
+        * @constructor\r
+        * @augments CKEDITOR.commandDefinition\r
+        * @param {string} dialogName The name of the dialog to open when executing\r
+        *              this command.\r
+        * @example\r
+        * // Register the "link" command, which opens the "link" dialog.\r
+        * editor.addCommand( 'link', <b>new CKEDITOR.dialogCommand( 'link' )</b> );\r
+        */\r
+       CKEDITOR.dialogCommand = function( dialogName )\r
+       {\r
+               this.dialogName = dialogName;\r
+       };\r
+\r
+       CKEDITOR.dialogCommand.prototype =\r
+       {\r
+               /** @ignore */\r
+               exec : function( editor )\r
+               {\r
+                       editor.openDialog( this.dialogName );\r
+               },\r
+               // Dialog commands just open a dialog ui, thus require no undo logic,\r
+               // undo support should dedicate to specific dialog implementation.\r
+               canUndo: false\r
+       };\r
+\r
+       (function()\r
+       {\r
+               var notEmptyRegex = /^([a]|[^a])+$/,\r
+                       integerRegex = /^\d*$/,\r
+                       numberRegex = /^\d*(?:\.\d+)?$/;\r
+\r
+               CKEDITOR.VALIDATE_OR = 1;\r
+               CKEDITOR.VALIDATE_AND = 2;\r
+\r
+               CKEDITOR.dialog.validate =\r
+               {\r
+                       functions : function()\r
+                       {\r
+                               return function()\r
+                               {\r
+                                       /**\r
+                                        * It's important for validate functions to be able to accept the value\r
+                                        * as argument in addition to this.getValue(), so that it is possible to\r
+                                        * combine validate functions together to make more sophisticated\r
+                                        * validators.\r
+                                        */\r
+                                       var value = this && this.getValue ? this.getValue() : arguments[0];\r
+\r
+                                       var msg = undefined,\r
+                                               relation = CKEDITOR.VALIDATE_AND,\r
+                                               functions = [], i;\r
+\r
+                                       for ( i = 0 ; i < arguments.length ; i++ )\r
+                                       {\r
+                                               if ( typeof( arguments[i] ) == 'function' )\r
+                                                       functions.push( arguments[i] );\r
+                                               else\r
+                                                       break;\r
+                                       }\r
+\r
+                                       if ( i < arguments.length && typeof( arguments[i] ) == 'string' )\r
+                                       {\r
+                                               msg = arguments[i];\r
+                                               i++;\r
+                                       }\r
+\r
+                                       if ( i < arguments.length && typeof( arguments[i]) == 'number' )\r
+                                               relation = arguments[i];\r
+\r
+                                       var passed = ( relation == CKEDITOR.VALIDATE_AND ? true : false );\r
+                                       for ( i = 0 ; i < functions.length ; i++ )\r
+                                       {\r
+                                               if ( relation == CKEDITOR.VALIDATE_AND )\r
+                                                       passed = passed && functions[i]( value );\r
+                                               else\r
+                                                       passed = passed || functions[i]( value );\r
+                                       }\r
+\r
+                                       if ( !passed )\r
+                                       {\r
+                                               if ( msg !== undefined )\r
+                                                       alert( msg );\r
+                                               if ( this && ( this.select || this.focus ) )\r
+                                                       ( this.select || this.focus )();\r
+                                               return false;\r
+                                       }\r
+\r
+                                       return true;\r
+                               };\r
+                       },\r
+\r
+                       regex : function( regex, msg )\r
+                       {\r
+                               /*\r
+                                * Can be greatly shortened by deriving from functions validator if code size\r
+                                * turns out to be more important than performance.\r
+                                */\r
+                               return function()\r
+                               {\r
+                                       var value = this && this.getValue ? this.getValue() : arguments[0];\r
+                                       if ( !regex.test( value ) )\r
+                                       {\r
+                                               if ( msg !== undefined )\r
+                                                       alert( msg );\r
+                                               if ( this && ( this.select || this.focus ) )\r
+                                               {\r
+                                                       if ( this.select )\r
+                                                               this.select();\r
+                                                       else\r
+                                                               this.focus();\r
+                                               }\r
+                                               return false;\r
+                                       }\r
+                                       return true;\r
+                               };\r
+                       },\r
+\r
+                       notEmpty : function( msg )\r
+                       {\r
+                               return this.regex( notEmptyRegex, msg );\r
+                       },\r
+\r
+                       integer : function( msg )\r
+                       {\r
+                               return this.regex( integerRegex, msg );\r
+                       },\r
+\r
+                       'number' : function( msg )\r
+                       {\r
+                               return this.regex( numberRegex, msg );\r
+                       },\r
+\r
+                       equals : function( value, msg )\r
+                       {\r
+                               return this.functions( function( val ){ return val == value; }, msg );\r
+                       },\r
+\r
+                       notEqual : function( value, msg )\r
+                       {\r
+                               return this.functions( function( val ){ return val != value; }, msg );\r
+                       }\r
+               };\r
+       })();\r
+\r
+       // Grab the margin data from skin definition and store it away.\r
+       CKEDITOR.skins.add = ( function()\r
+       {\r
+               var original = CKEDITOR.skins.add;\r
+               return function( skinName, skinDefinition )\r
+               {\r
+                       skinData[ skinName ] = { margins : skinDefinition.margins };\r
+                       return original.apply( this, arguments );\r
+               };\r
+       } )();\r
+})();\r
+\r
+// Extend the CKEDITOR.editor class with dialog specific functions.\r
+CKEDITOR.tools.extend( CKEDITOR.editor.prototype,\r
+       /** @lends CKEDITOR.editor.prototype */\r
+       {\r
+               /**\r
+                * Loads and opens a registered dialog.\r
+                * @param {String} dialogName The registered name of the dialog.\r
+                * @see CKEDITOR.dialog.add\r
+                * @example\r
+                * CKEDITOR.instances.editor1.openDialog( 'smiley' );\r
+                * @returns {CKEDITOR.dialog} The dialog object corresponding to the dialog displayed. null if the dialog name is not registered.\r
+                */\r
+               openDialog : function( dialogName )\r
+               {\r
+                       var dialogDefinitions = CKEDITOR.dialog._.dialogDefinitions[ dialogName ];\r
+\r
+                       // If the dialogDefinition is already loaded, open it immediately.\r
+                       if ( typeof dialogDefinitions == 'function' )\r
+                       {\r
+                               var storedDialogs = this._.storedDialogs ||\r
+                                       ( this._.storedDialogs = {} );\r
+\r
+                               var dialog = storedDialogs[ dialogName ] ||\r
+                                       ( storedDialogs[ dialogName ] = new CKEDITOR.dialog( this, dialogName ) );\r
+\r
+                               dialog.show();\r
+\r
+                               return dialog;\r
+                       }\r
+                       else if ( dialogDefinitions == 'failed' )\r
+                               throw new Error( '[CKEDITOR.dialog.openDialog] Dialog "' + dialogName + '" failed when loading definition.' );\r
+\r
+                       // Not loaded? Load the .js file first.\r
+                       var body = CKEDITOR.document.getBody(),\r
+                               cursor = body.$.style.cursor,\r
+                               me = this;\r
+\r
+                       body.setStyle( 'cursor', 'wait' );\r
+                       CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( dialogDefinitions ), function()\r
+                               {\r
+                                       // In case of plugin error, mark it as loading failed.\r
+                                       if ( typeof CKEDITOR.dialog._.dialogDefinitions[ dialogName ] != 'function' )\r
+                                                       CKEDITOR.dialog._.dialogDefinitions[ dialogName ] =  'failed';\r
+                                       me.openDialog( dialogName );\r
+                                       body.setStyle( 'cursor', cursor );\r
+                               } );\r
+\r
+                       return null;\r
+               }\r
+       });\r
+\r
+// Dialog related configurations.\r
+\r
+/**\r
+ * The color of the dialog background cover. It should be a valid CSS color\r
+ * string.\r
+ * @type String\r
+ * @default white\r
+ * @example\r
+ * config.dialog_backgroundCoverColor = 'rgb(255, 254, 253)';\r
+ */\r
+CKEDITOR.config.dialog_backgroundCoverColor = 'white';\r
+\r
+/**\r
+ * The opacity of the dialog background cover. It should be a number within the\r
+ * range [0.0, 1.0].\r
+ * @type Number\r
+ * @default 0.5\r
+ * @example\r
+ * config.dialog_backgroundCoverOpacity = 0.7;\r
+ */\r
+CKEDITOR.config.dialog_backgroundCoverOpacity = 0.5;\r
+\r
+/**\r
+ * The distance of magnetic borders used in moving and resizing dialogs,\r
+ * measured in pixels.\r
+ * @type Number\r
+ * @default 20\r
+ * @example\r
+ * config.dialog_magnetDistance = 30;\r
+ */\r
+CKEDITOR.config.dialog_magnetDistance = 20;\r
diff --git a/_source/plugins/dialogui/plugin.js b/_source/plugins/dialogui/plugin.js
new file mode 100644 (file)
index 0000000..d8b423d
--- /dev/null
@@ -0,0 +1,1319 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/** @fileoverview The "dialogui" plugin. */\r
+\r
+CKEDITOR.plugins.add( 'dialogui' );\r
+\r
+(function()\r
+{\r
+       var initPrivateObject = function( elementDefinition )\r
+       {\r
+               this._ || ( this._ = {} );\r
+               this._['default'] = this._.initValue = elementDefinition['default'] || '';\r
+               var args = [ this._ ];\r
+               for ( var i = 1 ; i < arguments.length ; i++ )\r
+                       args.push( arguments[i] );\r
+               args.push( true );\r
+               CKEDITOR.tools.extend.apply( CKEDITOR.tools, args );\r
+               return this._;\r
+       },\r
+       textBuilder =\r
+       {\r
+               build : function( dialog, elementDefinition, output )\r
+               {\r
+                       return new CKEDITOR.ui.dialog.textInput( dialog, elementDefinition, output );\r
+               }\r
+       },\r
+       commonBuilder =\r
+       {\r
+               build : function( dialog, elementDefinition, output )\r
+               {\r
+                       return new CKEDITOR.ui.dialog[elementDefinition.type]( dialog, elementDefinition, output );\r
+               }\r
+       },\r
+       commonPrototype =\r
+       {\r
+               isChanged : function()\r
+               {\r
+                       return this.getValue() != this.getInitValue();\r
+               },\r
+\r
+               reset : function()\r
+               {\r
+                       this.setValue( this.getInitValue() );\r
+               },\r
+\r
+               setInitValue : function()\r
+               {\r
+                       this._.initValue = this.getValue();\r
+               },\r
+\r
+               resetInitValue : function()\r
+               {\r
+                       this._.initValue = this._['default'];\r
+               },\r
+\r
+               getInitValue : function()\r
+               {\r
+                       return this._.initValue;\r
+               }\r
+       },\r
+       commonEventProcessors = CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,\r
+               {\r
+                       onChange : function( dialog, func )\r
+                       {\r
+                               if ( !this._.domOnChangeRegistered )\r
+                               {\r
+                                       dialog.on( 'load', function()\r
+                                               {\r
+                                                       this.getInputElement().on( 'change', function(){ this.fire( 'change', { value : this.getValue() } ); }, this );\r
+                                               }, this );\r
+                                       this._.domOnChangeRegistered = true;\r
+                               }\r
+\r
+                               this.on( 'change', func );\r
+                       }\r
+               }, true ),\r
+       eventRegex = /^on([A-Z]\w+)/,\r
+       cleanInnerDefinition = function( def )\r
+       {\r
+               // An inner UI element should not have the parent's type, title or events.\r
+               for ( var i in def )\r
+               {\r
+                       if ( eventRegex.test( i ) || i == 'title' || i == 'type' )\r
+                               delete def[i];\r
+               }\r
+               return def;\r
+       };\r
+\r
+       CKEDITOR.tools.extend( CKEDITOR.ui.dialog,\r
+               /** @lends CKEDITOR.ui.dialog */\r
+               {\r
+                       /**\r
+                        * Base class for all dialog elements with a textual label on the left.\r
+                        * @constructor\r
+                        * @example\r
+                        * @extends CKEDITOR.ui.dialog.uiElement\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>label</strong> (Required) The label string.</li>\r
+                        *      <li><strong>labelLayout</strong> (Optional) Put 'horizontal' here if the\r
+                        *      label element is to be layed out horizontally. Otherwise a vertical\r
+                        *      layout will be used.</li>\r
+                        *      <li><strong>widths</strong> (Optional) This applies only for horizontal\r
+                        *      layouts - an 2-element array of lengths to specify the widths of the\r
+                        *      label and the content element.</li>\r
+                        * </ul>\r
+                        * @param {Array} htmlList\r
+                        * List of HTML code to output to.\r
+                        * @param {Function} contentHtml\r
+                        * A function returning the HTML code string to be added inside the content\r
+                        * cell.\r
+                        */\r
+                       labeledElement : function( dialog, elementDefinition, htmlList, contentHtml )\r
+                       {\r
+                               if ( arguments.length < 4 )\r
+                                       return;\r
+\r
+                               var _ = initPrivateObject.call( this, elementDefinition );\r
+                               _.labelId = CKEDITOR.tools.getNextNumber() + '_label';\r
+                               var children = this._.children = [];\r
+                               /** @ignore */\r
+                               var innerHTML = function()\r
+                               {\r
+                                       var html = [];\r
+                                       if ( elementDefinition.labelLayout != 'horizontal' )\r
+                                               html.push( '<div class="cke_dialog_ui_labeled_label" id="',\r
+                                                               _.labelId,\r
+                                                               '" >',\r
+                                                               elementDefinition.label,\r
+                                                               '</div>',\r
+                                                               '<div class="cke_dialog_ui_labeled_content">',\r
+                                                               contentHtml( dialog, elementDefinition ),\r
+                                                               '</div>' );\r
+                                       else\r
+                                       {\r
+                                               var hboxDefinition = {\r
+                                                       type : 'hbox',\r
+                                                       widths : elementDefinition.widths,\r
+                                                       padding : 0,\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'html',\r
+                                                                       html : '<span class="cke_dialog_ui_labeled_label" ' +\r
+                                                                               'id="' + _.labelId + '">' +  CKEDITOR.tools.htmlEncode( elementDefinition.label ) +\r
+                                                                               '</span>'\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'html',\r
+                                                                       html : '<span class="cke_dialog_ui_labeled_content">' +\r
+                                                                               contentHtml( dialog, elementDefinition ) +\r
+                                                                               '</span>'\r
+                                                               }\r
+                                                       ]\r
+                                               };\r
+                                               CKEDITOR.dialog._.uiElementBuilders.hbox.build( dialog, hboxDefinition, html );\r
+                                       }\r
+                                       return html.join( '' );\r
+                               };\r
+                               CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'div', null, null, innerHTML );\r
+                       },\r
+\r
+                       /**\r
+                        * A text input with a label. This UI element class represents both the\r
+                        * single-line text inputs and password inputs in dialog boxes.\r
+                        * @constructor\r
+                        * @example\r
+                        * @extends CKEDITOR.ui.dialog.labeledElement\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>default</strong> (Optional) The default value.</li>\r
+                        *      <li><strong>validate</strong> (Optional) The validation function. </li>\r
+                        *      <li><strong>maxLength</strong> (Optional) The maximum length of text box\r
+                        *      contents.</li>\r
+                        *      <li><strong>size</strong> (Optional) The size of the text box. This is\r
+                        *      usually overridden by the size defined by the skin, however.</li>\r
+                        * </ul>\r
+                        * @param {Array} htmlList\r
+                        * List of HTML code to output to.\r
+                        */\r
+                       textInput : function( dialog, elementDefinition, htmlList )\r
+                       {\r
+                               if ( arguments.length < 3 )\r
+                                       return;\r
+\r
+                               initPrivateObject.call( this, elementDefinition );\r
+                               var domId = this._.inputId = CKEDITOR.tools.getNextNumber() + '_textInput',\r
+                                       attributes = { 'class' : 'cke_dialog_ui_input_' + elementDefinition.type, id : domId, type : 'text' },\r
+                                       i;\r
+\r
+                               // Set the validator, if any.\r
+                               if ( elementDefinition.validate )\r
+                                       this.validate = elementDefinition.validate;\r
+\r
+                               // Set the max length and size.\r
+                               if ( elementDefinition.maxLength )\r
+                                       attributes.maxlength = elementDefinition.maxLength;\r
+                               if ( elementDefinition.size )\r
+                                       attributes.size = elementDefinition.size;\r
+\r
+                               // If user presses Enter in a text box, it implies clicking OK for the dialog.\r
+                               var me = this, keyPressedOnMe = false;\r
+                               dialog.on( 'load', function()\r
+                                       {\r
+                                               me.getInputElement().on( 'keydown', function( evt )\r
+                                                       {\r
+                                                               if ( evt.data.getKeystroke() == 13 )\r
+                                                                       keyPressedOnMe = true;\r
+                                                       } );\r
+\r
+                                               // Lower the priority this 'keyup' since 'ok' will close the dialog.(#3749)\r
+                                               me.getInputElement().on( 'keyup', function( evt )\r
+                                                       {\r
+                                                               if ( evt.data.getKeystroke() == 13 && keyPressedOnMe )\r
+                                                               {\r
+                                                                       dialog.getButton( 'ok' ) && dialog.getButton( 'ok' ).click();\r
+                                                                       keyPressedOnMe = false;\r
+                                                               }\r
+                                                       }, null, null, 1000 );\r
+                                       } );\r
+\r
+                               /** @ignore */\r
+                               var innerHTML = function()\r
+                               {\r
+                                       // IE BUG: Text input fields in IE at 100% would exceed a <td> or inline\r
+                                       // container's width, so need to wrap it inside a <div>.\r
+                                       var html = [ '<div class="cke_dialog_ui_input_', elementDefinition.type, '"' ];\r
+\r
+                                       if ( elementDefinition.width )\r
+                                               html.push( 'style="width:'+ elementDefinition.width +'" ' );\r
+\r
+                                       html.push( '><input ' );\r
+                                       for ( var i in attributes )\r
+                                               html.push( i + '="' + attributes[i] + '" ' );\r
+                                       html.push( ' /></div>' );\r
+                                       return html.join( '' );\r
+                               };\r
+                               CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );\r
+                       },\r
+\r
+                       /**\r
+                        * A text area with a label on the top or left.\r
+                        * @constructor\r
+                        * @extends CKEDITOR.ui.dialog.labeledElement\r
+                        * @example\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>rows</strong> (Optional) The number of rows displayed.\r
+                        *      Defaults to 5 if not defined.</li>\r
+                        *      <li><strong>cols</strong> (Optional) The number of cols displayed.\r
+                        *      Defaults to 20 if not defined. Usually overridden by skins.</li>\r
+                        *      <li><strong>default</strong> (Optional) The default value.</li>\r
+                        *      <li><strong>validate</strong> (Optional) The validation function. </li>\r
+                        * </ul>\r
+                        * @param {Array} htmlList\r
+                        * List of HTML code to output to.\r
+                        */\r
+                       textarea : function( dialog, elementDefinition, htmlList )\r
+                       {\r
+                               if ( arguments.length < 3 )\r
+                                       return;\r
+\r
+                               initPrivateObject.call( this, elementDefinition );\r
+                               var me = this,\r
+                                       domId = this._.inputId = CKEDITOR.tools.getNextNumber() + '_textarea',\r
+                                       attributes = {};\r
+\r
+                               if ( elementDefinition.validate )\r
+                                       this.validate = elementDefinition.validate;\r
+\r
+                               // Generates the essential attributes for the textarea tag.\r
+                               attributes.rows = elementDefinition.rows || 5;\r
+                               attributes.cols = elementDefinition.cols || 20;\r
+\r
+                               /** @ignore */\r
+                               var innerHTML = function()\r
+                               {\r
+                                       var html = [ '<div class="cke_dialog_ui_input_textarea"><textarea class="cke_dialog_ui_input_textarea" id="', domId, '" ' ];\r
+                                       for ( var i in attributes )\r
+                                               html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[i] ) + '" ' );\r
+                                       html.push( '>', CKEDITOR.tools.htmlEncode( me._['default'] ), '</textarea></div>' );\r
+                                       return html.join( '' );\r
+                               };\r
+                               CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );\r
+                       },\r
+\r
+                       /**\r
+                        * A single checkbox with a label on the right.\r
+                        * @constructor\r
+                        * @extends CKEDITOR.ui.dialog.uiElement\r
+                        * @example\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>checked</strong> (Optional) Whether the checkbox is checked\r
+                        *      on instantiation. Defaults to false.</li>\r
+                        *      <li><strong>validate</strong> (Optional) The validation function.</li>\r
+                        *      <li><strong>label</strong> (Optional) The checkbox label.</li>\r
+                        * </ul>\r
+                        * @param {Array} htmlList\r
+                        * List of HTML code to output to.\r
+                        */\r
+                       checkbox : function( dialog, elementDefinition, htmlList )\r
+                       {\r
+                               if ( arguments.length < 3 )\r
+                                       return;\r
+\r
+                               var _ = initPrivateObject.call( this, elementDefinition, { 'default' : !!elementDefinition[ 'default' ] } );\r
+\r
+                               if ( elementDefinition.validate )\r
+                                       this.validate = elementDefinition.validate;\r
+\r
+                               /** @ignore */\r
+                               var innerHTML = function()\r
+                               {\r
+                                       var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition,\r
+                                                       {\r
+                                                               id : elementDefinition.id ? elementDefinition.id + '_checkbox' : CKEDITOR.tools.getNextNumber() + '_checkbox'\r
+                                                       }, true ),\r
+                                               html = [],\r
+                                               attributes = { 'class' : 'cke_dialog_ui_checkbox_input', type : 'checkbox' };\r
+                                       cleanInnerDefinition( myDefinition );\r
+                                       if ( elementDefinition[ 'default' ] )\r
+                                               attributes.checked = 'checked';\r
+                                       _.checkbox = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'input', null, attributes );\r
+                                       html.push( ' <label for="', attributes.id, '">',\r
+                                                       CKEDITOR.tools.htmlEncode( elementDefinition.label ),\r
+                                                       '</label>' );\r
+                                       return html.join( '' );\r
+                               };\r
+\r
+                               CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'span', null, null, innerHTML );\r
+                       },\r
+\r
+                       /**\r
+                        * A group of radio buttons.\r
+                        * @constructor\r
+                        * @example\r
+                        * @extends CKEDITOR.ui.dialog.labeledElement\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>default</strong> (Required) The default value.</li>\r
+                        *      <li><strong>validate</strong> (Optional) The validation function.</li>\r
+                        *      <li><strong>items</strong> (Required) An array of options. Each option\r
+                        *      is a 1- or 2-item array of format [ 'Description', 'Value' ]. If 'Value'\r
+                        *      is missing, then the value would be assumed to be the same as the\r
+                        *      description.</li>\r
+                        * </ul>\r
+                        * @param {Array} htmlList\r
+                        * List of HTML code to output to.\r
+                        */\r
+                       radio : function( dialog, elementDefinition, htmlList )\r
+                       {\r
+                               if ( arguments.length < 3)\r
+                                       return;\r
+\r
+                               initPrivateObject.call( this, elementDefinition );\r
+                               if ( !this._['default'] )\r
+                                       this._['default'] = this._.initValue = elementDefinition.items[0][1];\r
+                               if ( elementDefinition.validate )\r
+                                       this.validate = elementDefinition.valdiate;\r
+                               var children = [], me = this;\r
+\r
+                               /** @ignore */\r
+                               var innerHTML = function()\r
+                               {\r
+                                       var inputHtmlList = [], html = [],\r
+                                               commonAttributes = { 'class' : 'cke_dialog_ui_radio_item' },\r
+                                               commonName = elementDefinition.id ? elementDefinition.id + '_radio' : CKEDITOR.tools.getNextNumber() + '_radio';\r
+                                       for ( var i = 0 ; i < elementDefinition.items.length ; i++ )\r
+                                       {\r
+                                               var item = elementDefinition.items[i],\r
+                                                       title = item[2] !== undefined ? item[2] : item[0],\r
+                                                       value = item[1] !== undefined ? item[1] : item[0],\r
+                                                       inputDefinition = CKEDITOR.tools.extend( {}, elementDefinition,\r
+                                                                       {\r
+                                                                               id : CKEDITOR.tools.getNextNumber() + '_radio_input',\r
+                                                                               title : null,\r
+                                                                               type : null\r
+                                                                       }, true ),\r
+                                                       labelDefinition = CKEDITOR.tools.extend( {}, inputDefinition,\r
+                                                                       {\r
+                                                                               id : null,\r
+                                                                               title : title\r
+                                                                       }, true ),\r
+                                                       inputAttributes =\r
+                                                       {\r
+                                                               type : 'radio',\r
+                                                               'class' : 'cke_dialog_ui_radio_input',\r
+                                                               name : commonName,\r
+                                                               value : value\r
+                                                       },\r
+                                                       inputHtml = [];\r
+                                               if ( me._['default'] == value )\r
+                                                       inputAttributes.checked = 'checked';\r
+                                               cleanInnerDefinition( inputDefinition );\r
+                                               cleanInnerDefinition( labelDefinition );\r
+                                               children.push( new CKEDITOR.ui.dialog.uiElement( dialog, inputDefinition, inputHtml, 'input', null, inputAttributes ) );\r
+                                               inputHtml.push( ' ' );\r
+                                               new CKEDITOR.ui.dialog.uiElement( dialog, labelDefinition, inputHtml, 'label', null, { 'for' : inputAttributes.id },\r
+                                                          item[0] );\r
+                                               inputHtmlList.push( inputHtml.join( '' ) );\r
+                                       }\r
+                                       new CKEDITOR.ui.dialog.hbox( dialog, [], inputHtmlList, html );\r
+                                       return html.join( '' );\r
+                               };\r
+\r
+                               CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );\r
+                               this._.children = children;\r
+                       },\r
+\r
+                       /**\r
+                        * A button with a label inside.\r
+                        * @constructor\r
+                        * @example\r
+                        * @extends CKEDITOR.ui.dialog.uiElement\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>label</strong> (Required) The button label.</li>\r
+                        *      <li><strong>disabled</strong> (Optional) Set to true if you want the\r
+                        *      button to appear in disabled state.</li>\r
+                        * </ul>\r
+                        * @param {Array} htmlList\r
+                        * List of HTML code to output to.\r
+                        */\r
+                       button : function( dialog, elementDefinition, htmlList )\r
+                       {\r
+                               if ( !arguments.length )\r
+                                       return;\r
+\r
+                               if ( typeof elementDefinition == 'function' )\r
+                                       elementDefinition = elementDefinition( dialog.getParentEditor() );\r
+\r
+                               initPrivateObject.call( this, elementDefinition, { disabled : elementDefinition.disabled || false } );\r
+\r
+                               // Add OnClick event to this input.\r
+                               CKEDITOR.event.implementOn( this );\r
+\r
+                               var me = this;\r
+\r
+                               // Register an event handler for processing button clicks.\r
+                               dialog.on( 'load', function( eventInfo )\r
+                                       {\r
+                                               var element = this.getElement();\r
+\r
+                                               (function()\r
+                                               {\r
+                                                       element.on( 'click', function( evt )\r
+                                                               {\r
+                                                                       me.fire( 'click', { dialog : me.getDialog() } );\r
+                                                                       evt.data.preventDefault();\r
+                                                               } );\r
+                                               })();\r
+\r
+                                               element.unselectable();\r
+                                       }, this );\r
+\r
+                               var outerDefinition = CKEDITOR.tools.extend( {}, elementDefinition );\r
+                               delete outerDefinition.style;\r
+\r
+                               CKEDITOR.ui.dialog.uiElement.call(\r
+                                       this,\r
+                                       dialog,\r
+                                       outerDefinition,\r
+                                       htmlList,\r
+                                       'a',\r
+                                       null,\r
+                                       {\r
+                                               style : elementDefinition.style,\r
+                                               href : 'javascript:void(0)',\r
+                                               title : elementDefinition.label,\r
+                                               hidefocus : 'true',\r
+                                               'class' : elementDefinition['class']\r
+                                       },\r
+                                       '<span class="cke_dialog_ui_button">' +\r
+                                               CKEDITOR.tools.htmlEncode( elementDefinition.label ) +\r
+                                       '</span>' );\r
+                       },\r
+\r
+                       /**\r
+                        * A select box.\r
+                        * @extends CKEDITOR.ui.dialog.uiElement\r
+                        * @example\r
+                        * @constructor\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>default</strong> (Required) The default value.</li>\r
+                        *      <li><strong>validate</strong> (Optional) The validation function.</li>\r
+                        *      <li><strong>items</strong> (Required) An array of options. Each option\r
+                        *      is a 1- or 2-item array of format [ 'Description', 'Value' ]. If 'Value'\r
+                        *      is missing, then the value would be assumed to be the same as the\r
+                        *      description.</li>\r
+                        *      <li><strong>multiple</strong> (Optional) Set this to true if you'd like\r
+                        *      to have a multiple-choice select box.</li>\r
+                        *      <li><strong>size</strong> (Optional) The number of items to display in\r
+                        *      the select box.</li>\r
+                        * </ul>\r
+                        * @param {Array} htmlList\r
+                        * List of HTML code to output to.\r
+                        */\r
+                       select : function( dialog, elementDefinition, htmlList )\r
+                       {\r
+                               if ( arguments.length < 3 )\r
+                                       return;\r
+\r
+                               var _ = initPrivateObject.call( this, elementDefinition );\r
+\r
+                               if ( elementDefinition.validate )\r
+                                       this.validate = elementDefinition.validate;\r
+\r
+                               /** @ignore */\r
+                               var innerHTML = function()\r
+                               {\r
+                                       var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition,\r
+                                                       {\r
+                                                               id : elementDefinition.id ? elementDefinition.id + '_select' : CKEDITOR.tools.getNextNumber() + '_select'\r
+                                                       }, true ),\r
+                                               html = [],\r
+                                               innerHTML = [],\r
+                                               attributes = { 'class' : 'cke_dialog_ui_input_select' };\r
+\r
+                                       // Add multiple and size attributes from element definition.\r
+                                       if ( elementDefinition.size != undefined )\r
+                                               attributes.size = elementDefinition.size;\r
+                                       if ( elementDefinition.multiple != undefined )\r
+                                               attributes.multiple = elementDefinition.multiple;\r
+\r
+                                       cleanInnerDefinition( myDefinition );\r
+                                       for ( var i = 0, item ; i < elementDefinition.items.length && ( item = elementDefinition.items[i] ) ; i++ )\r
+                                       {\r
+                                               innerHTML.push( '<option value="',\r
+                                                       CKEDITOR.tools.htmlEncode( item[1] !== undefined ? item[1] : item[0] ), '" /> ',\r
+                                                       CKEDITOR.tools.htmlEncode( item[0] ) );\r
+                                       }\r
+\r
+                                       _.select = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'select', null, attributes, innerHTML.join( '' ) );\r
+                                       return html.join( '' );\r
+                               };\r
+\r
+                               CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );\r
+                       },\r
+\r
+                       /**\r
+                        * A file upload input.\r
+                        * @extends CKEDITOR.ui.dialog.labeledElement\r
+                        * @example\r
+                        * @constructor\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>validate</strong> (Optional) The validation function.</li>\r
+                        * </ul>\r
+                        * @param {Array} htmlList\r
+                        * List of HTML code to output to.\r
+                        */\r
+                       file : function( dialog, elementDefinition, htmlList )\r
+                       {\r
+                               if ( arguments.length < 3 )\r
+                                       return;\r
+\r
+                               if ( elementDefinition['default'] === undefined )\r
+                                       elementDefinition['default'] = '';\r
+\r
+                               var _ = CKEDITOR.tools.extend( initPrivateObject.call( this, elementDefinition ), { definition : elementDefinition, buttons : [] } );\r
+\r
+                               if ( elementDefinition.validate )\r
+                                       this.validate = elementDefinition.validate;\r
+\r
+                               /** @ignore */\r
+                               var innerHTML = function()\r
+                               {\r
+                                       _.frameId = CKEDITOR.tools.getNextNumber() + '_fileInput';\r
+\r
+                                       // Support for custom document.domain in IE.\r
+                                       var isCustomDomain = CKEDITOR.env.ie && document.domain != window.location.hostname;\r
+\r
+                                       var html = [\r
+                                               '<iframe' +\r
+                                                       ' frameborder="0"' +\r
+                                                       ' allowtransparency="0"' +\r
+                                                       ' class="cke_dialog_ui_input_file"' +\r
+                                                       ' id="', _.frameId, '"' +\r
+                                                       ' title="', elementDefinition.label, '"' +\r
+                                                       ' src="javascript:void(' ];\r
+\r
+                                       html.push(\r
+                                                       isCustomDomain ?\r
+                                                               '(function(){' +\r
+                                                                       'document.open();' +\r
+                                                                       'document.domain=\'' + document.domain + '\';' +\r
+                                                                       'document.close();' +\r
+                                                               '})()'\r
+                                                       :\r
+                                                               '0' );\r
+\r
+                                       html.push(\r
+                                                       ')">' +\r
+                                               '</iframe>' );\r
+\r
+                                       return html.join( '' );\r
+                               };\r
+\r
+                               // IE BUG: Parent container does not resize to contain the iframe automatically.\r
+                               dialog.on( 'load', function()\r
+                                       {\r
+                                               var iframe = CKEDITOR.document.getById( _.frameId ),\r
+                                                       contentDiv = iframe.getParent();\r
+                                               contentDiv.addClass( 'cke_dialog_ui_input_file' );\r
+                                       } );\r
+\r
+                               CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );\r
+                       },\r
+\r
+                       /**\r
+                        * A button for submitting the file in a file upload input.\r
+                        * @extends CKEDITOR.ui.dialog.button\r
+                        * @example\r
+                        * @constructor\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>for</strong> (Required) The file input's page and element Id\r
+                        *      to associate to, in a 2-item array format: [ 'page_id', 'element_id' ].\r
+                        *      </li>\r
+                        *      <li><strong>validate</strong> (Optional) The validation function.</li>\r
+                        * </ul>\r
+                        * @param {Array} htmlList\r
+                        * List of HTML code to output to.\r
+                        */\r
+                       fileButton : function( dialog, elementDefinition, htmlList )\r
+                       {\r
+                               if ( arguments.length < 3 )\r
+                                       return;\r
+\r
+                               var _ = initPrivateObject.call( this, elementDefinition ),\r
+                                       me = this;\r
+\r
+                               if ( elementDefinition.validate )\r
+                                       this.validate = elementDefinition.validate;\r
+\r
+                               var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition );\r
+                               var onClick = myDefinition.onClick;\r
+                               myDefinition.className = ( myDefinition.className ? myDefinition.className + ' ' : '' ) + 'cke_dialog_ui_button';\r
+                               myDefinition.onClick = function( evt )\r
+                               {\r
+                                       var target = elementDefinition[ 'for' ];                // [ pageId, elementId ]\r
+                                       if ( !onClick || onClick.call( this, evt ) !== false )\r
+                                       {\r
+                                               dialog.getContentElement( target[0], target[1] ).submit();\r
+                                               this.disable();\r
+                                       }\r
+                               };\r
+\r
+                               dialog.on( 'load', function()\r
+                                               {\r
+                                                       dialog.getContentElement( elementDefinition[ 'for' ][0], elementDefinition[ 'for' ][1] )._.buttons.push( me );\r
+                                               } );\r
+\r
+                               CKEDITOR.ui.dialog.button.call( this, dialog, myDefinition, htmlList );\r
+                       },\r
+\r
+                       html : (function()\r
+                       {\r
+                               var myHtmlRe = /^\s*<[\w:]+\s+([^>]*)?>/,\r
+                                       theirHtmlRe = /^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,\r
+                                       emptyTagRe = /\/$/;\r
+                               /**\r
+                                * A dialog element made from raw HTML code.\r
+                                * @extends CKEDITOR.ui.dialog.uiElement\r
+                                * @name CKEDITOR.ui.dialog.html\r
+                                * @param {CKEDITOR.dialog} dialog Parent dialog object.\r
+                                * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition Element definition.\r
+                                * Accepted fields:\r
+                                * <ul>\r
+                                *      <li><strong>html</strong> (Required) HTML code of this element.</li>\r
+                                * </ul>\r
+                                * @param {Array} htmlList List of HTML code to be added to the dialog's content area.\r
+                                * @example\r
+                                * @constructor\r
+                                */\r
+                               return function( dialog, elementDefinition, htmlList )\r
+                               {\r
+                                       if ( arguments.length < 3 )\r
+                                               return;\r
+\r
+                                       var myHtmlList = [],\r
+                                               myHtml,\r
+                                               theirHtml = elementDefinition.html,\r
+                                               myMatch, theirMatch;\r
+\r
+                                       // If the HTML input doesn't contain any tags at the beginning, add a <span> tag around it.\r
+                                       if ( theirHtml.charAt( 0 ) != '<' )\r
+                                               theirHtml = '<span>' + theirHtml + '</span>';\r
+\r
+                                       // Look for focus function in definition.\r
+                                       if ( elementDefinition.focus )\r
+                                       {\r
+                                               var oldFocus = this.focus;\r
+                                               this.focus = function()\r
+                                               {\r
+                                                       oldFocus.call( this );\r
+                                                       elementDefinition.focus.call( this );\r
+                                                       this.fire( 'focus' );\r
+                                               };\r
+                                               if ( elementDefinition.isFocusable )\r
+                                               {\r
+                                                       var oldIsFocusable = this.isFocusable;\r
+                                                       this.isFocusable = oldIsFocusable;\r
+                                               }\r
+                                               this.keyboardFocusable = true;\r
+                                       }\r
+\r
+                                       CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, myHtmlList, 'span', null, null, '' );\r
+\r
+                                       // Append the attributes created by the uiElement call to the real HTML.\r
+                                       myHtml = myHtmlList.join( '' );\r
+                                       myMatch = myHtml.match( myHtmlRe );\r
+                                       theirMatch = theirHtml.match( theirHtmlRe ) || [ '', '', '' ];\r
+\r
+                                       if ( emptyTagRe.test( theirMatch[1] ) )\r
+                                       {\r
+                                               theirMatch[1] = theirMatch[1].slice( 0, -1 );\r
+                                               theirMatch[2] = '/' + theirMatch[2];\r
+                                       }\r
+\r
+                                       htmlList.push( [ theirMatch[1], ' ', myMatch[1] || '', theirMatch[2] ].join( '' ) );\r
+                               };\r
+                       })()\r
+               }, true );\r
+\r
+       CKEDITOR.ui.dialog.html.prototype = new CKEDITOR.ui.dialog.uiElement;\r
+\r
+       CKEDITOR.ui.dialog.labeledElement.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement,\r
+                       /** @lends CKEDITOR.ui.dialog.labeledElement.prototype */\r
+                       {\r
+                               /**\r
+                                * Sets the label text of the element.\r
+                                * @param {String} label The new label text.\r
+                                * @returns {CKEDITOR.ui.dialog.labeledElement} The current labeled element.\r
+                                * @example\r
+                                */\r
+                               setLabel : function( label )\r
+                               {\r
+                                       var node = CKEDITOR.document.getById( this._.labelId );\r
+                                       if ( node.getChildCount() < 1 )\r
+                                               ( new CKEDITOR.dom.text( label, CKEDITOR.document ) ).appendTo( node );\r
+                                       else\r
+                                               node.getChild( 0 ).$.nodeValue = label;\r
+                                       return this;\r
+                               },\r
+\r
+                               /**\r
+                                * Retrieves the current label text of the elment.\r
+                                * @returns {String} The current label text.\r
+                                * @example\r
+                                */\r
+                               getLabel : function()\r
+                               {\r
+                                       var node = CKEDITOR.document.getById( this._.labelId );\r
+                                       if ( !node || node.getChildCount() < 1 )\r
+                                               return '';\r
+                                       else\r
+                                               return node.getChild( 0 ).getText();\r
+                               },\r
+\r
+                               /**\r
+                                * Defines the onChange event for UI element definitions.\r
+                                * @field\r
+                                * @type Object\r
+                                * @example\r
+                                */\r
+                               eventProcessors : commonEventProcessors\r
+                       }, true );\r
+\r
+       CKEDITOR.ui.dialog.button.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement,\r
+                       /** @lends CKEDITOR.ui.dialog.button.prototype */\r
+                       {\r
+                               /**\r
+                                * Simulates a click to the button.\r
+                                * @example\r
+                                * @returns {Object} Return value of the 'click' event.\r
+                                */\r
+                               click : function()\r
+                               {\r
+                                       if ( !this._.disabled )\r
+                                               return this.fire( 'click', { dialog : this._.dialog } );\r
+                                       this.getElement().$.blur();\r
+                                       return false;\r
+                               },\r
+\r
+                               /**\r
+                                * Enables the button.\r
+                                * @example\r
+                                */\r
+                               enable : function()\r
+                               {\r
+                                       this._.disabled = false;\r
+                                       var element = this.getElement();\r
+                                       element && element.removeClass( 'disabled' );\r
+                               },\r
+\r
+                               /**\r
+                                * Disables the button.\r
+                                * @example\r
+                                */\r
+                               disable : function()\r
+                               {\r
+                                       this._.disabled = true;\r
+                                       this.getElement().addClass( 'disabled' );\r
+                               },\r
+\r
+                               isVisible : function()\r
+                               {\r
+                                       return !!this.getElement().$.firstChild.offsetHeight;\r
+                               },\r
+\r
+                               isEnabled : function()\r
+                               {\r
+                                       return !this._.disabled;\r
+                               },\r
+\r
+                               /**\r
+                                * Defines the onChange event and onClick for button element definitions.\r
+                                * @field\r
+                                * @type Object\r
+                                * @example\r
+                                */\r
+                               eventProcessors : CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,\r
+                                       {\r
+                                               /** @ignore */\r
+                                               onClick : function( dialog, func )\r
+                                               {\r
+                                                       this.on( 'click', func );\r
+                                               }\r
+                                       }, true ),\r
+\r
+                               /**\r
+                                * Handler for the element's access key up event. Simulates a click to\r
+                                * the button.\r
+                                * @example\r
+                                */\r
+                               accessKeyUp : function()\r
+                               {\r
+                                       this.click();\r
+                               },\r
+\r
+                               /**\r
+                                * Handler for the element's access key down event. Simulates a mouse\r
+                                * down to the button.\r
+                                * @example\r
+                                */\r
+                               accessKeyDown : function()\r
+                               {\r
+                                       this.focus();\r
+                               },\r
+\r
+                               keyboardFocusable : true\r
+                       }, true );\r
+\r
+       CKEDITOR.ui.dialog.textInput.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement,\r
+                       /** @lends CKEDITOR.ui.dialog.textInput.prototype */\r
+                       {\r
+                               /**\r
+                                * Gets the text input DOM element under this UI object.\r
+                                * @example\r
+                                * @returns {CKEDITOR.dom.element} The DOM element of the text input.\r
+                                */\r
+                               getInputElement : function()\r
+                               {\r
+                                       return CKEDITOR.document.getById( this._.inputId );\r
+                               },\r
+\r
+                               /**\r
+                                * Puts focus into the text input.\r
+                                * @example\r
+                                */\r
+                               focus : function()\r
+                               {\r
+                                       var me = this.selectParentTab();\r
+\r
+                                       // GECKO BUG: setTimeout() is needed to workaround invisible selections.\r
+                                       setTimeout( function()\r
+                                               {\r
+                                                       var element = me.getInputElement();\r
+                                                       element && element.$.focus();\r
+                                               }, 0 );\r
+                               },\r
+\r
+                               /**\r
+                                * Selects all the text in the text input.\r
+                                * @example\r
+                                */\r
+                               select : function()\r
+                               {\r
+                                       var me = this.selectParentTab();\r
+\r
+                                       // GECKO BUG: setTimeout() is needed to workaround invisible selections.\r
+                                       setTimeout( function()\r
+                                               {\r
+                                                       var e = me.getInputElement();\r
+                                                       if ( e )\r
+                                                       {\r
+                                                               e.$.focus();\r
+                                                               e.$.select();\r
+                                                       }\r
+                                               }, 0 );\r
+                               },\r
+\r
+                               /**\r
+                                * Handler for the text input's access key up event. Makes a select()\r
+                                * call to the text input.\r
+                                * @example\r
+                                */\r
+                               accessKeyUp : function()\r
+                               {\r
+                                       this.select();\r
+                               },\r
+\r
+                               /**\r
+                                * Sets the value of this text input object.\r
+                                * @param {Object} value The new value.\r
+                                * @returns {CKEDITOR.ui.dialog.textInput} The current UI element.\r
+                                * @example\r
+                                * uiElement.setValue( 'Blamo' );\r
+                                */\r
+                               setValue : function( value )\r
+                               {\r
+                                       value = value || '';\r
+                                       return CKEDITOR.ui.dialog.uiElement.prototype.setValue.call( this, value );\r
+                               },\r
+\r
+                               keyboardFocusable : true\r
+                       }, commonPrototype, true );\r
+\r
+       CKEDITOR.ui.dialog.textarea.prototype = new CKEDITOR.ui.dialog.textInput();\r
+\r
+       CKEDITOR.ui.dialog.select.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement,\r
+                       /** @lends CKEDITOR.ui.dialog.select.prototype */\r
+                       {\r
+                               /**\r
+                                * Gets the DOM element of the select box.\r
+                                * @returns {CKEDITOR.dom.element} The &lt;select&gt; element of this UI\r
+                                * element.\r
+                                * @example\r
+                                */\r
+                               getInputElement : function()\r
+                               {\r
+                                       return this._.select.getElement();\r
+                               },\r
+\r
+                               /**\r
+                                * Adds an option to the select box.\r
+                                * @param {String} label Option label.\r
+                                * @param {String} value (Optional) Option value, if not defined it'll be\r
+                                * assumed to be the same as the label.\r
+                                * @param {Number} index (Optional) Position of the option to be inserted\r
+                                * to. If not defined the new option will be inserted to the end of list.\r
+                                * @example\r
+                                * @returns {CKEDITOR.ui.dialog.select} The current select UI element.\r
+                                */\r
+                               add : function( label, value, index )\r
+                               {\r
+                                       var option = new CKEDITOR.dom.element( 'option', this.getDialog().getParentEditor().document ),\r
+                                               selectElement = this.getInputElement().$;\r
+                                       option.$.text = label;\r
+                                       option.$.value = ( value === undefined || value === null ) ? label : value;\r
+                                       if ( index === undefined || index === null )\r
+                                       {\r
+                                               if ( CKEDITOR.env.ie )\r
+                                                       selectElement.add( option.$ );\r
+                                               else\r
+                                                       selectElement.add( option.$, null );\r
+                                       }\r
+                                       else\r
+                                               selectElement.add( option.$, index );\r
+                                       return this;\r
+                               },\r
+\r
+                               /**\r
+                                * Removes an option from the selection list.\r
+                                * @param {Number} index Index of the option to be removed.\r
+                                * @example\r
+                                * @returns {CKEDITOR.ui.dialog.select} The current select UI element.\r
+                                */\r
+                               remove : function( index )\r
+                               {\r
+                                       var selectElement = this.getInputElement().$;\r
+                                       selectElement.remove( index );\r
+                                       return this;\r
+                               },\r
+\r
+                               /**\r
+                                * Clears all options out of the selection list.\r
+                                * @returns {CKEDITOR.ui.dialog.select} The current select UI element.\r
+                                */\r
+                               clear : function()\r
+                               {\r
+                                       var selectElement = this.getInputElement().$;\r
+                                       while ( selectElement.length > 0 )\r
+                                               selectElement.remove( 0 );\r
+                                       return this;\r
+                               },\r
+\r
+                               keyboardFocusable : true\r
+                       }, commonPrototype, true );\r
+\r
+       CKEDITOR.ui.dialog.checkbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement,\r
+                       /** @lends CKEDITOR.ui.dialog.checkbox.prototype */\r
+                       {\r
+                               /**\r
+                                * Gets the checkbox DOM element.\r
+                                * @example\r
+                                * @returns {CKEDITOR.dom.element} The DOM element of the checkbox.\r
+                                */\r
+                               getInputElement : function()\r
+                               {\r
+                                       return this._.checkbox.getElement();\r
+                               },\r
+\r
+                               /**\r
+                                * Sets the state of the checkbox.\r
+                                * @example\r
+                                * @param {Boolean} true to tick the checkbox, false to untick it.\r
+                                */\r
+                               setValue : function( checked )\r
+                               {\r
+                                       this.getInputElement().$.checked = checked;\r
+                                       this.fire( 'change', { value : checked } );\r
+                               },\r
+\r
+                               /**\r
+                                * Gets the state of the checkbox.\r
+                                * @example\r
+                                * @returns {Boolean} true means the checkbox is ticked, false means it's not ticked.\r
+                                */\r
+                               getValue : function()\r
+                               {\r
+                                       return this.getInputElement().$.checked;\r
+                               },\r
+\r
+                               /**\r
+                                * Handler for the access key up event. Toggles the checkbox.\r
+                                * @example\r
+                                */\r
+                               accessKeyUp : function()\r
+                               {\r
+                                       this.setValue( !this.getValue() );\r
+                               },\r
+\r
+                               /**\r
+                                * Defines the onChange event for UI element definitions.\r
+                                * @field\r
+                                * @type Object\r
+                                * @example\r
+                                */\r
+                               eventProcessors :\r
+                               {\r
+                                       onChange : function( dialog, func )\r
+                                       {\r
+                                               if ( !CKEDITOR.env.ie )\r
+                                                       return commonEventProcessors.onChange.apply( this, arguments );\r
+                                               else\r
+                                               {\r
+                                                       dialog.on( 'load', function()\r
+                                                               {\r
+                                                                       var element = this._.checkbox.getElement();\r
+                                                                       element.on( 'propertychange', function( evt )\r
+                                                                               {\r
+                                                                                       evt = evt.data.$;\r
+                                                                                       if ( evt.propertyName == 'checked' )\r
+                                                                                               this.fire( 'change', { value : element.$.checked } );\r
+                                                                               }, this );\r
+                                                               }, this );\r
+                                                       this.on( 'change', func );\r
+                                               }\r
+                                               return null;\r
+                                       }\r
+                               },\r
+\r
+                               keyboardFocusable : true\r
+                       }, commonPrototype, true );\r
+\r
+       CKEDITOR.ui.dialog.radio.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement,\r
+                       /** @lends CKEDITOR.ui.dialog.radio.prototype */\r
+                       {\r
+                               /**\r
+                                * Checks one of the radio buttons in this button group.\r
+                                * @example\r
+                                * @param {String} value The value of the button to be chcked.\r
+                                */\r
+                               setValue : function( value )\r
+                               {\r
+                                       var children = this._.children,\r
+                                               item;\r
+                                       for ( var i = 0 ; ( i < children.length ) && ( item = children[i] ) ; i++ )\r
+                                               item.getElement().$.checked = ( item.getValue() == value );\r
+                                       this.fire( 'change', { value : value } );\r
+                               },\r
+\r
+                               /**\r
+                                * Gets the value of the currently checked radio button.\r
+                                * @example\r
+                                * @returns {String} The currently checked button's value.\r
+                                */\r
+                               getValue : function()\r
+                               {\r
+                                       var children = this._.children;\r
+                                       for ( var i = 0 ; i < children.length ; i++ )\r
+                                       {\r
+                                               if ( children[i].getElement().$.checked )\r
+                                                       return children[i].getValue();\r
+                                       }\r
+                                       return null;\r
+                               },\r
+\r
+                               /**\r
+                                * Handler for the access key up event. Focuses the currently\r
+                                * selected radio button, or the first radio button if none is\r
+                                * selected.\r
+                                * @example\r
+                                */\r
+                               accessKeyUp : function()\r
+                               {\r
+                                       var children = this._.children, i;\r
+                                       for ( i = 0 ; i < children.length ; i++ )\r
+                                       {\r
+                                               if ( children[i].getElement().$.checked )\r
+                                               {\r
+                                                       children[i].getElement().focus();\r
+                                                       return;\r
+                                               }\r
+                                       }\r
+                                       children[0].getElement().focus();\r
+                               },\r
+\r
+                               /**\r
+                                * Defines the onChange event for UI element definitions.\r
+                                * @field\r
+                                * @type Object\r
+                                * @example\r
+                                */\r
+                               eventProcessors :\r
+                               {\r
+                                       onChange : function( dialog, func )\r
+                                       {\r
+                                               if ( !CKEDITOR.env.ie )\r
+                                                       return commonEventProcessors.onChange.apply( this, arguments );\r
+                                               else\r
+                                               {\r
+                                                       dialog.on( 'load', function()\r
+                                                               {\r
+                                                                       var children = this._.children, me = this;\r
+                                                                       for ( var i = 0 ; i < children.length ; i++ )\r
+                                                                       {\r
+                                                                               var element = children[i].getElement();\r
+                                                                               element.on( 'propertychange', function( evt )\r
+                                                                                       {\r
+                                                                                               evt = evt.data.$;\r
+                                                                                               if ( evt.propertyName == 'checked' && this.$.checked )\r
+                                                                                                       me.fire( 'change', { value : this.getAttribute( 'value' ) } );\r
+                                                                                       } );\r
+                                                                       }\r
+                                                               }, this );\r
+                                                       this.on( 'change', func );\r
+                                               }\r
+                                               return null;\r
+                                       }\r
+                               },\r
+\r
+                               keyboardFocusable : true\r
+                       }, commonPrototype, true );\r
+\r
+       CKEDITOR.ui.dialog.file.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement,\r
+                       commonPrototype,\r
+                       /** @lends CKEDITOR.ui.dialog.file.prototype */\r
+                       {\r
+                               /**\r
+                                * Gets the &lt;input&gt; element of this file input.\r
+                                * @returns {CKEDITOR.dom.element} The file input element.\r
+                                * @example\r
+                                */\r
+                               getInputElement : function()\r
+                               {\r
+                                       var frameDocument = CKEDITOR.document.getById( this._.frameId ).getFrameDocument();\r
+                                       return frameDocument.$.forms.length > 0 ?\r
+                                               new CKEDITOR.dom.element( frameDocument.$.forms[0].elements[0] ) :\r
+                                               this.getElement();\r
+                               },\r
+\r
+                               /**\r
+                                * Uploads the file in the file input.\r
+                                * @returns {CKEDITOR.ui.dialog.file} This object.\r
+                                * @example\r
+                                */\r
+                               submit : function()\r
+                               {\r
+                                       this.getInputElement().getParent().$.submit();\r
+                                       return this;\r
+                               },\r
+\r
+                               /**\r
+                                * Get the action assigned to the form.\r
+                                * @returns {String} The value of the action.\r
+                                * @example\r
+                                */\r
+                               getAction : function( action )\r
+                               {\r
+                                       return this.getInputElement().getParent().$.action;\r
+                               },\r
+\r
+                               /**\r
+                                * Redraws the file input and resets the file path in the file input.\r
+                                * The redraw logic is necessary because non-IE browsers tend to clear\r
+                                * the &lt;iframe&gt; containing the file input after closing the dialog.\r
+                                * @example\r
+                                */\r
+                               reset : function()\r
+                               {\r
+                                       var frameElement = CKEDITOR.document.getById( this._.frameId ),\r
+                                               frameDocument = frameElement.getFrameDocument(),\r
+                                               elementDefinition = this._.definition,\r
+                                               buttons = this._.buttons;\r
+\r
+                                       function generateFormField()\r
+                                       {\r
+                                               frameDocument.$.open();\r
+\r
+                                               // Support for custom document.domain in IE.\r
+                                               if ( CKEDITOR.env.isCustomDomain() )\r
+                                                       frameDocument.$.domain = document.domain;\r
+\r
+                                               var size = '';\r
+                                               if ( elementDefinition.size )\r
+                                                       size = elementDefinition.size - ( CKEDITOR.env.ie  ? 7 : 0 );   // "Browse" button is bigger in IE.\r
+\r
+                                               frameDocument.$.write( [ '<html><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">',\r
+                                                               '<form enctype="multipart/form-data" method="POST" action="',\r
+                                                               CKEDITOR.tools.htmlEncode( elementDefinition.action ),\r
+                                                               '">',\r
+                                                               '<input type="file" name="',\r
+                                                               CKEDITOR.tools.htmlEncode( elementDefinition.id || 'cke_upload' ),\r
+                                                               '" size="',\r
+                                                               CKEDITOR.tools.htmlEncode( size > 0 ? size : "" ),\r
+                                                               '" />',\r
+                                                               '</form>',\r
+                                                               '</body></html>' ].join( '' ) );\r
+\r
+                                               frameDocument.$.close();\r
+\r
+                                               for ( var i = 0 ; i < buttons.length ; i++ )\r
+                                                       buttons[i].enable();\r
+                                       }\r
+\r
+                                       // #3465: Wait for the browser to finish rendering the dialog first.\r
+                                       if ( CKEDITOR.env.gecko )\r
+                                               setTimeout( generateFormField, 500 );\r
+                                       else\r
+                                               generateFormField();\r
+                               },\r
+\r
+                               getValue : function()\r
+                               {\r
+                                       // The file path returned from the input tag is incomplete anyway, so it's\r
+                                       // safe to ignore it and prevent the confirmation dialog from appearing.\r
+                                       // (Part of #3465)\r
+                                       return '';\r
+                               },\r
+\r
+                               /**\r
+                                * Defines the onChange event for UI element definitions.\r
+                                * @field\r
+                                * @type Object\r
+                                * @example\r
+                                */\r
+                               eventProcessors : commonEventProcessors,\r
+\r
+                               keyboardFocusable : true\r
+                       }, true );\r
+\r
+       CKEDITOR.ui.dialog.fileButton.prototype = new CKEDITOR.ui.dialog.button;\r
+\r
+       CKEDITOR.dialog.addUIElement( 'text', textBuilder );\r
+       CKEDITOR.dialog.addUIElement( 'password', textBuilder );\r
+       CKEDITOR.dialog.addUIElement( 'textarea', commonBuilder );\r
+       CKEDITOR.dialog.addUIElement( 'checkbox', commonBuilder );\r
+       CKEDITOR.dialog.addUIElement( 'radio', commonBuilder );\r
+       CKEDITOR.dialog.addUIElement( 'button', commonBuilder );\r
+       CKEDITOR.dialog.addUIElement( 'select', commonBuilder );\r
+       CKEDITOR.dialog.addUIElement( 'file', commonBuilder );\r
+       CKEDITOR.dialog.addUIElement( 'fileButton', commonBuilder );\r
+       CKEDITOR.dialog.addUIElement( 'html', commonBuilder );\r
+})();\r
diff --git a/_source/plugins/domiterator/plugin.js b/_source/plugins/domiterator/plugin.js
new file mode 100644 (file)
index 0000000..a7a8e4d
--- /dev/null
@@ -0,0 +1,354 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file DOM iterator, which iterates over list items, lines and paragraphs.\r
+ */\r
+\r
+CKEDITOR.plugins.add( 'domiterator' );\r
+\r
+(function()\r
+{\r
+\r
+       var iterator = function( range )\r
+       {\r
+               if ( arguments.length < 1 )\r
+                       return;\r
+\r
+               this.range = range;\r
+               this.forceBrBreak = false;\r
+\r
+               // Whether include <br>s into the enlarged range.(#3730).\r
+               this.enlargeBr = true;\r
+               this.enforceRealBlocks = false;\r
+\r
+               this._ || ( this._ = {} );\r
+       },\r
+               beginWhitespaceRegex = /^[\r\n\t ]+$/;\r
+\r
+\r
+       iterator.prototype = {\r
+               getNextParagraph : function( blockTag )\r
+               {\r
+                       // The block element to be returned.\r
+                       var block;\r
+\r
+                       // The range object used to identify the paragraph contents.\r
+                       var range;\r
+\r
+                       // Indicats that the current element in the loop is the last one.\r
+                       var isLast;\r
+\r
+                       // Instructs to cleanup remaining BRs.\r
+                       var removePreviousBr, removeLastBr;\r
+\r
+                       // This is the first iteration. Let's initialize it.\r
+                       if ( !this._.lastNode )\r
+                       {\r
+                               range = this.range.clone();\r
+                               range.enlarge( this.forceBrBreak || !this.enlargeBr ?\r
+                                                          CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS : CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                               var walker = new CKEDITOR.dom.walker( range ),\r
+                                       ignoreBookmarkTextEvaluator = CKEDITOR.dom.walker.bookmark( true, true );\r
+                               // Avoid anchor inside bookmark inner text.\r
+                               walker.evaluator = ignoreBookmarkTextEvaluator;\r
+                               this._.nextNode = walker.next();\r
+                               // TODO: It's better to have walker.reset() used here.\r
+                               walker = new CKEDITOR.dom.walker( range );\r
+                               walker.evaluator = ignoreBookmarkTextEvaluator;\r
+                               var lastNode = walker.previous();\r
+                               this._.lastNode = lastNode.getNextSourceNode( true );\r
+\r
+                               // We may have an empty text node at the end of block due to [3770].\r
+                               // If that node is the lastNode, it would cause our logic to leak to the\r
+                               // next block.(#3887)\r
+                               if ( this._.lastNode &&\r
+                                               this._.lastNode.type == CKEDITOR.NODE_TEXT &&\r
+                                               !CKEDITOR.tools.trim( this._.lastNode.getText( ) ) &&\r
+                                               this._.lastNode.getParent().isBlockBoundary() )\r
+                               {\r
+                                       var testRange = new CKEDITOR.dom.range( range.document );\r
+                                       testRange.moveToPosition( this._.lastNode, CKEDITOR.POSITION_AFTER_END );\r
+                                       if ( testRange.checkEndOfBlock() )\r
+                                       {\r
+                                               var path = new CKEDITOR.dom.elementPath( testRange.endContainer );\r
+                                               var lastBlock = path.block || path.blockLimit;\r
+                                               this._.lastNode = lastBlock.getNextSourceNode( true );\r
+                                       }\r
+                               }\r
+\r
+                               // Probably the document end is reached, we need a marker node.\r
+                               if ( !this._.lastNode )\r
+                               {\r
+                                       this._.lastNode = this._.docEndMarker = range.document.createText( '' );\r
+                                       this._.lastNode.insertAfter( lastNode );\r
+                               }\r
+\r
+                               // Let's reuse this variable.\r
+                               range = null;\r
+                       }\r
+\r
+                       var currentNode = this._.nextNode;\r
+                       lastNode = this._.lastNode;\r
+\r
+                       this._.nextNode = null;\r
+                       while ( currentNode )\r
+                       {\r
+                               // closeRange indicates that a paragraph boundary has been found,\r
+                               // so the range can be closed.\r
+                               var closeRange = false;\r
+\r
+                               // includeNode indicates that the current node is good to be part\r
+                               // of the range. By default, any non-element node is ok for it.\r
+                               var includeNode = ( currentNode.type != CKEDITOR.NODE_ELEMENT ),\r
+                                       continueFromSibling = false;\r
+\r
+                               // If it is an element node, let's check if it can be part of the\r
+                               // range.\r
+                               if ( !includeNode )\r
+                               {\r
+                                       var nodeName = currentNode.getName();\r
+\r
+                                       if ( currentNode.isBlockBoundary( this.forceBrBreak && { br : 1 } ) )\r
+                                       {\r
+                                               // <br> boundaries must be part of the range. It will\r
+                                               // happen only if ForceBrBreak.\r
+                                               if ( nodeName == 'br' )\r
+                                                       includeNode = true;\r
+                                               else if ( !range && !currentNode.getChildCount() && nodeName != 'hr' )\r
+                                               {\r
+                                                       // If we have found an empty block, and haven't started\r
+                                                       // the range yet, it means we must return this block.\r
+                                                       block = currentNode;\r
+                                                       isLast = currentNode.equals( lastNode );\r
+                                                       break;\r
+                                               }\r
+\r
+                                               // The range must finish right before the boundary,\r
+                                               // including possibly skipped empty spaces. (#1603)\r
+                                               if ( range )\r
+                                               {\r
+                                                       range.setEndAt( currentNode, CKEDITOR.POSITION_BEFORE_START );\r
+\r
+                                                       // The found boundary must be set as the next one at this\r
+                                                       // point. (#1717)\r
+                                                       if ( nodeName != 'br' )\r
+                                                               this._.nextNode = currentNode;\r
+                                               }\r
+\r
+                                               closeRange = true;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               // If we have child nodes, let's check them.\r
+                                               if ( currentNode.getFirst() )\r
+                                               {\r
+                                                       // If we don't have a range yet, let's start it.\r
+                                                       if ( !range )\r
+                                                       {\r
+                                                               range = new CKEDITOR.dom.range( this.range.document );\r
+                                                               range.setStartAt( currentNode, CKEDITOR.POSITION_BEFORE_START );\r
+                                                       }\r
+\r
+                                                       currentNode = currentNode.getFirst();\r
+                                                       continue;\r
+                                               }\r
+                                               includeNode = true;\r
+                                       }\r
+                               }\r
+                               else if ( currentNode.type == CKEDITOR.NODE_TEXT )\r
+                               {\r
+                                       // Ignore normal whitespaces (i.e. not including &nbsp; or\r
+                                       // other unicode whitespaces) before/after a block node.\r
+                                       if ( beginWhitespaceRegex.test( currentNode.getText() ) )\r
+                                               includeNode = false;\r
+                               }\r
+\r
+                               // The current node is good to be part of the range and we are\r
+                               // starting a new range, initialize it first.\r
+                               if ( includeNode && !range )\r
+                               {\r
+                                       range = new CKEDITOR.dom.range( this.range.document );\r
+                                       range.setStartAt( currentNode, CKEDITOR.POSITION_BEFORE_START );\r
+                               }\r
+\r
+                               // The last node has been found.\r
+                               isLast = ( ( !closeRange || includeNode ) && currentNode.equals( lastNode ) );\r
+\r
+                               // If we are in an element boundary, let's check if it is time\r
+                               // to close the range, otherwise we include the parent within it.\r
+                               if ( range && !closeRange )\r
+                               {\r
+                                       while ( !currentNode.getNext() && !isLast )\r
+                                       {\r
+                                               var parentNode = currentNode.getParent();\r
+\r
+                                               if ( parentNode.isBlockBoundary( this.forceBrBreak && { br : 1 } ) )\r
+                                               {\r
+                                                       closeRange = true;\r
+                                                       isLast = isLast || ( parentNode.equals( lastNode) );\r
+                                                       break;\r
+                                               }\r
+\r
+                                               currentNode = parentNode;\r
+                                               includeNode = true;\r
+                                               isLast = ( currentNode.equals( lastNode ) );\r
+                                               continueFromSibling = true;\r
+                                       }\r
+                               }\r
+\r
+                               // Now finally include the node.\r
+                               if ( includeNode )\r
+                                       range.setEndAt( currentNode, CKEDITOR.POSITION_AFTER_END );\r
+\r
+                               currentNode = currentNode.getNextSourceNode( continueFromSibling, null, lastNode );\r
+                               isLast = !currentNode;\r
+\r
+                               // We have found a block boundary. Let's close the range and move out of the\r
+                               // loop.\r
+                               if ( ( closeRange || isLast ) && range )\r
+                               {\r
+                                       var boundaryNodes = range.getBoundaryNodes(),\r
+                                               startPath = new CKEDITOR.dom.elementPath( range.startContainer ),\r
+                                               endPath = new CKEDITOR.dom.elementPath( range.endContainer );\r
+\r
+                                       // Drop the range if it only contains bookmark nodes.(#4087)\r
+                                       if ( boundaryNodes.startNode.equals( boundaryNodes.endNode )\r
+                                               && boundaryNodes.startNode.getParent().equals( startPath.blockLimit )\r
+                                               && boundaryNodes.startNode.type == CKEDITOR.NODE_ELEMENT\r
+                                               && boundaryNodes.startNode.getAttribute( '_fck_bookmark' ) )\r
+                                       {\r
+                                               range = null;\r
+                                               this._.nextNode = null;\r
+                                       }\r
+                                       else\r
+                                               break;\r
+                               }\r
+\r
+                               if ( isLast )\r
+                                       break;\r
+\r
+                       }\r
+\r
+                       // Now, based on the processed range, look for (or create) the block to be returned.\r
+                       if ( !block )\r
+                       {\r
+                               // If no range has been found, this is the end.\r
+                               if ( !range )\r
+                               {\r
+                                       this._.docEndMarker && this._.docEndMarker.remove();\r
+                                       this._.nextNode = null;\r
+                                       return null;\r
+                               }\r
+\r
+                               startPath = new CKEDITOR.dom.elementPath( range.startContainer );\r
+                               var startBlockLimit = startPath.blockLimit,\r
+                                       checkLimits = { div : 1, th : 1, td : 1 };\r
+                               block = startPath.block;\r
+\r
+                               if ( !block\r
+                                               && !this.enforceRealBlocks\r
+                                               && checkLimits[ startBlockLimit.getName() ]\r
+                                               && range.checkStartOfBlock()\r
+                                               && range.checkEndOfBlock() )\r
+                                       block = startBlockLimit;\r
+                               else if ( !block || ( this.enforceRealBlocks && block.getName() == 'li' ) )\r
+                               {\r
+                                       // Create the fixed block.\r
+                                       block = this.range.document.createElement( blockTag || 'p' );\r
+\r
+                                       // Move the contents of the temporary range to the fixed block.\r
+                                       range.extractContents().appendTo( block );\r
+                                       block.trim();\r
+\r
+                                       // Insert the fixed block into the DOM.\r
+                                       range.insertNode( block );\r
+\r
+                                       removePreviousBr = removeLastBr = true;\r
+                               }\r
+                               else if ( block.getName() != 'li' )\r
+                               {\r
+                                       // If the range doesn't includes the entire contents of the\r
+                                       // block, we must split it, isolating the range in a dedicated\r
+                                       // block.\r
+                                       if ( !range.checkStartOfBlock() || !range.checkEndOfBlock() )\r
+                                       {\r
+                                               // The resulting block will be a clone of the current one.\r
+                                               block = block.clone( false );\r
+\r
+                                               // Extract the range contents, moving it to the new block.\r
+                                               range.extractContents().appendTo( block );\r
+                                               block.trim();\r
+\r
+                                               // Split the block. At this point, the range will be in the\r
+                                               // right position for our intents.\r
+                                               var splitInfo = range.splitBlock();\r
+\r
+                                               removePreviousBr = !splitInfo.wasStartOfBlock;\r
+                                               removeLastBr = !splitInfo.wasEndOfBlock;\r
+\r
+                                               // Insert the new block into the DOM.\r
+                                               range.insertNode( block );\r
+                                       }\r
+                               }\r
+                               else if ( !isLast )\r
+                               {\r
+                                       // LIs are returned as is, with all their children (due to the\r
+                                       // nested lists). But, the next node is the node right after\r
+                                       // the current range, which could be an <li> child (nested\r
+                                       // lists) or the next sibling <li>.\r
+\r
+                                       this._.nextNode = ( block.equals( lastNode ) ? null :\r
+                                               range.getBoundaryNodes().endNode.getNextSourceNode( true, null, lastNode ) );\r
+                               }\r
+                       }\r
+\r
+                       if ( removePreviousBr )\r
+                       {\r
+                               var previousSibling = block.getPrevious();\r
+                               if ( previousSibling && previousSibling.type == CKEDITOR.NODE_ELEMENT )\r
+                               {\r
+                                       if ( previousSibling.getName() == 'br' )\r
+                                               previousSibling.remove();\r
+                                       else if ( previousSibling.getLast() && previousSibling.getLast().$.nodeName.toLowerCase() == 'br' )\r
+                                               previousSibling.getLast().remove();\r
+                               }\r
+                       }\r
+\r
+                       if ( removeLastBr )\r
+                       {\r
+                               // Ignore bookmark nodes.(#3783)\r
+                               var bookmarkGuard = CKEDITOR.dom.walker.bookmark( false, true );\r
+\r
+                               var lastChild = block.getLast();\r
+                               if ( lastChild && lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.getName() == 'br' )\r
+                               {\r
+                                       // Take care not to remove the block expanding <br> in non-IE browsers.\r
+                                       if ( CKEDITOR.env.ie\r
+                                                || lastChild.getPrevious( bookmarkGuard )\r
+                                                || lastChild.getNext( bookmarkGuard ) )\r
+                                               lastChild.remove();\r
+                               }\r
+                       }\r
+\r
+                       // Get a reference for the next element. This is important because the\r
+                       // above block can be removed or changed, so we can rely on it for the\r
+                       // next interation.\r
+                       if ( !this._.nextNode )\r
+                       {\r
+                               this._.nextNode = ( isLast || block.equals( lastNode ) ) ? null :\r
+                                       block.getNextSourceNode( true, null, lastNode );\r
+                       }\r
+\r
+                       return block;\r
+               }\r
+       };\r
+\r
+       CKEDITOR.dom.range.prototype.createIterator = function()\r
+       {\r
+               return new iterator( this );\r
+       };\r
+})();\r
diff --git a/_source/plugins/editingblock/plugin.js b/_source/plugins/editingblock/plugin.js
new file mode 100644 (file)
index 0000000..4d0885b
--- /dev/null
@@ -0,0 +1,236 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview The default editing block plugin, which holds the editing area\r
+ *             and source view.\r
+ */\r
+\r
+(function()\r
+{\r
+       var getMode = function( editor, mode )\r
+       {\r
+               return editor._.modes && editor._.modes[ mode || editor.mode ];\r
+       };\r
+\r
+       // This is a semaphore used to avoid recursive calls between\r
+       // the following data handling functions.\r
+       var isHandlingData;\r
+\r
+       CKEDITOR.plugins.add( 'editingblock',\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       if ( !editor.config.editingBlock )\r
+                               return;\r
+\r
+                       editor.on( 'themeSpace', function( event )\r
+                               {\r
+                                       if ( event.data.space == 'contents' )\r
+                                               event.data.html += '<br>';\r
+                               });\r
+\r
+                       editor.on( 'themeLoaded', function()\r
+                               {\r
+                                       editor.fireOnce( 'editingBlockReady' );\r
+                               });\r
+\r
+                       editor.on( 'uiReady', function()\r
+                               {\r
+                                       editor.setMode( editor.config.startupMode );\r
+                               });\r
+\r
+                       editor.on( 'afterSetData', function()\r
+                               {\r
+                                       if ( !isHandlingData )\r
+                                       {\r
+                                               function setData()\r
+                                               {\r
+                                                       isHandlingData = true;\r
+                                                       getMode( editor ).loadData( editor.getData() );\r
+                                                       isHandlingData = false;\r
+                                               }\r
+\r
+                                               if ( editor.mode )\r
+                                                       setData();\r
+                                               else\r
+                                               {\r
+                                                       editor.on( 'mode', function()\r
+                                                               {\r
+                                                                       setData();\r
+                                                                       editor.removeListener( 'mode', arguments.callee );\r
+                                                               });\r
+                                               }\r
+                                       }\r
+                               });\r
+\r
+                       editor.on( 'beforeGetData', function()\r
+                               {\r
+                                       if ( !isHandlingData && editor.mode )\r
+                                       {\r
+                                               isHandlingData = true;\r
+                                               editor.setData( getMode( editor ).getData() );\r
+                                               isHandlingData = false;\r
+                                       }\r
+                               });\r
+\r
+                       editor.on( 'getSnapshot', function( event )\r
+                               {\r
+                                       if ( editor.mode )\r
+                                               event.data = getMode( editor ).getSnapshotData();\r
+                               });\r
+\r
+                       editor.on( 'loadSnapshot', function( event )\r
+                               {\r
+                                       if ( editor.mode )\r
+                                               getMode( editor ).loadSnapshotData( event.data );\r
+                               });\r
+\r
+                       // For the first "mode" call, we'll also fire the "instanceReady"\r
+                       // event.\r
+                       editor.on( 'mode', function( event )\r
+                               {\r
+                                       // Do that once only.\r
+                                       event.removeListener();\r
+\r
+                                       // Grab editor focus if the editor container is focused. (#3104)\r
+                                       var focusGrabber = editor.container;\r
+\r
+                                       // Safari 3 can't handle tabindex in all elements, so we do\r
+                                       // a trick to make it move the focus to the editor on TAB.\r
+                                       if ( CKEDITOR.env.webkit && CKEDITOR.env.version < 528 )\r
+                                       {\r
+                                               var tabIndex = editor.config.tabIndex || editor.element.getAttribute( 'tabindex' ) || 0;\r
+                                               focusGrabber = focusGrabber.append( CKEDITOR.dom.element.createFromHtml(\r
+                                                       '<input' +\r
+                                                               ' tabindex="' + tabIndex + '"' +\r
+                                                               ' style="position:absolute; left:-10000">' ) );\r
+                                       }\r
+\r
+                                       focusGrabber.on( 'focus', function()\r
+                                               {\r
+                                                       editor.focus();\r
+                                               });\r
+\r
+                                       if ( editor.config.startupFocus )\r
+                                               editor.focus();\r
+\r
+                                       // Fire instanceReady for both the editor and CKEDITOR, but\r
+                                       // defer this until the whole execution has completed\r
+                                       // to guarantee the editor is fully responsible.\r
+                                       setTimeout( function(){\r
+                                               editor.fireOnce( 'instanceReady' );\r
+                                               CKEDITOR.fire( 'instanceReady', null, editor );\r
+                                       } );\r
+                               });\r
+               }\r
+       });\r
+\r
+       /**\r
+        * The current editing mode. An editing mode is basically a viewport for\r
+        * editing or content viewing. By default the possible values for this\r
+        * property are "wysiwyg" and "source".\r
+        * @type String\r
+        * @example\r
+        * alert( CKEDITOR.instances.editor1.mode );  // "wysiwyg" (e.g.)\r
+        */\r
+       CKEDITOR.editor.prototype.mode = '';\r
+\r
+       /**\r
+        * Registers an editing mode. This function is to be used mainly by plugins.\r
+        * @param {String} mode The mode name.\r
+        * @param {Object} modeEditor The mode editor definition.\r
+        * @example\r
+        */\r
+       CKEDITOR.editor.prototype.addMode = function( mode, modeEditor )\r
+       {\r
+               modeEditor.name = mode;\r
+               ( this._.modes || ( this._.modes = {} ) )[ mode ] = modeEditor;\r
+       };\r
+\r
+       /**\r
+        * Sets the current editing mode in this editor instance.\r
+        * @param {String} mode A registered mode name.\r
+        * @example\r
+        * // Switch to "source" view.\r
+        * CKEDITOR.instances.editor1.setMode( 'source' );\r
+        */\r
+       CKEDITOR.editor.prototype.setMode = function( mode )\r
+       {\r
+               var data,\r
+                       holderElement = this.getThemeSpace( 'contents' ),\r
+                       isDirty = this.checkDirty();\r
+\r
+               // Unload the previous mode.\r
+               if ( this.mode )\r
+               {\r
+                       if ( mode == this.mode )\r
+                               return;\r
+\r
+                       this.fire( 'beforeModeUnload' );\r
+\r
+                       var currentMode = getMode( this );\r
+                       data = currentMode.getData();\r
+                       currentMode.unload( holderElement );\r
+                       this.mode = '';\r
+               }\r
+\r
+               holderElement.setHtml( '' );\r
+\r
+               // Load required mode.\r
+               var modeEditor = getMode( this, mode );\r
+               if ( !modeEditor )\r
+                       throw '[CKEDITOR.editor.setMode] Unknown mode "' + mode + '".';\r
+\r
+               if ( !isDirty )\r
+               {\r
+                       this.on( 'mode', function()\r
+                               {\r
+                                       this.resetDirty();\r
+                                       this.removeListener( 'mode', arguments.callee );\r
+                               });\r
+               }\r
+\r
+               modeEditor.load( holderElement, ( typeof data ) != 'string'  ? this.getData() : data);\r
+       };\r
+\r
+       /**\r
+        * Moves the selection focus to the editing are space in the editor.\r
+        */\r
+       CKEDITOR.editor.prototype.focus = function()\r
+       {\r
+               var mode = getMode( this );\r
+               if ( mode )\r
+                       mode.focus();\r
+       };\r
+})();\r
+\r
+/**\r
+ * The mode to load at the editor startup. It depends on the plugins\r
+ * loaded. By default, the "wysiwyg" and "source" modes are available.\r
+ * @type String\r
+ * @default 'wysiwyg'\r
+ * @example\r
+ * config.startupMode = 'source';\r
+ */\r
+CKEDITOR.config.startupMode = 'wysiwyg';\r
+\r
+/**\r
+ * Sets whether the editor should have the focus when the page loads.\r
+ * @type Boolean\r
+ * @default false\r
+ * @example\r
+ * config.startupFocus = true;\r
+ */\r
+CKEDITOR.config.startupFocus = false;\r
+\r
+/**\r
+ * Whether to render or not the editing block area in the editor interface.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.editingBlock = false;\r
+ */\r
+CKEDITOR.config.editingBlock = true;\r
diff --git a/_source/plugins/elementspath/plugin.js b/_source/plugins/elementspath/plugin.js
new file mode 100644 (file)
index 0000000..75fc4ee
--- /dev/null
@@ -0,0 +1,182 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview The "elementspath" plugin. It shows all elements in the DOM\r
+ *             parent tree relative to the current selection in the editing area.\r
+ */\r
+\r
+(function()\r
+{\r
+       var commands =\r
+       {\r
+               toolbarFocus :\r
+               {\r
+                       exec : function( editor )\r
+                       {\r
+                               var idBase = editor._.elementsPath.idBase;\r
+                               var element = CKEDITOR.document.getById( idBase + '0' );\r
+\r
+                               if ( element )\r
+                                       element.focus();\r
+                       }\r
+               }\r
+       };\r
+\r
+       var emptyHtml = '<span class="cke_empty">&nbsp;</span>';\r
+\r
+       CKEDITOR.plugins.add( 'elementspath',\r
+       {\r
+               requires : [ 'selection' ],\r
+\r
+               init : function( editor )\r
+               {\r
+                       var spaceId = 'cke_path_' + editor.name;\r
+                       var spaceElement;\r
+                       var getSpaceElement = function()\r
+                       {\r
+                               if ( !spaceElement )\r
+                                       spaceElement = CKEDITOR.document.getById( spaceId );\r
+                               return spaceElement;\r
+                       };\r
+\r
+                       var idBase = 'cke_elementspath_' + CKEDITOR.tools.getNextNumber() + '_';\r
+\r
+                       editor._.elementsPath = { idBase : idBase };\r
+\r
+                       editor.on( 'themeSpace', function( event )\r
+                               {\r
+                                       if ( event.data.space == 'bottom' )\r
+                                               event.data.html += '<div id="' + spaceId + '" class="cke_path">' + emptyHtml + '</div>';\r
+                               });\r
+\r
+                       editor.on( 'selectionChange', function( ev )\r
+                               {\r
+                                       var env = CKEDITOR.env;\r
+\r
+                                       var selection = ev.data.selection;\r
+\r
+                                       var element = selection.getStartElement(),\r
+                                               html = [],\r
+                                               elementsList = this._.elementsPath.list = [];\r
+\r
+                                       while ( element )\r
+                                       {\r
+                                               var index = elementsList.push( element ) - 1;\r
+                                               var name;\r
+                                               if ( element.getAttribute( '_cke_real_element_type' ) )\r
+                                                       name = element.getAttribute( '_cke_real_element_type' );\r
+                                               else\r
+                                                       name = element.getName();\r
+\r
+                                               // Use this variable to add conditional stuff to the\r
+                                               // HTML (because we are doing it in reverse order... unshift).\r
+                                               var extra = '';\r
+\r
+                                               // Some browsers don't cancel key events in the keydown but in the\r
+                                               // keypress.\r
+                                               // TODO: Check if really needed for Gecko+Mac.\r
+                                               if ( env.opera || ( env.gecko && env.mac ) )\r
+                                                       extra += ' onkeypress="return false;"';\r
+\r
+                                               // With Firefox, we need to force the button to redraw, otherwise it\r
+                                               // will remain in the focus state.\r
+                                               if ( env.gecko )\r
+                                                       extra += ' onblur="this.style.cssText = this.style.cssText;"';\r
+\r
+                                               html.unshift(\r
+                                                       '<a' +\r
+                                                               ' id="', idBase, index, '"' +\r
+                                                               ' href="javascript:void(\'', name, '\')"' +\r
+                                                               ' tabindex="-1"' +\r
+                                                               ' title="', editor.lang.elementsPath.eleTitle.replace( /%1/, name ), '"' +\r
+                                                               ( ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) ?\r
+                                                               ' onfocus="event.preventBubble();"' : '' ) +\r
+                                                               ' hidefocus="true" ' +\r
+                                                               ' onkeydown="return CKEDITOR._.elementsPath.keydown(\'', this.name, '\',', index, ', event);"' +\r
+                                                               extra ,\r
+                                                               ' onclick="return CKEDITOR._.elementsPath.click(\'', this.name, '\',', index, ');">',\r
+                                                                       name,\r
+                                                       '</a>' );\r
+\r
+                                               if ( name == 'body' )\r
+                                                       break;\r
+\r
+                                               element = element.getParent();\r
+                                       }\r
+\r
+                                       getSpaceElement().setHtml( html.join('') + emptyHtml );\r
+                               });\r
+\r
+                       editor.on( 'contentDomUnload', function()\r
+                               {\r
+                                       getSpaceElement().setHtml( emptyHtml );\r
+                               });\r
+\r
+                       editor.addCommand( 'elementsPathFocus', commands.toolbarFocus );\r
+               }\r
+       });\r
+})();\r
+\r
+/**\r
+ * Handles the click on an element in the element path.\r
+ * @private\r
+ */\r
+CKEDITOR._.elementsPath =\r
+{\r
+       click : function( instanceName, elementIndex )\r
+       {\r
+               var editor = CKEDITOR.instances[ instanceName ];\r
+               editor.focus();\r
+\r
+               var element = editor._.elementsPath.list[ elementIndex ];\r
+               editor.getSelection().selectElement( element );\r
+\r
+               return false;\r
+       },\r
+\r
+       keydown : function( instanceName, elementIndex, ev )\r
+       {\r
+               var instance = CKEDITOR.ui.button._.instances[ elementIndex ];\r
+               var editor = CKEDITOR.instances[ instanceName ];\r
+               var idBase = editor._.elementsPath.idBase;\r
+\r
+               var element;\r
+\r
+               ev = new CKEDITOR.dom.event( ev );\r
+\r
+               switch ( ev.getKeystroke() )\r
+               {\r
+                       case 37 :                                       // LEFT-ARROW\r
+                       case 9 :                                        // TAB\r
+                               element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) );\r
+                               if ( !element )\r
+                                       element = CKEDITOR.document.getById( idBase + '0' );\r
+                               element.focus();\r
+                               return false;\r
+\r
+                       case 39 :                                       // RIGHT-ARROW\r
+                       case CKEDITOR.SHIFT + 9 :       // SHIFT + TAB\r
+                               element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) );\r
+                               if ( !element )\r
+                                       element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) );\r
+                               element.focus();\r
+                               return false;\r
+\r
+                       case 27 :                                       // ESC\r
+                               editor.focus();\r
+                               return false;\r
+\r
+                       case 13 :                                       // ENTER        // Opera\r
+                       case 32 :                                       // SPACE\r
+                               this.click( instanceName, elementIndex );\r
+                               return false;\r
+\r
+                       //default :\r
+                       //      alert( ev.getKeystroke() );\r
+               }\r
+               return true;\r
+       }\r
+};\r
diff --git a/_source/plugins/enterkey/plugin.js b/_source/plugins/enterkey/plugin.js
new file mode 100644 (file)
index 0000000..d171ae2
--- /dev/null
@@ -0,0 +1,324 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       CKEDITOR.plugins.add( 'enterkey',\r
+       {\r
+               requires : [ 'keystrokes', 'indent' ],\r
+\r
+               init : function( editor )\r
+               {\r
+                       var specialKeys = editor.specialKeys;\r
+                       specialKeys[ 13 ] = enter;\r
+                       specialKeys[ CKEDITOR.SHIFT + 13 ] = shiftEnter;\r
+               }\r
+       });\r
+\r
+       var forceMode,\r
+               headerTagRegex = /^h[1-6]$/;\r
+\r
+       function shiftEnter( editor )\r
+       {\r
+               // On SHIFT+ENTER we want to enforce the mode to be respected, instead\r
+               // of cloning the current block. (#77)\r
+               forceMode = 1;\r
+\r
+               return enter( editor, editor.config.shiftEnterMode );\r
+       }\r
+\r
+       function enter( editor, mode )\r
+       {\r
+               // Only effective within document.\r
+               if ( editor.mode != 'wysiwyg' )\r
+                       return false;\r
+\r
+               if ( !mode )\r
+                       mode = editor.config.enterMode;\r
+\r
+               // Use setTimout so the keys get cancelled immediatelly.\r
+               setTimeout( function()\r
+                       {\r
+                               editor.fire( 'saveSnapshot' );  // Save undo step.\r
+                               if ( mode == CKEDITOR.ENTER_BR || editor.getSelection().getStartElement().hasAscendant( 'pre', true ) )\r
+                                       enterBr( editor, mode );\r
+                               else\r
+                                       enterBlock( editor, mode );\r
+\r
+                               forceMode = 0;\r
+                       }, 0 );\r
+\r
+               return true;\r
+       }\r
+\r
+       function enterBlock( editor, mode, range )\r
+       {\r
+               // Get the range for the current selection.\r
+               range = range || getRange( editor );\r
+\r
+               var doc = range.document;\r
+\r
+               // Determine the block element to be used.\r
+               var blockTag = ( mode == CKEDITOR.ENTER_DIV ? 'div' : 'p' );\r
+\r
+               // Split the range.\r
+               var splitInfo = range.splitBlock( blockTag );\r
+\r
+               if ( !splitInfo )\r
+                       return;\r
+\r
+               // Get the current blocks.\r
+               var previousBlock       = splitInfo.previousBlock,\r
+                       nextBlock               = splitInfo.nextBlock;\r
+\r
+               var isStartOfBlock      = splitInfo.wasStartOfBlock,\r
+                       isEndOfBlock    = splitInfo.wasEndOfBlock;\r
+\r
+               var node;\r
+\r
+               // If this is a block under a list item, split it as well. (#1647)\r
+               if ( nextBlock )\r
+               {\r
+                       node = nextBlock.getParent();\r
+                       if ( node.is( 'li' ) )\r
+                       {\r
+                               nextBlock.breakParent( node );\r
+                               nextBlock.move( nextBlock.getNext(), true );\r
+                       }\r
+               }\r
+               else if ( previousBlock && ( node = previousBlock.getParent() ) && node.is( 'li' ) )\r
+               {\r
+                       previousBlock.breakParent( node );\r
+                       range.moveToElementEditStart( previousBlock.getNext() );\r
+                       previousBlock.move( previousBlock.getPrevious() );\r
+               }\r
+\r
+               // If we have both the previous and next blocks, it means that the\r
+               // boundaries were on separated blocks, or none of them where on the\r
+               // block limits (start/end).\r
+               if ( !isStartOfBlock && !isEndOfBlock )\r
+               {\r
+                       // If the next block is an <li> with another list tree as the first\r
+                       // child, we'll need to append a placeholder or the list item\r
+                       // wouldn't be editable. (#1420)\r
+                       if ( nextBlock.is( 'li' ) && ( node = nextBlock.getFirst() )\r
+                                       && node.is && node.is( 'ul', 'ol') )\r
+                               nextBlock.insertBefore( doc.createText( '\xa0' ), node );\r
+\r
+                       // Move the selection to the end block.\r
+                       if ( nextBlock )\r
+                               range.moveToElementEditStart( nextBlock );\r
+               }\r
+               else\r
+               {\r
+\r
+                       if ( isStartOfBlock && isEndOfBlock && previousBlock.is( 'li' ) )\r
+                       {\r
+                               editor.execCommand( 'outdent' );\r
+                               return;\r
+                       }\r
+\r
+                       var newBlock;\r
+\r
+                       if ( previousBlock )\r
+                       {\r
+                               // Do not enter this block if it's a header tag, or we are in\r
+                               // a Shift+Enter (#77). Create a new block element instead\r
+                               // (later in the code).\r
+                               if ( !forceMode && !headerTagRegex.test( previousBlock.getName() ) )\r
+                               {\r
+                                       // Otherwise, duplicate the previous block.\r
+                                       newBlock = previousBlock.clone();\r
+                               }\r
+                       }\r
+                       else if ( nextBlock )\r
+                               newBlock = nextBlock.clone();\r
+\r
+                       if ( !newBlock )\r
+                               newBlock = doc.createElement( blockTag );\r
+\r
+                       // Recreate the inline elements tree, which was available\r
+                       // before hitting enter, so the same styles will be available in\r
+                       // the new block.\r
+                       var elementPath = splitInfo.elementPath;\r
+                       if ( elementPath )\r
+                       {\r
+                               for ( var i = 0, len = elementPath.elements.length ; i < len ; i++ )\r
+                               {\r
+                                       var element = elementPath.elements[ i ];\r
+\r
+                                       if ( element.equals( elementPath.block ) || element.equals( elementPath.blockLimit ) )\r
+                                               break;\r
+\r
+                                       if ( CKEDITOR.dtd.$removeEmpty[ element.getName() ] )\r
+                                       {\r
+                                               element = element.clone();\r
+                                               newBlock.moveChildren( element );\r
+                                               newBlock.append( element );\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       if ( !CKEDITOR.env.ie )\r
+                               newBlock.appendBogus();\r
+\r
+                       range.insertNode( newBlock );\r
+\r
+                       // This is tricky, but to make the new block visible correctly\r
+                       // we must select it.\r
+                       // The previousBlock check has been included because it may be\r
+                       // empty if we have fixed a block-less space (like ENTER into an\r
+                       // empty table cell).\r
+                       if ( CKEDITOR.env.ie && isStartOfBlock && ( !isEndOfBlock || !previousBlock.getChildCount() ) )\r
+                       {\r
+                               // Move the selection to the new block.\r
+                               range.moveToElementEditStart( isEndOfBlock ? previousBlock : newBlock );\r
+                               range.select();\r
+                       }\r
+\r
+                       // Move the selection to the new block.\r
+                       range.moveToElementEditStart( isStartOfBlock && !isEndOfBlock ? nextBlock : newBlock );\r
+               }\r
+\r
+               if ( !CKEDITOR.env.ie )\r
+               {\r
+                       if ( nextBlock )\r
+                       {\r
+                               // If we have split the block, adds a temporary span at the\r
+                               // range position and scroll relatively to it.\r
+                               var tmpNode = doc.createElement( 'span' );\r
+\r
+                               // We need some content for Safari.\r
+                               tmpNode.setHtml( '&nbsp;' );\r
+\r
+                               range.insertNode( tmpNode );\r
+                               tmpNode.scrollIntoView();\r
+                               range.deleteContents();\r
+                       }\r
+                       else\r
+                       {\r
+                               // We may use the above scroll logic for the new block case\r
+                               // too, but it gives some weird result with Opera.\r
+                               newBlock.scrollIntoView();\r
+                       }\r
+               }\r
+\r
+               range.select();\r
+       }\r
+\r
+       function enterBr( editor, mode )\r
+       {\r
+               // Get the range for the current selection.\r
+               var range = getRange( editor ),\r
+                       doc = range.document;\r
+\r
+               // Determine the block element to be used.\r
+               var blockTag = ( mode == CKEDITOR.ENTER_DIV ? 'div' : 'p' );\r
+\r
+               var isEndOfBlock = range.checkEndOfBlock();\r
+\r
+               var elementPath = new CKEDITOR.dom.elementPath( editor.getSelection().getStartElement() );\r
+\r
+               var startBlock = elementPath.block,\r
+                       startBlockTag = startBlock && elementPath.block.getName();\r
+\r
+               var isPre = false;\r
+\r
+               if ( !forceMode && startBlockTag == 'li' )\r
+               {\r
+                       enterBlock( editor, mode, range );\r
+                       return;\r
+               }\r
+\r
+               // If we are at the end of a header block.\r
+               if ( !forceMode && isEndOfBlock && headerTagRegex.test( startBlockTag ) )\r
+               {\r
+                       // Insert a <br> after the current paragraph.\r
+                       doc.createElement( 'br' ).insertAfter( startBlock );\r
+\r
+                       // A text node is required by Gecko only to make the cursor blink.\r
+                       if ( CKEDITOR.env.gecko )\r
+                               doc.createText( '' ).insertAfter( startBlock );\r
+\r
+                       // IE has different behaviors regarding position.\r
+                       range.setStartAt( startBlock.getNext(), CKEDITOR.env.ie ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_START );\r
+               }\r
+               else\r
+               {\r
+                       var lineBreak;\r
+\r
+                       isPre = ( startBlockTag == 'pre' );\r
+\r
+                       if ( isPre )\r
+                               lineBreak = doc.createText( CKEDITOR.env.ie ? '\r' : '\n' );\r
+                       else\r
+                               lineBreak = doc.createElement( 'br' );\r
+\r
+                       range.deleteContents();\r
+                       range.insertNode( lineBreak );\r
+\r
+                       // A text node is required by Gecko only to make the cursor blink.\r
+                       // We need some text inside of it, so the bogus <br> is properly\r
+                       // created.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               doc.createText( '\ufeff' ).insertAfter( lineBreak );\r
+\r
+                       // If we are at the end of a block, we must be sure the bogus node is available in that block.\r
+                       if ( isEndOfBlock && !CKEDITOR.env.ie )\r
+                               lineBreak.getParent().appendBogus();\r
+\r
+                       // Now we can remove the text node contents, so the caret doesn't\r
+                       // stop on it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               lineBreak.getNext().$.nodeValue = '';\r
+                       // IE has different behavior regarding position.\r
+                       if ( CKEDITOR.env.ie )\r
+                               range.setStartAt( lineBreak, CKEDITOR.POSITION_AFTER_END );\r
+                       else\r
+                               range.setStartAt( lineBreak.getNext(), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       // Scroll into view, for non IE.\r
+                       if ( !CKEDITOR.env.ie )\r
+                       {\r
+                               var dummy = null;\r
+\r
+                               // BR is not positioned in Opera and Webkit.\r
+                               if ( !CKEDITOR.env.gecko )\r
+                               {\r
+                                       dummy = doc.createElement( 'span' );\r
+                                       // We need have some contents for Webkit to position it\r
+                                       // under parent node. ( #3681)\r
+                                       dummy.setHtml('&nbsp;');\r
+                               }\r
+                               else\r
+                                       dummy = doc.createElement( 'br' );\r
+\r
+                               dummy.insertBefore( lineBreak.getNext() );\r
+                               dummy.scrollIntoView();\r
+                               dummy.remove();\r
+                       }\r
+               }\r
+\r
+               // This collapse guarantees the cursor will be blinking.\r
+               range.collapse( true );\r
+\r
+               range.select( isPre );\r
+       }\r
+\r
+       function getRange( editor )\r
+       {\r
+               // Get the selection ranges.\r
+               var ranges = editor.getSelection().getRanges();\r
+\r
+               // Delete the contents of all ranges except the first one.\r
+               for ( var i = ranges.length - 1 ; i > 0 ; i-- )\r
+               {\r
+                       ranges[ i ].deleteContents();\r
+               }\r
+\r
+               // Return the first range.\r
+               return ranges[ 0 ];\r
+       }\r
+})();\r
diff --git a/_source/plugins/entities/plugin.js b/_source/plugins/entities/plugin.js
new file mode 100644 (file)
index 0000000..73d85c1
--- /dev/null
@@ -0,0 +1,200 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       var entities =\r
+\r
+               // Base HTML entities.\r
+               'nbsp,gt,lt,quot,' +\r
+\r
+               // Latin-1 Entities\r
+               'iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,' +\r
+               'not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,' +\r
+               'cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,' +\r
+\r
+               // Symbols\r
+               'fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,' +\r
+               'alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,' +\r
+               'forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,' +\r
+               'radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,' +\r
+               'equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,' +\r
+               'rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,' +\r
+\r
+               // Other Special Characters\r
+               'circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,' +\r
+               'rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,' +\r
+               'euro';\r
+\r
+       // Latin Letters Entities\r
+       var latin =\r
+               'Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,' +\r
+               'Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,' +\r
+               'Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,' +\r
+               'agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,' +\r
+               'ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,' +\r
+               'otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,' +\r
+               'OElig,oelig,Scaron,scaron,Yuml';\r
+\r
+       // Greek Letters Entities.\r
+       var greek =\r
+               'Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,' +\r
+               'Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,' +\r
+               'beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,' +\r
+               'omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,' +\r
+               'upsih,piv';\r
+\r
+       function buildTable( entities )\r
+       {\r
+               var table = {},\r
+                       regex = [];\r
+\r
+               // Entities that the browsers DOM don't transform to the final char\r
+               // automatically.\r
+               var specialTable =\r
+                       {\r
+                               nbsp    : '\u00A0',             // IE | FF\r
+                               shy             : '\u00AD',             // IE\r
+                               gt              : '\u003E',             // IE | FF |   --   | Opera\r
+                               lt              : '\u003C'              // IE | FF | Safari | Opera\r
+                       };\r
+\r
+               entities = entities.replace( /\b(nbsp|shy|gt|lt|amp)(?:,|$)/g, function( match, entity )\r
+                       {\r
+                               table[ specialTable[ entity ] ] = '&' + entity + ';';\r
+                               regex.push( specialTable[ entity ] );\r
+                               return '';\r
+                       });\r
+\r
+               // Transforms the entities string into an array.\r
+               entities = entities.split( ',' );\r
+\r
+               // Put all entities inside a DOM element, transforming them to their\r
+               // final chars.\r
+               var div = document.createElement( 'div' ),\r
+                       chars;\r
+               div.innerHTML = '&' + entities.join( ';&' ) + ';';\r
+               chars = div.innerHTML;\r
+               div = null;\r
+\r
+               // Add all chars to the table.\r
+               for ( var i = 0 ; i < chars.length ; i++ )\r
+               {\r
+                       var charAt = chars.charAt( i );\r
+                       table[ charAt ] = '&' + entities[ i ] + ';';\r
+                       regex.push( charAt );\r
+               }\r
+\r
+               table.regex = regex.join( '' );\r
+\r
+               return table;\r
+       }\r
+\r
+       CKEDITOR.plugins.add( 'entities',\r
+       {\r
+               afterInit : function( editor )\r
+               {\r
+                       var config = editor.config;\r
+\r
+                       if ( !config.entities )\r
+                               return;\r
+\r
+                       var dataProcessor = editor.dataProcessor,\r
+                               htmlFilter = dataProcessor && dataProcessor.htmlFilter;\r
+\r
+                       if ( htmlFilter )\r
+                       {\r
+                               var selectedEntities = entities;\r
+\r
+                               if ( config.entities_latin )\r
+                                       selectedEntities += ',' + latin;\r
+\r
+                               if ( config.entities_greek )\r
+                                       selectedEntities += ',' + greek;\r
+\r
+                               if ( config.entities_additional )\r
+                                       selectedEntities += ',' + config.entities_additional;\r
+\r
+                               var entitiesTable = buildTable( selectedEntities );\r
+\r
+                               // Create the Regex used to find entities in the text.\r
+                               var entitiesRegex = '[' + entitiesTable.regex + ']';\r
+                               delete entitiesTable.regex;\r
+\r
+                               if ( config.entities_processNumerical )\r
+                                       entitiesRegex = '[^ -~]|' + entitiesRegex ;\r
+\r
+                               entitiesRegex = new RegExp( entitiesRegex, 'g' );\r
+\r
+                               function getChar( character )\r
+                               {\r
+                                       return entitiesTable[ character ] || ( '&#' + character.charCodeAt(0) + ';' );\r
+                               }\r
+\r
+                               htmlFilter.addRules(\r
+                                       {\r
+                                               text : function( text )\r
+                                               {\r
+                                                       return text.replace( entitiesRegex, getChar );\r
+                                               }\r
+                                       });\r
+                       }\r
+               }\r
+       });\r
+})();\r
+\r
+/**\r
+ * Whether to use HTML entities in the output.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.entities = false;\r
+ */\r
+CKEDITOR.config.entities = true;\r
+\r
+/**\r
+ * Whether to convert some Latin characters (Latin alphabet No&#46; 1, ISO 8859-1)\r
+ * to HTML entities. The list of entities can be found at the\r
+ * <a href="http://www.w3.org/TR/html4/sgml/entities.html#h-24.2.1">W3C HTML 4.01 Specification, section 24.2.1</a>.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.entities_latin = false;\r
+ */\r
+CKEDITOR.config.entities_latin = true;\r
+\r
+/**\r
+ * Whether to convert some symbols, mathematical symbols, and Greek letters to\r
+ * HTML entities. This may be more relevant for users typing text written in Greek.\r
+ * The list of entities can be found at the\r
+ * <a href="http://www.w3.org/TR/html4/sgml/entities.html#h-24.3.1">W3C HTML 4.01 Specification, section 24.3.1</a>.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.entities_greek = false;\r
+ */\r
+CKEDITOR.config.entities_greek = true;\r
+\r
+/**\r
+ * Whether to convert all remaining characters, not comprised in the ASCII\r
+ * character table, to their relative numeric representation of HTML entity.\r
+ * For example, the phrase "This is Chinese: &#27721;&#35821;." is outputted\r
+ * as "This is Chinese: &amp;#27721;&amp;#35821;."\r
+ * @type Boolean\r
+ * @default false\r
+ * @example\r
+ * config.entities_processNumerical = true;\r
+ */\r
+CKEDITOR.config.entities_processNumerical = false;\r
+\r
+/**\r
+ * An additional list of entities to be used. It's a string containing each\r
+ * entry separated by a comma. Entities names or number must be used, exclusing\r
+ * the "&amp;" preffix and the ";" termination.\r
+ * @default '#39'  // The single quote (') character.\r
+ * @type String\r
+ * @example\r
+ */\r
+CKEDITOR.config.entities_additional = '#39';\r
diff --git a/_source/plugins/fakeobjects/plugin.js b/_source/plugins/fakeobjects/plugin.js
new file mode 100644 (file)
index 0000000..137c677
--- /dev/null
@@ -0,0 +1,111 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       var htmlFilterRules =\r
+       {\r
+               elements :\r
+               {\r
+                       $ : function( element )\r
+                       {\r
+                               var realHtml = element.attributes._cke_realelement,\r
+                                       realFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( decodeURIComponent( realHtml ) ),\r
+                                       realElement = realFragment && realFragment.children[ 0 ];\r
+\r
+                               if ( realElement )\r
+                               {\r
+                                       // If we have width/height in the element, we must move it into\r
+                                       // the real element.\r
+\r
+                                       var style = element.attributes.style;\r
+\r
+                                       if ( style )\r
+                                       {\r
+                                               // Get the width from the style.\r
+                                               var match = /(?:^|\s)width\s*:\s*(\d+)/.exec( style ),\r
+                                                       width = match && match[1];\r
+\r
+                                               // Get the height from the style.\r
+                                               match = /(?:^|\s)height\s*:\s*(\d+)/.exec( style );\r
+                                               var height = match && match[1];\r
+\r
+                                               if ( width )\r
+                                                       realElement.attributes.width = width;\r
+\r
+                                               if ( height )\r
+                                                       realElement.attributes.height = height;\r
+                                       }\r
+                               }\r
+\r
+                               return realElement;\r
+                       }\r
+               }\r
+       };\r
+\r
+       CKEDITOR.plugins.add( 'fakeobjects',\r
+       {\r
+               requires : [ 'htmlwriter' ],\r
+\r
+               afterInit : function( editor )\r
+               {\r
+                       var dataProcessor = editor.dataProcessor,\r
+                               htmlFilter = dataProcessor && dataProcessor.htmlFilter;\r
+\r
+                       if ( htmlFilter )\r
+                               htmlFilter.addRules( htmlFilterRules );\r
+               }\r
+       });\r
+})();\r
+\r
+CKEDITOR.editor.prototype.createFakeElement = function( realElement, className, realElementType, isResizable )\r
+{\r
+       var lang = this.lang.fakeobjects;\r
+       var attributes =\r
+       {\r
+               'class' : className,\r
+               src : CKEDITOR.getUrl( 'images/spacer.gif' ),\r
+               _cke_realelement : encodeURIComponent( realElement.getOuterHtml() ),\r
+               alt : lang[ realElementType ] || lang.unknown\r
+       };\r
+       if ( realElementType )\r
+               attributes._cke_real_element_type = realElementType;\r
+       if ( isResizable )\r
+               attributes._cke_resizable = isResizable;\r
+\r
+       return this.document.createElement( 'img', { attributes : attributes } );\r
+};\r
+\r
+CKEDITOR.editor.prototype.createFakeParserElement = function( realElement, className, realElementType, isResizable )\r
+{\r
+       var writer = new CKEDITOR.htmlParser.basicWriter();\r
+\r
+       realElement.writeHtml( writer );\r
+\r
+       var html = writer.getHtml();\r
+       var lang = this.lang.fakeobjects;\r
+\r
+       var attributes =\r
+       {\r
+               'class' : className,\r
+               src : CKEDITOR.getUrl( 'images/spacer.gif' ),\r
+               _cke_realelement : encodeURIComponent( html ),\r
+               alt : lang[ realElementType ] || lang.unknown\r
+       };\r
+\r
+       if ( realElementType )\r
+               attributes._cke_real_element_type = realElementType;\r
+\r
+       if ( isResizable )\r
+               attributes._cke_resizable = isResizable;\r
+\r
+       return new CKEDITOR.htmlParser.element( 'img', attributes );\r
+};\r
+\r
+CKEDITOR.editor.prototype.restoreRealElement = function( fakeElement )\r
+{\r
+       var html = decodeURIComponent( fakeElement.getAttribute( '_cke_realelement' ) );\r
+       return CKEDITOR.dom.element.createFromHtml( html, this.document );\r
+};\r
diff --git a/_source/plugins/filebrowser/plugin.js b/_source/plugins/filebrowser/plugin.js
new file mode 100644 (file)
index 0000000..458f296
--- /dev/null
@@ -0,0 +1,383 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview The "filebrowser" plugin, it adds support for file uploads and\r
+ *               browsing.\r
+ *\r
+ * When file is selected inside of the file browser or uploaded, its url is\r
+ * inserted automatically to a field, which is described in the 'filebrowser'\r
+ * attribute. To specify field that should be updated, pass the tab id and\r
+ * element id, separated with a colon.\r
+ *\r
+ * Example 1: (Browse)\r
+ *\r
+ * <pre>\r
+ * {\r
+ *     type : 'button',\r
+ *     id : 'browse',\r
+ *     filebrowser : 'tabId:elementId',\r
+ *     label : editor.lang.common.browseServer\r
+ * }\r
+ * </pre>\r
+ *\r
+ * If you set the 'filebrowser' attribute on any element other than\r
+ * 'fileButton', the 'Browse' action will be triggered.\r
+ *\r
+ * Example 2: (Quick Upload)\r
+ *\r
+ * <pre>\r
+ * {\r
+ *     type : 'fileButton',\r
+ *     id : 'uploadButton',\r
+ *     filebrowser : 'tabId:elementId',\r
+ *     label : editor.lang.common.uploadSubmit,\r
+ *     'for' : [ 'upload', 'upload' ]\r
+ * }\r
+ * </pre>\r
+ *\r
+ * If you set the 'filebrowser' attribute on a fileButton element, the\r
+ * 'QuickUpload' action will be executed.\r
+ *\r
+ * Filebrowser plugin also supports more advanced configuration (through\r
+ * javascript object).\r
+ *\r
+ * The following settings are supported:\r
+ *\r
+ * <pre>\r
+ *  [action] - Browse or QuickUpload\r
+ *  [target] - field to update, tabId:elementId\r
+ *  [params] - additional arguments to be passed to the server connector (optional)\r
+ *  [onSelect] - function to execute when file is selected/uploaded (optional)\r
+ *  [url] - the URL to be called (optional)\r
+ * </pre>\r
+ *\r
+ * Example 3: (Quick Upload)\r
+ *\r
+ * <pre>\r
+ * {\r
+ *     type : 'fileButton',\r
+ *     label : editor.lang.common.uploadSubmit,\r
+ *     id : 'buttonId',\r
+ *     filebrowser :\r
+ *     {\r
+ *             action : 'QuickUpload', //required\r
+ *             target : 'tab1:elementId', //required\r
+ *             params : //optional\r
+ *             {\r
+ *                     type : 'Files',\r
+ *                     currentFolder : '/folder/'\r
+ *             },\r
+ *             onSelect : function( fileUrl, errorMessage ) //optional\r
+ *             {\r
+ *                     // Do not call the built-in selectFuntion\r
+ *                     // return false;\r
+ *             }\r
+ *     },\r
+ *     'for' : [ 'tab1', 'myFile' ]\r
+ * }\r
+ * </pre>\r
+ *\r
+ * Suppose we have a file element with id 'myFile', text field with id\r
+ * 'elementId' and a fileButton. If filebowser.url is not specified explicitly,\r
+ * form action will be set to 'filebrowser[DialogName]UploadUrl' or, if not\r
+ * specified, to 'filebrowserUploadUrl'. Additional parameters from 'params'\r
+ * object will be added to the query string. It is possible to create your own\r
+ * uploadHandler and cancel the built-in updateTargetElement command.\r
+ *\r
+ * Example 4: (Browse)\r
+ *\r
+ * <pre>\r
+ * {\r
+ *     type : 'button',\r
+ *     id : 'buttonId',\r
+ *     label : editor.lang.common.browseServer,\r
+ *     filebrowser :\r
+ *     {\r
+ *             action : 'Browse',\r
+ *             url : '/ckfinder/ckfinder.html&amp;type=Images',\r
+ *             target : 'tab1:elementId'\r
+ *     }\r
+ * }\r
+ * </pre>\r
+ *\r
+ * In this example, after pressing a button, file browser will be opened in a\r
+ * popup. If we don't specify filebrowser.url attribute,\r
+ * 'filebrowser[DialogName]BrowseUrl' or 'filebrowserBrowseUrl' will be used.\r
+ * After selecting a file in a file browser, an element with id 'elementId' will\r
+ * be updated. Just like in the third example, a custom 'onSelect' function may be\r
+ * defined.\r
+ */\r
+( function()\r
+{\r
+       /**\r
+        * Adds (additional) arguments to given url.\r
+        *\r
+        * @param {String}\r
+        *            url The url.\r
+        * @param {Object}\r
+        *            params Additional parameters.\r
+        */\r
+       function addQueryString( url, params )\r
+       {\r
+               var queryString = [];\r
+\r
+               if ( !params )\r
+                       return url;\r
+               else\r
+               {\r
+                       for ( var i in params )\r
+                               queryString.push( i + "=" + encodeURIComponent( params[ i ] ) );\r
+               }\r
+\r
+               return url + ( ( url.indexOf( "?" ) != -1 ) ? "&" : "?" ) + queryString.join( "&" );\r
+       }\r
+\r
+       /**\r
+        * Make a string's first character uppercase.\r
+        *\r
+        * @param {String}\r
+        *            str String.\r
+        */\r
+       function ucFirst( str )\r
+       {\r
+               str += '';\r
+               var f = str.charAt( 0 ).toUpperCase();\r
+               return f + str.substr( 1 );\r
+       }\r
+\r
+       /**\r
+        * The onlick function assigned to the 'Browse Server' button. Opens the\r
+        * file browser and updates target field when file is selected.\r
+        *\r
+        * @param {CKEDITOR.event}\r
+        *            evt The event object.\r
+        */\r
+       function browseServer( evt )\r
+       {\r
+               var dialog = this.getDialog();\r
+               var editor = dialog.getParentEditor();\r
+\r
+               editor._.filebrowserSe = this;\r
+\r
+               var width = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowWidth' ]\r
+                               || editor.config.filebrowserWindowWidth || '80%';\r
+               var height = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowHeight' ]\r
+                               || editor.config.filebrowserWindowHeight || '70%';\r
+\r
+               var params = this.filebrowser.params || {};\r
+               params.CKEditor = editor.name;\r
+               params.CKEditorFuncNum = editor._.filebrowserFn;\r
+               if ( !params.langCode )\r
+                       params.langCode = editor.langCode;\r
+\r
+               var url = addQueryString( this.filebrowser.url, params );\r
+               editor.popup( url, width, height );\r
+       }\r
+\r
+       /**\r
+        * The onlick function assigned to the 'Upload' button. Makes the final\r
+        * decision whether form is really submitted and updates target field when\r
+        * file is uploaded.\r
+        *\r
+        * @param {CKEDITOR.event}\r
+        *            evt The event object.\r
+        */\r
+       function uploadFile( evt )\r
+       {\r
+               var dialog = this.getDialog();\r
+               var editor = dialog.getParentEditor();\r
+\r
+               editor._.filebrowserSe = this;\r
+\r
+               // If user didn't select the file, stop the upload.\r
+               if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getInputElement().$.value )\r
+                       return false;\r
+\r
+               if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getAction() )\r
+                       return false;\r
+\r
+               return true;\r
+       }\r
+\r
+       /**\r
+        * Setups the file element.\r
+        *\r
+        * @param {CKEDITOR.ui.dialog.file}\r
+        *            fileInput The file element used during file upload.\r
+        * @param {Object}\r
+        *            filebrowser Object containing filebrowser settings assigned to\r
+        *            the fileButton associated with this file element.\r
+        */\r
+       function setupFileElement( editor, fileInput, filebrowser )\r
+       {\r
+               var params = filebrowser.params || {};\r
+               params.CKEditor = editor.name;\r
+               params.CKEditorFuncNum = editor._.filebrowserFn;\r
+               if ( !params.langCode )\r
+                       params.langCode = editor.langCode;\r
+\r
+               fileInput.action = addQueryString( filebrowser.url, params );\r
+               fileInput.filebrowser = filebrowser;\r
+       }\r
+\r
+       /**\r
+        * Traverse through the content definition and attach filebrowser to\r
+        * elements with 'filebrowser' attribute.\r
+        *\r
+        * @param String\r
+        *            dialogName Dialog name.\r
+        * @param {CKEDITOR.dialog.dialogDefinitionObject}\r
+        *            definition Dialog definition.\r
+        * @param {Array}\r
+        *            elements Array of {@link CKEDITOR.dialog.contentDefinition}\r
+        *            objects.\r
+        */\r
+       function attachFileBrowser( editor, dialogName, definition, elements )\r
+       {\r
+               var element, fileInput;\r
+\r
+               for ( var i in elements )\r
+               {\r
+                       element = elements[ i ];\r
+\r
+                       if ( element.type == 'hbox' || element.type == 'vbox' )\r
+                               attachFileBrowser( editor, dialogName, definition, element.children );\r
+\r
+                       if ( !element.filebrowser )\r
+                               continue;\r
+\r
+                       if ( typeof element.filebrowser == 'string' )\r
+                       {\r
+                               var fb =\r
+                               {\r
+                                       action : ( element.type == 'fileButton' ) ? 'QuickUpload' : 'Browse',\r
+                                       target : element.filebrowser\r
+                               };\r
+                               element.filebrowser = fb;\r
+                       }\r
+\r
+                       if ( element.filebrowser.action == 'Browse' )\r
+                       {\r
+                               var url = element.filebrowser.url || editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'BrowseUrl' ]\r
+                                                       || editor.config.filebrowserBrowseUrl;\r
+\r
+                               if ( url )\r
+                               {\r
+                                       element.onClick = browseServer;\r
+                                       element.filebrowser.url = url;\r
+                                       element.hidden = false;\r
+                               }\r
+                       }\r
+                       else if ( element.filebrowser.action == 'QuickUpload' && element[ 'for' ] )\r
+                       {\r
+                               url =  element.filebrowser.url || editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'UploadUrl' ]\r
+                                                       || editor.config.filebrowserUploadUrl;\r
+\r
+                               if ( url )\r
+                               {\r
+                                       element.onClick = uploadFile;\r
+                                       element.filebrowser.url = url;\r
+                                       element.hidden = false;\r
+                                       setupFileElement( editor, definition.getContents( element[ 'for' ][ 0 ] ).get( element[ 'for' ][ 1 ] ), element.filebrowser );\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Updates the target element with the url of uploaded/selected file.\r
+        *\r
+        * @param {String}\r
+        *            url The url of a file.\r
+        */\r
+       function updateTargetElement( url, sourceElement )\r
+       {\r
+               var dialog = sourceElement.getDialog();\r
+               var targetElement = sourceElement.filebrowser.target || null;\r
+               url = url.replace( /#/g, '%23' );\r
+\r
+               // If there is a reference to targetElement, update it.\r
+               if ( targetElement )\r
+               {\r
+                       var target = targetElement.split( ':' );\r
+                       var element = dialog.getContentElement( target[ 0 ], target[ 1 ] );\r
+                       if ( element )\r
+                       {\r
+                               element.setValue( url );\r
+                               dialog.selectPage( target[ 0 ] );\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Returns true if filebrowser is configured in one of the elements.\r
+        *\r
+        * @param {CKEDITOR.dialog.dialogDefinitionObject}\r
+        *            definition Dialog definition.\r
+        * @param String\r
+        *            tabId The tab id where element(s) can be found.\r
+        * @param String\r
+        *            elementId The element id (or ids, separated with a semicolon) to check.\r
+        */\r
+       function isConfigured( definition, tabId, elementId )\r
+       {\r
+               if ( elementId.indexOf( ";" ) !== -1 )\r
+               {\r
+                       var ids = elementId.split( ";" );\r
+                       for ( var i = 0 ; i < ids.length ; i++ )\r
+                       {\r
+                               if ( isConfigured( definition, tabId, ids[i]) )\r
+                                       return true;\r
+                       }\r
+                       return false;\r
+               }\r
+\r
+               return ( definition.getContents( tabId ).get( elementId ).filebrowser && definition.getContents( tabId ).get( elementId ).filebrowser.url );\r
+       }\r
+\r
+       function setUrl( fileUrl, data )\r
+       {\r
+               var dialog = this._.filebrowserSe.getDialog(),\r
+                       targetInput = this._.filebrowserSe[ 'for' ],\r
+                       onSelect = this._.filebrowserSe.filebrowser.onSelect;\r
+\r
+               if ( targetInput )\r
+                       dialog.getContentElement( targetInput[ 0 ], targetInput[ 1 ] ).reset();\r
+\r
+               if ( onSelect && onSelect.call( this._.filebrowserSe, fileUrl, data ) === false )\r
+                       return;\r
+\r
+               // The "data" argument may be used to pass the error message to the editor.\r
+               if ( typeof data == 'string' && data )\r
+                       alert( data );\r
+\r
+               if ( fileUrl )\r
+                       updateTargetElement( fileUrl, this._.filebrowserSe );\r
+       }\r
+\r
+       CKEDITOR.plugins.add( 'filebrowser',\r
+       {\r
+               init : function( editor, pluginPath )\r
+               {\r
+                       editor._.filebrowserFn = CKEDITOR.tools.addFunction( setUrl, editor );\r
+\r
+                       CKEDITOR.on( 'dialogDefinition', function( evt )\r
+                       {\r
+                               // Associate filebrowser to elements with 'filebrowser' attribute.\r
+                               for ( var i in evt.data.definition.contents )\r
+                               {\r
+                                       attachFileBrowser( evt.editor, evt.data.name, evt.data.definition, evt.data.definition.contents[ i ].elements );\r
+                                       if ( evt.data.definition.contents[ i ].hidden && evt.data.definition.contents[ i ].filebrowser )\r
+                                       {\r
+                                               evt.data.definition.contents[ i ].hidden =\r
+                                                       !isConfigured( evt.data.definition, evt.data.definition.contents[ i ][ 'id' ], evt.data.definition.contents[ i ].filebrowser );\r
+                                       }\r
+                               }\r
+                       } );\r
+               }\r
+       } );\r
+\r
+} )();\r
diff --git a/_source/plugins/find/dialogs/find.js b/_source/plugins/find/dialogs/find.js
new file mode 100644 (file)
index 0000000..cc1c2c1
--- /dev/null
@@ -0,0 +1,843 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       function guardDomWalkerNonEmptyTextNode( node )\r
+       {\r
+               return ( node.type == CKEDITOR.NODE_TEXT && node.getLength() > 0 );\r
+       }\r
+\r
+       /**\r
+        * Elements which break characters been considered as sequence.\r
+       */\r
+       function checkCharactersBoundary ( node )\r
+       {\r
+               var dtd = CKEDITOR.dtd;\r
+               return node.isBlockBoundary(\r
+                       CKEDITOR.tools.extend( {}, dtd.$empty, dtd.$nonEditable ) );\r
+       }\r
+\r
+       /**\r
+        * Get the cursor object which represent both current character and it's dom\r
+        * position thing.\r
+        */\r
+       var cursorStep = function()\r
+       {\r
+               return {\r
+                       textNode : this.textNode,\r
+                       offset : this.offset,\r
+                       character : this.textNode ?\r
+                               this.textNode.getText().charAt( this.offset ) : null,\r
+                       hitMatchBoundary : this._.matchBoundary\r
+               };\r
+       };\r
+\r
+       var pages = [ 'find', 'replace' ],\r
+               fieldsMapping = [\r
+               [ 'txtFindFind', 'txtFindReplace' ],\r
+               [ 'txtFindCaseChk', 'txtReplaceCaseChk' ],\r
+               [ 'txtFindWordChk', 'txtReplaceWordChk' ],\r
+               [ 'txtFindCyclic', 'txtReplaceCyclic' ] ];\r
+\r
+       /**\r
+        * Synchronize corresponding filed values between 'replace' and 'find' pages.\r
+        * @param {String} currentPageId        The page id which receive values.\r
+        */\r
+       function syncFieldsBetweenTabs( currentPageId )\r
+       {\r
+               var sourceIndex, targetIndex,\r
+                       sourceField, targetField;\r
+\r
+               sourceIndex = currentPageId === 'find' ? 1 : 0;\r
+               targetIndex = 1 - sourceIndex;\r
+               var i, l = fieldsMapping.length;\r
+               for ( i = 0 ; i < l ; i++ )\r
+               {\r
+                       sourceField = this.getContentElement( pages[ sourceIndex ],\r
+                                       fieldsMapping[ i ][ sourceIndex ] );\r
+                       targetField = this.getContentElement( pages[ targetIndex ],\r
+                                       fieldsMapping[ i ][ targetIndex ] );\r
+\r
+                       targetField.setValue( sourceField.getValue() );\r
+               }\r
+       }\r
+\r
+       var findDialog = function( editor, startupPage )\r
+       {\r
+               // Style object for highlights.\r
+               var highlightStyle = new CKEDITOR.style( editor.config.find_highlight );\r
+\r
+               /**\r
+                * Iterator which walk through the specified range char by char. By\r
+                * default the walking will not stop at the character boundaries, until\r
+                * the end of the range is encountered.\r
+                * @param { CKEDITOR.dom.range } range\r
+                * @param {Boolean} matchWord Whether the walking will stop at character boundary.\r
+                */\r
+               var characterWalker = function( range , matchWord )\r
+               {\r
+                       var walker =\r
+                               new CKEDITOR.dom.walker( range );\r
+                       walker[ matchWord ? 'guard' : 'evaluator' ] =\r
+                               guardDomWalkerNonEmptyTextNode;\r
+                       walker.breakOnFalse = true;\r
+\r
+                       this._ = {\r
+                               matchWord : matchWord,\r
+                               walker : walker,\r
+                               matchBoundary : false\r
+                       };\r
+               };\r
+\r
+               characterWalker.prototype = {\r
+                       next : function()\r
+                       {\r
+                               return this.move();\r
+                       },\r
+\r
+                       back : function()\r
+                       {\r
+                               return this.move( true );\r
+                       },\r
+\r
+                       move : function( rtl )\r
+                       {\r
+                               var currentTextNode = this.textNode;\r
+                               // Already at the end of document, no more character available.\r
+                               if(  currentTextNode === null )\r
+                                       return cursorStep.call( this );\r
+\r
+                               this._.matchBoundary = false;\r
+\r
+                               // There are more characters in the text node, step forward.\r
+                               if( currentTextNode\r
+                                   && rtl\r
+                                       && this.offset > 0 )\r
+                               {\r
+                                       this.offset--;\r
+                                       return cursorStep.call( this );\r
+                               }\r
+                               else if( currentTextNode\r
+                                       && this.offset < currentTextNode.getLength() - 1 )\r
+                               {\r
+                                       this.offset++;\r
+                                       return cursorStep.call( this );\r
+                               }\r
+                               else\r
+                               {\r
+                                       currentTextNode = null;\r
+                                       // At the end of the text node, walking foward for the next.\r
+                                       while ( !currentTextNode )\r
+                                       {\r
+                                               currentTextNode =\r
+                                                       this._.walker[ rtl ? 'previous' : 'next' ].call( this._.walker );\r
+\r
+                                               // Stop searching if we're need full word match OR\r
+                                               // already reach document end.\r
+                                               if ( this._.matchWord && !currentTextNode\r
+                                                        ||this._.walker._.end )\r
+                                                       break;\r
+\r
+                                               // Marking as match character boundaries.\r
+                                               if( !currentTextNode\r
+                                                  && checkCharactersBoundary( this._.walker.current ) )\r
+                                                       this._.matchBoundary = true;\r
+\r
+                                       }\r
+                                       // Found a fresh text node.\r
+                                       this.textNode = currentTextNode;\r
+                                       if ( currentTextNode )\r
+                                               this.offset = rtl ? currentTextNode.getLength() - 1 : 0;\r
+                                       else\r
+                                               this.offset = 0;\r
+                               }\r
+\r
+                               return cursorStep.call( this );\r
+                       }\r
+\r
+               };\r
+\r
+               /**\r
+                * A range of cursors which represent a trunk of characters which try to\r
+                * match, it has the same length as the pattern  string.\r
+                */\r
+               var characterRange = function( characterWalker, rangeLength )\r
+               {\r
+                       this._ = {\r
+                               walker : characterWalker,\r
+                               cursors : [],\r
+                               rangeLength : rangeLength,\r
+                               highlightRange : null,\r
+                               isMatched : false\r
+                       };\r
+               };\r
+\r
+               characterRange.prototype = {\r
+                       /**\r
+                        * Translate this range to {@link CKEDITOR.dom.range}\r
+                        */\r
+                       toDomRange : function()\r
+                       {\r
+                               var cursors = this._.cursors;\r
+                               if ( cursors.length < 1 )\r
+                                       return null;\r
+\r
+                               var first = cursors[0],\r
+                                       last = cursors[ cursors.length - 1 ],\r
+                                       range = new CKEDITOR.dom.range( editor.document );\r
+\r
+                               range.setStart( first.textNode, first.offset );\r
+                               range.setEnd( last.textNode, last.offset + 1 );\r
+                               return range;\r
+                       },\r
+                       /**\r
+                        * Reflect the latest changes from dom range.\r
+                        */\r
+                       updateFromDomRange : function( domRange )\r
+                       {\r
+                               var cursor,\r
+                                               walker = new characterWalker( domRange );\r
+                               this._.cursors = [];\r
+                               do\r
+                               {\r
+                                       cursor = walker.next();\r
+                                       if ( cursor.character )\r
+                                               this._.cursors.push( cursor );\r
+                               }\r
+                               while ( cursor.character );\r
+                               this._.rangeLength = this._.cursors.length;\r
+                       },\r
+\r
+                       setMatched : function()\r
+                       {\r
+                               this._.isMatched = true;\r
+                       },\r
+\r
+                       clearMatched : function()\r
+                       {\r
+                               this._.isMatched = false;\r
+                       },\r
+\r
+                       isMatched : function()\r
+                       {\r
+                               return this._.isMatched;\r
+                       },\r
+\r
+                       /**\r
+                        * Hightlight the current matched chunk of text.\r
+                        */\r
+                       highlight : function()\r
+                       {\r
+                               // Do not apply if nothing is found.\r
+                               if ( this._.cursors.length < 1 )\r
+                                       return;\r
+\r
+                               // Remove the previous highlight if there's one.\r
+                               if ( this._.highlightRange )\r
+                                       this.removeHighlight();\r
+\r
+                               // Apply the highlight.\r
+                               var range = this.toDomRange();\r
+                               highlightStyle.applyToRange( range );\r
+                               this._.highlightRange = range;\r
+\r
+                               // Scroll the editor to the highlighted area.\r
+                               var element = range.startContainer;\r
+                               if ( element.type != CKEDITOR.NODE_ELEMENT )\r
+                                       element = element.getParent();\r
+                               element.scrollIntoView();\r
+\r
+                               // Update the character cursors.\r
+                               this.updateFromDomRange( range );\r
+                       },\r
+\r
+                       /**\r
+                        * Remove highlighted find result.\r
+                        */\r
+                       removeHighlight : function()\r
+                       {\r
+                               if ( !this._.highlightRange )\r
+                                       return;\r
+\r
+                               highlightStyle.removeFromRange( this._.highlightRange );\r
+                               this.updateFromDomRange( this._.highlightRange );\r
+                               this._.highlightRange = null;\r
+                       },\r
+\r
+                       moveBack : function()\r
+                       {\r
+                               var retval = this._.walker.back(),\r
+                                       cursors = this._.cursors;\r
+\r
+                               if ( retval.hitMatchBoundary )\r
+                                       this._.cursors = cursors = [];\r
+\r
+                               cursors.unshift( retval );\r
+                               if ( cursors.length > this._.rangeLength )\r
+                                       cursors.pop();\r
+\r
+                               return retval;\r
+                       },\r
+\r
+                       moveNext : function()\r
+                       {\r
+                               var retval = this._.walker.next(),\r
+                                       cursors = this._.cursors;\r
+\r
+                               // Clear the cursors queue if we've crossed a match boundary.\r
+                               if ( retval.hitMatchBoundary )\r
+                                       this._.cursors = cursors = [];\r
+\r
+                               cursors.push( retval );\r
+                               if ( cursors.length > this._.rangeLength )\r
+                                       cursors.shift();\r
+\r
+                               return retval;\r
+                       },\r
+\r
+                       getEndCharacter : function()\r
+                       {\r
+                               var cursors = this._.cursors;\r
+                               if ( cursors.length < 1 )\r
+                                       return null;\r
+\r
+                               return cursors[ cursors.length - 1 ].character;\r
+                       },\r
+\r
+                       getNextCharacterRange : function( maxLength )\r
+                       {\r
+                               var lastCursor,\r
+                                               cursors = this._.cursors;\r
+                               if ( !( lastCursor = cursors[ cursors.length - 1 ] ) )\r
+                                       return null;\r
+                               return new characterRange(\r
+                                                                               new characterWalker(\r
+                                                                                       getRangeAfterCursor( lastCursor ) ),\r
+                                                                               maxLength );\r
+                       },\r
+\r
+                       getCursors : function()\r
+                       {\r
+                               return this._.cursors;\r
+                       }\r
+               };\r
+\r
+\r
+               // The remaining document range after the character cursor.\r
+               function getRangeAfterCursor( cursor , inclusive )\r
+               {\r
+                       var range = new CKEDITOR.dom.range();\r
+                       range.setStart( cursor.textNode,\r
+                                                  ( inclusive ? cursor.offset : cursor.offset + 1 ) );\r
+                       range.setEndAt( editor.document.getBody(),\r
+                                                       CKEDITOR.POSITION_BEFORE_END );\r
+                       return range;\r
+               }\r
+\r
+               // The document range before the character cursor.\r
+               function getRangeBeforeCursor( cursor )\r
+               {\r
+                       var range = new CKEDITOR.dom.range();\r
+                       range.setStartAt( editor.document.getBody(),\r
+                                                       CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEnd( cursor.textNode, cursor.offset );\r
+                       return range;\r
+               }\r
+\r
+               var KMP_NOMATCH = 0,\r
+                       KMP_ADVANCED = 1,\r
+                       KMP_MATCHED = 2;\r
+               /**\r
+                * Examination the occurrence of a word which implement KMP algorithm.\r
+                */\r
+               var kmpMatcher = function( pattern, ignoreCase )\r
+               {\r
+                       var overlap = [ -1 ];\r
+                       if ( ignoreCase )\r
+                               pattern = pattern.toLowerCase();\r
+                       for ( var i = 0 ; i < pattern.length ; i++ )\r
+                       {\r
+                               overlap.push( overlap[i] + 1 );\r
+                               while ( overlap[ i + 1 ] > 0\r
+                                       && pattern.charAt( i ) != pattern\r
+                                               .charAt( overlap[ i + 1 ] - 1 ) )\r
+                                       overlap[ i + 1 ] = overlap[ overlap[ i + 1 ] - 1 ] + 1;\r
+                       }\r
+\r
+                       this._ = {\r
+                               overlap : overlap,\r
+                               state : 0,\r
+                               ignoreCase : !!ignoreCase,\r
+                               pattern : pattern\r
+                       };\r
+               };\r
+\r
+               kmpMatcher.prototype =\r
+               {\r
+                       feedCharacter : function( c )\r
+                       {\r
+                               if ( this._.ignoreCase )\r
+                                       c = c.toLowerCase();\r
+\r
+                               while ( true )\r
+                               {\r
+                                       if ( c == this._.pattern.charAt( this._.state ) )\r
+                                       {\r
+                                               this._.state++;\r
+                                               if ( this._.state == this._.pattern.length )\r
+                                               {\r
+                                                       this._.state = 0;\r
+                                                       return KMP_MATCHED;\r
+                                               }\r
+                                               return KMP_ADVANCED;\r
+                                       }\r
+                                       else if ( !this._.state )\r
+                                               return KMP_NOMATCH;\r
+                                       else\r
+                                               this._.state = this._.overlap[ this._.state ];\r
+                               }\r
+\r
+                               return null;\r
+                       },\r
+\r
+                       reset : function()\r
+                       {\r
+                               this._.state = 0;\r
+                       }\r
+               };\r
+\r
+               var wordSeparatorRegex =\r
+               /[.,"'?!;: \u0085\u00a0\u1680\u280e\u2028\u2029\u202f\u205f\u3000]/;\r
+\r
+               var isWordSeparator = function( c )\r
+               {\r
+                       if ( !c )\r
+                               return true;\r
+                       var code = c.charCodeAt( 0 );\r
+                       return ( code >= 9 && code <= 0xd )\r
+                               || ( code >= 0x2000 && code <= 0x200a )\r
+                               || wordSeparatorRegex.test( c );\r
+               };\r
+\r
+               var finder = {\r
+                       searchRange : null,\r
+                       matchRange : null,\r
+                       find : function( pattern, matchCase, matchWord, matchCyclic, highlightMatched )\r
+                       {\r
+                               if( !this.matchRange )\r
+                                       this.matchRange =\r
+                                               new characterRange(\r
+                                                       new characterWalker( this.searchRange ),\r
+                                                       pattern.length );\r
+                               else\r
+                               {\r
+                                       this.matchRange.removeHighlight();\r
+                                       this.matchRange = this.matchRange.getNextCharacterRange( pattern.length );\r
+                               }\r
+\r
+                               var matcher = new kmpMatcher( pattern, !matchCase ),\r
+                                       matchState = KMP_NOMATCH,\r
+                                       character = '%';\r
+\r
+                               while ( character !== null )\r
+                               {\r
+                                       this.matchRange.moveNext();\r
+                                       while ( ( character = this.matchRange.getEndCharacter() ) )\r
+                                       {\r
+                                               matchState = matcher.feedCharacter( character );\r
+                                               if ( matchState == KMP_MATCHED )\r
+                                                       break;\r
+                                               if ( this.matchRange.moveNext().hitMatchBoundary )\r
+                                                       matcher.reset();\r
+                                       }\r
+\r
+                                       if ( matchState == KMP_MATCHED )\r
+                                       {\r
+                                               if ( matchWord )\r
+                                               {\r
+                                                       var cursors = this.matchRange.getCursors(),\r
+                                                               tail = cursors[ cursors.length - 1 ],\r
+                                                               head = cursors[ 0 ];\r
+\r
+                                                       var headWalker = new characterWalker( getRangeBeforeCursor( head ), true ),\r
+                                                               tailWalker = new characterWalker( getRangeAfterCursor( tail ), true );\r
+\r
+                                                       if ( ! ( isWordSeparator( headWalker.back().character )\r
+                                                                               && isWordSeparator( tailWalker.next().character ) ) )\r
+                                                               continue;\r
+                                               }\r
+                                               this.matchRange.setMatched();\r
+                                               if ( highlightMatched !== false )\r
+                                                       this.matchRange.highlight();\r
+                                               return true;\r
+                                       }\r
+                               }\r
+\r
+                               this.matchRange.clearMatched();\r
+                               this.matchRange.removeHighlight();\r
+                               // Clear current session and restart with the default search\r
+                               // range.\r
+                               if ( matchCyclic )\r
+                               {\r
+                                       this.searchRange = getSearchRange( true );\r
+                                       this.matchRange = null;\r
+                               }\r
+\r
+                               return false;\r
+                       },\r
+\r
+                       /**\r
+                        * Record how much replacement occurred toward one replacing.\r
+                        */\r
+                       replaceCounter : 0,\r
+\r
+                       replace : function( dialog, pattern, newString, matchCase, matchWord,\r
+                               matchCyclic , isReplaceAll )\r
+                       {\r
+                               // Successiveness of current replace/find.\r
+                               var result = false;\r
+\r
+                               // 1. Perform the replace when there's already a match here.\r
+                               // 2. Otherwise perform the find but don't replace it immediately.\r
+                               if ( this.matchRange && this.matchRange.isMatched()\r
+                                               && !this.matchRange._.isReplaced )\r
+                               {\r
+                                       // Turn off highlight for a while when saving snapshots.\r
+                                       this.matchRange.removeHighlight();\r
+                                       var domRange = this.matchRange.toDomRange();\r
+                                       var text = editor.document.createText( newString );\r
+                                       if ( !isReplaceAll )\r
+                                       {\r
+                                               // Save undo snaps before and after the replacement.\r
+                                               var selection = editor.getSelection();\r
+                                               selection.selectRanges( [ domRange ] );\r
+                                               editor.fire( 'saveSnapshot' );\r
+                                       }\r
+                                       domRange.deleteContents();\r
+                                       domRange.insertNode( text );\r
+                                       if ( !isReplaceAll )\r
+                                       {\r
+                                               selection.selectRanges( [ domRange ] );\r
+                                               editor.fire( 'saveSnapshot' );\r
+                                       }\r
+                                       this.matchRange.updateFromDomRange( domRange );\r
+                                       if ( !isReplaceAll )\r
+                                               this.matchRange.highlight();\r
+                                       this.matchRange._.isReplaced = true;\r
+                                       this.replaceCounter++;\r
+                                       result = true;\r
+                               }\r
+                               else\r
+                                       result = this.find( pattern, matchCase, matchWord, matchCyclic, !isReplaceAll );\r
+\r
+                               return result;\r
+                       }\r
+               };\r
+\r
+               /**\r
+                * The range in which find/replace happened, receive from user\r
+                * selection prior.\r
+                */\r
+               function getSearchRange( isDefault )\r
+               {\r
+                       var searchRange,\r
+                               sel = editor.getSelection(),\r
+                               body = editor.document.getBody();\r
+                       if ( sel && !isDefault )\r
+                       {\r
+                               searchRange = sel.getRanges()[ 0 ].clone();\r
+                               searchRange.collapse( true );\r
+                       }\r
+                       else\r
+                       {\r
+                               searchRange = new CKEDITOR.dom.range();\r
+                               searchRange.setStartAt( body, CKEDITOR.POSITION_AFTER_START );\r
+                       }\r
+                       searchRange.setEndAt( body, CKEDITOR.POSITION_BEFORE_END );\r
+                       return searchRange;\r
+               }\r
+\r
+               return {\r
+                       title : editor.lang.findAndReplace.title,\r
+                       resizable : CKEDITOR.DIALOG_RESIZE_NONE,\r
+                       minWidth : 350,\r
+                       minHeight : 165,\r
+                       buttons : [ CKEDITOR.dialog.cancelButton ],             //Cancel button only.\r
+                       contents : [\r
+                               {\r
+                                       id : 'find',\r
+                                       label : editor.lang.findAndReplace.find,\r
+                                       title : editor.lang.findAndReplace.find,\r
+                                       accessKey : '',\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '230px', '90px' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'txtFindFind',\r
+                                                                       label : editor.lang.findAndReplace.findWhat,\r
+                                                                       isChanged : false,\r
+                                                                       labelLayout : 'horizontal',\r
+                                                                       accessKey : 'F'\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'button',\r
+                                                                       align : 'left',\r
+                                                                       style : 'width:100%',\r
+                                                                       label : editor.lang.findAndReplace.find,\r
+                                                                       onClick : function()\r
+                                                                       {\r
+                                                                               var dialog = this.getDialog();\r
+                                                                               if ( !finder.find( dialog.getValueOf( 'find', 'txtFindFind' ),\r
+                                                                                                       dialog.getValueOf( 'find', 'txtFindCaseChk' ),\r
+                                                                                                       dialog.getValueOf( 'find', 'txtFindWordChk' ),\r
+                                                                                                       dialog.getValueOf( 'find', 'txtFindCyclic' ) ) )\r
+                                                                                       alert( editor.lang.findAndReplace\r
+                                                                                               .notFoundMsg );\r
+                                                                       }\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'vbox',\r
+                                                       padding : 0,\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'checkbox',\r
+                                                                       id : 'txtFindCaseChk',\r
+                                                                       isChanged : false,\r
+                                                                       style : 'margin-top:28px',\r
+                                                                       label : editor.lang.findAndReplace.matchCase\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'checkbox',\r
+                                                                       id : 'txtFindWordChk',\r
+                                                                       isChanged : false,\r
+                                                                       label : editor.lang.findAndReplace.matchWord\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'checkbox',\r
+                                                                       id : 'txtFindCyclic',\r
+                                                                       isChanged : false,\r
+                                                                       'default' : true,\r
+                                                                       label : editor.lang.findAndReplace.matchCyclic\r
+                                                               }\r
+                                                       ]\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'replace',\r
+                                       label : editor.lang.findAndReplace.replace,\r
+                                       accessKey : 'M',\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '230px', '90px' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'txtFindReplace',\r
+                                                                       label : editor.lang.findAndReplace.findWhat,\r
+                                                                       isChanged : false,\r
+                                                                       labelLayout : 'horizontal',\r
+                                                                       accessKey : 'F'\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'button',\r
+                                                                       align : 'left',\r
+                                                                       style : 'width:100%',\r
+                                                                       label : editor.lang.findAndReplace.replace,\r
+                                                                       onClick : function()\r
+                                                                       {\r
+                                                                               var dialog = this.getDialog();\r
+                                                                               if ( !finder.replace( dialog,\r
+                                                                                                       dialog.getValueOf( 'replace', 'txtFindReplace' ),\r
+                                                                                                       dialog.getValueOf( 'replace', 'txtReplace' ),\r
+                                                                                                       dialog.getValueOf( 'replace', 'txtReplaceCaseChk' ),\r
+                                                                                                       dialog.getValueOf( 'replace', 'txtReplaceWordChk' ),\r
+                                                                                                       dialog.getValueOf( 'replace', 'txtReplaceCyclic' ) ) )\r
+                                                                                       alert( editor.lang.findAndReplace\r
+                                                                                               .notFoundMsg );\r
+                                                                       }\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '230px', '90px' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'txtReplace',\r
+                                                                       label : editor.lang.findAndReplace.replaceWith,\r
+                                                                       isChanged : false,\r
+                                                                       labelLayout : 'horizontal',\r
+                                                                       accessKey : 'R'\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'button',\r
+                                                                       align : 'left',\r
+                                                                       style : 'width:100%',\r
+                                                                       label : editor.lang.findAndReplace.replaceAll,\r
+                                                                       isChanged : false,\r
+                                                                       onClick : function()\r
+                                                                       {\r
+                                                                               var dialog = this.getDialog();\r
+                                                                               var replaceNums;\r
+\r
+                                                                               finder.replaceCounter = 0;\r
+\r
+                                                                               // Scope to full document.\r
+                                                                               finder.searchRange = getSearchRange( true );\r
+                                                                               if ( finder.matchRange )\r
+                                                                               {\r
+                                                                                       finder.matchRange.removeHighlight();\r
+                                                                                       finder.matchRange = null;\r
+                                                                               }\r
+                                                                               editor.fire( 'saveSnapshot' );\r
+                                                                               while( finder.replace( dialog,\r
+                                                                                       dialog.getValueOf( 'replace', 'txtFindReplace' ),\r
+                                                                                       dialog.getValueOf( 'replace', 'txtReplace' ),\r
+                                                                                       dialog.getValueOf( 'replace', 'txtReplaceCaseChk' ),\r
+                                                                                       dialog.getValueOf( 'replace', 'txtReplaceWordChk' ),\r
+                                                                                       false, true ) )\r
+                                                                               { /*jsl:pass*/ }\r
+\r
+                                                                               if ( finder.replaceCounter )\r
+                                                                               {\r
+                                                                                       alert( editor.lang.findAndReplace.replaceSuccessMsg.replace( /%1/, finder.replaceCounter ) );\r
+                                                                                       editor.fire( 'saveSnapshot' );\r
+                                                                               }\r
+                                                                               else\r
+                                                                                       alert( editor.lang.findAndReplace.notFoundMsg );\r
+                                                                       }\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'vbox',\r
+                                                       padding : 0,\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'checkbox',\r
+                                                                       id : 'txtReplaceCaseChk',\r
+                                                                       isChanged : false,\r
+                                                                       label : editor.lang.findAndReplace\r
+                                                                               .matchCase\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'checkbox',\r
+                                                                       id : 'txtReplaceWordChk',\r
+                                                                       isChanged : false,\r
+                                                                       label : editor.lang.findAndReplace\r
+                                                                               .matchWord\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'checkbox',\r
+                                                                       id : 'txtReplaceCyclic',\r
+                                                                       isChanged : false,\r
+                                                                       'default' : true,\r
+                                                                       label : editor.lang.findAndReplace\r
+                                                                               .matchCyclic\r
+                                                               }\r
+                                                       ]\r
+                                               }\r
+                                       ]\r
+                               }\r
+                       ],\r
+                       onLoad : function()\r
+                       {\r
+                               var dialog = this;\r
+\r
+                               //keep track of the current pattern field in use.\r
+                               var patternField, wholeWordChkField;\r
+\r
+                               //Ignore initial page select on dialog show\r
+                               var isUserSelect = false;\r
+                               this.on('hide', function()\r
+                                               {\r
+                                                       isUserSelect = false;\r
+                                               } );\r
+                               this.on('show', function()\r
+                                               {\r
+                                                       isUserSelect = true;\r
+                                               } );\r
+\r
+                               this.selectPage = CKEDITOR.tools.override( this.selectPage, function( originalFunc )\r
+                                       {\r
+                                               return function( pageId )\r
+                                               {\r
+                                                       originalFunc.call( dialog, pageId );\r
+\r
+                                                       var currPage = dialog._.tabs[ pageId ];\r
+                                                       var patternFieldInput, patternFieldId, wholeWordChkFieldId;\r
+                                                       patternFieldId = pageId === 'find' ? 'txtFindFind' : 'txtFindReplace';\r
+                                                       wholeWordChkFieldId = pageId === 'find' ? 'txtFindWordChk' : 'txtReplaceWordChk';\r
+\r
+                                                       patternField = dialog.getContentElement( pageId,\r
+                                                               patternFieldId );\r
+                                                       wholeWordChkField = dialog.getContentElement( pageId,\r
+                                                               wholeWordChkFieldId );\r
+\r
+                                                       // prepare for check pattern text filed 'keyup' event\r
+                                                       if ( !currPage.initialized )\r
+                                                       {\r
+                                                               patternFieldInput = CKEDITOR.document\r
+                                                                       .getById( patternField._.inputId );\r
+                                                               currPage.initialized = true;\r
+                                                       }\r
+\r
+                                                       if( isUserSelect )\r
+                                                               // synchronize fields on tab switch.\r
+                                                               syncFieldsBetweenTabs.call( this, pageId );\r
+                                               };\r
+                                       } );\r
+\r
+                       },\r
+                       onShow : function()\r
+                       {\r
+                               // Establish initial searching start position.\r
+                               finder.searchRange = getSearchRange();\r
+\r
+                               if ( startupPage == 'replace' )\r
+                                       this.getContentElement( 'replace', 'txtFindReplace' ).focus();\r
+                               else\r
+                                       this.getContentElement( 'find', 'txtFindFind' ).focus();\r
+                       },\r
+                       onHide : function()\r
+                       {\r
+                               if ( finder.matchRange && finder.matchRange.isMatched() )\r
+                               {\r
+                                       finder.matchRange.removeHighlight();\r
+                                       editor.focus();\r
+                                       editor.getSelection().selectRanges(\r
+                                               [ finder.matchRange.toDomRange() ] );\r
+                               }\r
+\r
+                               // Clear current session before dialog close\r
+                               delete finder.matchRange;\r
+                       }\r
+               };\r
+       };\r
+\r
+       CKEDITOR.dialog.add( 'find', function( editor )\r
+               {\r
+                       return findDialog( editor, 'find' );\r
+               });\r
+\r
+       CKEDITOR.dialog.add( 'replace', function( editor )\r
+               {\r
+                       return findDialog( editor, 'replace' );\r
+               });\r
+})();\r
diff --git a/_source/plugins/find/plugin.js b/_source/plugins/find/plugin.js
new file mode 100644 (file)
index 0000000..bb5051e
--- /dev/null
@@ -0,0 +1,46 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'find',\r
+{\r
+       init : function( editor )\r
+       {\r
+               var forms = CKEDITOR.plugins.find;\r
+               editor.ui.addButton( 'Find',\r
+                       {\r
+                               label : editor.lang.findAndReplace.find,\r
+                               command : 'find'\r
+                       });\r
+               var findCommand = editor.addCommand( 'find', new CKEDITOR.dialogCommand( 'find' ) );\r
+               findCommand.canUndo = false;\r
+\r
+               editor.ui.addButton( 'Replace',\r
+                       {\r
+                               label : editor.lang.findAndReplace.replace,\r
+                               command : 'replace'\r
+                       });\r
+               var replaceCommand = editor.addCommand( 'replace', new CKEDITOR.dialogCommand( 'replace' ) );\r
+               replaceCommand.canUndo = false;\r
+\r
+               CKEDITOR.dialog.add( 'find',    this.path + 'dialogs/find.js' );\r
+               CKEDITOR.dialog.add( 'replace', this.path + 'dialogs/find.js' );\r
+       },\r
+\r
+       requires : [ 'styles' ]\r
+} );\r
+\r
+/**\r
+ * Defines the style to be used to highlight results with the find dialog.\r
+ * @type Object\r
+ * @default { element : 'span', styles : { 'background-color' : '#004', 'color' : '#fff' } }\r
+ * @example\r
+ * // Highlight search results with blue on yellow.\r
+ * config.find_highlight =\r
+ *     {\r
+ *         element : 'span',\r
+ *         styles : { 'background-color' : '#ff0', 'color' : '#00f' }\r
+ *     };\r
+ */\r
+CKEDITOR.config.find_highlight = { element : 'span', styles : { 'background-color' : '#004', 'color' : '#fff' } };\r
diff --git a/_source/plugins/flash/dialogs/flash.js b/_source/plugins/flash/dialogs/flash.js
new file mode 100644 (file)
index 0000000..2359b1b
--- /dev/null
@@ -0,0 +1,682 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       /*\r
+        * It is possible to set things in three different places.\r
+        * 1. As attributes in the object tag.\r
+        * 2. As param tags under the object tag.\r
+        * 3. As attributes in the embed tag.\r
+        * It is possible for a single attribute to be present in more than one place.\r
+        * So let's define a mapping between a sementic attribute and its syntactic\r
+        * equivalents.\r
+        * Then we'll set and retrieve attribute values according to the mapping,\r
+        * instead of having to check and set each syntactic attribute every time.\r
+        *\r
+        * Reference: http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_12701\r
+        */\r
+       var ATTRTYPE_OBJECT = 1,\r
+               ATTRTYPE_PARAM = 2,\r
+               ATTRTYPE_EMBED = 4;\r
+\r
+       var attributesMap =\r
+       {\r
+               id : [ { type : ATTRTYPE_OBJECT, name : CKEDITOR.env.ie ? '_cke_saved_id' : 'id' } ],\r
+               classid : [ { type : ATTRTYPE_OBJECT, name : 'classid' } ],\r
+               codebase : [ { type : ATTRTYPE_OBJECT, name : 'codebase'} ],\r
+               pluginspage : [ { type : ATTRTYPE_EMBED, name : 'pluginspage' } ],\r
+               src : [ { type : ATTRTYPE_PARAM, name : 'movie' }, { type : ATTRTYPE_EMBED, name : 'src' } ],\r
+               name : [ { type : ATTRTYPE_EMBED, name : 'name' } ],\r
+               align : [ { type : ATTRTYPE_OBJECT, name : 'align' } ],\r
+               title : [ { type : ATTRTYPE_OBJECT, name : 'title' }, { type : ATTRTYPE_EMBED, name : 'title' } ],\r
+               'class' : [ { type : ATTRTYPE_OBJECT, name : 'class' }, { type : ATTRTYPE_EMBED, name : 'class'} ],\r
+               width : [ { type : ATTRTYPE_OBJECT, name : 'width' }, { type : ATTRTYPE_EMBED, name : 'width' } ],\r
+               height : [ { type : ATTRTYPE_OBJECT, name : 'height' }, { type : ATTRTYPE_EMBED, name : 'height' } ],\r
+               hSpace : [ { type : ATTRTYPE_OBJECT, name : 'hSpace' }, { type : ATTRTYPE_EMBED, name : 'hSpace' } ],\r
+               vSpace : [ { type : ATTRTYPE_OBJECT, name : 'vSpace' }, { type : ATTRTYPE_EMBED, name : 'vSpace' } ],\r
+               style : [ { type : ATTRTYPE_OBJECT, name : 'style' }, { type : ATTRTYPE_EMBED, name : 'style' } ],\r
+               type : [ { type : ATTRTYPE_EMBED, name : 'type' } ]\r
+       };\r
+\r
+       var names = [ 'play', 'loop', 'menu', 'quality', 'scale', 'salign', 'wmode', 'bgcolor', 'base', 'flashvars', 'allowScriptAccess',\r
+               'allowFullScreen' ];\r
+       for ( var i = 0 ; i < names.length ; i++ )\r
+               attributesMap[ names[i] ] = [ { type : ATTRTYPE_EMBED, name : names[i] }, { type : ATTRTYPE_PARAM, name : names[i] } ];\r
+       names = [ 'allowFullScreen', 'play', 'loop', 'menu' ];\r
+       for ( i = 0 ; i < names.length ; i++ )\r
+               attributesMap[ names[i] ][0]['default'] = attributesMap[ names[i] ][1]['default'] = true;\r
+\r
+       function loadValue( objectNode, embedNode, paramMap )\r
+       {\r
+               var attributes = attributesMap[ this.id ];\r
+               if ( !attributes )\r
+                       return;\r
+\r
+               var isCheckbox = ( this instanceof CKEDITOR.ui.dialog.checkbox );\r
+               for ( var i = 0 ; i < attributes.length ; i++ )\r
+               {\r
+                       var attrDef = attributes[ i ];\r
+                       switch ( attrDef.type )\r
+                       {\r
+                               case ATTRTYPE_OBJECT:\r
+                                       if ( !objectNode )\r
+                                               continue;\r
+                                       if ( objectNode.getAttribute( attrDef.name ) !== null )\r
+                                       {\r
+                                               var value = objectNode.getAttribute( attrDef.name );\r
+                                               if ( isCheckbox )\r
+                                                       this.setValue( value.toLowerCase() == 'true' );\r
+                                               else\r
+                                                       this.setValue( value );\r
+                                               return;\r
+                                       }\r
+                                       else if ( isCheckbox )\r
+                                               this.setValue( !!attrDef[ 'default' ] );\r
+                                       break;\r
+                               case ATTRTYPE_PARAM:\r
+                                       if ( !objectNode )\r
+                                               continue;\r
+                                       if ( attrDef.name in paramMap )\r
+                                       {\r
+                                               value = paramMap[ attrDef.name ];\r
+                                               if ( isCheckbox )\r
+                                                       this.setValue( value.toLowerCase() == 'true' );\r
+                                               else\r
+                                                       this.setValue( value );\r
+                                               return;\r
+                                       }\r
+                                       else if ( isCheckbox )\r
+                                               this.setValue( !!attrDef[ 'default' ] );\r
+                                       break;\r
+                               case ATTRTYPE_EMBED:\r
+                                       if ( !embedNode )\r
+                                               continue;\r
+                                       if ( embedNode.getAttribute( attrDef.name ) )\r
+                                       {\r
+                                               value = embedNode.getAttribute( attrDef.name );\r
+                                               if ( isCheckbox )\r
+                                                       this.setValue( value.toLowerCase() == 'true' );\r
+                                               else\r
+                                                       this.setValue( value );\r
+                                               return;\r
+                                       }\r
+                                       else if ( isCheckbox )\r
+                                               this.setValue( !!attrDef[ 'default' ] );\r
+                       }\r
+               }\r
+       }\r
+\r
+       function commitValue( objectNode, embedNode, paramMap )\r
+       {\r
+               var attributes = attributesMap[ this.id ];\r
+               if ( !attributes )\r
+                       return;\r
+\r
+               var isRemove = ( this.getValue() === '' ),\r
+                       isCheckbox = ( this instanceof CKEDITOR.ui.dialog.checkbox );\r
+\r
+               for ( var i = 0 ; i < attributes.length ; i++ )\r
+               {\r
+                       var attrDef = attributes[i];\r
+                       switch ( attrDef.type )\r
+                       {\r
+                               case ATTRTYPE_OBJECT:\r
+                                       if ( !objectNode )\r
+                                               continue;\r
+                                       var value = this.getValue();\r
+                                       if ( isRemove || isCheckbox && value === attrDef[ 'default' ] )\r
+                                               objectNode.removeAttribute( attrDef.name );\r
+                                       else\r
+                                               objectNode.setAttribute( attrDef.name, value );\r
+                                       break;\r
+                               case ATTRTYPE_PARAM:\r
+                                       if ( !objectNode )\r
+                                               continue;\r
+                                       value = this.getValue();\r
+                                       if ( isRemove || isCheckbox && value === attrDef[ 'default' ] )\r
+                                       {\r
+                                               if ( attrDef.name in paramMap )\r
+                                                       paramMap[ attrDef.name ].remove();\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               if ( attrDef.name in paramMap )\r
+                                                       paramMap[ attrDef.name ].setAttribute( 'value', value );\r
+                                               else\r
+                                               {\r
+                                                       var param = CKEDITOR.dom.element.createFromHtml( '<cke:param></cke:param>', objectNode.getDocument() );\r
+                                                       param.setAttributes( { name : attrDef.name, value : value } );\r
+                                                       if ( objectNode.getChildCount() < 1 )\r
+                                                               param.appendTo( objectNode );\r
+                                                       else\r
+                                                               param.insertBefore( objectNode.getFirst() );\r
+                                               }\r
+                                       }\r
+                                       break;\r
+                               case ATTRTYPE_EMBED:\r
+                                       if ( !embedNode )\r
+                                               continue;\r
+                                       value = this.getValue();\r
+                                       if ( isRemove || isCheckbox && value === attrDef[ 'default' ])\r
+                                               embedNode.removeAttribute( attrDef.name );\r
+                                       else\r
+                                               embedNode.setAttribute( attrDef.name, value );\r
+                       }\r
+               }\r
+       }\r
+\r
+       CKEDITOR.dialog.add( 'flash', function( editor )\r
+       {\r
+               var makeObjectTag = !editor.config.flashEmbedTagOnly,\r
+                       makeEmbedTag = editor.config.flashAddEmbedTag || editor.config.flashEmbedTagOnly;\r
+\r
+               var previewAreaHtml = '<div>' + CKEDITOR.tools.htmlEncode( editor.lang.image.preview ) +'<br>' +\r
+                       '<div id="FlashPreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div>' +\r
+                       '<div id="FlashPreviewBox"></div></div>';\r
+\r
+               return {\r
+                       title : editor.lang.flash.title,\r
+                       minWidth : 420,\r
+                       minHeight : 310,\r
+                       onShow : function()\r
+                       {\r
+                               // Clear previously saved elements.\r
+                               this.fakeImage = this.objectNode = this.embedNode = null;\r
+\r
+                               // Try to detect any embed or object tag that has Flash parameters.\r
+                               var fakeImage = this.getSelectedElement();\r
+                               if ( fakeImage && fakeImage.getAttribute( '_cke_real_element_type' ) && fakeImage.getAttribute( '_cke_real_element_type' ) == 'flash' )\r
+                               {\r
+                                       this.fakeImage = fakeImage;\r
+\r
+                                       var realElement = editor.restoreRealElement( fakeImage ),\r
+                                               objectNode = null, embedNode = null, paramMap = {};\r
+                                       if ( realElement.getName() == 'cke:object' )\r
+                                       {\r
+                                               objectNode = realElement;\r
+                                               var embedList = objectNode.getElementsByTag( 'embed', 'cke' );\r
+                                               if ( embedList.count() > 0 )\r
+                                                       embedNode = embedList.getItem( 0 );\r
+                                               var paramList = objectNode.getElementsByTag( 'param', 'cke' );\r
+                                               for ( var i = 0, length = paramList.count() ; i < length ; i++ )\r
+                                               {\r
+                                                       var item = paramList.getItem( i ),\r
+                                                               name = item.getAttribute( 'name' ),\r
+                                                               value = item.getAttribute( 'value' );\r
+                                                       paramMap[ name ] = value;\r
+                                               }\r
+                                       }\r
+                                       else if ( realElement.getName() == 'cke:embed' )\r
+                                               embedNode = realElement;\r
+\r
+                                       this.objectNode = objectNode;\r
+                                       this.embedNode = embedNode;\r
+\r
+                                       this.setupContent( objectNode, embedNode, paramMap, fakeImage );\r
+                               }\r
+                       },\r
+                       onOk : function()\r
+                       {\r
+                               // If there's no selected object or embed, create one. Otherwise, reuse the\r
+                               // selected object and embed nodes.\r
+                               var objectNode = null,\r
+                                       embedNode = null,\r
+                                       paramMap = null;\r
+                               if ( !this.fakeImage )\r
+                               {\r
+                                       if ( makeObjectTag )\r
+                                       {\r
+                                               objectNode = CKEDITOR.dom.element.createFromHtml( '<cke:object></cke:object>', editor.document );\r
+                                               var attributes = {\r
+                                                       classid : 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000',\r
+                                                       codebase : 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'\r
+                                               };\r
+                                               objectNode.setAttributes( attributes );\r
+                                       }\r
+                                       if ( makeEmbedTag )\r
+                                       {\r
+                                               embedNode = CKEDITOR.dom.element.createFromHtml( '<cke:embed></cke:embed>', editor.document );\r
+                                               embedNode.setAttributes(\r
+                                                       {\r
+                                                               type : 'application/x-shockwave-flash',\r
+                                                               pluginspage : 'http://www.macromedia.com/go/getflashplayer'\r
+                                                       } );\r
+                                               if ( objectNode )\r
+                                                       embedNode.appendTo( objectNode );\r
+                                       }\r
+                               }\r
+                               else\r
+                               {\r
+                                       objectNode = this.objectNode;\r
+                                       embedNode = this.embedNode;\r
+                               }\r
+\r
+                               // Produce the paramMap if there's an object tag.\r
+                               if ( objectNode )\r
+                               {\r
+                                       paramMap = {};\r
+                                       var paramList = objectNode.getElementsByTag( 'param', 'cke' );\r
+                                       for ( var i = 0, length = paramList.count() ; i < length ; i++ )\r
+                                               paramMap[ paramList.getItem( i ).getAttribute( 'name' ) ] = paramList.getItem( i );\r
+                               }\r
+\r
+                               // Apply or remove flash parameters.\r
+                               var extraStyles = {};\r
+                               this.commitContent( objectNode, embedNode, paramMap, extraStyles );\r
+\r
+                               // Refresh the fake image.\r
+                               var newFakeImage = editor.createFakeElement( objectNode || embedNode, 'cke_flash', 'flash', true );\r
+                               newFakeImage.setStyles( extraStyles );\r
+                               if ( this.fakeImage )\r
+                                       newFakeImage.replace( this.fakeImage );\r
+                               else\r
+                                       editor.insertElement( newFakeImage );\r
+                       },\r
+\r
+                       onHide : function()\r
+                       {\r
+                               if ( this.preview )\r
+                                       this.preview.setHtml('');\r
+                       },\r
+\r
+                       contents : [\r
+                               {\r
+                                       id : 'info',\r
+                                       label : editor.lang.common.generalTab,\r
+                                       accessKey : 'I',\r
+                                       elements :\r
+                                       [\r
+                                               {\r
+                                                       type : 'vbox',\r
+                                                       padding : 0,\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'html',\r
+                                                                       html : '<span>' + CKEDITOR.tools.htmlEncode( editor.lang.image.url ) + '</span>'\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'hbox',\r
+                                                                       widths : [ '280px', '110px' ],\r
+                                                                       align : 'right',\r
+                                                                       children :\r
+                                                                       [\r
+                                                                               {\r
+                                                                                       id : 'src',\r
+                                                                                       type : 'text',\r
+                                                                                       label : '',\r
+                                                                                       validate : CKEDITOR.dialog.validate.notEmpty( editor.lang.flash.validateSrc ),\r
+                                                                                       setup : loadValue,\r
+                                                                                       commit : commitValue,\r
+                                                                                       onLoad : function()\r
+                                                                                       {\r
+                                                                                               var dialog = this.getDialog(),\r
+                                                                                               updatePreview = function( src ){\r
+\r
+                                                                                                       dialog.preview.setHtml( '<embed height="100%" width="100%" src="'\r
+                                                                                                               + CKEDITOR.tools.htmlEncode( src )\r
+                                                                                                               + '" type="application/x-shockwave-flash"></embed>' );\r
+                                                                                               };\r
+                                                                                               // Preview element\r
+                                                                                               dialog.preview = dialog.getContentElement( 'info', 'preview' ).getElement().getChild( 3 );\r
+\r
+                                                                                               // Sync on inital value loaded.\r
+                                                                                               this.on( 'change', function( evt ){\r
+\r
+                                                                                                               if ( evt.data && evt.data.value )\r
+                                                                                                                       updatePreview( evt.data.value );\r
+                                                                                                       } );\r
+                                                                                               // Sync when input value changed.\r
+                                                                                               this.getInputElement().on( 'change', function( evt ){\r
+\r
+                                                                                                       updatePreview( this.getValue() );\r
+                                                                                               }, this );\r
+                                                                                       }\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'button',\r
+                                                                                       id : 'browse',\r
+                                                                                       filebrowser : 'info:src',\r
+                                                                                       hidden : true,\r
+                                                                                       align : 'center',\r
+                                                                                       label : editor.lang.common.browseServer\r
+                                                                               }\r
+                                                                       ]\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '25%', '25%', '25%', '25%', '25%' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'width',\r
+                                                                       style : 'width:95px',\r
+                                                                       label : editor.lang.flash.width,\r
+                                                                       validate : CKEDITOR.dialog.validate.integer( editor.lang.flash.validateWidth ),\r
+                                                                       setup : function( objectNode, embedNode, paramMap, fakeImage )\r
+                                                                       {\r
+                                                                               loadValue.apply( this, arguments );\r
+                                                                               if ( fakeImage )\r
+                                                                               {\r
+                                                                                       var fakeImageWidth = parseInt( fakeImage.$.style.width, 10 );\r
+                                                                                       if ( !isNaN( fakeImageWidth ) )\r
+                                                                                               this.setValue( fakeImageWidth );\r
+                                                                               }\r
+                                                                       },\r
+                                                                       commit : function( objectNode, embedNode, paramMap, extraStyles )\r
+                                                                       {\r
+                                                                               commitValue.apply( this, arguments );\r
+                                                                               if ( this.getValue() )\r
+                                                                                       extraStyles.width = this.getValue() + 'px';\r
+                                                                       }\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'height',\r
+                                                                       style : 'width:95px',\r
+                                                                       label : editor.lang.flash.height,\r
+                                                                       validate : CKEDITOR.dialog.validate.integer( editor.lang.flash.validateHeight ),\r
+                                                                       setup : function( objectNode, embedNode, paramMap, fakeImage )\r
+                                                                       {\r
+                                                                               loadValue.apply( this, arguments );\r
+                                                                               if ( fakeImage )\r
+                                                                               {\r
+                                                                                       var fakeImageHeight = parseInt( fakeImage.$.style.height, 10 );\r
+                                                                                       if ( !isNaN( fakeImageHeight ) )\r
+                                                                                               this.setValue( fakeImageHeight );\r
+                                                                               }\r
+                                                                       },\r
+                                                                       commit : function( objectNode, embedNode, paramMap, extraStyles )\r
+                                                                       {\r
+                                                                               commitValue.apply( this, arguments );\r
+                                                                               if ( this.getValue() )\r
+                                                                                       extraStyles.height = this.getValue() + 'px';\r
+                                                                       }\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'hSpace',\r
+                                                                       style : 'width:95px',\r
+                                                                       label : editor.lang.flash.hSpace,\r
+                                                                       validate : CKEDITOR.dialog.validate.integer( editor.lang.flash.validateHSpace ),\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'vSpace',\r
+                                                                       style : 'width:95px',\r
+                                                                       label : editor.lang.flash.vSpace,\r
+                                                                       validate : CKEDITOR.dialog.validate.integer( editor.lang.flash.validateVSpace ),\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+\r
+                                               {\r
+                                                       type : 'vbox',\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'html',\r
+                                                                       id : 'preview',\r
+                                                                       style : 'width:95%;',\r
+                                                                       html : previewAreaHtml\r
+                                                               }\r
+                                                       ]\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'Upload',\r
+                                       hidden : true,\r
+                                       filebrowser : 'uploadButton',\r
+                                       label : editor.lang.common.upload,\r
+                                       elements :\r
+                                       [\r
+                                               {\r
+                                                       type : 'file',\r
+                                                       id : 'upload',\r
+                                                       label : editor.lang.common.upload,\r
+                                                       size : 38\r
+                                               },\r
+                                               {\r
+                                                       type : 'fileButton',\r
+                                                       id : 'uploadButton',\r
+                                                       label : editor.lang.common.uploadSubmit,\r
+                                                       filebrowser : 'info:src',\r
+                                                       'for' : [ 'Upload', 'upload' ]\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'properties',\r
+                                       label : editor.lang.flash.propertiesTab,\r
+                                       elements :\r
+                                       [\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '50%', '50%' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       id : 'scale',\r
+                                                                       type : 'select',\r
+                                                                       label : editor.lang.flash.scale,\r
+                                                                       'default' : '',\r
+                                                                       style : 'width : 100%;',\r
+                                                                       items :\r
+                                                                       [\r
+                                                                               [ editor.lang.common.notSet , ''],\r
+                                                                               [ editor.lang.flash.scaleAll, 'showall' ],\r
+                                                                               [ editor.lang.flash.scaleNoBorder, 'noborder' ],\r
+                                                                               [ editor.lang.flash.scaleFit, 'exactfit' ]\r
+                                                                       ],\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               },\r
+                                                               {\r
+                                                                       id : 'allowScriptAccess',\r
+                                                                       type : 'select',\r
+                                                                       label : editor.lang.flash.access,\r
+                                                                       'default' : '',\r
+                                                                       style : 'width : 100%;',\r
+                                                                       items :\r
+                                                                       [\r
+                                                                               [ editor.lang.common.notSet , ''],\r
+                                                                               [ editor.lang.flash.accessAlways, 'always' ],\r
+                                                                               [ editor.lang.flash.accessSameDomain, 'samedomain' ],\r
+                                                                               [ editor.lang.flash.accessNever, 'never' ]\r
+                                                                       ],\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '50%', '50%' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       id : 'wmode',\r
+                                                                       type : 'select',\r
+                                                                       label : editor.lang.flash.windowMode,\r
+                                                                       'default' : '',\r
+                                                                       style : 'width : 100%;',\r
+                                                                       items :\r
+                                                                       [\r
+                                                                               [ editor.lang.common.notSet , '' ],\r
+                                                                               [ editor.lang.flash.windowModeWindow, 'window' ],\r
+                                                                               [ editor.lang.flash.windowModeOpaque, 'opaque' ],\r
+                                                                               [ editor.lang.flash.windowModeTransparent, 'transparent' ]\r
+                                                                       ],\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               },\r
+                                                               {\r
+                                                                       id : 'quality',\r
+                                                                       type : 'select',\r
+                                                                       label : editor.lang.flash.quality,\r
+                                                                       'default' : 'high',\r
+                                                                       style : 'width : 100%;',\r
+                                                                       items :\r
+                                                                       [\r
+                                                                               [ editor.lang.common.notSet , '' ],\r
+                                                                               [ editor.lang.flash.qualityBest, 'best' ],\r
+                                                                               [ editor.lang.flash.qualityHigh, 'high' ],\r
+                                                                               [ editor.lang.flash.qualityAutoHigh, 'autohigh' ],\r
+                                                                               [ editor.lang.flash.qualityMedium, 'medium' ],\r
+                                                                               [ editor.lang.flash.qualityAutoLow, 'autolow' ],\r
+                                                                               [ editor.lang.flash.qualityLow, 'low' ]\r
+                                                                       ],\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '50%', '50%' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       id : 'align',\r
+                                                                       type : 'select',\r
+                                                                       label : editor.lang.flash.align,\r
+                                                                       'default' : '',\r
+                                                                       style : 'width : 100%;',\r
+                                                                       items :\r
+                                                                       [\r
+                                                                               [ editor.lang.common.notSet , ''],\r
+                                                                               [ editor.lang.image.alignLeft , 'left'],\r
+                                                                               [ editor.lang.image.alignAbsBottom , 'absBottom'],\r
+                                                                               [ editor.lang.image.alignAbsMiddle , 'absMiddle'],\r
+                                                                               [ editor.lang.image.alignBaseline , 'baseline'],\r
+                                                                               [ editor.lang.image.alignBottom , 'bottom'],\r
+                                                                               [ editor.lang.image.alignMiddle , 'middle'],\r
+                                                                               [ editor.lang.image.alignRight , 'right'],\r
+                                                                               [ editor.lang.image.alignTextTop , 'textTop'],\r
+                                                                               [ editor.lang.image.alignTop , 'top']\r
+                                                                       ],\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'html',\r
+                                                                       html : '<div></div>'\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'vbox',\r
+                                                       padding : 0,\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'html',\r
+                                                                       html : CKEDITOR.tools.htmlEncode( editor.lang.flash.flashvars )\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'checkbox',\r
+                                                                       id : 'menu',\r
+                                                                       label : editor.lang.flash.chkMenu,\r
+                                                                       'default' : true,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'checkbox',\r
+                                                                       id : 'play',\r
+                                                                       label : editor.lang.flash.chkPlay,\r
+                                                                       'default' : true,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'checkbox',\r
+                                                                       id : 'loop',\r
+                                                                       label : editor.lang.flash.chkLoop,\r
+                                                                       'default' : true,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'checkbox',\r
+                                                                       id : 'allowFullScreen',\r
+                                                                       label : editor.lang.flash.chkFull,\r
+                                                                       'default' : true,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               }\r
+                                                       ]\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'advanced',\r
+                                       label : editor.lang.common.advancedTab,\r
+                                       elements :\r
+                                       [\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '45%', '55%' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'id',\r
+                                                                       label : editor.lang.common.id,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'title',\r
+                                                                       label : editor.lang.common.advisoryTitle,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '45%', '55%' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'bgcolor',\r
+                                                                       label : editor.lang.flash.bgcolor,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'class',\r
+                                                                       label : editor.lang.common.cssClass,\r
+                                                                       setup : loadValue,\r
+                                                                       commit : commitValue\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'text',\r
+                                                       id : 'style',\r
+                                                       label : editor.lang.common.cssStyle,\r
+                                                       setup : loadValue,\r
+                                                       commit : commitValue\r
+                                               }\r
+                                       ]\r
+                               }\r
+                       ]\r
+               };\r
+       } );\r
+})();\r
diff --git a/_source/plugins/flash/images/placeholder.png b/_source/plugins/flash/images/placeholder.png
new file mode 100644 (file)
index 0000000..0bc6caa
Binary files /dev/null and b/_source/plugins/flash/images/placeholder.png differ
diff --git a/_source/plugins/flash/plugin.js b/_source/plugins/flash/plugin.js
new file mode 100644 (file)
index 0000000..29117ba
--- /dev/null
@@ -0,0 +1,165 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       var flashFilenameRegex = /\.swf(?:$|\?)/i,\r
+               numberRegex = /^\d+(?:\.\d+)?$/;\r
+\r
+       function cssifyLength( length )\r
+       {\r
+               if ( numberRegex.test( length ) )\r
+                       return length + 'px';\r
+               return length;\r
+       }\r
+\r
+       function isFlashEmbed( element )\r
+       {\r
+               var attributes = element.attributes;\r
+\r
+               return ( attributes.type == 'application/x-shockwave-flash' || flashFilenameRegex.test( attributes.src || '' ) );\r
+       }\r
+\r
+       function createFakeElement( editor, realElement )\r
+       {\r
+               var fakeElement = editor.createFakeParserElement( realElement, 'cke_flash', 'flash', true ),\r
+                       fakeStyle = fakeElement.attributes.style || '';\r
+\r
+               var width = realElement.attributes.width,\r
+                       height = realElement.attributes.height;\r
+\r
+               if ( typeof width != 'undefined' )\r
+                       fakeStyle = fakeElement.attributes.style = fakeStyle + 'width:' + cssifyLength( width ) + ';';\r
+\r
+               if ( typeof height != 'undefined' )\r
+                       fakeStyle = fakeElement.attributes.style = fakeStyle + 'height:' + cssifyLength( height ) + ';';\r
+\r
+               return fakeElement;\r
+       }\r
+\r
+       CKEDITOR.plugins.add( 'flash',\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       editor.addCommand( 'flash', new CKEDITOR.dialogCommand( 'flash' ) );\r
+                       editor.ui.addButton( 'Flash',\r
+                               {\r
+                                       label : editor.lang.common.flash,\r
+                                       command : 'flash'\r
+                               });\r
+                       CKEDITOR.dialog.add( 'flash', this.path + 'dialogs/flash.js' );\r
+\r
+                       editor.addCss(\r
+                               'img.cke_flash' +\r
+                               '{' +\r
+                                       'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/placeholder.png' ) + ');' +\r
+                                       'background-position: center center;' +\r
+                                       'background-repeat: no-repeat;' +\r
+                                       'border: 1px solid #a9a9a9;' +\r
+                                       'width: 80px;' +\r
+                                       'height: 80px;' +\r
+                               '}'\r
+                               );\r
+\r
+                       // If the "menu" plugin is loaded, register the menu items.\r
+                       if ( editor.addMenuItems )\r
+                       {\r
+                               editor.addMenuItems(\r
+                                       {\r
+                                               flash :\r
+                                               {\r
+                                                       label : editor.lang.flash.properties,\r
+                                                       command : 'flash',\r
+                                                       group : 'flash'\r
+                                               }\r
+                                       });\r
+                       }\r
+\r
+                       // If the "contextmenu" plugin is loaded, register the listeners.\r
+                       if ( editor.contextMenu )\r
+                       {\r
+                               editor.contextMenu.addListener( function( element, selection )\r
+                                       {\r
+                                               if ( element && element.is( 'img' ) && element.getAttribute( '_cke_real_element_type' ) == 'flash' )\r
+                                                       return { flash : CKEDITOR.TRISTATE_OFF };\r
+                                       });\r
+                       }\r
+               },\r
+\r
+               afterInit : function( editor )\r
+               {\r
+                       var dataProcessor = editor.dataProcessor,\r
+                               dataFilter = dataProcessor && dataProcessor.dataFilter;\r
+\r
+                       if ( dataFilter )\r
+                       {\r
+                               dataFilter.addRules(\r
+                                       {\r
+                                               elements :\r
+                                               {\r
+                                                       'cke:object' : function( element )\r
+                                                       {\r
+                                                               var attributes = element.attributes,\r
+                                                                       classId = attributes.classid && String( attributes.classid ).toLowerCase();\r
+\r
+                                                               if ( !classId )\r
+                                                               {\r
+                                                                       // Look for the inner <embed>\r
+                                                                       for ( var i = 0 ; i < element.children.length ; i++ )\r
+                                                                       {\r
+                                                                               if ( element.children[ i ].name == 'embed' )\r
+                                                                               {\r
+                                                                                       if ( !isFlashEmbed( element.children[ i ] ) )\r
+                                                                                               return null;\r
+\r
+                                                                                       return createFakeElement( editor, element );\r
+                                                                               }\r
+                                                                       }\r
+                                                                       return null;\r
+                                                               }\r
+\r
+                                                               return createFakeElement( editor, element );\r
+                                                       },\r
+\r
+                                                       'cke:embed' : function( element )\r
+                                                       {\r
+                                                               if ( !isFlashEmbed( element ) )\r
+                                                                       return null;\r
+\r
+                                                               return createFakeElement( editor, element );\r
+                                                       }\r
+                                               }\r
+                                       },\r
+                                       5);\r
+                       }\r
+               },\r
+\r
+               requires : [ 'fakeobjects' ]\r
+       });\r
+})();\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.config,\r
+{\r
+       /**\r
+        * Save as EMBED tag only. This tag is unrecommended.\r
+        * @type Boolean\r
+        * @default false\r
+        */\r
+       flashEmbedTagOnly : false,\r
+\r
+       /**\r
+        * Add EMBED tag as alternative: &lt;object&gt&lt;embed&gt&lt;/embed&gt&lt;/object&gt\r
+        * @type Boolean\r
+        * @default false\r
+        */\r
+       flashAddEmbedTag : true,\r
+\r
+       /**\r
+        * Use embedTagOnly and addEmbedTag values on edit.\r
+        * @type Boolean\r
+        * @default false\r
+        */\r
+       flashConvertOnEdit : false\r
+} );\r
diff --git a/_source/plugins/floatpanel/plugin.js b/_source/plugins/floatpanel/plugin.js
new file mode 100644 (file)
index 0000000..fb5e3a4
--- /dev/null
@@ -0,0 +1,325 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'floatpanel',\r
+{\r
+       requires : [ 'panel' ]\r
+});\r
+\r
+(function()\r
+{\r
+       var panels = {};\r
+       var isShowing = false;\r
+\r
+       function getPanel( editor, doc, parentElement, definition, level )\r
+       {\r
+               // Generates the panel key: docId-eleId-skinName-langDir[-uiColor][-CSSs][-level]\r
+               var key =\r
+                       doc.getUniqueId() +\r
+                       '-' + parentElement.getUniqueId() +\r
+                       '-' + editor.skinName +\r
+                       '-' + editor.lang.dir +\r
+                       ( ( editor.uiColor && ( '-' + editor.uiColor ) ) || '' ) +\r
+                       ( ( definition.css && ( '-' + definition.css ) ) || '' ) +\r
+                       ( ( level && ( '-' + level ) ) || '' );\r
+\r
+               var panel = panels[ key ];\r
+\r
+               if ( !panel )\r
+               {\r
+                       panel = panels[ key ] = new CKEDITOR.ui.panel( doc, definition );\r
+                       panel.element = parentElement.append( CKEDITOR.dom.element.createFromHtml( panel.renderHtml( editor ), doc ) );\r
+\r
+                       panel.element.setStyles(\r
+                               {\r
+                                       display : 'none',\r
+                                       position : 'absolute'\r
+                               });\r
+               }\r
+\r
+               return panel;\r
+       }\r
+\r
+       CKEDITOR.ui.floatPanel = CKEDITOR.tools.createClass(\r
+       {\r
+               $ : function( editor, parentElement, definition, level )\r
+               {\r
+                       definition.forceIFrame = true;\r
+\r
+                       var doc = parentElement.getDocument(),\r
+                               panel = getPanel( editor, doc, parentElement, definition, level || 0 ),\r
+                               element = panel.element,\r
+                               iframe = element.getFirst().getFirst();\r
+\r
+                       this.element = element;\r
+\r
+                       this._ =\r
+                       {\r
+                               // The panel that will be floating.\r
+                               panel : panel,\r
+                               parentElement : parentElement,\r
+                               definition : definition,\r
+                               document : doc,\r
+                               iframe : iframe,\r
+                               children : [],\r
+                               dir : editor.lang.dir\r
+                       };\r
+               },\r
+\r
+               proto :\r
+               {\r
+                       addBlock : function( name, block )\r
+                       {\r
+                               return this._.panel.addBlock( name, block );\r
+                       },\r
+\r
+                       addListBlock : function( name, multiSelect )\r
+                       {\r
+                               return this._.panel.addListBlock( name, multiSelect );\r
+                       },\r
+\r
+                       getBlock : function( name )\r
+                       {\r
+                               return this._.panel.getBlock( name );\r
+                       },\r
+\r
+                       /*\r
+                               corner (LTR):\r
+                                       1 = top-left\r
+                                       2 = top-right\r
+                                       3 = bottom-right\r
+                                       4 = bottom-left\r
+\r
+                               corner (RTL):\r
+                                       1 = top-right\r
+                                       2 = top-left\r
+                                       3 = bottom-left\r
+                                       4 = bottom-right\r
+                        */\r
+                       showBlock : function( name, offsetParent, corner, offsetX, offsetY )\r
+                       {\r
+                               var panel = this._.panel,\r
+                                       block = panel.showBlock( name );\r
+\r
+                               this.allowBlur( false );\r
+                               isShowing = true;\r
+\r
+                               var element = this.element,\r
+                                       iframe = this._.iframe,\r
+                                       definition = this._.definition,\r
+                                       position = offsetParent.getDocumentPosition( element.getDocument() ),\r
+                                       rtl = this._.dir == 'rtl';\r
+\r
+                               var left        = position.x + ( offsetX || 0 ),\r
+                                       top             = position.y + ( offsetY || 0 );\r
+\r
+                               if ( ( rtl && ( corner == 1 || corner == 4 ) ) || ( !rtl && ( corner == 2 || corner == 3 ) ) )\r
+                                       left += offsetParent.$.offsetWidth - 1;\r
+\r
+                               if ( corner == 3 || corner == 4 )\r
+                                       top += offsetParent.$.offsetHeight - 1;\r
+\r
+                               // Memorize offsetParent by it's ID.\r
+                               this._.panel._.offsetParentId = offsetParent.getId();\r
+\r
+                               element.setStyles(\r
+                                       {\r
+                                               top : top + 'px',\r
+                                               left : '-3000px',\r
+                                               visibility : 'hidden',\r
+                                               opacity : '0',  // FF3 is ignoring "visibility"\r
+                                               display : ''\r
+                                       });\r
+\r
+                               // Configure the IFrame blur event. Do that only once.\r
+                               if ( !this._.blurSet )\r
+                               {\r
+                                       // Non IE prefer the event into a window object.\r
+                                       var focused = CKEDITOR.env.ie ? iframe : new CKEDITOR.dom.window( iframe.$.contentWindow );\r
+\r
+                                       // With addEventListener compatible browsers, we must\r
+                                       // useCapture when registering the focus/blur events to\r
+                                       // guarantee they will be firing in all situations. (#3068, #3222 )\r
+                                       CKEDITOR.event.useCapture = true;\r
+\r
+                                       focused.on( 'blur', function( ev )\r
+                                               {\r
+                                                       if ( CKEDITOR.env.ie && !this.allowBlur() )\r
+                                                               return;\r
+\r
+                                                       // As we are using capture to register the listener,\r
+                                                       // the blur event may get fired even when focusing\r
+                                                       // inside the window itself, so we must ensure the\r
+                                                       // target is out of it.\r
+                                                       var target = ev.data.getTarget(),\r
+                                                               targetWindow = target.getWindow && target.getWindow();\r
+\r
+                                                       if ( targetWindow && targetWindow.equals( focused ) )\r
+                                                               return;\r
+\r
+                                                       if ( this.visible && !this._.activeChild && !isShowing )\r
+                                                               this.hide();\r
+                                               },\r
+                                               this );\r
+\r
+                                       focused.on( 'focus', function()\r
+                                               {\r
+                                                       this._.focused = true;\r
+                                                       this.hideChild();\r
+                                                       this.allowBlur( true );\r
+                                               },\r
+                                               this );\r
+\r
+                                       CKEDITOR.event.useCapture = false;\r
+\r
+                                       this._.blurSet = 1;\r
+                               }\r
+\r
+                               panel.onEscape = CKEDITOR.tools.bind( function()\r
+                                       {\r
+                                               this.onEscape && this.onEscape();\r
+                                       },\r
+                                       this );\r
+\r
+                               CKEDITOR.tools.setTimeout( function()\r
+                                       {\r
+                                               if ( rtl )\r
+                                                       left -= element.$.offsetWidth;\r
+\r
+                                               element.setStyles(\r
+                                                       {\r
+                                                               left : left + 'px',\r
+                                                               visibility      : '',\r
+                                                               opacity : '1'   // FF3 is ignoring "visibility"\r
+                                                       });\r
+\r
+                                               if ( block.autoSize )\r
+                                               {\r
+                                                       function setHeight()\r
+                                                       {\r
+                                                               var target = element.getFirst();\r
+                                                               var height = block.element.$.scrollHeight;\r
+\r
+                                                               // Account for extra height needed due to IE quirks box model bug:\r
+                                                               // http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug\r
+                                                               // (#3426)\r
+                                                               if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && height > 0 )\r
+                                                                       height += ( target.$.offsetHeight || 0 ) - ( target.$.clientHeight || 0 );\r
+\r
+                                                               target.setStyle( 'height', height + 'px' );\r
+\r
+                                                               // Fix IE < 8 visibility.\r
+                                                               panel._.currentBlock.element.setStyle( 'display', 'none' ).removeStyle( 'display' );\r
+                                                       }\r
+\r
+                                                       if ( panel.isLoaded )\r
+                                                               setHeight();\r
+                                                       else\r
+                                                               panel.onLoad = setHeight;\r
+                                               }\r
+                                               else\r
+                                                       element.getFirst().removeStyle( 'height' );\r
+\r
+                                               // Set the IFrame focus, so the blur event gets fired.\r
+                                               CKEDITOR.tools.setTimeout( function()\r
+                                                       {\r
+                                                               if ( definition.voiceLabel )\r
+                                                               {\r
+                                                                       if ( CKEDITOR.env.gecko )\r
+                                                                       {\r
+                                                                               var container = iframe.getParent();\r
+                                                                               container.setAttribute( 'role', 'region' );\r
+                                                                               container.setAttribute( 'title', definition.voiceLabel );\r
+                                                                               iframe.setAttribute( 'role', 'region' );\r
+                                                                               iframe.setAttribute( 'title', ' ' );\r
+                                                                       }\r
+                                                               }\r
+                                                               if ( CKEDITOR.env.ie && CKEDITOR.env.quirks )\r
+                                                                       iframe.focus();\r
+                                                               else\r
+                                                                       iframe.$.contentWindow.focus();\r
+\r
+                                                               // We need this get fired manually because of unfired focus() function.\r
+                                                               if ( CKEDITOR.env.ie && !CKEDITOR.env.quirks )\r
+                                                                       this.allowBlur( true );\r
+                                                       }, 0, this);\r
+                                       }, 0, this);\r
+                               this.visible = 1;\r
+\r
+                               if ( this.onShow )\r
+                                       this.onShow.call( this );\r
+\r
+                               isShowing = false;\r
+                       },\r
+\r
+                       hide : function()\r
+                       {\r
+                               if ( this.visible && ( !this.onHide || this.onHide.call( this ) !== true ) )\r
+                               {\r
+                                       this.hideChild();\r
+                                       this.element.setStyle( 'display', 'none' );\r
+                                       this.visible = 0;\r
+                               }\r
+                       },\r
+\r
+                       allowBlur : function( allow )   // Prevent editor from hiding the panel. #3222.\r
+                       {\r
+                               var panel = this._.panel;\r
+                               if ( allow != undefined )\r
+                                       panel.allowBlur = allow;\r
+\r
+                               return panel.allowBlur;\r
+                       },\r
+\r
+                       showAsChild : function( panel, blockName, offsetParent, corner, offsetX, offsetY )\r
+                       {\r
+                               // Skip reshowing of child which is already visible.\r
+                               if ( this._.activeChild == panel && panel._.panel._.offsetParentId == offsetParent.getId() )\r
+                                       return;\r
+\r
+                               this.hideChild();\r
+\r
+                               panel.onHide = CKEDITOR.tools.bind( function()\r
+                                       {\r
+                                               // Use a timeout, so we give time for this menu to get\r
+                                               // potentially focused.\r
+                                               CKEDITOR.tools.setTimeout( function()\r
+                                                       {\r
+                                                               if ( !this._.focused )\r
+                                                                       this.hide();\r
+                                                       },\r
+                                                       0, this );\r
+                                       },\r
+                                       this );\r
+\r
+                               this._.activeChild = panel;\r
+                               this._.focused = false;\r
+\r
+                               panel.showBlock( blockName, offsetParent, corner, offsetX, offsetY );\r
+\r
+                               /* #3767 IE: Second level menu may not have borders */\r
+                               if ( CKEDITOR.env.ie7Compat || ( CKEDITOR.env.ie8 && CKEDITOR.env.ie6Compat ) )\r
+                               {\r
+                                       setTimeout(function()\r
+                                               {\r
+                                                       panel.element.getChild( 0 ).$.style.cssText += '';\r
+                                               }, 100);\r
+                               }\r
+                       },\r
+\r
+                       hideChild : function()\r
+                       {\r
+                               var activeChild = this._.activeChild;\r
+\r
+                               if ( activeChild )\r
+                               {\r
+                                       delete activeChild.onHide;\r
+                                       delete this._.activeChild;\r
+                                       activeChild.hide();\r
+                               }\r
+                       }\r
+               }\r
+       });\r
+})();\r
diff --git a/_source/plugins/font/plugin.js b/_source/plugins/font/plugin.js
new file mode 100644 (file)
index 0000000..88aa38f
--- /dev/null
@@ -0,0 +1,227 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       function addCombo( editor, comboName, styleType, lang, entries, defaultLabel, styleDefinition )\r
+       {\r
+               var config = editor.config;\r
+\r
+               // Gets the list of fonts from the settings.\r
+               var names = entries.split( ';' ),\r
+                       values = [];\r
+\r
+               // Create style objects for all fonts.\r
+               var styles = {};\r
+               for ( var i = 0 ; i < names.length ; i++ )\r
+               {\r
+                       var vars = {};\r
+                       var parts = names[ i ].split( '/' );\r
+\r
+                       var name = names[ i ] = parts[ 0 ];\r
+                       vars[ styleType ] = values[ i ] = parts[ 1 ] || name;\r
+\r
+                       styles[ name ] = new CKEDITOR.style( styleDefinition, vars );\r
+               }\r
+\r
+               editor.ui.addRichCombo( comboName,\r
+                       {\r
+                               label : lang.label,\r
+                               title : lang.panelTitle,\r
+                               voiceLabel : lang.voiceLabel,\r
+                               className : 'cke_' + ( styleType == 'size' ? 'fontSize' : 'font' ),\r
+                               multiSelect : false,\r
+\r
+                               panel :\r
+                               {\r
+                                       css : [ config.contentsCss, CKEDITOR.getUrl( editor.skinPath + 'editor.css' ) ],\r
+                                       voiceLabel : lang.panelVoiceLabel\r
+                               },\r
+\r
+                               init : function()\r
+                               {\r
+                                       this.startGroup( lang.panelTitle );\r
+\r
+                                       for ( var i = 0 ; i < names.length ; i++ )\r
+                                       {\r
+                                               var name = names[ i ];\r
+\r
+                                               // Add the tag entry to the panel list.\r
+                                               this.add( name, '<span style="font-' + styleType + ':' + values[ i ] + '">' + name + '</span>', name );\r
+                                       }\r
+                               },\r
+\r
+                               onClick : function( value )\r
+                               {\r
+                                       editor.focus();\r
+                                       editor.fire( 'saveSnapshot' );\r
+\r
+                                       var style = styles[ value ];\r
+\r
+                                       if ( this.getValue() == value )\r
+                                               style.remove( editor.document );\r
+                                       else\r
+                                               style.apply( editor.document );\r
+\r
+                                       editor.fire( 'saveSnapshot' );\r
+                               },\r
+\r
+                               onRender : function()\r
+                               {\r
+                                       editor.on( 'selectionChange', function( ev )\r
+                                               {\r
+                                                       var currentValue = this.getValue();\r
+\r
+                                                       var elementPath = ev.data.path,\r
+                                                               elements = elementPath.elements;\r
+\r
+                                                       // For each element into the elements path.\r
+                                                       for ( var i = 0, element ; i < elements.length ; i++ )\r
+                                                       {\r
+                                                               element = elements[i];\r
+\r
+                                                               // Check if the element is removable by any of\r
+                                                               // the styles.\r
+                                                               for ( var value in styles )\r
+                                                               {\r
+                                                                       if ( styles[ value ].checkElementRemovable( element, true ) )\r
+                                                                       {\r
+                                                                               if ( value != currentValue )\r
+                                                                                       this.setValue( value );\r
+                                                                               return;\r
+                                                                       }\r
+                                                               }\r
+                                                       }\r
+\r
+                                                       // If no styles match, just empty it.\r
+                                                       this.setValue( '', defaultLabel );\r
+                                               },\r
+                                               this);\r
+                               }\r
+                       });\r
+       }\r
+\r
+       CKEDITOR.plugins.add( 'font',\r
+       {\r
+               requires : [ 'richcombo', 'styles' ],\r
+\r
+               init : function( editor )\r
+               {\r
+                       var config = editor.config;\r
+\r
+                       addCombo( editor, 'Font', 'family', editor.lang.font, config.font_names, config.font_defaultLabel, config.font_style );\r
+                       addCombo( editor, 'FontSize', 'size', editor.lang.fontSize, config.fontSize_sizes, config.fontSize_defaultLabel, config.fontSize_style );\r
+               }\r
+       });\r
+})();\r
+\r
+/**\r
+ * The list of fonts names to be displayed in the Font combo in the toolbar.\r
+ * Entries are separated by semi-colons (;), while it's possible to have more\r
+ * than one font for each entry, in the HTML way (separated by comma).\r
+ *\r
+ * A display name may be optionally defined by prefixing the entries with the\r
+ * name and the slash character. For example, "Arial/Arial, Helvetica, sans-serif"\r
+ * will be displayed as "Arial" in the list, but will be outputted as\r
+ * "Arial, Helvetica, sans-serif".\r
+ * @type String\r
+ * @example\r
+ * config.font_names =\r
+ *     'Arial/Arial, Helvetica, sans-serif;' +\r
+ *     'Times New Roman/Times New Roman, Times, serif;' +\r
+ *     'Verdana';\r
+ * @example\r
+ * config.font_names = 'Arial;Times New Roman;Verdana';\r
+ */\r
+CKEDITOR.config.font_names =\r
+       'Arial/Arial, Helvetica, sans-serif;' +\r
+       'Comic Sans MS/Comic Sans MS, cursive;' +\r
+       'Courier New/Courier New, Courier, monospace;' +\r
+       'Georgia/Georgia, serif;' +\r
+       'Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;' +\r
+       'Tahoma/Tahoma, Geneva, sans-serif;' +\r
+       'Times New Roman/Times New Roman, Times, serif;' +\r
+       'Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;' +\r
+       'Verdana/Verdana, Geneva, sans-serif';\r
+\r
+/**\r
+ * The text to be displayed in the Font combo is none of the available values\r
+ * matches the current cursor position or text selection.\r
+ * @type String\r
+ * @example\r
+ * // If the default site font is Arial, we may making it more explicit to the end user.\r
+ * config.font_defaultLabel = 'Arial';\r
+ */\r
+CKEDITOR.config.font_defaultLabel = '';\r
+\r
+/**\r
+ * The style definition to be used to apply the font in the text.\r
+ * @type Object\r
+ * @example\r
+ * // This is actually the default value for it.\r
+ * config.font_style =\r
+ *     {\r
+ *         element             : 'span',\r
+ *         styles              : { 'font-family' : '#(family)' },\r
+ *         overrides   : [ { element : 'font', attributes : { 'face' : null } } ]\r
+ *     };\r
+ */\r
+CKEDITOR.config.font_style =\r
+       {\r
+               element         : 'span',\r
+               styles          : { 'font-family' : '#(family)' },\r
+               overrides       : [ { element : 'font', attributes : { 'face' : null } } ]\r
+       };\r
+\r
+/**\r
+ * The list of fonts size to be displayed in the Font Size combo in the\r
+ * toolbar. Entries are separated by semi-colons (;).\r
+ *\r
+ * Any kind of "CSS like" size can be used, like "12px", "2.3em", "130%",\r
+ * "larger" or "x-small".\r
+ *\r
+ * A display name may be optionally defined by prefixing the entries with the\r
+ * name and the slash character. For example, "Bigger Font/14px" will be\r
+ * displayed as "Bigger Font" in the list, but will be outputted as "14px".\r
+ * @type String\r
+ * @default '8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px'\r
+ * @example\r
+ * config.fontSize_sizes = '16/16px;24/24px;48/48px;';\r
+ * @example\r
+ * config.fontSize_sizes = '12px;2.3em;130%;larger;x-small';\r
+ * @example\r
+ * config.fontSize_sizes = '12 Pixels/12px;Big/2.3em;30 Percent More/130%;Bigger/larger;Very Small/x-small';\r
+ */\r
+CKEDITOR.config.fontSize_sizes =\r
+       '8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px';\r
+\r
+/**\r
+ * The text to be displayed in the Font Size combo is none of the available\r
+ * values matches the current cursor position or text selection.\r
+ * @type String\r
+ * @example\r
+ * // If the default site font size is 12px, we may making it more explicit to the end user.\r
+ * config.fontSize_defaultLabel = '12px';\r
+ */\r
+CKEDITOR.config.fontSize_defaultLabel = '';\r
+\r
+/**\r
+ * The style definition to be used to apply the font size in the text.\r
+ * @type Object\r
+ * @example\r
+ * // This is actually the default value for it.\r
+ * config.fontSize_style =\r
+ *     {\r
+ *         element             : 'span',\r
+ *         styles              : { 'font-size' : '#(size)' },\r
+ *         overrides   : [ { element : 'font', attributes : { 'size' : null } } ]\r
+ *     };\r
+ */\r
+CKEDITOR.config.fontSize_style =\r
+       {\r
+               element         : 'span',\r
+               styles          : { 'font-size' : '#(size)' },\r
+               overrides       : [ { element : 'font', attributes : { 'size' : null } } ]\r
+       };\r
diff --git a/_source/plugins/format/plugin.js b/_source/plugins/format/plugin.js
new file mode 100644 (file)
index 0000000..9c7c1e3
--- /dev/null
@@ -0,0 +1,191 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'format',\r
+{\r
+       requires : [ 'richcombo', 'styles' ],\r
+\r
+       init : function( editor )\r
+       {\r
+               var config = editor.config,\r
+                       lang = editor.lang.format;\r
+\r
+               // Gets the list of tags from the settings.\r
+               var tags = config.format_tags.split( ';' );\r
+\r
+               // Create style objects for all defined styles.\r
+               var styles = {};\r
+               for ( var i = 0 ; i < tags.length ; i++ )\r
+               {\r
+                       var tag = tags[ i ];\r
+                       styles[ tag ] = new CKEDITOR.style( config[ 'format_' + tag ] );\r
+               }\r
+\r
+               editor.ui.addRichCombo( 'Format',\r
+                       {\r
+                               label : lang.label,\r
+                               title : lang.panelTitle,\r
+                               voiceLabel : lang.voiceLabel,\r
+                               className : 'cke_format',\r
+                               multiSelect : false,\r
+\r
+                               panel :\r
+                               {\r
+                                       css : [ config.contentsCss, CKEDITOR.getUrl( editor.skinPath + 'editor.css' ) ],\r
+                                       voiceLabel : lang.panelVoiceLabel\r
+                               },\r
+\r
+                               init : function()\r
+                               {\r
+                                       this.startGroup( lang.panelTitle );\r
+\r
+                                       for ( var tag in styles )\r
+                                       {\r
+                                               var label = lang[ 'tag_' + tag ];\r
+\r
+                                               // Add the tag entry to the panel list.\r
+                                               this.add( tag, '<' + tag + '>' + label + '</' + tag + '>', label );\r
+                                       }\r
+                               },\r
+\r
+                               onClick : function( value )\r
+                               {\r
+                                       editor.focus();\r
+                                       editor.fire( 'saveSnapshot' );\r
+\r
+                                       styles[ value ].apply( editor.document );\r
+\r
+                                       editor.fire( 'saveSnapshot' );\r
+                               },\r
+\r
+                               onRender : function()\r
+                               {\r
+                                       editor.on( 'selectionChange', function( ev )\r
+                                               {\r
+                                                       var currentTag = this.getValue();\r
+\r
+                                                       var elementPath = ev.data.path;\r
+\r
+                                                       for ( var tag in styles )\r
+                                                       {\r
+                                                               if ( styles[ tag ].checkActive( elementPath ) )\r
+                                                               {\r
+                                                                       if ( tag != currentTag )\r
+                                                                               this.setValue( tag, editor.lang.format[ 'tag_' + tag ] );\r
+                                                                       return;\r
+                                                               }\r
+                                                       }\r
+\r
+                                                       // If no styles match, just empty it.\r
+                                                       this.setValue( '' );\r
+                                               },\r
+                                               this);\r
+                               }\r
+                       });\r
+       }\r
+});\r
+\r
+/**\r
+ * A list of semi colon separated style names (by default tags) representing\r
+ * the style definition for each entry to be displayed in the Format combo in\r
+ * the toolbar. Each entry must have its relative definition configuration in a\r
+ * setting named "format_(tagName)". For example, the "p" entry has its\r
+ * definition taken from config.format_p.\r
+ * @type String\r
+ * @default 'p;h1;h2;h3;h4;h5;h6;pre;address;div'\r
+ * @example\r
+ * config.format_tags = 'p;h2;h3;pre'\r
+ */\r
+CKEDITOR.config.format_tags = 'p;h1;h2;h3;h4;h5;h6;pre;address;div';\r
+\r
+/**\r
+ * The style definition to be used to apply the "Normal" format.\r
+ * @type Object\r
+ * @default { element : 'p' }\r
+ * @example\r
+ * config.format_p = { element : 'p', attributes : { class : 'normalPara' } };\r
+ */\r
+CKEDITOR.config.format_p = { element : 'p' };\r
+\r
+/**\r
+ * The style definition to be used to apply the "Normal (DIV)" format.\r
+ * @type Object\r
+ * @default { element : 'div' }\r
+ * @example\r
+ * config.format_div = { element : 'div', attributes : { class : 'normalDiv' } };\r
+ */\r
+CKEDITOR.config.format_div = { element : 'div' };\r
+\r
+/**\r
+ * The style definition to be used to apply the "Formatted" format.\r
+ * @type Object\r
+ * @default { element : 'pre' }\r
+ * @example\r
+ * config.format_pre = { element : 'pre', attributes : { class : 'code' } };\r
+ */\r
+CKEDITOR.config.format_pre = { element : 'pre' };\r
+\r
+/**\r
+ * The style definition to be used to apply the "Address" format.\r
+ * @type Object\r
+ * @default { element : 'address' }\r
+ * @example\r
+ * config.format_address = { element : 'address', attributes : { class : 'styledAddress' } };\r
+ */\r
+CKEDITOR.config.format_address = { element : 'address' };\r
+\r
+/**\r
+ * The style definition to be used to apply the "Heading 1" format.\r
+ * @type Object\r
+ * @default { element : 'h1' }\r
+ * @example\r
+ * config.format_h1 = { element : 'h1', attributes : { class : 'contentTitle1' } };\r
+ */\r
+CKEDITOR.config.format_h1 = { element : 'h1' };\r
+\r
+/**\r
+ * The style definition to be used to apply the "Heading 1" format.\r
+ * @type Object\r
+ * @default { element : 'h2' }\r
+ * @example\r
+ * config.format_h2 = { element : 'h2', attributes : { class : 'contentTitle2' } };\r
+ */\r
+CKEDITOR.config.format_h2 = { element : 'h2' };\r
+\r
+/**\r
+ * The style definition to be used to apply the "Heading 1" format.\r
+ * @type Object\r
+ * @default { element : 'h3' }\r
+ * @example\r
+ * config.format_h3 = { element : 'h3', attributes : { class : 'contentTitle3' } };\r
+ */\r
+CKEDITOR.config.format_h3 = { element : 'h3' };\r
+\r
+/**\r
+ * The style definition to be used to apply the "Heading 1" format.\r
+ * @type Object\r
+ * @default { element : 'h4' }\r
+ * @example\r
+ * config.format_h4 = { element : 'h4', attributes : { class : 'contentTitle4' } };\r
+ */\r
+CKEDITOR.config.format_h4 = { element : 'h4' };\r
+\r
+/**\r
+ * The style definition to be used to apply the "Heading 1" format.\r
+ * @type Object\r
+ * @default { element : 'h5' }\r
+ * @example\r
+ * config.format_h5 = { element : 'h5', attributes : { class : 'contentTitle5' } };\r
+ */\r
+CKEDITOR.config.format_h5 = { element : 'h5' };\r
+\r
+/**\r
+ * The style definition to be used to apply the "Heading 1" format.\r
+ * @type Object\r
+ * @default { element : 'h6' }\r
+ * @example\r
+ * config.format_h6 = { element : 'h6', attributes : { class : 'contentTitle6' } };\r
+ */\r
+CKEDITOR.config.format_h6 = { element : 'h6' };\r
diff --git a/_source/plugins/forms/dialogs/button.js b/_source/plugins/forms/dialogs/button.js
new file mode 100644 (file)
index 0000000..dc718d7
--- /dev/null
@@ -0,0 +1,135 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+CKEDITOR.dialog.add( 'button', function( editor )\r
+{\r
+       return {\r
+               title : editor.lang.button.title,\r
+               minWidth : 350,\r
+               minHeight : 150,\r
+               onShow : function()\r
+               {\r
+                       delete this.button;\r
+                       var element = this.getParentEditor().getSelection().getSelectedElement();\r
+                       if ( element && element.getName() == "input" )\r
+                       {\r
+                               var type = element.getAttribute( 'type' );\r
+                               if ( type == "button" || type == "reset" || type == "submit" )\r
+                               {\r
+                                       this.button = element;\r
+                                       this.setupContent( element );\r
+                               }\r
+                       }\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var editor,\r
+                               element = this.button,\r
+                               isInsertMode = !element;\r
+\r
+                       if ( isInsertMode )\r
+                       {\r
+                               editor = this.getParentEditor();\r
+                               element = editor.document.createElement( 'input' );\r
+                       }\r
+\r
+                       if ( isInsertMode )\r
+                               editor.insertElement( element );\r
+                       this.commitContent( { element : element } );\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'info',\r
+                               label : editor.lang.button.title,\r
+                               title : editor.lang.button.title,\r
+                               elements : [\r
+                                       {\r
+                                               id : '_cke_saved_name',\r
+                                               type : 'text',\r
+                                               label : editor.lang.common.name,\r
+                                               'default' : '',\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue(\r
+                                                                       element.getAttribute( '_cke_saved_name' ) ||\r
+                                                                       element.getAttribute( 'name' ) ||\r
+                                                                       '' );\r
+                                               },\r
+                                               commit : function( data )\r
+                                               {\r
+                                                       var element = data.element;\r
+\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( '_cke_saved_name', this.getValue() );\r
+                                                       else\r
+                                                       {\r
+                                                               element.removeAttribute( '_cke_saved_name' );\r
+                                                               element.removeAttribute( 'name' );\r
+                                                       }\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               id : 'value',\r
+                                               type : 'text',\r
+                                               label : editor.lang.button.text,\r
+                                               accessKey : 'V',\r
+                                               'default' : '',\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue( element.getAttribute( 'value' ) || '' );\r
+                                               },\r
+                                               commit : function( data )\r
+                                               {\r
+                                                       var element = data.element;\r
+\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( 'value', this.getValue() );\r
+                                                       else\r
+                                                               element.removeAttribute( 'value' );\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               id : 'type',\r
+                                               type : 'select',\r
+                                               label : editor.lang.button.type,\r
+                                               'default' : 'button',\r
+                                               accessKey : 'T',\r
+                                               items :\r
+                                               [\r
+                                                       [ editor.lang.button.typeBtn, 'button' ],\r
+                                                       [ editor.lang.button.typeSbm, 'submit' ],\r
+                                                       [ editor.lang.button.typeRst, 'reset' ]\r
+                                               ],\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue( element.getAttribute( 'type' ) || '' );\r
+                                               },\r
+                                               commit : function( data )\r
+                                               {\r
+                                                       var element = data.element;\r
+\r
+                                                       if ( CKEDITOR.env.ie )\r
+                                                       {\r
+                                                               var elementType = element.getAttribute( 'type' );\r
+                                                               var currentType = this.getValue();\r
+\r
+                                                               if ( currentType != elementType )\r
+                                                               {\r
+                                                                       var replace = CKEDITOR.dom.element.createFromHtml( '<input type="' + currentType +\r
+                                                                               '"></input>', editor.document );\r
+                                                                       element.copyAttributes( replace, { type : 1 } );\r
+                                                                       replace.replace( element );\r
+                                                                       editor.getSelection().selectElement( replace );\r
+                                                                       data.element = replace;\r
+                                                               }\r
+                                                       }\r
+                                                       else\r
+                                                               element.setAttribute( 'type', this.getValue() );\r
+                                               }\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+});\r
diff --git a/_source/plugins/forms/dialogs/checkbox.js b/_source/plugins/forms/dialogs/checkbox.js
new file mode 100644 (file)
index 0000000..96c356e
--- /dev/null
@@ -0,0 +1,138 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+CKEDITOR.dialog.add( 'checkbox', function( editor )\r
+{\r
+       return {\r
+               title : editor.lang.checkboxAndRadio.checkboxTitle,\r
+               minWidth : 350,\r
+               minHeight : 140,\r
+               onShow : function()\r
+               {\r
+                       delete this.checkbox;\r
+\r
+                       var element = this.getParentEditor().getSelection().getSelectedElement();\r
+\r
+                       if ( element && element.getAttribute( 'type' ) == "checkbox" )\r
+                       {\r
+                               this.checkbox = element;\r
+                               this.setupContent( element );\r
+                       }\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var editor,\r
+                               element = this.checkbox,\r
+                               isInsertMode = !element;\r
+\r
+                       if ( isInsertMode )\r
+                       {\r
+                               editor = this.getParentEditor();\r
+                               element = editor.document.createElement( 'input' );\r
+                               element.setAttribute( 'type', 'checkbox' );\r
+                       }\r
+\r
+                       if ( isInsertMode )\r
+                               editor.insertElement( element );\r
+                       this.commitContent( { element : element } );\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'info',\r
+                               label : editor.lang.checkboxAndRadio.checkboxTitle,\r
+                               title : editor.lang.checkboxAndRadio.checkboxTitle,\r
+                               startupFocus : 'txtName',\r
+                               elements : [\r
+                                       {\r
+                                               id : 'txtName',\r
+                                               type : 'text',\r
+                                               label : editor.lang.common.name,\r
+                                               'default' : '',\r
+                                               accessKey : 'N',\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue(\r
+                                                                       element.getAttribute( '_cke_saved_name' ) ||\r
+                                                                       element.getAttribute( 'name' ) ||\r
+                                                                       '' );\r
+                                               },\r
+                                               commit : function( data )\r
+                                               {\r
+                                                       var element = data.element;\r
+\r
+                                                       // IE failed to update 'name' property on input elements, protect it now.\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( '_cke_saved_name', this.getValue() );\r
+                                                       else\r
+                                                       {\r
+                                                               element.removeAttribute( '_cke_saved_name' );\r
+                                                               element.removeAttribute( 'name' );\r
+                                                       }\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               id : 'txtValue',\r
+                                               type : 'text',\r
+                                               label : editor.lang.checkboxAndRadio.value,\r
+                                               'default' : '',\r
+                                               accessKey : 'V',\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue( element.getAttribute( 'value' ) || '' );\r
+                                               },\r
+                                               commit : function( data )\r
+                                               {\r
+                                                       var element = data.element;\r
+\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( 'value', this.getValue() );\r
+                                                       else\r
+                                                               element.removeAttribute( 'value' );\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               id : 'cmbSelected',\r
+                                               type : 'checkbox',\r
+                                               label : editor.lang.checkboxAndRadio.selected,\r
+                                               'default' : '',\r
+                                               accessKey : 'S',\r
+                                               value : "checked",\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue( element.getAttribute( 'checked' ) );\r
+                                               },\r
+                                               commit : function( data )\r
+                                               {\r
+                                                       var element = data.element;\r
+\r
+                                                       if ( CKEDITOR.env.ie )\r
+                                                       {\r
+                                                               var isElementChecked = !!element.getAttribute( 'checked' );\r
+                                                               var isChecked = !!this.getValue();\r
+\r
+                                                               if ( isElementChecked != isChecked )\r
+                                                               {\r
+                                                                       var replace = CKEDITOR.dom.element.createFromHtml( '<input type="checkbox"'\r
+                                                                                  + ( isChecked ? ' checked="checked"' : '' )\r
+                                                                                  + '></input>', editor.document );\r
+                                                                       element.copyAttributes( replace, { type : 1, checked : 1 } );\r
+                                                                       replace.replace( element );\r
+                                                                       editor.getSelection().selectElement( replace );\r
+                                                                       data.element = replace;\r
+                                                               }\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               if ( this.getValue() )\r
+                                                                       element.setAttribute( 'checked', this.getValue() );\r
+                                                               else\r
+                                                                       element.removeAttribute( 'checked' );\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+});\r
diff --git a/_source/plugins/forms/dialogs/form.js b/_source/plugins/forms/dialogs/form.js
new file mode 100644 (file)
index 0000000..9074e5b
--- /dev/null
@@ -0,0 +1,177 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+CKEDITOR.dialog.add( 'form', function( editor )\r
+{\r
+       var autoAttributes =\r
+       {\r
+               action : 1,\r
+               id : 1,\r
+               method : 1,\r
+               enctype : 1,\r
+               target : 1\r
+       };\r
+\r
+       return {\r
+               title : editor.lang.form.title,\r
+               minWidth : 350,\r
+               minHeight : 200,\r
+               onShow : function()\r
+               {\r
+                       delete this.form;\r
+\r
+                       var element = this.getParentEditor().getSelection().getStartElement();\r
+                       var form = element && element.getAscendant( 'form', true );\r
+                       if ( form )\r
+                       {\r
+                               this.form = form;\r
+                               this.setupContent( form );\r
+                       }\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var editor,\r
+                               element = this.form,\r
+                               isInsertMode = !element;\r
+\r
+                       if ( isInsertMode )\r
+                       {\r
+                               editor = this.getParentEditor();\r
+                               element = editor.document.createElement( 'form' );\r
+                               element.append( editor.document.createElement( 'br' ) );\r
+                       }\r
+\r
+                       if ( isInsertMode )\r
+                               editor.insertElement( element );\r
+                       this.commitContent( element );\r
+               },\r
+               onLoad : function()\r
+               {\r
+                       function autoSetup( element )\r
+                       {\r
+                               this.setValue( element.getAttribute( this.id ) || '' );\r
+                       }\r
+\r
+                       function autoCommit( element )\r
+                       {\r
+                               if ( this.getValue() )\r
+                                       element.setAttribute( this.id, this.getValue() );\r
+                               else\r
+                                       element.removeAttribute( this.id );\r
+                       }\r
+\r
+                       this.foreach( function( contentObj )\r
+                               {\r
+                                       if ( autoAttributes[ contentObj.id ] )\r
+                                       {\r
+                                               contentObj.setup = autoSetup;\r
+                                               contentObj.commit = autoCommit;\r
+                                       }\r
+                               } );\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'info',\r
+                               label : editor.lang.form.title,\r
+                               title : editor.lang.form.title,\r
+                               elements : [\r
+                                       {\r
+                                               id : 'txtName',\r
+                                               type : 'text',\r
+                                               label : editor.lang.common.name,\r
+                                               'default' : '',\r
+                                               accessKey : 'N',\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue( element.getAttribute( '_cke_saved_name' ) ||\r
+                                                                       element.getAttribute( 'name' ) ||\r
+                                                                       '' );\r
+                                               },\r
+                                               commit : function( element )\r
+                                               {\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( '_cke_saved_name', this.getValue() );\r
+                                                       else\r
+                                                       {\r
+                                                               element.removeAttribute( '_cke_saved_name' );\r
+                                                               element.removeAttribute( 'name' );\r
+                                                       }\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               id : 'action',\r
+                                               type : 'text',\r
+                                               label : editor.lang.form.action,\r
+                                               'default' : '',\r
+                                               accessKey : 'A'\r
+                                       },\r
+                                       {\r
+                                               type : 'hbox',\r
+                                               widths : [ '45%', '55%' ],\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               id : 'id',\r
+                                                               type : 'text',\r
+                                                               label : editor.lang.common.id,\r
+                                                               'default' : '',\r
+                                                               accessKey : 'I'\r
+                                                       },\r
+                                                       {\r
+                                                               id : 'enctype',\r
+                                                               type : 'select',\r
+                                                               label : editor.lang.form.encoding,\r
+                                                               style : 'width:100%',\r
+                                                               accessKey : 'E',\r
+                                                               'default' : '',\r
+                                                               items :\r
+                                                               [\r
+                                                                       [ '' ],\r
+                                                                       [ 'text/plain' ],\r
+                                                                       [ 'multipart/form-data' ],\r
+                                                                       [ 'application/x-www-form-urlencoded' ]\r
+                                                               ]\r
+                                                       }\r
+                                               ]\r
+                                       },\r
+                                       {\r
+                                               type : 'hbox',\r
+                                               widths : [ '45%', '55%' ],\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               id : 'target',\r
+                                                               type : 'select',\r
+                                                               label : editor.lang.form.target,\r
+                                                               style : 'width:100%',\r
+                                                               accessKey : 'M',\r
+                                                               'default' : '',\r
+                                                               items :\r
+                                                               [\r
+                                                                       [ editor.lang.form.targetNotSet, '' ],\r
+                                                                       [ editor.lang.form.targetNew, '_blank' ],\r
+                                                                       [ editor.lang.form.targetTop, '_top' ],\r
+                                                                       [ editor.lang.form.targetSelf, '_self' ],\r
+                                                                       [ editor.lang.form.targetParent, '_parent' ]\r
+                                                               ]\r
+                                                       },\r
+                                                       {\r
+                                                               id : 'method',\r
+                                                               type : 'select',\r
+                                                               label : editor.lang.form.method,\r
+                                                               accessKey : 'M',\r
+                                                               'default' : 'GET',\r
+                                                               items :\r
+                                                               [\r
+                                                                       [ 'GET', 'get' ],\r
+                                                                       [ 'POST', 'post' ]\r
+                                                               ]\r
+                                                       }\r
+                                               ]\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+});\r
diff --git a/_source/plugins/forms/dialogs/hiddenfield.js b/_source/plugins/forms/dialogs/hiddenfield.js
new file mode 100644 (file)
index 0000000..823e648
--- /dev/null
@@ -0,0 +1,91 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+CKEDITOR.dialog.add( 'hiddenfield', function( editor )\r
+{\r
+       return {\r
+               title : editor.lang.hidden.title,\r
+               minWidth : 350,\r
+               minHeight : 110,\r
+               onShow : function()\r
+               {\r
+                       delete this.hiddenField;\r
+\r
+                       var element = this.getParentEditor().getSelection().getSelectedElement();\r
+                       if ( element && element.getName() == "input" && element.getAttribute( 'type' ) == "checkbox" )\r
+                       {\r
+                               this.hiddenField = element;\r
+                               this.setupContent( element );\r
+                       }\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var editor,\r
+                               element = this.hiddenField,\r
+                               isInsertMode = !element;\r
+\r
+                       if ( isInsertMode )\r
+                       {\r
+                               editor = this.getParentEditor();\r
+                               element = editor.document.createElement( 'input' );\r
+                               element.setAttribute( 'type', 'hidden' );\r
+                       }\r
+\r
+                       if ( isInsertMode )\r
+                               editor.insertElement( element );\r
+                       this.commitContent( element );\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'info',\r
+                               label : editor.lang.hidden.title,\r
+                               title : editor.lang.hidden.title,\r
+                               elements : [\r
+                                       {\r
+                                               id : '_cke_saved_name',\r
+                                               type : 'text',\r
+                                               label : editor.lang.hidden.name,\r
+                                               'default' : '',\r
+                                               accessKey : 'N',\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue(\r
+                                                                       element.getAttribute( '_cke_saved_name' ) ||\r
+                                                                       element.getAttribute( 'name' ) ||\r
+                                                                       '' );\r
+                                               },\r
+                                               commit : function( element )\r
+                                               {\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( '_cke_saved_name', this.getValue() );\r
+                                                       else\r
+                                                       {\r
+                                                               element.removeAttribute( '_cke_saved_name' );\r
+                                                               element.removeAttribute( 'name' );\r
+                                                       }\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               id : 'value',\r
+                                               type : 'text',\r
+                                               label : editor.lang.hidden.value,\r
+                                               'default' : '',\r
+                                               accessKey : 'V',\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue( element.getAttribute( 'value' ) || '' );\r
+                                               },\r
+                                               commit : function( element )\r
+                                               {\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( 'value', this.getValue() );\r
+                                                       else\r
+                                                               element.removeAttribute( 'value' );\r
+                                               }\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+});\r
diff --git a/_source/plugins/forms/dialogs/radio.js b/_source/plugins/forms/dialogs/radio.js
new file mode 100644 (file)
index 0000000..7686c52
--- /dev/null
@@ -0,0 +1,135 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+CKEDITOR.dialog.add( 'radio', function( editor )\r
+{\r
+       return {\r
+               title : editor.lang.checkboxAndRadio.radioTitle,\r
+               minWidth : 350,\r
+               minHeight : 140,\r
+               onShow : function()\r
+               {\r
+                       delete this.radioButton;\r
+\r
+                       var element = this.getParentEditor().getSelection().getSelectedElement();\r
+                       if ( element && element.getName() == "input" && element.getAttribute( 'type' ) == "radio" )\r
+                       {\r
+                               this.radioButton = element;\r
+                               this.setupContent( element );\r
+                       }\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var editor,\r
+                               element = this.radioButton,\r
+                               isInsertMode = !element;\r
+\r
+                       if ( isInsertMode )\r
+                       {\r
+                               editor = this.getParentEditor();\r
+                               element = editor.document.createElement( 'input' );\r
+                               element.setAttribute( 'type', 'radio' );\r
+                       }\r
+\r
+                       if ( isInsertMode )\r
+                               editor.insertElement( element );\r
+                       this.commitContent( { element : element } );\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'info',\r
+                               label : editor.lang.checkboxAndRadio.radioTitle,\r
+                               title : editor.lang.checkboxAndRadio.radioTitle,\r
+                               elements : [\r
+                                       {\r
+                                               id : 'name',\r
+                                               type : 'text',\r
+                                               label : editor.lang.common.name,\r
+                                               'default' : '',\r
+                                               accessKey : 'N',\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue(\r
+                                                                       element.getAttribute( '_cke_saved_name' ) ||\r
+                                                                       element.getAttribute( 'name' ) ||\r
+                                                                       '' );\r
+                                               },\r
+                                               commit : function( data )\r
+                                               {\r
+                                                       var element = data.element;\r
+\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( '_cke_saved_name', this.getValue() );\r
+                                                       else\r
+                                                       {\r
+                                                               element.removeAttribute( '_cke_saved_name' );\r
+                                                               element.removeAttribute( 'name' );\r
+                                                       }\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               id : 'value',\r
+                                               type : 'text',\r
+                                               label : editor.lang.checkboxAndRadio.value,\r
+                                               'default' : '',\r
+                                               accessKey : 'V',\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue( element.getAttribute( 'value' ) || '' );\r
+                                               },\r
+                                               commit : function( data )\r
+                                               {\r
+                                                       var element = data.element;\r
+\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( 'value', this.getValue() );\r
+                                                       else\r
+                                                               element.removeAttribute( 'value' );\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               id : 'checked',\r
+                                               type : 'checkbox',\r
+                                               label : editor.lang.checkboxAndRadio.selected,\r
+                                               'default' : '',\r
+                                               accessKey : 'S',\r
+                                               value : "checked",\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue( element.getAttribute( 'checked' ) );\r
+                                               },\r
+                                               commit : function( data )\r
+                                               {\r
+                                                       var element = data.element;\r
+\r
+                                                       if ( !CKEDITOR.env.ie )\r
+                                                       {\r
+                                                               if ( this.getValue() )\r
+                                                                       element.setAttribute( 'checked', 'checked' );\r
+                                                               else\r
+                                                                       element.removeAttribute( 'checked' );\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               var isElementChecked = element.getAttribute( 'checked' );\r
+                                                               var isChecked = !!this.getValue();\r
+\r
+                                                               if ( isElementChecked != isChecked )\r
+                                                               {\r
+                                                                       var replace = CKEDITOR.dom.element.createFromHtml( '<input type="radio"'\r
+                                                                                       + ( isChecked ? ' checked="checked"' : '' )\r
+                                                                                       + '></input>', editor.document );\r
+                                                                       element.copyAttributes( replace, { type : 1, checked : 1 } );\r
+                                                                       replace.replace( element );\r
+                                                                       editor.getSelection().selectElement( replace );\r
+                                                                       data.element = replace;\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+});\r
diff --git a/_source/plugins/forms/dialogs/select.js b/_source/plugins/forms/dialogs/select.js
new file mode 100644 (file)
index 0000000..645a1ba
--- /dev/null
@@ -0,0 +1,541 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+CKEDITOR.dialog.add( 'select', function( editor )\r
+{\r
+       // Add a new option to a SELECT object (combo or list).\r
+       function addOption( combo, optionText, optionValue, documentObject, index )\r
+       {\r
+               combo = getSelect( combo );\r
+               var oOption;\r
+               if ( documentObject )\r
+                       oOption = documentObject.createElement( "OPTION" );\r
+               else\r
+                       oOption = document.createElement( "OPTION" );\r
+\r
+               if ( combo && oOption && oOption.getName() == 'option' )\r
+               {\r
+                       if ( CKEDITOR.env.ie ) {\r
+                               if ( !isNaN( parseInt( index, 10) ) )\r
+                                       combo.$.options.add( oOption.$, index );\r
+                               else\r
+                                       combo.$.options.add( oOption.$ );\r
+\r
+                               oOption.$.innerHTML = optionText.length > 0 ? optionText : '';\r
+                               oOption.$.value     = optionValue;\r
+                       }\r
+                       else\r
+                       {\r
+                               if ( index !== null && index < combo.getChildCount() )\r
+                                       combo.getChild( index < 0 ? 0 : index ).insertBeforeMe( oOption );\r
+                               else\r
+                                       combo.append( oOption );\r
+\r
+                               oOption.setText( optionText.length > 0 ? optionText : '' );\r
+                               oOption.setValue( optionValue );\r
+                       }\r
+               }\r
+               else\r
+                       return false;\r
+\r
+               return oOption;\r
+       }\r
+       // Remove all selected options from a SELECT object.\r
+       function removeSelectedOptions( combo )\r
+       {\r
+               combo = getSelect( combo );\r
+\r
+               // Save the selected index\r
+               var iSelectedIndex = getSelectedIndex( combo );\r
+\r
+               // Remove all selected options.\r
+               for ( var i = combo.getChildren().count() - 1 ; i >= 0 ; i-- )\r
+               {\r
+                       if ( combo.getChild( i ).$.selected )\r
+                               combo.getChild( i ).remove();\r
+               }\r
+\r
+               // Reset the selection based on the original selected index.\r
+               setSelectedIndex( combo, iSelectedIndex );\r
+       }\r
+       //Modify option  from a SELECT object.\r
+       function modifyOption( combo, index, title, value )\r
+       {\r
+               combo = getSelect( combo );\r
+               if ( index < 0 )\r
+                       return false;\r
+               var child = combo.getChild( index );\r
+               child.setText( title );\r
+               child.setValue( value );\r
+               return child;\r
+       }\r
+       function removeAllOptions( combo )\r
+       {\r
+               combo = getSelect( combo );\r
+               while( combo.getChild( 0 ) && combo.getChild( 0 ).remove() )\r
+               { /*jsl:pass*/ }\r
+       }\r
+       // Moves the selected option by a number of steps (also negative).\r
+       function changeOptionPosition( combo, steps, documentObject )\r
+       {\r
+               combo = getSelect( combo );\r
+               var iActualIndex = getSelectedIndex( combo );\r
+               if ( iActualIndex < 0 )\r
+                       return false;\r
+\r
+               var iFinalIndex = iActualIndex + steps;\r
+               iFinalIndex = ( iFinalIndex < 0 ) ? 0 : iFinalIndex;\r
+               iFinalIndex = ( iFinalIndex >= combo.getChildCount() ) ? combo.getChildCount() - 1 : iFinalIndex;\r
+\r
+               if ( iActualIndex == iFinalIndex )\r
+                       return false;\r
+\r
+               var oOption = combo.getChild( iActualIndex ),\r
+                       sText   = oOption.getText(),\r
+                       sValue  = oOption.getValue();\r
+\r
+               oOption.remove();\r
+\r
+               oOption = addOption( combo, sText, sValue, ( !documentObject ) ? null : documentObject, iFinalIndex );\r
+               setSelectedIndex( combo, iFinalIndex );\r
+               return oOption;\r
+       }\r
+       function getSelectedIndex( combo )\r
+       {\r
+               combo = getSelect( combo );\r
+               return combo ? combo.$.selectedIndex : -1;\r
+       }\r
+       function setSelectedIndex( combo, index )\r
+       {\r
+               combo = getSelect( combo );\r
+               if ( index < 0 )\r
+                       return null;\r
+               var count = combo.getChildren().count();\r
+               combo.$.selectedIndex = ( index >= count ) ? ( count - 1 ) : index;\r
+               return combo;\r
+       }\r
+       function getOptions( combo )\r
+       {\r
+               combo = getSelect( combo );\r
+               return combo ? combo.getChildren() : false;\r
+       }\r
+       function getSelect( obj )\r
+       {\r
+               if ( obj && obj.domId && obj.getInputElement().$ )                              // Dialog element.\r
+                       return  obj.getInputElement();\r
+               else if ( obj && obj.$ )\r
+                       return obj;\r
+               return false;\r
+       }\r
+\r
+       return {\r
+               title : editor.lang.select.title,\r
+               minWidth : CKEDITOR.env.ie ? 460 : 395,\r
+               minHeight : CKEDITOR.env.ie ? 320 : 300,\r
+               onShow : function()\r
+               {\r
+                       delete this.selectBox;\r
+                       this.setupContent( 'clear' );\r
+                       var element = this.getParentEditor().getSelection().getSelectedElement();\r
+                       if ( element && element.getName() == "select" )\r
+                       {\r
+                               this.selectBox = element;\r
+                               this.setupContent( element.getName(), element );\r
+\r
+                               // Load Options into dialog.\r
+                               var objOptions = getOptions( element );\r
+                               for ( var i = 0 ; i < objOptions.count() ; i++ )\r
+                                       this.setupContent( 'option', objOptions.getItem( i ) );\r
+                       }\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var editor = this.getParentEditor(),\r
+                               element = this.selectBox,\r
+                               isInsertMode = !element;\r
+\r
+                       if ( isInsertMode )\r
+                               element = editor.document.createElement( 'select' );\r
+                       this.commitContent( element );\r
+\r
+                       if ( isInsertMode )\r
+                               editor.insertElement( element );\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'info',\r
+                               label : editor.lang.select.selectInfo,\r
+                               title : editor.lang.select.selectInfo,\r
+                               accessKey : '',\r
+                               elements : [\r
+                                       {\r
+                                               id : 'txtName',\r
+                                               type : 'text',\r
+                                               widths : [ '25%','75%' ],\r
+                                               labelLayout : 'horizontal',\r
+                                               label : editor.lang.common.name,\r
+                                               'default' : '',\r
+                                               accessKey : 'N',\r
+                                               align : 'center',\r
+                                               style : 'width:350px',\r
+                                               setup : function( name, element )\r
+                                               {\r
+                                                       if ( name == 'clear' )\r
+                                                               this.setValue( '' );\r
+                                                       else if ( name == 'select' )\r
+                                                       {\r
+                                                               this.setValue(\r
+                                                                               element.getAttribute( '_cke_saved_name' ) ||\r
+                                                                               element.getAttribute( 'name' ) ||\r
+                                                                               '' );\r
+                                                       }\r
+                                               },\r
+                                               commit : function( element )\r
+                                               {\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( '_cke_saved_name', this.getValue() );\r
+                                                       else\r
+                                                       {\r
+                                                               element.removeAttribute( '_cke_saved_name' ) ;\r
+                                                               element.removeAttribute( 'name' );\r
+                                                       }\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               id : 'txtValue',\r
+                                               type : 'text',\r
+                                               widths : [ '25%','75%' ],\r
+                                               labelLayout : 'horizontal',\r
+                                               label : editor.lang.select.value,\r
+                                               style : 'width:350px',\r
+                                               'default' : '',\r
+                                               className : 'cke_disabled',\r
+                                               onLoad : function()\r
+                                               {\r
+                                                       this.getInputElement().setAttribute( 'readOnly', true );\r
+                                               },\r
+                                               setup : function( name, element )\r
+                                               {\r
+                                                       if ( name == 'clear' )\r
+                                                               this.setValue( '' );\r
+                                                       else if ( name == 'option' && element.getAttribute( 'selected' ) )\r
+                                                               this.setValue( element.$.value );\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               type : 'hbox',\r
+                                               widths : [ '175px', '170px' ],\r
+                                               align : 'center',\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               id : 'txtSize',\r
+                                                               type : 'text',\r
+                                                               align : 'center',\r
+                                                               labelLayout : 'horizontal',\r
+                                                               label : editor.lang.select.size,\r
+                                                               'default' : '',\r
+                                                               accessKey : 'S',\r
+                                                               style : 'width:175px',\r
+                                                               validate: function()\r
+                                                               {\r
+                                                                       var func = CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed );\r
+                                                                       return ( ( this.getValue() === '' ) || func.apply( this ) );\r
+                                                               },\r
+                                                               setup : function( name, element )\r
+                                                               {\r
+                                                                       if ( name == 'select' )\r
+                                                                               this.setValue( element.getAttribute( 'size' ) || '' );\r
+                                                               },\r
+                                                               commit : function( element )\r
+                                                               {\r
+                                                                       if ( this.getValue() )\r
+                                                                               element.setAttribute( 'size', this.getValue() );\r
+                                                                       else\r
+                                                                               element.removeAttribute( 'size' );\r
+                                                               }\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'html',\r
+                                                               html : '<span>' + CKEDITOR.tools.htmlEncode( editor.lang.select.lines ) + '</span>'\r
+                                                       }\r
+                                               ]\r
+                                       },\r
+                                       {\r
+                                               type : 'html',\r
+                                               html : '<span>' + CKEDITOR.tools.htmlEncode( editor.lang.select.opAvail ) + '</span>'\r
+                                       },\r
+                                       {\r
+                                               type : 'hbox',\r
+                                               widths : [ '115px', '115px' ,'100px' ],\r
+                                               align : 'top',\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'vbox',\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               id : 'txtOptName',\r
+                                                                               type : 'text',\r
+                                                                               label : editor.lang.select.opText,\r
+                                                                               style : 'width:115px',\r
+                                                                               setup : function( name, element )\r
+                                                                               {\r
+                                                                                       if ( name == 'clear' )\r
+                                                                                               this.setValue( "" );\r
+                                                                               }\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'select',\r
+                                                                               id : 'cmbName',\r
+                                                                               label : '',\r
+                                                                               title : '',\r
+                                                                               size : 5,\r
+                                                                               style : 'width:115px;height:75px',\r
+                                                                               items : [],\r
+                                                                               onChange : function()\r
+                                                                               {\r
+                                                                                       var dialog = this.getDialog(),\r
+                                                                                               values = dialog.getContentElement( 'info', 'cmbValue' ),\r
+                                                                                               optName = dialog.getContentElement( 'info', 'txtOptName' ),\r
+                                                                                               optValue = dialog.getContentElement( 'info', 'txtOptValue' ),\r
+                                                                                               iIndex = getSelectedIndex( this );\r
+\r
+                                                                                       setSelectedIndex( values, iIndex );\r
+                                                                                       optName.setValue( this.getValue() );\r
+                                                                                       optValue.setValue( values.getValue() );\r
+                                                                               },\r
+                                                                               setup : function( name, element )\r
+                                                                               {\r
+                                                                                       if ( name == 'clear' )\r
+                                                                                               removeAllOptions( this );\r
+                                                                                       else if ( name == 'option' )\r
+                                                                                               addOption( this, element.getText(), element.getText(),\r
+                                                                                                       this.getDialog().getParentEditor().document );\r
+                                                                               },\r
+                                                                               commit : function( element )\r
+                                                                               {\r
+                                                                                       var dialog = this.getDialog(),\r
+                                                                                               optionsNames = getOptions( this ),\r
+                                                                                               optionsValues = getOptions( dialog.getContentElement( 'info', 'cmbValue' ) ),\r
+                                                                                               selectValue = dialog.getContentElement( 'info', 'txtValue' ).getValue();\r
+\r
+                                                                                       removeAllOptions( element );\r
+\r
+                                                                                       for ( var i = 0 ; i < optionsNames.count() ; i++ )\r
+                                                                                       {\r
+                                                                                               var oOption = addOption( element, optionsNames.getItem( i ).getValue(),\r
+                                                                                                       optionsValues.getItem( i ).getValue(), dialog.getParentEditor().document );\r
+                                                                                               if ( optionsValues.getItem( i ).getValue() == selectValue )\r
+                                                                                               {\r
+                                                                                                       oOption.setAttribute( 'selected', 'selected' );\r
+                                                                                                       oOption.selected = true;\r
+                                                                                               }\r
+                                                                                       }\r
+                                                                               }\r
+                                                                       }\r
+                                                               ]\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'vbox',\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               id : 'txtOptValue',\r
+                                                                               type : 'text',\r
+                                                                               label : editor.lang.select.opValue,\r
+                                                                               style : 'width:115px',\r
+                                                                               setup : function( name, element )\r
+                                                                               {\r
+                                                                                       if ( name == 'clear' )\r
+                                                                                               this.setValue( "" );\r
+                                                                               }\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'select',\r
+                                                                               id : 'cmbValue',\r
+                                                                               label : '',\r
+                                                                               size : 5,\r
+                                                                               style : 'width:115px;height:75px',\r
+                                                                               items : [],\r
+                                                                               onChange : function()\r
+                                                                               {\r
+                                                                                       var dialog = this.getDialog(),\r
+                                                                                               names = dialog.getContentElement( 'info', 'cmbName' ),\r
+                                                                                               optName = dialog.getContentElement( 'info', 'txtOptName' ),\r
+                                                                                               optValue = dialog.getContentElement( 'info', 'txtOptValue' ),\r
+                                                                                               iIndex = getSelectedIndex( this );\r
+\r
+                                                                                       setSelectedIndex( names, iIndex );\r
+                                                                                       optName.setValue( names.getValue() );\r
+                                                                                       optValue.setValue( this.getValue() );\r
+                                                                               },\r
+                                                                               setup : function( name, element )\r
+                                                                               {\r
+                                                                                       if ( name == 'clear' )\r
+                                                                                               removeAllOptions( this );\r
+                                                                                       else if ( name == 'option' )\r
+                                                                                       {\r
+                                                                                               var oValue      = element.getValue();\r
+                                                                                               addOption( this, oValue, oValue,\r
+                                                                                                       this.getDialog().getParentEditor().document );\r
+                                                                                               if ( element.getAttribute( 'selected' ) == 'selected' )\r
+                                                                                                       this.getDialog().getContentElement( 'info', 'txtValue' ).setValue( oValue );\r
+                                                                                       }\r
+                                                                               }\r
+                                                                       }\r
+                                                               ]\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'vbox',\r
+                                                               padding : 5,\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'button',\r
+                                                                               style : '',\r
+                                                                               label : editor.lang.select.btnAdd,\r
+                                                                               title : editor.lang.select.btnAdd,\r
+                                                                               style : 'width:100%;',\r
+                                                                               onClick : function()\r
+                                                                               {\r
+                                                                                       //Add new option.\r
+                                                                                       var dialog = this.getDialog(),\r
+                                                                                               parentEditor = dialog.getParentEditor(),\r
+                                                                                               optName = dialog.getContentElement( 'info', 'txtOptName' ),\r
+                                                                                               optValue = dialog.getContentElement( 'info', 'txtOptValue' ),\r
+                                                                                               names = dialog.getContentElement( 'info', 'cmbName' ),\r
+                                                                                               values = dialog.getContentElement( 'info', 'cmbValue' );\r
+\r
+                                                                                       addOption(names, optName.getValue(), optName.getValue(), dialog.getParentEditor().document );\r
+                                                                                       addOption(values, optValue.getValue(), optValue.getValue(), dialog.getParentEditor().document );\r
+\r
+                                                                                       optName.setValue( "" );\r
+                                                                                       optValue.setValue( "" );\r
+                                                                               }\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'button',\r
+                                                                               label : editor.lang.select.btnModify,\r
+                                                                               title : editor.lang.select.btnModify,\r
+                                                                               style : 'width:100%;',\r
+                                                                               onClick : function()\r
+                                                                               {\r
+                                                                                       //Modify selected option.\r
+                                                                                       var dialog = this.getDialog(),\r
+                                                                                               optName = dialog.getContentElement( 'info', 'txtOptName' ),\r
+                                                                                               optValue = dialog.getContentElement( 'info', 'txtOptValue' ),\r
+                                                                                               names = dialog.getContentElement( 'info', 'cmbName' ),\r
+                                                                                               values = dialog.getContentElement( 'info', 'cmbValue' ),\r
+                                                                                               iIndex = getSelectedIndex( names );\r
+\r
+                                                                                       if ( iIndex >= 0 )\r
+                                                                                       {\r
+                                                                                               modifyOption( names, iIndex, optName.getValue(), optName.getValue() );\r
+                                                                                               modifyOption( values, iIndex, optValue.getValue(), optValue.getValue() );\r
+                                                                                       }\r
+                                                                               }\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'button',\r
+                                                                               style : 'width:100%;',\r
+                                                                               label : editor.lang.select.btnUp,\r
+                                                                               title : editor.lang.select.btnUp,\r
+                                                                               onClick : function()\r
+                                                                               {\r
+                                                                                       //Move up.\r
+                                                                                       var dialog = this.getDialog(),\r
+                                                                                               names = dialog.getContentElement( 'info', 'cmbName' ),\r
+                                                                                               values = dialog.getContentElement( 'info', 'cmbValue' );\r
+\r
+                                                                                       changeOptionPosition( names, -1, dialog.getParentEditor().document );\r
+                                                                                       changeOptionPosition( values, -1, dialog.getParentEditor().document );\r
+                                                                               }\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'button',\r
+                                                                               style : 'width:100%;',\r
+                                                                               label : editor.lang.select.btnDown,\r
+                                                                               title : editor.lang.select.btnDown,\r
+                                                                               onClick : function()\r
+                                                                               {\r
+                                                                                       //Move down.\r
+                                                                                       var dialog = this.getDialog(),\r
+                                                                                               names = dialog.getContentElement( 'info', 'cmbName' ),\r
+                                                                                               values = dialog.getContentElement( 'info', 'cmbValue' );\r
+\r
+                                                                                       changeOptionPosition( names, 1, dialog.getParentEditor().document );\r
+                                                                                       changeOptionPosition( values, 1, dialog.getParentEditor().document );\r
+                                                                               }\r
+                                                                       }\r
+                                                               ]\r
+                                                       }\r
+                                               ]\r
+                                       },\r
+                                       {\r
+                                               type : 'hbox',\r
+                                               widths : [ '40%', '20%', '40%' ],\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'button',\r
+                                                               label : editor.lang.select.btnSetValue,\r
+                                                               title : editor.lang.select.btnSetValue,\r
+                                                               onClick : function()\r
+                                                               {\r
+                                                                       //Set as default value.\r
+                                                                       var dialog = this.getDialog(),\r
+                                                                               values = dialog.getContentElement( 'info', 'cmbValue' ),\r
+                                                                               txtValue = dialog.getContentElement( 'info', 'txtValue' );\r
+                                                                       txtValue.setValue( values.getValue() );\r
+                                                               }\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'button',\r
+                                                               label : editor.lang.select.btnDelete,\r
+                                                               title : editor.lang.select.btnDelete,\r
+                                                               onClick : function()\r
+                                                               {\r
+                                                                       // Delete option.\r
+                                                                       var dialog = this.getDialog(),\r
+                                                                               names = dialog.getContentElement( 'info', 'cmbName' ),\r
+                                                                               values = dialog.getContentElement( 'info', 'cmbValue' ),\r
+                                                                               optName = dialog.getContentElement( 'info', 'txtOptName' ),\r
+                                                                               optValue = dialog.getContentElement( 'info', 'txtOptValue' );\r
+\r
+                                                                       removeSelectedOptions( names );\r
+                                                                       removeSelectedOptions( values );\r
+\r
+                                                                       optName.setValue( "" );\r
+                                                                       optValue.setValue( "" );\r
+                                                               }\r
+                                                       },\r
+                                                       {\r
+                                                               id : 'chkMulti',\r
+                                                               type : 'checkbox',\r
+                                                               label : editor.lang.select.chkMulti,\r
+                                                               'default' : '',\r
+                                                               accessKey : 'M',\r
+                                                               value : "checked",\r
+                                                               setup : function( name, element )\r
+                                                               {\r
+                                                                       if ( name == 'select' )\r
+                                                                               this.setValue( element.getAttribute( 'multiple' ) );\r
+                                                               },\r
+                                                               commit : function( element )\r
+                                                               {\r
+                                                                       if ( this.getValue() )\r
+                                                                               element.setAttribute( 'multiple', this.getValue() );\r
+                                                                       else\r
+                                                                               element.removeAttribute( 'multiple' );\r
+                                                               }\r
+                                                       }\r
+                                               ]\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+});\r
diff --git a/_source/plugins/forms/dialogs/textarea.js b/_source/plugins/forms/dialogs/textarea.js
new file mode 100644 (file)
index 0000000..727bf73
--- /dev/null
@@ -0,0 +1,114 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+CKEDITOR.dialog.add( 'textarea', function( editor )\r
+{\r
+       return {\r
+               title : editor.lang.textarea.title,\r
+               minWidth : 350,\r
+               minHeight : 150,\r
+               onShow : function()\r
+               {\r
+                       delete this.textarea;\r
+\r
+                       var element = this.getParentEditor().getSelection().getSelectedElement();\r
+                       if ( element && element.getName() == "textarea" )\r
+                       {\r
+                               this.textarea = element;\r
+                               this.setupContent( element );\r
+                       }\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var editor,\r
+                               element = this.textarea,\r
+                               isInsertMode = !element;\r
+\r
+                       if ( isInsertMode )\r
+                       {\r
+                               editor = this.getParentEditor();\r
+                               element = editor.document.createElement( 'textarea' );\r
+                       }\r
+                       this.commitContent( element );\r
+\r
+                       if ( isInsertMode )\r
+                               editor.insertElement( element );\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'info',\r
+                               label : editor.lang.textarea.title,\r
+                               title : editor.lang.textarea.title,\r
+                               elements : [\r
+                                       {\r
+                                               id : '_cke_saved_name',\r
+                                               type : 'text',\r
+                                               label : editor.lang.common.name,\r
+                                               'default' : '',\r
+                                               accessKey : 'N',\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue(\r
+                                                                       element.getAttribute( '_cke_saved_name' ) ||\r
+                                                                       element.getAttribute( 'name' ) ||\r
+                                                                       '' );\r
+                                               },\r
+                                               commit : function( element )\r
+                                               {\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( '_cke_saved_name', this.getValue() );\r
+                                                       else\r
+                                                       {\r
+                                                               element.removeAttribute( '_cke_saved_name' );\r
+                                                               element.removeAttribute( 'name' );\r
+                                                       }\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               id : 'cols',\r
+                                               type : 'text',\r
+                                               label : editor.lang.textarea.cols,\r
+                                               'default' : '',\r
+                                               accessKey : 'C',\r
+                                               style : 'width:50px',\r
+                                               validate : CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed ),\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       var value = element.hasAttribute( 'cols' ) && element.getAttribute( 'cols' );\r
+                                                       this.setValue( value || '' );\r
+                                               },\r
+                                               commit : function( element )\r
+                                               {\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( 'cols', this.getValue() );\r
+                                                       else\r
+                                                               element.removeAttribute( 'cols' );\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               id : 'rows',\r
+                                               type : 'text',\r
+                                               label : editor.lang.textarea.rows,\r
+                                               'default' : '',\r
+                                               accessKey : 'R',\r
+                                               style : 'width:50px',\r
+                                               validate : CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed ),\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       var value = element.hasAttribute( 'rows' ) && element.getAttribute( 'rows' );\r
+                                                       this.setValue( value || '' );\r
+                                               },\r
+                                               commit : function( element )\r
+                                               {\r
+                                                       if ( this.getValue() )\r
+                                                               element.setAttribute( 'rows', this.getValue() );\r
+                                                       else\r
+                                                               element.removeAttribute( 'rows' );\r
+                                               }\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+});\r
diff --git a/_source/plugins/forms/dialogs/textfield.js b/_source/plugins/forms/dialogs/textfield.js
new file mode 100644 (file)
index 0000000..8c6138f
--- /dev/null
@@ -0,0 +1,193 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+CKEDITOR.dialog.add( 'textfield', function( editor )\r
+{\r
+       var autoAttributes =\r
+       {\r
+               value : 1,\r
+               size : 1,\r
+               maxLength : 1\r
+       };\r
+\r
+       var acceptedTypes =\r
+       {\r
+               text : 1,\r
+               password : 1\r
+       };\r
+\r
+       return {\r
+               title : editor.lang.textfield.title,\r
+               minWidth : 350,\r
+               minHeight : 150,\r
+               onShow : function()\r
+               {\r
+                       delete this.textField;\r
+\r
+                       var element = this.getParentEditor().getSelection().getSelectedElement();\r
+                       if ( element && element.getName() == "input" &&\r
+                                       ( acceptedTypes[ element.getAttribute( 'type' ) ] || !element.getAttribute( 'type' ) ) )\r
+                       {\r
+                               this.textField = element;\r
+                               this.setupContent( element );\r
+                       }\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var editor,\r
+                               element = this.textField,\r
+                               isInsertMode = !element;\r
+\r
+                       if ( isInsertMode )\r
+                       {\r
+                               editor = this.getParentEditor();\r
+                               element = editor.document.createElement( 'input' );\r
+                               element.setAttribute( 'type', 'text' );\r
+                       }\r
+\r
+                       if ( isInsertMode )\r
+                               editor.insertElement( element );\r
+                       this.commitContent( { element : element } );\r
+               },\r
+               onLoad : function()\r
+               {\r
+                       var autoSetup = function( element )\r
+                       {\r
+                               var value = element.hasAttribute( this.id ) && element.getAttribute( this.id );\r
+                               this.setValue( value || '' );\r
+                       };\r
+\r
+                       var autoCommit = function( data )\r
+                       {\r
+                               var element = data.element;\r
+                               var value = this.getValue();\r
+\r
+                               if ( value )\r
+                                       element.setAttribute( this.id, value );\r
+                               else\r
+                                       element.removeAttribute( this.id );\r
+                       };\r
+\r
+                       this.foreach( function( contentObj )\r
+                               {\r
+                                       if ( autoAttributes[ contentObj.id ] )\r
+                                       {\r
+                                               contentObj.setup = autoSetup;\r
+                                               contentObj.commit = autoCommit;\r
+                                       }\r
+                               } );\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'info',\r
+                               label : editor.lang.textfield.title,\r
+                               title : editor.lang.textfield.title,\r
+                               elements : [\r
+                                       {\r
+                                               type : 'hbox',\r
+                                               widths : [ '50%', '50%' ],\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               id : '_cke_saved_name',\r
+                                                               type : 'text',\r
+                                                               label : editor.lang.textfield.name,\r
+                                                               'default' : '',\r
+                                                               accessKey : 'N',\r
+                                                               setup : function( element )\r
+                                                               {\r
+                                                                       this.setValue(\r
+                                                                                       element.getAttribute( '_cke_saved_name' ) ||\r
+                                                                                       element.getAttribute( 'name' ) ||\r
+                                                                                       '' );\r
+                                                               },\r
+                                                               commit : function( data )\r
+                                                               {\r
+                                                                       var element = data.element;\r
+\r
+                                                                       if ( this.getValue() )\r
+                                                                               element.setAttribute( '_cke_saved_name', this.getValue() );\r
+                                                                       else\r
+                                                                       {\r
+                                                                               element.removeAttribute( '_cke_saved_name' );\r
+                                                                               element.removeAttribute( 'name' );\r
+                                                                       }\r
+                                                               }\r
+                                                       },\r
+                                                       {\r
+                                                               id : 'value',\r
+                                                               type : 'text',\r
+                                                               label : editor.lang.textfield.value,\r
+                                                               'default' : '',\r
+                                                               accessKey : 'V'\r
+                                                       }\r
+                                               ]\r
+                                       },\r
+                                       {\r
+                                               type : 'hbox',\r
+                                               widths : [ '50%', '50%' ],\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               id : 'size',\r
+                                                               type : 'text',\r
+                                                               label : editor.lang.textfield.charWidth,\r
+                                                               'default' : '',\r
+                                                               accessKey : 'C',\r
+                                                               style : 'width:50px',\r
+                                                               validate : CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed )\r
+                                                       },\r
+                                                       {\r
+                                                               id : 'maxLength',\r
+                                                               type : 'text',\r
+                                                               label : editor.lang.textfield.maxChars,\r
+                                                               'default' : '',\r
+                                                               accessKey : 'M',\r
+                                                               style : 'width:50px',\r
+                                                               validate : CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed )\r
+                                                       }\r
+                                               ]\r
+                                       },\r
+                                       {\r
+                                               id : 'type',\r
+                                               type : 'select',\r
+                                               label : editor.lang.textfield.type,\r
+                                               'default' : 'text',\r
+                                               accessKey : 'M',\r
+                                               items :\r
+                                               [\r
+                                                       [ editor.lang.textfield.typeText, 'text' ],\r
+                                                       [ editor.lang.textfield.typePass, 'password' ]\r
+                                               ],\r
+                                               setup : function( element )\r
+                                               {\r
+                                                       this.setValue( element.getAttribute( 'type' ) );\r
+                                               },\r
+                                               commit : function( data )\r
+                                               {\r
+                                                       var element = data.element;\r
+\r
+                                                       if ( CKEDITOR.env.ie )\r
+                                                       {\r
+                                                               var elementType = element.getAttribute( 'type' );\r
+                                                               var myType = this.getValue();\r
+\r
+                                                               if ( elementType != myType )\r
+                                                               {\r
+                                                                       var replace = CKEDITOR.dom.element.createFromHtml( '<input type="' + myType + '"></input>', editor.document );\r
+                                                                       element.copyAttributes( replace, { type : 1 } );\r
+                                                                       replace.replace( element );\r
+                                                                       editor.getSelection().selectElement( replace );\r
+                                                                       data.element = element;\r
+                                                               }\r
+                                                       }\r
+                                                       else\r
+                                                               element.setAttribute( 'type', this.getValue() );\r
+                                               }\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+});\r
diff --git a/_source/plugins/forms/plugin.js b/_source/plugins/forms/plugin.js
new file mode 100644 (file)
index 0000000..66d3cec
--- /dev/null
@@ -0,0 +1,193 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Forms Plugin\r
+ */\r
+\r
+CKEDITOR.plugins.add( 'forms',\r
+{\r
+       init : function( editor )\r
+       {\r
+               var lang = editor.lang;\r
+\r
+               editor.addCss(\r
+                       'form' +\r
+                       '{' +\r
+                               'border: 1px dotted #FF0000;' +\r
+                               'padding: 2px;' +\r
+                       '}' );\r
+\r
+               // All buttons use the same code to register. So, to avoid\r
+               // duplications, let's use this tool function.\r
+               var addButtonCommand = function( buttonName, commandName, dialogFile )\r
+               {\r
+                       editor.addCommand( commandName, new CKEDITOR.dialogCommand( commandName ) );\r
+\r
+                       editor.ui.addButton( buttonName,\r
+                               {\r
+                                       label : lang.common[ buttonName.charAt(0).toLowerCase() + buttonName.slice(1) ],\r
+                                       command : commandName\r
+                               });\r
+                       CKEDITOR.dialog.add( commandName, dialogFile );\r
+               };\r
+\r
+               var dialogPath = this.path + 'dialogs/';\r
+               addButtonCommand( 'Form',                       'form',                 dialogPath + 'form.js' );\r
+               addButtonCommand( 'Checkbox',           'checkbox',             dialogPath + 'checkbox.js' );\r
+               addButtonCommand( 'Radio',                      'radio',                dialogPath + 'radio.js' );\r
+               addButtonCommand( 'TextField',          'textfield',    dialogPath + 'textfield.js' );\r
+               addButtonCommand( 'Textarea',           'textarea',             dialogPath + 'textarea.js' );\r
+               addButtonCommand( 'Select',                     'select',               dialogPath + 'select.js' );\r
+               addButtonCommand( 'Button',                     'button',               dialogPath + 'button.js' );\r
+               addButtonCommand( 'ImageButton',        'imagebutton',  CKEDITOR.plugins.getPath('image') + 'dialogs/image.js' );\r
+               addButtonCommand( 'HiddenField',        'hiddenfield',  dialogPath + 'hiddenfield.js' );\r
+\r
+               // If the "menu" plugin is loaded, register the menu items.\r
+               if ( editor.addMenuItems )\r
+               {\r
+                       editor.addMenuItems(\r
+                               {\r
+                                       form :\r
+                                       {\r
+                                               label : lang.form.menu,\r
+                                               command : 'form',\r
+                                               group : 'form'\r
+                                       },\r
+\r
+                                       checkbox :\r
+                                       {\r
+                                               label : lang.checkboxAndRadio.checkboxTitle,\r
+                                               command : 'checkbox',\r
+                                               group : 'checkbox'\r
+                                       },\r
+\r
+                                       radio :\r
+                                       {\r
+                                               label : lang.checkboxAndRadio.radioTitle,\r
+                                               command : 'radio',\r
+                                               group : 'radio'\r
+                                       },\r
+\r
+                                       textfield :\r
+                                       {\r
+                                               label : lang.textfield.title,\r
+                                               command : 'textfield',\r
+                                               group : 'textfield'\r
+                                       },\r
+\r
+                                       hiddenfield :\r
+                                       {\r
+                                               label : lang.hidden.title,\r
+                                               command : 'hiddenfield',\r
+                                               group : 'hiddenfield'\r
+                                       },\r
+\r
+                                       imagebutton :\r
+                                       {\r
+                                               label : lang.image.titleButton,\r
+                                               command : 'imagebutton',\r
+                                               group : 'imagebutton'\r
+                                       },\r
+\r
+                                       button :\r
+                                       {\r
+                                               label : lang.button.title,\r
+                                               command : 'button',\r
+                                               group : 'button'\r
+                                       },\r
+\r
+                                       select :\r
+                                       {\r
+                                               label : lang.select.title,\r
+                                               command : 'select',\r
+                                               group : 'select'\r
+                                       },\r
+\r
+                                       textarea :\r
+                                       {\r
+                                               label : lang.textarea.title,\r
+                                               command : 'textarea',\r
+                                               group : 'textarea'\r
+                                       }\r
+                               });\r
+               }\r
+\r
+               // If the "contextmenu" plugin is loaded, register the listeners.\r
+               if ( editor.contextMenu )\r
+               {\r
+                       editor.contextMenu.addListener( function( element )\r
+                               {\r
+                                       if ( element && element.hasAscendant( 'form' ) )\r
+                                               return { form : CKEDITOR.TRISTATE_OFF };\r
+                               });\r
+\r
+                       editor.contextMenu.addListener( function( element )\r
+                               {\r
+                                       if ( element )\r
+                                       {\r
+                                               var name = element.getName();\r
+\r
+                                               if ( name == 'select' )\r
+                                                       return { select : CKEDITOR.TRISTATE_OFF };\r
+\r
+                                               if ( name == 'textarea' )\r
+                                                       return { textarea : CKEDITOR.TRISTATE_OFF };\r
+\r
+                                               if ( name == 'input' )\r
+                                               {\r
+                                                       var type = element.getAttribute( 'type' );\r
+\r
+                                                       if ( type == 'text' || type == 'password' )\r
+                                                               return { textfield : CKEDITOR.TRISTATE_OFF };\r
+\r
+                                                       if ( type == 'button' || type == 'submit' || type == 'reset' )\r
+                                                               return { button : CKEDITOR.TRISTATE_OFF };\r
+\r
+                                                       if ( type == 'checkbox' )\r
+                                                               return { checkbox : CKEDITOR.TRISTATE_OFF };\r
+\r
+                                                       if ( type == 'radio' )\r
+                                                               return { radio : CKEDITOR.TRISTATE_OFF };\r
+\r
+                                                       if ( type == 'image' )\r
+                                                               return { imagebutton : CKEDITOR.TRISTATE_OFF };\r
+                                               }\r
+\r
+                                               if ( name == 'img' && element.getAttribute( '_cke_real_element_type' ) == 'hiddenfield' )\r
+                                                       return { hiddenfield : CKEDITOR.TRISTATE_OFF };\r
+                                       }\r
+                               });\r
+               }\r
+       },\r
+       requires : [ 'image' ]\r
+} );\r
+\r
+if ( CKEDITOR.env.ie )\r
+{\r
+       CKEDITOR.dom.element.prototype.hasAttribute = function( name )\r
+       {\r
+               var $attr = this.$.attributes.getNamedItem( name );\r
+\r
+               if ( this.getName() == 'input' )\r
+               {\r
+                       switch ( name )\r
+                       {\r
+                               case 'class' :\r
+                                       return this.$.className.length > 0;\r
+                               case 'checked' :\r
+                                       return !!this.$.checked;\r
+                               case 'value' :\r
+                                       var type = this.getAttribute( 'type' );\r
+                                       if ( type == 'checkbox' || type == 'radio' )\r
+                                               return this.$.value != 'on';\r
+                                       break;\r
+                               default:\r
+                       }\r
+               }\r
+\r
+               return !!( $attr && $attr.specified );\r
+       };\r
+}\r
diff --git a/_source/plugins/horizontalrule/plugin.js b/_source/plugins/horizontalrule/plugin.js
new file mode 100644 (file)
index 0000000..80ae0dc
--- /dev/null
@@ -0,0 +1,35 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Horizontal Rule plugin.\r
+ */\r
+\r
+(function()\r
+{\r
+       var horizontalruleCmd =\r
+       {\r
+               exec : function( editor )\r
+               {\r
+                       editor.insertElement( editor.document.createElement( 'hr' ) );\r
+               }\r
+       };\r
+\r
+       var pluginName = 'horizontalrule';\r
+\r
+       // Register a plugin named "horizontalrule".\r
+       CKEDITOR.plugins.add( pluginName,\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       editor.addCommand( pluginName, horizontalruleCmd );\r
+                       editor.ui.addButton( 'HorizontalRule',\r
+                               {\r
+                                       label : editor.lang.horizontalrule,\r
+                                       command : pluginName\r
+                               });\r
+               }\r
+       });\r
+})();\r
diff --git a/_source/plugins/htmldataprocessor/plugin.js b/_source/plugins/htmldataprocessor/plugin.js
new file mode 100644 (file)
index 0000000..d783d66
--- /dev/null
@@ -0,0 +1,373 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       // Regex to scan for &nbsp; at the end of blocks, which are actually placeholders.\r
+       // Safari transforms the &nbsp; to \xa0. (#4172)\r
+       var tailNbspRegex = /^[\t\r\n ]*(?:&nbsp;|\xa0)$/;\r
+\r
+       var protectedSourceMarker = '{cke_protected}';\r
+\r
+       function trimFillers( block, fromSource )\r
+       {\r
+               // If the current node is a block, and if we're converting from source or\r
+               // we're not in IE then search for and remove any tailing BR node.\r
+               //\r
+               // Also, any &nbsp; at the end of blocks are fillers, remove them as well.\r
+               // (#2886)\r
+               var children = block.children;\r
+               var lastChild = children[ children.length - 1 ];\r
+               if ( lastChild )\r
+               {\r
+                       if ( ( fromSource || !CKEDITOR.env.ie ) && lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.name == 'br' )\r
+                               children.pop();\r
+                       if ( lastChild.type == CKEDITOR.NODE_TEXT && tailNbspRegex.test( lastChild.value ) )\r
+                               children.pop();\r
+               }\r
+       }\r
+\r
+       function blockNeedsExtension( block )\r
+       {\r
+               if ( block.children.length < 1 )\r
+                       return true;\r
+\r
+               var lastChild = block.children[ block.children.length - 1 ];\r
+               return lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.name == 'br';\r
+       }\r
+\r
+       function extendBlockForDisplay( block )\r
+       {\r
+               trimFillers( block, true );\r
+\r
+               if ( blockNeedsExtension( block ) )\r
+               {\r
+                       if ( CKEDITOR.env.ie )\r
+                               block.add( new CKEDITOR.htmlParser.text( '\xa0' ) );\r
+                       else\r
+                               block.add( new CKEDITOR.htmlParser.element( 'br', {} ) );\r
+               }\r
+       }\r
+\r
+       function extendBlockForOutput( block )\r
+       {\r
+               trimFillers( block );\r
+\r
+               if ( blockNeedsExtension( block ) )\r
+                       block.add( new CKEDITOR.htmlParser.text( '\xa0' ) );\r
+       }\r
+\r
+       var dtd = CKEDITOR.dtd;\r
+\r
+       // Find out the list of block-like tags that can contain <br>.\r
+       var blockLikeTags = CKEDITOR.tools.extend( {}, dtd.$block, dtd.$listItem, dtd.$tableContent );\r
+       for ( var i in blockLikeTags )\r
+       {\r
+               if ( ! ( 'br' in dtd[i] ) )\r
+                       delete blockLikeTags[i];\r
+       }\r
+       // We just avoid filler in <pre> right now.\r
+       // TODO: Support filler for <pre>, line break is also occupy line height.\r
+       delete blockLikeTags.pre;\r
+       var defaultDataFilterRules =\r
+       {\r
+               attributeNames :\r
+               [\r
+                       // Event attributes (onXYZ) must not be directly set. They can become\r
+                       // active in the editing area (IE|WebKit).\r
+                       [ ( /^on/ ), '_cke_pa_on' ]\r
+               ]\r
+       };\r
+\r
+       var defaultDataBlockFilterRules = { elements : {} };\r
+\r
+       for ( i in blockLikeTags )\r
+               defaultDataBlockFilterRules.elements[ i ] = extendBlockForDisplay;\r
+\r
+       var defaultHtmlFilterRules =\r
+               {\r
+                       elementNames :\r
+                       [\r
+                               // Remove the "cke:" namespace prefix.\r
+                               [ ( /^cke:/ ), '' ],\r
+\r
+                               // Ignore <?xml:namespace> tags.\r
+                               [ ( /^\?xml:namespace$/ ), '' ]\r
+                       ],\r
+\r
+                       attributeNames :\r
+                       [\r
+                               // Attributes saved for changes and protected attributes.\r
+                               [ ( /^_cke_(saved|pa)_/ ), '' ],\r
+\r
+                               // All "_cke" attributes are to be ignored.\r
+                               [ ( /^_cke.*/ ), '' ]\r
+                       ],\r
+\r
+                       elements :\r
+                       {\r
+                               $ : function( element )\r
+                               {\r
+                                       // Remove duplicated attributes - #3789.\r
+                                       var attribs = element.attributes;\r
+\r
+                                       if ( attribs )\r
+                                       {\r
+                                               var attributeNames = [ 'name', 'href', 'src' ],\r
+                                                       savedAttributeName;\r
+                                               for ( var i = 0 ; i < attributeNames.length ; i++ )\r
+                                               {\r
+                                                       savedAttributeName = '_cke_saved_' + attributeNames[ i ];\r
+                                                       savedAttributeName in attribs && ( delete attribs[ attributeNames[ i ] ] );\r
+                                               }\r
+                                       }\r
+                               },\r
+\r
+                               embed : function( element )\r
+                               {\r
+                                       var parent = element.parent;\r
+\r
+                                       // If the <embed> is child of a <object>, copy the width\r
+                                       // and height attributes from it.\r
+                                       if ( parent && parent.name == 'object' )\r
+                                       {\r
+                                               var parentWidth = parent.attributes.width,\r
+                                                       parentHeight = parent.attributes.height;\r
+                                               parentWidth && ( element.attributes.width = parentWidth );\r
+                                               parentHeight && ( element.attributes.height = parentHeight );\r
+                                       }\r
+                               },\r
+                               // Restore param elements into self-closing.\r
+                               param : function( param )\r
+                               {\r
+                                       param.children = [];\r
+                                       param.isEmpty = true;\r
+                                       return param;\r
+                               },\r
+\r
+                               // Remove empty link but not empty anchor.(#3829)\r
+                               a : function( element )\r
+                               {\r
+                                       if ( !( element.children.length ||\r
+                                                       element.attributes.name ||\r
+                                                       element.attributes._cke_saved_name ) )\r
+                                       {\r
+                                               return false;\r
+                                       }\r
+                               }\r
+                       },\r
+\r
+                       attributes :\r
+                       {\r
+                               'class' : function( value, element )\r
+                               {\r
+                                       // Remove all class names starting with "cke_".\r
+                                       return CKEDITOR.tools.ltrim( value.replace( /(?:^|\s+)cke_[^\s]*/g, '' ) ) || false;\r
+                               }\r
+                       },\r
+\r
+                       comment : function( contents )\r
+                       {\r
+                               if ( contents.substr( 0, protectedSourceMarker.length ) == protectedSourceMarker )\r
+                                       return new CKEDITOR.htmlParser.cdata( decodeURIComponent( contents.substr( protectedSourceMarker.length ) ) );\r
+\r
+                               return contents;\r
+                       }\r
+               };\r
+\r
+       var defaultHtmlBlockFilterRules = { elements : {} };\r
+\r
+       for ( i in blockLikeTags )\r
+               defaultHtmlBlockFilterRules.elements[ i ] = extendBlockForOutput;\r
+\r
+       if ( CKEDITOR.env.ie )\r
+       {\r
+               // IE outputs style attribute in capital letters. We should convert\r
+               // them back to lower case.\r
+               defaultHtmlFilterRules.attributes.style = function( value, element )\r
+               {\r
+                       return value.toLowerCase();\r
+               };\r
+       }\r
+\r
+       var protectAttributeRegex = /<(?:a|area|img|input).*?\s((?:href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))/gi;\r
+\r
+       function protectAttributes( html )\r
+       {\r
+               return html.replace( protectAttributeRegex, '$& _cke_saved_$1' );\r
+       }\r
+\r
+       var protectStyleTagsRegex = /<(style)(?=[ >])[^>]*>[^<]*<\/\1>/gi;\r
+       var encodedTagsRegex = /<cke:encoded>([^<]*)<\/cke:encoded>/gi;\r
+       var protectElementNamesRegex = /(<\/?)((?:object|embed|param).*?>)/gi;\r
+       var protectSelfClosingRegex = /<cke:param(.*?)\/>/gi;\r
+\r
+       function protectStyleTagsMatch( match )\r
+       {\r
+               return '<cke:encoded>' + encodeURIComponent( match ) + '</cke:encoded>';\r
+       }\r
+\r
+       function protectStyleTags( html )\r
+       {\r
+               return html.replace( protectStyleTagsRegex, protectStyleTagsMatch );\r
+       }\r
+       function protectElementsNames( html )\r
+       {\r
+               return html.replace( protectElementNamesRegex, '$1cke:$2');\r
+       }\r
+       function protectSelfClosingElements( html )\r
+       {\r
+               return html.replace( protectSelfClosingRegex, '<cke:param$1></cke:param>' );\r
+       }\r
+\r
+       function unprotectEncodedTagsMatch( match, encoded )\r
+       {\r
+               return decodeURIComponent( encoded );\r
+       }\r
+\r
+       function unprotectEncodedTags( html )\r
+       {\r
+               return html.replace( encodedTagsRegex, unprotectEncodedTagsMatch );\r
+       }\r
+\r
+       function protectSource( data, protectRegexes )\r
+       {\r
+               var protectedHtml = [],\r
+                       tempRegex = /<\!--\{cke_temp\}(\d*?)-->/g;\r
+               var regexes =\r
+                       [\r
+                               // First of any other protection, we must protect all comments\r
+                               // to avoid loosing them (of course, IE related).\r
+                               (/<!--[\s\S]*?-->/g),\r
+\r
+                               // Script tags will also be forced to be protected, otherwise\r
+                               // IE will execute them.\r
+                               /<script[\s\S]*?<\/script>/gi,\r
+\r
+                               // <noscript> tags (get lost in IE and messed up in FF).\r
+                               /<noscript[\s\S]*?<\/noscript>/gi\r
+                       ]\r
+                       .concat( protectRegexes );\r
+\r
+               for ( var i = 0 ; i < regexes.length ; i++ )\r
+               {\r
+                       data = data.replace( regexes[i], function( match )\r
+                               {\r
+                                       match = match.replace( tempRegex,               // There could be protected source inside another one. (#3869).\r
+                                               function( $, id )\r
+                                               {\r
+                                                       return protectedHtml[ id ];\r
+                                               }\r
+                                       );\r
+                                       return  '<!--{cke_temp}' + ( protectedHtml.push( match ) - 1 ) + '-->';\r
+                               });\r
+               }\r
+               data = data.replace( tempRegex, function( $, id )\r
+                       {\r
+                               return '<!--' + protectedSourceMarker +\r
+                                               encodeURIComponent( protectedHtml[ id ] ).replace( /--/g, '%2D%2D' ) +\r
+                                               '-->';\r
+                       }\r
+               );\r
+               return data;\r
+       }\r
+\r
+       CKEDITOR.plugins.add( 'htmldataprocessor',\r
+       {\r
+               requires : [ 'htmlwriter' ],\r
+\r
+               init : function( editor )\r
+               {\r
+                       var dataProcessor = editor.dataProcessor = new CKEDITOR.htmlDataProcessor( editor );\r
+\r
+                       dataProcessor.writer.forceSimpleAmpersand = editor.config.forceSimpleAmpersand;\r
+\r
+                       dataProcessor.dataFilter.addRules( defaultDataFilterRules );\r
+                       dataProcessor.dataFilter.addRules( defaultDataBlockFilterRules );\r
+                       dataProcessor.htmlFilter.addRules( defaultHtmlFilterRules );\r
+                       dataProcessor.htmlFilter.addRules( defaultHtmlBlockFilterRules );\r
+               }\r
+       });\r
+\r
+       CKEDITOR.htmlDataProcessor = function( editor )\r
+       {\r
+               this.editor = editor;\r
+\r
+               this.writer = new CKEDITOR.htmlWriter();\r
+               this.dataFilter = new CKEDITOR.htmlParser.filter();\r
+               this.htmlFilter = new CKEDITOR.htmlParser.filter();\r
+       };\r
+\r
+       CKEDITOR.htmlDataProcessor.prototype =\r
+       {\r
+               toHtml : function( data, fixForBody )\r
+               {\r
+                       // The source data is already HTML, but we need to clean\r
+                       // it up and apply the filter.\r
+\r
+                       data = protectSource( data, this.editor.config.protectedSource );\r
+\r
+                       // Before anything, we must protect the URL attributes as the\r
+                       // browser may changing them when setting the innerHTML later in\r
+                       // the code.\r
+                       data = protectAttributes( data );\r
+\r
+                       // IE remvoes style tags from innerHTML. (#3710).\r
+                       if ( CKEDITOR.env.ie )\r
+                               data = protectStyleTags( data );\r
+\r
+                       // Certain elements has problem to go through DOM operation, protect\r
+                       // them by prefixing 'cke' namespace.(#3591)\r
+                       data = protectElementsNames( data );\r
+\r
+                       // All none-IE browsers ignore self-closed custom elements,\r
+                       // protecting them into open-close.(#3591)\r
+                       data = protectSelfClosingElements( data );\r
+\r
+                       // Call the browser to help us fixing a possibly invalid HTML\r
+                       // structure.\r
+                       var div = document.createElement( 'div' );\r
+                       // Add fake character to workaround IE comments bug. (#3801)\r
+                       div.innerHTML = 'a' + data;\r
+                       data = div.innerHTML.substr( 1 );\r
+\r
+                       if ( CKEDITOR.env.ie )\r
+                               data = unprotectEncodedTags( data );\r
+\r
+                       // Now use our parser to make further fixes to the structure, as\r
+                       // well as apply the filter.\r
+                       var fragment = CKEDITOR.htmlParser.fragment.fromHtml( data, fixForBody ),\r
+                               writer = new CKEDITOR.htmlParser.basicWriter();\r
+\r
+                       fragment.writeHtml( writer, this.dataFilter );\r
+\r
+                       return writer.getHtml( true );\r
+               },\r
+\r
+               toDataFormat : function( html, fixForBody )\r
+               {\r
+                       var writer = this.writer,\r
+                               fragment = CKEDITOR.htmlParser.fragment.fromHtml( html, fixForBody );\r
+\r
+                       writer.reset();\r
+\r
+                       fragment.writeHtml( writer, this.htmlFilter );\r
+\r
+                       return writer.getHtml( true );\r
+               }\r
+       };\r
+})();\r
+\r
+/**\r
+ * Whether to force using "&" instead of "&amp;amp;" in elements attributes\r
+ * values. It's not recommended to change this setting for compliance with the\r
+ * W3C XHTML 1.0 standards\r
+ * (<a href="http://www.w3.org/TR/xhtml1/#C_12">C.12, XHTML 1.0</a>).\r
+ * @type Boolean\r
+ * @default false\r
+ * @example\r
+ * config.forceSimpleAmpersand = false;\r
+ */\r
+CKEDITOR.config.forceSimpleAmpersand = false;\r
diff --git a/_source/plugins/htmlwriter/plugin.js b/_source/plugins/htmlwriter/plugin.js
new file mode 100644 (file)
index 0000000..c0dea03
--- /dev/null
@@ -0,0 +1,289 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'htmlwriter' );\r
+\r
+/**\r
+ * Class used to write HTML data.\r
+ * @constructor\r
+ * @example\r
+ * var writer = new CKEDITOR.htmlWriter();\r
+ * writer.openTag( 'p' );\r
+ * writer.attribute( 'class', 'MyClass' );\r
+ * writer.openTagClose( 'p' );\r
+ * writer.text( 'Hello' );\r
+ * writer.closeTag( 'p' );\r
+ * alert( writer.getHtml() );  "&lt;p class="MyClass"&gt;Hello&lt;/p&gt;"\r
+ */\r
+CKEDITOR.htmlWriter = CKEDITOR.tools.createClass(\r
+{\r
+       base : CKEDITOR.htmlParser.basicWriter,\r
+\r
+       $ : function()\r
+       {\r
+               // Call the base contructor.\r
+               this.base();\r
+\r
+               /**\r
+                * The characters to be used for each identation step.\r
+                * @type String\r
+                * @default "\t" (tab)\r
+                * @example\r
+                * // Use two spaces for indentation.\r
+                * editorInstance.dataProcessor.writer.indentationChars = '  ';\r
+                */\r
+               this.indentationChars = '\t';\r
+\r
+               /**\r
+                * The characters to be used to close "self-closing" elements, like "br" or\r
+                * "img".\r
+                * @type String\r
+                * @default " /&gt;"\r
+                * @example\r
+                * // Use HTML4 notation for self-closing elements.\r
+                * editorInstance.dataProcessor.writer.selfClosingEnd = '>';\r
+                */\r
+               this.selfClosingEnd = ' />';\r
+\r
+               /**\r
+                * The characters to be used for line breaks.\r
+                * @type String\r
+                * @default "\n" (LF)\r
+                * @example\r
+                * // Use CRLF for line breaks.\r
+                * editorInstance.dataProcessor.writer.lineBreakChars = '\r\n';\r
+                */\r
+               this.lineBreakChars = '\n';\r
+\r
+               this.forceSimpleAmpersand = false;\r
+\r
+               this.sortAttributes = true;\r
+\r
+               this._.indent = false;\r
+               this._.indentation = '';\r
+               this._.rules = {};\r
+\r
+               var dtd = CKEDITOR.dtd;\r
+\r
+               for ( var e in CKEDITOR.tools.extend( {}, dtd.$block, dtd.$listItem, dtd.$tableContent ) )\r
+               {\r
+                       this.setRules( e,\r
+                               {\r
+                                       indent : true,\r
+                                       breakBeforeOpen : true,\r
+                                       breakAfterOpen : true,\r
+                                       breakBeforeClose : !dtd[ e ][ '#' ],\r
+                                       breakAfterClose : true\r
+                               });\r
+               }\r
+               this.setRules( 'br',\r
+                       {\r
+                               breakAfterOpen : true\r
+                       });\r
+               // Disable indentation on <pre>.\r
+               this.setRules( 'pre',\r
+               {\r
+                 indent: false\r
+               } );\r
+       },\r
+\r
+       proto :\r
+       {\r
+               /**\r
+                * Writes the tag opening part for a opener tag.\r
+                * @param {String} tagName The element name for this tag.\r
+                * @param {Object} attributes The attributes defined for this tag. The\r
+                *              attributes could be used to inspect the tag.\r
+                * @example\r
+                * // Writes "&lt;p".\r
+                * writer.openTag( 'p', { class : 'MyClass', id : 'MyId' } );\r
+                */\r
+               openTag : function( tagName, attributes )\r
+               {\r
+                       var rules = this._.rules[ tagName ];\r
+\r
+                       if ( this._.indent )\r
+                               this.indentation();\r
+                       // Do not break if indenting.\r
+                       else if ( rules && rules.breakBeforeOpen )\r
+                       {\r
+                               this.lineBreak();\r
+                               this.indentation();\r
+                       }\r
+\r
+                       this._.output.push( '<', tagName );\r
+               },\r
+\r
+               /**\r
+                * Writes the tag closing part for a opener tag.\r
+                * @param {String} tagName The element name for this tag.\r
+                * @param {Boolean} isSelfClose Indicates that this is a self-closing tag,\r
+                *              like "br" or "img".\r
+                * @example\r
+                * // Writes "&gt;".\r
+                * writer.openTagClose( 'p', false );\r
+                * @example\r
+                * // Writes " /&gt;".\r
+                * writer.openTagClose( 'br', true );\r
+                */\r
+               openTagClose : function( tagName, isSelfClose )\r
+               {\r
+                       var rules = this._.rules[ tagName ];\r
+\r
+                       if ( isSelfClose )\r
+                               this._.output.push( this.selfClosingEnd );\r
+                       else\r
+                       {\r
+                               this._.output.push( '>' );\r
+\r
+                               if ( rules && rules.indent )\r
+                                       this._.indentation += this.indentationChars;\r
+                       }\r
+\r
+                       if ( rules && rules.breakAfterOpen )\r
+                               this.lineBreak();\r
+               },\r
+\r
+               /**\r
+                * Writes an attribute. This function should be called after opening the\r
+                * tag with {@link #openTagClose}.\r
+                * @param {String} attName The attribute name.\r
+                * @param {String} attValue The attribute value.\r
+                * @example\r
+                * // Writes ' class="MyClass"'.\r
+                * writer.attribute( 'class', 'MyClass' );\r
+                */\r
+               attribute : function( attName, attValue )\r
+               {\r
+                       if ( this.forceSimpleAmpersand )\r
+                               attValue = attValue.replace( /&amp;/, '&' );\r
+\r
+                       this._.output.push( ' ', attName, '="', attValue, '"' );\r
+               },\r
+\r
+               /**\r
+                * Writes a closer tag.\r
+                * @param {String} tagName The element name for this tag.\r
+                * @example\r
+                * // Writes "&lt;/p&gt;".\r
+                * writer.closeTag( 'p' );\r
+                */\r
+               closeTag : function( tagName )\r
+               {\r
+                       var rules = this._.rules[ tagName ];\r
+\r
+                       if ( rules && rules.indent )\r
+                               this._.indentation = this._.indentation.substr( this.indentationChars.length );\r
+\r
+                       if ( this._.indent )\r
+                               this.indentation();\r
+                       // Do not break if indenting.\r
+                       else if ( rules && rules.breakBeforeClose )\r
+                       {\r
+                               this.lineBreak();\r
+                               this.indentation();\r
+                       }\r
+\r
+                       this._.output.push( '</', tagName, '>' );\r
+\r
+                       if ( rules && rules.breakAfterClose )\r
+                               this.lineBreak();\r
+               },\r
+\r
+               /**\r
+                * Writes text.\r
+                * @param {String} text The text value\r
+                * @example\r
+                * // Writes "Hello Word".\r
+                * writer.text( 'Hello Word' );\r
+                */\r
+               text : function( text )\r
+               {\r
+                       if ( this._.indent )\r
+                       {\r
+                               this.indentation();\r
+                               text = CKEDITOR.tools.ltrim( text );\r
+                       }\r
+\r
+                       this._.output.push( text );\r
+               },\r
+\r
+               /**\r
+                * Writes a comment.\r
+                * @param {String} comment The comment text.\r
+                * @example\r
+                * // Writes "&lt;!-- My comment --&gt;".\r
+                * writer.comment( ' My comment ' );\r
+                */\r
+               comment : function( comment )\r
+               {\r
+                       if ( this._.indent )\r
+                               this.indentation();\r
+\r
+                       this._.output.push( '<!--', comment, '-->' );\r
+               },\r
+\r
+               /**\r
+                * Writes a line break. It uses the {@link #lineBreakChars} property for it.\r
+                * @example\r
+                * // Writes "\n" (e.g.).\r
+                * writer.lineBreak();\r
+                */\r
+               lineBreak : function()\r
+               {\r
+                       if ( this._.output.length > 0 )\r
+                               this._.output.push( this.lineBreakChars );\r
+                       this._.indent = true;\r
+               },\r
+\r
+               /**\r
+                * Writes the current indentation chars. It uses the\r
+                * {@link #indentationChars} property, repeating it for the current\r
+                * indentation steps.\r
+                * @example\r
+                * // Writes "\t" (e.g.).\r
+                * writer.indentation();\r
+                */\r
+               indentation : function()\r
+               {\r
+                       this._.output.push( this._.indentation );\r
+                       this._.indent = false;\r
+               },\r
+\r
+               /**\r
+                * Sets formatting rules for a give element. The possible rules are:\r
+                * <ul>\r
+                *      <li><b>indent</b>: indent the element contents.</li>\r
+                *      <li><b>breakBeforeOpen</b>: break line before the opener tag for this element.</li>\r
+                *      <li><b>breakAfterOpen</b>: break line after the opener tag for this element.</li>\r
+                *      <li><b>breakBeforeClose</b>: break line before the closer tag for this element.</li>\r
+                *      <li><b>breakAfterClose</b>: break line after the closer tag for this element.</li>\r
+                * </ul>\r
+                *\r
+                * All rules default to "false".\r
+                *\r
+                * By default, all elements available in the {@link CKEDITOR.dtd.$block),\r
+                * {@link CKEDITOR.dtd.$listItem} and {@link CKEDITOR.dtd.$tableContent}\r
+                * lists have all the above rules set to "true". Additionaly, the "br"\r
+                * element has the "breakAfterOpen" set to "true".\r
+                * @param {String} tagName The element name to which set the rules.\r
+                * @param {Object} rules An object containing the element rules.\r
+                * @example\r
+                * // Break line before and after "img" tags.\r
+                * writer.setRules( 'img',\r
+                *     {\r
+                *         breakBeforeOpen : true\r
+                *         breakAfterOpen : true\r
+                *     });\r
+                * @example\r
+                * // Reset the rules for the "h1" tag.\r
+                * writer.setRules( 'h1', {} );\r
+                */\r
+               setRules : function( tagName, rules )\r
+               {\r
+                       this._.rules[ tagName ] = rules;\r
+               }\r
+       }\r
+});\r
diff --git a/_source/plugins/iframedialog/plugin.js b/_source/plugins/iframedialog/plugin.js
new file mode 100644 (file)
index 0000000..fbd2d90
--- /dev/null
@@ -0,0 +1,136 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Plugin for making iframe based dialogs.\r
+ */\r
+\r
+CKEDITOR.plugins.add( 'iframedialog',\r
+{\r
+       requires : [ 'dialog' ],\r
+       onLoad : function()\r
+       {\r
+               CKEDITOR.dialog.addIframe = function( name, title, src, width, height, onContentLoad )\r
+               {\r
+                       var element =\r
+                       {\r
+                               type : 'iframe',\r
+                               src : src,\r
+                               width : '100%',\r
+                               height : '100%'\r
+                       };\r
+\r
+                       if ( typeof( onContentLoad ) == 'function' )\r
+                               element.onContentLoad = onContentLoad;\r
+\r
+                       var definition =\r
+                       {\r
+                               title : title,\r
+                               minWidth : width,\r
+                               minHeight : height,\r
+                               contents :\r
+                               [\r
+                                       {\r
+                                               id : 'iframe',\r
+                                               label : title,\r
+                                               expand : true,\r
+                                               elements : [ element ]\r
+                                       }\r
+                               ]\r
+                       };\r
+\r
+                       return this.add( name, function(){ return definition; } );\r
+               };\r
+\r
+               (function()\r
+               {\r
+                       /**\r
+                        * An iframe element.\r
+                        * @extends CKEDITOR.ui.dialog.uiElement\r
+                        * @example\r
+                        * @constructor\r
+                        * @param {CKEDITOR.dialog} dialog\r
+                        * Parent dialog object.\r
+                        * @param {CKEDITOR.dialog.uiElementDefinition} elementDefinition\r
+                        * The element definition. Accepted fields:\r
+                        * <ul>\r
+                        *      <li><strong>src</strong> (Required) The src field of the iframe. </li>\r
+                        *      <li><strong>width</strong> (Required) The iframe's width.</li>\r
+                        *      <li><strong>height</strong> (Required) The iframe's height.</li>\r
+                        *      <li><strong>onContentLoad</strong> (Optional) A function to be executed\r
+                        *      after the iframe's contents has finished loading.</li>\r
+                        * </ul>\r
+                        * @param {Array} htmlList\r
+                        * List of HTML code to output to.\r
+                        */\r
+                       var iframeElement = function( dialog, elementDefinition, htmlList )\r
+                       {\r
+                               if ( arguments.length < 3 )\r
+                                       return;\r
+\r
+                               var _ = ( this._ || ( this._ = {} ) ),\r
+                                       contentLoad = elementDefinition.onContentLoad && CKEDITOR.tools.bind( elementDefinition.onContentLoad, this ),\r
+                                       cssWidth = CKEDITOR.tools.cssLength( elementDefinition.width ),\r
+                                       cssHeight = CKEDITOR.tools.cssLength( elementDefinition.height );\r
+                               _.frameId = CKEDITOR.tools.getNextNumber() + '_iframe';\r
+\r
+                               // IE BUG: Parent container does not resize to contain the iframe automatically.\r
+                               dialog.on( 'load', function()\r
+                                       {\r
+                                               var iframe = CKEDITOR.document.getById( _.frameId ),\r
+                                                       parentContainer = iframe.getParent();\r
+\r
+                                               parentContainer.setStyles(\r
+                                                       {\r
+                                                               width : cssWidth,\r
+                                                               height : cssHeight\r
+                                                       } );\r
+                                       } );\r
+\r
+                               var attributes =\r
+                               {\r
+                                       src : '%2',\r
+                                       id : _.frameId,\r
+                                       frameborder : 0,\r
+                                       allowtransparency : true\r
+                               };\r
+                               var myHtml = [];\r
+\r
+                               if ( typeof( elementDefinition.onContentLoad ) == 'function' )\r
+                                       attributes.onload = 'CKEDITOR.tools.callFunction(%1);';\r
+\r
+                               CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, myHtml, 'iframe',\r
+                                               {\r
+                                                       width : cssWidth,\r
+                                                       height : cssHeight\r
+                                               }, attributes, '' );\r
+\r
+                               // Put a placeholder for the first time.\r
+                               htmlList.push( '<div style="width:' + cssWidth + ';height:' + cssHeight + ';" id="' + this.domId + '"></div>' );\r
+\r
+                               // Iframe elements should be refreshed whenever it is shown.\r
+                               myHtml = myHtml.join( '' );\r
+                               dialog.on( 'show', function()\r
+                                       {\r
+                                               var iframe = CKEDITOR.document.getById( _.frameId ),\r
+                                                       parentContainer = iframe.getParent(),\r
+                                                       callIndex = CKEDITOR.tools.addFunction( contentLoad ),\r
+                                                       html = myHtml.replace( '%1', callIndex ).replace( '%2', CKEDITOR.tools.htmlEncode( elementDefinition.src ) );\r
+                                               parentContainer.setHtml( html );\r
+                                       } );\r
+                       };\r
+\r
+                       iframeElement.prototype = new CKEDITOR.ui.dialog.uiElement;\r
+\r
+                       CKEDITOR.dialog.addUIElement( 'iframe',\r
+                               {\r
+                                       build : function( dialog, elementDefinition, output )\r
+                                       {\r
+                                               return new iframeElement( dialog, elementDefinition, output );\r
+                                       }\r
+                               } );\r
+               })();\r
+       }\r
+} );\r
diff --git a/_source/plugins/image/dialogs/image.js b/_source/plugins/image/dialogs/image.js
new file mode 100644 (file)
index 0000000..233a291
--- /dev/null
@@ -0,0 +1,1225 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       // Load image preview.\r
+       var IMAGE = 1,\r
+               LINK = 2,\r
+               PREVIEW = 4,\r
+               CLEANUP = 8,\r
+               regexGetSize = /^\s*(\d+)((px)|\%)?\s*$/i,\r
+               regexGetSizeOrEmpty = /(^\s*(\d+)((px)|\%)?\s*$)|^$/i;\r
+\r
+       var onSizeChange = function()\r
+       {\r
+               var value = this.getValue(),    // This = input element.\r
+                       dialog = this.getDialog(),\r
+                       aMatch  =  value.match( regexGetSize ); // Check value\r
+               if ( aMatch )\r
+               {\r
+                       if ( aMatch[2] == '%' )                 // % is allowed - > unlock ratio.\r
+                               switchLockRatio( dialog, false );       // Unlock.\r
+                       value = aMatch[1];\r
+               }\r
+\r
+               // Only if ratio is locked\r
+               if ( dialog.lockRatio )\r
+               {\r
+                       var oImageOriginal = dialog.originalElement;\r
+                       if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )\r
+                       {\r
+                               if ( this.id == 'txtHeight' )\r
+                               {\r
+                                       if ( value && value != '0' )\r
+                                               value = Math.round( oImageOriginal.$.width * ( value  / oImageOriginal.$.height ) );\r
+                                       if ( !isNaN( value ) )\r
+                                               dialog.setValueOf( 'info', 'txtWidth', value );\r
+                               }\r
+                               else            //this.id = txtWidth.\r
+                               {\r
+                                       if ( value && value != '0' )\r
+                                               value = Math.round( oImageOriginal.$.height * ( value  / oImageOriginal.$.width ) );\r
+                                       if ( !isNaN( value ) )\r
+                                               dialog.setValueOf( 'info', 'txtHeight', value );\r
+                               }\r
+                       }\r
+               }\r
+               updatePreview( dialog );\r
+       };\r
+\r
+       var updatePreview = function( dialog )\r
+       {\r
+               //Don't load before onShow.\r
+               if ( !dialog.originalElement || !dialog.preview )\r
+                       return 1;\r
+\r
+               // Read attributes and update imagePreview;\r
+               dialog.commitContent( PREVIEW, dialog.preview );\r
+               return 0;\r
+       };\r
+\r
+       var switchLockRatio = function( dialog, value )\r
+       {\r
+               var oImageOriginal = dialog.originalElement,\r
+                       ratioButton = CKEDITOR.document.getById( 'btnLockSizes' );\r
+\r
+               if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )\r
+               {\r
+                       if ( value == 'check' )                 // Check image ratio and original image ratio.\r
+                       {\r
+                               var width = dialog.getValueOf( 'info', 'txtWidth' ),\r
+                                       height = dialog.getValueOf( 'info', 'txtHeight' ),\r
+                                       originalRatio = oImageOriginal.$.width * 1000 / oImageOriginal.$.height,\r
+                                       thisRatio = width * 1000 / height;\r
+                               dialog.lockRatio  = false;              // Default: unlock ratio\r
+\r
+                               if ( !width && !height )\r
+                                       dialog.lockRatio = true;\r
+                               else if ( !isNaN( originalRatio ) && !isNaN( thisRatio ) )\r
+                               {\r
+                                       if ( Math.round( originalRatio ) == Math.round( thisRatio ) )\r
+                                               dialog.lockRatio = true;\r
+                               }\r
+                       }\r
+                       else if ( value != undefined )\r
+                               dialog.lockRatio = value;\r
+                       else\r
+                               dialog.lockRatio = !dialog.lockRatio;\r
+               }\r
+               else if ( value != 'check' )            // I can't lock ratio if ratio is unknown.\r
+                       dialog.lockRatio = false;\r
+\r
+               if ( dialog.lockRatio )\r
+                       ratioButton.removeClass( 'cke_btn_unlocked' );\r
+               else\r
+                       ratioButton.addClass( 'cke_btn_unlocked' );\r
+\r
+               return dialog.lockRatio;\r
+       };\r
+\r
+       var resetSize = function( dialog )\r
+       {\r
+               var oImageOriginal = dialog.originalElement;\r
+               if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )\r
+               {\r
+                       dialog.setValueOf( 'info', 'txtWidth', oImageOriginal.$.width );\r
+                       dialog.setValueOf( 'info', 'txtHeight', oImageOriginal.$.height );\r
+               }\r
+               updatePreview( dialog );\r
+       };\r
+\r
+       var setupDimension = function( type, element )\r
+       {\r
+               if ( type != IMAGE )\r
+                       return;\r
+\r
+               function checkDimension( size, defaultValue )\r
+               {\r
+                       var aMatch  =  size.match( regexGetSize );\r
+                       if ( aMatch )\r
+                       {\r
+                               if ( aMatch[2] == '%' )                         // % is allowed.\r
+                               {\r
+                                       aMatch[1] += '%';\r
+                                       switchLockRatio( dialog, false );       // Unlock ratio\r
+                               }\r
+                               return aMatch[1];\r
+                       }\r
+                       return defaultValue;\r
+               }\r
+\r
+               var dialog = this.getDialog(),\r
+                       value = '',\r
+                       dimension = (( this.id == 'txtWidth' )? 'width' : 'height' ),\r
+                       size = element.getAttribute( dimension );\r
+\r
+               if ( size )\r
+                       value = checkDimension( size, value );\r
+               value = checkDimension( element.$.style[ dimension ], value );\r
+\r
+               this.setValue( value );\r
+       };\r
+\r
+       var imageDialog = function( editor, dialogType )\r
+       {\r
+               var onImgLoadEvent = function()\r
+               {\r
+                       // Image is ready.\r
+                       var original = this.originalElement;\r
+                       original.setCustomData( 'isReady', 'true' );\r
+                       original.removeListener( 'load', onImgLoadEvent );\r
+                       original.removeListener( 'error', onImgLoadErrorEvent );\r
+                       original.removeListener( 'abort', onImgLoadErrorEvent );\r
+\r
+                       // Hide loader\r
+                       CKEDITOR.document.getById( 'ImagePreviewLoader' ).setStyle( 'display', 'none' );\r
+\r
+                       // New image -> new domensions\r
+                       if ( !this.dontResetSize )\r
+                               resetSize( this );\r
+\r
+                       if ( this.firstLoad )\r
+                               switchLockRatio( this, 'check' );\r
+                       this.firstLoad = false;\r
+                       this.dontResetSize = false;\r
+               };\r
+\r
+               var onImgLoadErrorEvent = function()\r
+               {\r
+                       // Error. Image is not loaded.\r
+                       var original = this.originalElement;\r
+                       original.removeListener( 'load', onImgLoadEvent );\r
+                       original.removeListener( 'error', onImgLoadErrorEvent );\r
+                       original.removeListener( 'abort', onImgLoadErrorEvent );\r
+\r
+                       // Set Error image.\r
+                       var noimage = CKEDITOR.getUrl( editor.skinPath + 'images/noimage.png' );\r
+\r
+                       if ( this.preview )\r
+                               this.preview.setAttribute( 'src', noimage );\r
+\r
+                       // Hide loader\r
+                       CKEDITOR.document.getById( 'ImagePreviewLoader' ).setStyle( 'display', 'none' );\r
+                       switchLockRatio( this, false ); // Unlock.\r
+               };\r
+               return {\r
+                       title : ( dialogType == 'image' ) ? editor.lang.image.title : editor.lang.image.titleButton,\r
+                       minWidth : 420,\r
+                       minHeight : 310,\r
+                       onShow : function()\r
+                       {\r
+                               this.imageElement = false;\r
+                               this.linkElement = false;\r
+\r
+                               // Default: create a new element.\r
+                               this.imageEditMode = false;\r
+                               this.linkEditMode = false;\r
+\r
+                               this.lockRatio = true;\r
+                               this.dontResetSize = false;\r
+                               this.firstLoad = true;\r
+                               this.addLink = false;\r
+\r
+                               //Hide loader.\r
+                               CKEDITOR.document.getById( 'ImagePreviewLoader' ).setStyle( 'display', 'none' );\r
+                               // Preview\r
+                               this.preview = CKEDITOR.document.getById( 'previewImage' );\r
+\r
+                               var editor = this.getParentEditor(),\r
+                                       sel = this.getParentEditor().getSelection(),\r
+                                       element = sel.getSelectedElement(),\r
+                                       link = element && element.getAscendant( 'a' );\r
+\r
+                               // Copy of the image\r
+                               this.originalElement = editor.document.createElement( 'img' );\r
+                               this.originalElement.setAttribute( 'alt', '' );\r
+                               this.originalElement.setCustomData( 'isReady', 'false' );\r
+\r
+                               if ( link )\r
+                               {\r
+                                       this.linkElement = link;\r
+                                       this.linkEditMode = true;\r
+\r
+                                       // Look for Image element.\r
+                                       var linkChildren = link.getChildren();\r
+                                       if ( linkChildren.count() == 1 )                        // 1 child.\r
+                                       {\r
+                                               var childTagName = linkChildren.getItem( 0 ).getName();\r
+                                               if ( childTagName == 'img' || childTagName == 'input' )\r
+                                               {\r
+                                                       this.imageElement = linkChildren.getItem( 0 );\r
+                                                       if ( this.imageElement.getName() == 'img' )\r
+                                                               this.imageEditMode = 'img';\r
+                                                       else if ( this.imageElement.getName() == 'input' )\r
+                                                               this.imageEditMode = 'input';\r
+                                               }\r
+                                       }\r
+                                       // Fill out all fields.\r
+                                       if ( dialogType == 'image' )\r
+                                               this.setupContent( LINK, link );\r
+                               }\r
+\r
+                               if ( element && element.getName() == 'img' && !element.getAttribute( '_cke_protected_html' ) )\r
+                                       this.imageEditMode = 'img';\r
+                               else if ( element && element.getName() == 'input' && element.getAttribute( 'type' ) && element.getAttribute( 'type' ) == 'image' )\r
+                                       this.imageEditMode = 'input';\r
+\r
+                               if ( this.imageEditMode || this.imageElement )\r
+                               {\r
+                                       if ( !this.imageElement )\r
+                                               this.imageElement = element;\r
+\r
+                                       // Fill out all fields.\r
+                                       this.setupContent( IMAGE, this.imageElement );\r
+\r
+                                       // Refresh LockRatio button\r
+                                       switchLockRatio ( this, true );\r
+                               }\r
+                       },\r
+                       onOk : function()\r
+                       {\r
+                               // Edit existing Image.\r
+                               if ( this.imageEditMode )\r
+                               {\r
+                                       var imgTagName = this.imageEditMode;\r
+\r
+                                       // Image dialog and Input element.\r
+                                       if ( dialogType == 'image' && imgTagName == 'input' && confirm( editor.lang.image.button2Img ) )\r
+                                       {\r
+                                               // Replace INPUT-> IMG\r
+                                               imgTagName = 'img';\r
+                                               this.imageElement = editor.document.createElement( 'img' );\r
+                                               this.imageElement.setAttribute( 'alt', '' );\r
+                                               editor.insertElement( this.imageElement );\r
+                                       }\r
+                                       // ImageButton dialog and Image element.\r
+                                       else if ( dialogType != 'image' && imgTagName == 'img' && confirm( editor.lang.image.img2Button ))\r
+                                       {\r
+                                               // Replace IMG -> INPUT\r
+                                               imgTagName = 'input';\r
+                                               this.imageElement = editor.document.createElement( 'input' );\r
+                                               this.imageElement.setAttributes(\r
+                                                       {\r
+                                                               type : 'image',\r
+                                                               alt : ''\r
+                                                       }\r
+                                               );\r
+                                               editor.insertElement( this.imageElement );\r
+                                       }\r
+                               }\r
+                               else    // Create a new image.\r
+                               {\r
+                                       // Image dialog -> create IMG element.\r
+                                       if ( dialogType == 'image' )\r
+                                               this.imageElement = editor.document.createElement( 'img' );\r
+                                       else\r
+                                       {\r
+                                               this.imageElement = editor.document.createElement( 'input' );\r
+                                               this.imageElement.setAttribute ( 'type' ,'image' );\r
+                                       }\r
+                                       this.imageElement.setAttribute( 'alt', '' );\r
+                               }\r
+\r
+                               // Create a new link.\r
+                               if ( !this.linkEditMode )\r
+                                       this.linkElement = editor.document.createElement( 'a' );\r
+\r
+                               // Set attributes.\r
+                               this.commitContent( IMAGE, this.imageElement );\r
+                               this.commitContent( LINK, this.linkElement );\r
+\r
+                               // Insert a new Image.\r
+                               if ( !this.imageEditMode )\r
+                               {\r
+                                       if ( this.addLink )\r
+                                       {\r
+                                               //Insert a new Link.\r
+                                               if ( !this.linkEditMode )\r
+                                               {\r
+                                                       editor.insertElement(this.linkElement);\r
+                                                       this.linkElement.append(this.imageElement, false);\r
+                                               }\r
+                                               else     //Link already exists, image not.\r
+                                                       editor.insertElement(this.imageElement );\r
+                                       }\r
+                                       else\r
+                                               editor.insertElement( this.imageElement );\r
+                               }\r
+                               else            // Image already exists.\r
+                               {\r
+                                       //Add a new link element.\r
+                                       if ( !this.linkEditMode && this.addLink )\r
+                                       {\r
+                                               editor.insertElement( this.linkElement );\r
+                                               this.imageElement.appendTo( this.linkElement );\r
+                                       }\r
+                                       //Remove Link, Image exists.\r
+                                       else if ( this.linkEditMode && !this.addLink )\r
+                                       {\r
+                                               editor.getSelection().selectElement( this.linkElement );\r
+                                               editor.insertElement( this.imageElement );\r
+                                       }\r
+                               }\r
+                       },\r
+                       onLoad : function()\r
+                       {\r
+                               if ( dialogType != 'image' )\r
+                                       this.hidePage( 'Link' );                //Hide Link tab.\r
+                               var doc = this._.element.getDocument();\r
+                               this.addFocusable( doc.getById( 'btnResetSize' ), 5 );\r
+                               this.addFocusable( doc.getById( 'btnLockSizes' ), 5 );\r
+                       },\r
+                       onHide : function()\r
+                       {\r
+                               if ( this.preview )\r
+                                       this.commitContent( CLEANUP, this.preview );\r
+\r
+                               if ( this.originalElement )\r
+                               {\r
+                                       this.originalElement.removeListener( 'load', onImgLoadEvent );\r
+                                       this.originalElement.removeListener( 'error', onImgLoadErrorEvent );\r
+                                       this.originalElement.removeListener( 'abort', onImgLoadErrorEvent );\r
+                                       this.originalElement.remove();\r
+                                       this.originalElement = false;           // Dialog is closed.\r
+                               }\r
+                       },\r
+                       contents : [\r
+                               {\r
+                                       id : 'info',\r
+                                       label : editor.lang.image.infoTab,\r
+                                       accessKey : 'I',\r
+                                       elements :\r
+                                       [\r
+                                               {\r
+                                                       type : 'vbox',\r
+                                                       padding : 0,\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'html',\r
+                                                                       html : '<span>' + CKEDITOR.tools.htmlEncode( editor.lang.image.url ) + '</span>'\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'hbox',\r
+                                                                       widths : [ '280px', '110px' ],\r
+                                                                       align : 'right',\r
+                                                                       children :\r
+                                                                       [\r
+                                                                               {\r
+                                                                                       id : 'txtUrl',\r
+                                                                                       type : 'text',\r
+                                                                                       label : '',\r
+                                                                                       onChange : function()\r
+                                                                                       {\r
+                                                                                               var dialog = this.getDialog(),\r
+                                                                                                       newUrl = this.getValue();\r
+\r
+                                                                                               //Update original image\r
+                                                                                               if ( newUrl.length > 0 )        //Prevent from load before onShow\r
+                                                                                               {\r
+                                                                                                       dialog = this.getDialog();\r
+                                                                                                       var original = dialog.originalElement;\r
+\r
+                                                                                                       original.setCustomData( 'isReady', 'false' );\r
+                                                                                                       // Show loader\r
+                                                                                                       var loader = CKEDITOR.document.getById( 'ImagePreviewLoader' );\r
+                                                                                                       if ( loader )\r
+                                                                                                               loader.setStyle( 'display', '' );\r
+\r
+                                                                                                       original.on( 'load', onImgLoadEvent, dialog );\r
+                                                                                                       original.on( 'error', onImgLoadErrorEvent, dialog );\r
+                                                                                                       original.on( 'abort', onImgLoadErrorEvent, dialog );\r
+                                                                                                       original.setAttribute( 'src', newUrl );\r
+                                                                                                       dialog.preview.setAttribute( 'src', newUrl );\r
+\r
+                                                                                                       updatePreview( dialog );\r
+                                                                                               }\r
+                                                                                       },\r
+                                                                                       setup : function( type, element )\r
+                                                                                       {\r
+                                                                                               if ( type == IMAGE )\r
+                                                                                               {\r
+                                                                                                       var url = element.getAttribute( '_cke_saved_src' ) || element.getAttribute( 'src' );\r
+                                                                                                       var field = this;\r
+\r
+                                                                                                       this.getDialog().dontResetSize = true;\r
+\r
+                                                                                                       // In IE7 the dialog is being rendered improperly when loading\r
+                                                                                                       // an image with a long URL. So we need to delay it a bit. (#4122)\r
+                                                                                                       setTimeout( function()\r
+                                                                                                               {\r
+                                                                                                                       field.setValue( url );          // And call this.onChange()\r
+                                                                                                                       field.focus();\r
+                                                                                                               }, 0 );\r
+                                                                                               }\r
+                                                                                       },\r
+                                                                                       commit : function( type, element )\r
+                                                                                       {\r
+                                                                                               if ( type == IMAGE && ( this.getValue() || this.isChanged() ) )\r
+                                                                                               {\r
+                                                                                                       element.setAttribute( '_cke_saved_src', decodeURI( this.getValue() ) );\r
+                                                                                                       element.setAttribute( 'src', decodeURI( this.getValue() ) );\r
+                                                                                               }\r
+                                                                                               else if ( type == CLEANUP )\r
+                                                                                               {\r
+                                                                                                       element.setAttribute( 'src', '' );      // If removeAttribute doesn't work.\r
+                                                                                                       element.removeAttribute( 'src' );\r
+                                                                                               }\r
+                                                                                       }\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'button',\r
+                                                                                       id : 'browse',\r
+                                                                                       align : 'center',\r
+                                                                                       label : editor.lang.common.browseServer,\r
+                                                                                       hidden : true,\r
+                                                                                       filebrowser : 'info:txtUrl'\r
+                                                                               }\r
+                                                                       ]\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       id : 'txtAlt',\r
+                                                       type : 'text',\r
+                                                       label : editor.lang.image.alt,\r
+                                                       accessKey : 'A',\r
+                                                       'default' : '',\r
+                                                       onChange : function()\r
+                                                       {\r
+                                                               updatePreview( this.getDialog() );\r
+                                                       },\r
+                                                       setup : function( type, element )\r
+                                                       {\r
+                                                               if ( type == IMAGE )\r
+                                                                       this.setValue( element.getAttribute( 'alt' ) );\r
+                                                       },\r
+                                                       commit : function( type, element )\r
+                                                       {\r
+                                                               if ( type == IMAGE )\r
+                                                               {\r
+                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                               element.setAttribute( 'alt', this.getValue() );\r
+                                                               }\r
+                                                               else if ( type == PREVIEW )\r
+                                                               {\r
+                                                                       element.setAttribute( 'alt', this.getValue() );\r
+                                                               }\r
+                                                               else if ( type == CLEANUP )\r
+                                                               {\r
+                                                                       element.removeAttribute( 'alt' );\r
+                                                               }\r
+                                                       }\r
+                                               },\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '140px', '240px' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'vbox',\r
+                                                                       padding : 10,\r
+                                                                       children :\r
+                                                                       [\r
+                                                                               {\r
+                                                                                       type : 'hbox',\r
+                                                                                       widths : [ '70%', '30%' ],\r
+                                                                                       children :\r
+                                                                                       [\r
+                                                                                               {\r
+                                                                                                       type : 'vbox',\r
+                                                                                                       padding : 1,\r
+                                                                                                       children :\r
+                                                                                                       [\r
+                                                                                                               {\r
+                                                                                                                       type : 'text',\r
+                                                                                                                       width: '40px',\r
+                                                                                                                       id : 'txtWidth',\r
+                                                                                                                       labelLayout : 'horizontal',\r
+                                                                                                                       label : editor.lang.image.width,\r
+                                                                                                                       onKeyUp : onSizeChange,\r
+                                                                                                                       validate: function()\r
+                                                                                                                       {\r
+                                                                                                                               var aMatch  =  this.getValue().match( regexGetSizeOrEmpty );\r
+                                                                                                                               if ( !aMatch )\r
+                                                                                                                                       alert( editor.lang.common.validateNumberFailed );\r
+                                                                                                                               return !!aMatch;\r
+                                                                                                                       },\r
+                                                                                                                       setup : setupDimension,\r
+                                                                                                                       commit : function( type, element )\r
+                                                                                                                       {\r
+                                                                                                                               if ( type == IMAGE )\r
+                                                                                                                               {\r
+                                                                                                                                       var value = this.getValue();\r
+                                                                                                                                       if ( value )\r
+                                                                                                                                               element.setAttribute( 'width', value );\r
+                                                                                                                                       else if ( !value && this.isChanged() )\r
+                                                                                                                                               element.removeAttribute( 'width' );\r
+                                                                                                                               }\r
+                                                                                                                               else if ( type == PREVIEW )\r
+                                                                                                                               {\r
+                                                                                                                                       value = this.getValue();\r
+                                                                                                                                       var aMatch = value.match( regexGetSize );\r
+                                                                                                                                       if ( !aMatch )\r
+                                                                                                                                       {\r
+                                                                                                                                               var oImageOriginal = this.getDialog().originalElement;\r
+                                                                                                                                               if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )\r
+                                                                                                                                                       element.setStyle( 'width',  oImageOriginal.$.width + 'px');\r
+                                                                                                                                       }\r
+                                                                                                                                       else\r
+                                                                                                                                               element.setStyle( 'width', value + 'px');\r
+                                                                                                                               }\r
+                                                                                                                               else if ( type == CLEANUP )\r
+                                                                                                                               {\r
+                                                                                                                                       element.setStyle( 'width', '0px' );     // If removeAttribute doesn't work.\r
+                                                                                                                                       element.removeAttribute( 'width' );\r
+                                                                                                                                       element.removeStyle( 'width' );\r
+                                                                                                                               }\r
+                                                                                                                       }\r
+                                                                                                               },\r
+                                                                                                               {\r
+                                                                                                                       type : 'text',\r
+                                                                                                                       id : 'txtHeight',\r
+                                                                                                                       width: '40px',\r
+                                                                                                                       labelLayout : 'horizontal',\r
+                                                                                                                       label : editor.lang.image.height,\r
+                                                                                                                       onKeyUp : onSizeChange,\r
+                                                                                                                       validate: function()\r
+                                                                                                                       {\r
+                                                                                                                               var aMatch = this.getValue().match( regexGetSizeOrEmpty );\r
+                                                                                                                               if ( !aMatch )\r
+                                                                                                                                       alert( editor.lang.common.validateNumberFailed );\r
+                                                                                                                               return !!aMatch;\r
+                                                                                                                       },\r
+                                                                                                                       setup : setupDimension,\r
+                                                                                                                       commit : function( type, element )\r
+                                                                                                                       {\r
+                                                                                                                               if ( type == IMAGE )\r
+                                                                                                                               {\r
+                                                                                                                                       var value = this.getValue();\r
+                                                                                                                                       if ( value )\r
+                                                                                                                                               element.setAttribute( 'height', value );\r
+                                                                                                                                       else if ( !value && this.isChanged() )\r
+                                                                                                                                               element.removeAttribute( 'height' );\r
+                                                                                                                               }\r
+                                                                                                                               else if ( type == PREVIEW )\r
+                                                                                                                               {\r
+                                                                                                                                       value = this.getValue();\r
+                                                                                                                                       var aMatch = value.match( regexGetSize );\r
+                                                                                                                                       if ( !aMatch )\r
+                                                                                                                                       {\r
+                                                                                                                                               var oImageOriginal = this.getDialog().originalElement;\r
+                                                                                                                                               if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )\r
+                                                                                                                                                       element.setStyle( 'height',  oImageOriginal.$.height + 'px');\r
+                                                                                                                                       }\r
+                                                                                                                                       else\r
+                                                                                                                                               element.setStyle( 'height', value + 'px');\r
+                                                                                                                               }\r
+                                                                                                                               else if ( type == CLEANUP )\r
+                                                                                                                               {\r
+                                                                                                                                       element.setStyle( 'height', '0px' );    // If removeAttribute doesn't work.\r
+                                                                                                                                       element.removeAttribute( 'height' );\r
+                                                                                                                                       element.removeStyle( 'height' );\r
+                                                                                                                               }\r
+                                                                                                                       }\r
+                                                                                                               }\r
+                                                                                                       ]\r
+                                                                                               },\r
+                                                                                               {\r
+                                                                                                       type : 'html',\r
+                                                                                                       style : 'margin-top:10px;width:40px;height:40px;',\r
+                                                                                                       onLoad : function()\r
+                                                                                                       {\r
+                                                                                                               // Activate Reset button\r
+                                                                                                               var     resetButton = CKEDITOR.document.getById( 'btnResetSize' ),\r
+                                                                                                                       ratioButton = CKEDITOR.document.getById( 'btnLockSizes' );\r
+                                                                                                               if ( resetButton )\r
+                                                                                                               {\r
+                                                                                                                       resetButton.on( 'click', function()\r
+                                                                                                                               {\r
+                                                                                                                                       resetSize( this );\r
+                                                                                                                               }, this.getDialog() );\r
+                                                                                                                       resetButton.on( 'mouseover', function()\r
+                                                                                                                               {\r
+                                                                                                                                       this.addClass( 'cke_btn_over' );\r
+                                                                                                                               }, resetButton );\r
+                                                                                                                       resetButton.on( 'mouseout', function()\r
+                                                                                                                               {\r
+                                                                                                                                       this.removeClass( 'cke_btn_over' );\r
+                                                                                                                               }, resetButton );\r
+                                                                                                               }\r
+                                                                                                               // Activate (Un)LockRatio button\r
+                                                                                                               if ( ratioButton )\r
+                                                                                                               {\r
+                                                                                                                       ratioButton.on( 'click', function()\r
+                                                                                                                               {\r
+                                                                                                                                       var locked = switchLockRatio( this ),\r
+                                                                                                                                               oImageOriginal = this.originalElement,\r
+                                                                                                                                               width = this.getValueOf( 'info', 'txtWidth' );\r
+\r
+                                                                                                                                       if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' && width )\r
+                                                                                                                                       {\r
+                                                                                                                                               var height = oImageOriginal.$.height / oImageOriginal.$.width * width;\r
+                                                                                                                                               if ( !isNaN( height ) )\r
+                                                                                                                                               {\r
+                                                                                                                                                       this.setValueOf( 'info', 'txtHeight', Math.round( height ) );\r
+                                                                                                                                                       updatePreview( this );\r
+                                                                                                                                               }\r
+                                                                                                                                       }\r
+                                                                                                                               }, this.getDialog() );\r
+                                                                                                                       ratioButton.on( 'mouseover', function()\r
+                                                                                                                               {\r
+                                                                                                                                       this.addClass( 'cke_btn_over' );\r
+                                                                                                                               }, ratioButton );\r
+                                                                                                                       ratioButton.on( 'mouseout', function()\r
+                                                                                                                               {\r
+                                                                                                                                       this.removeClass( 'cke_btn_over' );\r
+                                                                                                                               }, ratioButton );\r
+                                                                                                               }\r
+                                                                                                       },\r
+                                                                                                       html : '<div>'+\r
+                                                                                                               '<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.lockRatio +\r
+                                                                                                               '" class="cke_btn_locked" id="btnLockSizes"></a>' +\r
+                                                                                                               '<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.resetSize +\r
+                                                                                                               '" class="cke_btn_reset" id="btnResetSize"></a>'+\r
+                                                                                                               '</div>'\r
+                                                                                               }\r
+                                                                                       ]\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'vbox',\r
+                                                                                       padding : 1,\r
+                                                                                       children :\r
+                                                                                       [\r
+                                                                                               {\r
+                                                                                                       type : 'text',\r
+                                                                                                       id : 'txtBorder',\r
+                                                                                                       width: '60px',\r
+                                                                                                       labelLayout : 'horizontal',\r
+                                                                                                       label : editor.lang.image.border,\r
+                                                                                                       'default' : '',\r
+                                                                                                       onKeyUp : function()\r
+                                                                                                       {\r
+                                                                                                               updatePreview( this.getDialog() );\r
+                                                                                                       },\r
+                                                                                                       validate: function()\r
+                                                                                                       {\r
+                                                                                                               var func = CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed );\r
+                                                                                                               return func.apply( this );\r
+                                                                                                       },\r
+                                                                                                       setup : function( type, element )\r
+                                                                                                       {\r
+                                                                                                               if ( type == IMAGE )\r
+                                                                                                                       this.setValue( element.getAttribute( 'border' ) );\r
+                                                                                                       },\r
+                                                                                                       commit : function( type, element )\r
+                                                                                                       {\r
+                                                                                                               if ( type == IMAGE )\r
+                                                                                                               {\r
+                                                                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                                                                               element.setAttribute( 'border', this.getValue() );\r
+                                                                                                               }\r
+                                                                                                               else if ( type == PREVIEW )\r
+                                                                                                               {\r
+                                                                                                                       var value = parseInt( this.getValue(), 10 );\r
+                                                                                                                       value = isNaN( value ) ? 0 : value;\r
+                                                                                                                       element.setAttribute( 'border', value );\r
+                                                                                                                       element.setStyle( 'border', value + 'px solid black' );\r
+                                                                                                               }\r
+                                                                                                               else if ( type == CLEANUP )\r
+                                                                                                               {\r
+                                                                                                                       element.removeAttribute( 'border' );\r
+                                                                                                                       element.removeStyle( 'border' );\r
+                                                                                                               }\r
+                                                                                                       }\r
+                                                                                               },\r
+                                                                                               {\r
+                                                                                                       type : 'text',\r
+                                                                                                       id : 'txtHSpace',\r
+                                                                                                       width: '60px',\r
+                                                                                                       labelLayout : 'horizontal',\r
+                                                                                                       label : editor.lang.image.hSpace,\r
+                                                                                                       'default' : '',\r
+                                                                                                       onKeyUp : function()\r
+                                                                                                       {\r
+                                                                                                               updatePreview( this.getDialog() );\r
+                                                                                                       },\r
+                                                                                                       validate: function()\r
+                                                                                                       {\r
+                                                                                                               var func = CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed );\r
+                                                                                                               return func.apply( this );\r
+                                                                                                       },\r
+                                                                                                       setup : function( type, element )\r
+                                                                                                       {\r
+                                                                                                               if ( type == IMAGE )\r
+                                                                                                               {\r
+                                                                                                                       var value = element.getAttribute( 'hspace' );\r
+                                                                                                                       if ( value != -1 )                              // In IE empty = -1.\r
+                                                                                                                               this.setValue( value );\r
+                                                                                                               }\r
+                                                                                                       },\r
+                                                                                                       commit : function( type, element )\r
+                                                                                                       {\r
+                                                                                                               if ( type == IMAGE )\r
+                                                                                                               {\r
+                                                                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                                                                               element.setAttribute( 'hspace', this.getValue() );\r
+                                                                                                               }\r
+                                                                                                               else if ( type == PREVIEW )\r
+                                                                                                               {\r
+                                                                                                                       var value = parseInt( this.getValue(), 10 );\r
+                                                                                                                       value = isNaN( value ) ? 0 : value;\r
+                                                                                                                       element.setAttribute( 'hspace', value );\r
+                                                                                                                       element.setStyle( 'margin-left', value + 'px' );\r
+                                                                                                                       element.setStyle( 'margin-right', value + 'px' );\r
+                                                                                                               }\r
+                                                                                                               else if ( type == CLEANUP )\r
+                                                                                                               {\r
+                                                                                                                       element.removeAttribute( 'hspace' );\r
+                                                                                                                       element.removeStyle( 'margin-left' );\r
+                                                                                                                       element.removeStyle( 'margin-right' );\r
+                                                                                                               }\r
+                                                                                                       }\r
+                                                                                               },\r
+                                                                                               {\r
+                                                                                                       type : 'text',\r
+                                                                                                       id : 'txtVSpace',\r
+                                                                                                       width : '60px',\r
+                                                                                                       labelLayout : 'horizontal',\r
+                                                                                                       label : editor.lang.image.vSpace,\r
+                                                                                                       'default' : '',\r
+                                                                                                       onKeyUp : function()\r
+                                                                                                       {\r
+                                                                                                               updatePreview( this.getDialog() );\r
+                                                                                                       },\r
+                                                                                                       validate: function()\r
+                                                                                                       {\r
+                                                                                                               var func = CKEDITOR.dialog.validate.integer( editor.lang.common.validateNumberFailed );\r
+                                                                                                               return func.apply( this );\r
+                                                                                                       },\r
+                                                                                                       setup : function( type, element )\r
+                                                                                                       {\r
+                                                                                                               if ( type == IMAGE )\r
+                                                                                                                       this.setValue( element.getAttribute( 'vspace' ) );\r
+                                                                                                       },\r
+                                                                                                       commit : function( type, element )\r
+                                                                                                       {\r
+                                                                                                               if ( type == IMAGE )\r
+                                                                                                               {\r
+                                                                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                                                                               element.setAttribute( 'vspace', this.getValue() );\r
+                                                                                                               }\r
+                                                                                                               else if ( type == PREVIEW )\r
+                                                                                                               {\r
+                                                                                                                       var value = parseInt( this.getValue(), 10 );\r
+                                                                                                                       value = isNaN( value ) ? 0 : value;\r
+                                                                                                                       element.setAttribute( 'vspace', this.getValue() );\r
+                                                                                                                       element.setStyle( 'margin-top', value + 'px' );\r
+                                                                                                                       element.setStyle( 'margin-bottom', value + 'px' );\r
+                                                                                                               }\r
+                                                                                                               else if ( type == CLEANUP )\r
+                                                                                                               {\r
+                                                                                                                       element.removeAttribute( 'vspace' );\r
+                                                                                                                       element.removeStyle( 'margin-top' );\r
+                                                                                                                       element.removeStyle( 'margin-bottom' );\r
+                                                                                                               }\r
+                                                                                                       }\r
+                                                                                               },\r
+                                                                                               {\r
+                                                                                                       id : 'cmbAlign',\r
+                                                                                                       type : 'select',\r
+                                                                                                       labelLayout : 'horizontal',\r
+                                                                                                       widths : [ '35%','65%' ],\r
+                                                                                                       style : 'width:90px',\r
+                                                                                                       label : editor.lang.image.align,\r
+                                                                                                       'default' : '',\r
+                                                                                                       items :\r
+                                                                                                       [\r
+                                                                                                               [ editor.lang.common.notSet , ''],\r
+                                                                                                               [ editor.lang.image.alignLeft , 'left'],\r
+                                                                                                               [ editor.lang.image.alignAbsBottom , 'absBottom'],\r
+                                                                                                               [ editor.lang.image.alignAbsMiddle , 'absMiddle'],\r
+                                                                                                               [ editor.lang.image.alignBaseline , 'baseline'],\r
+                                                                                                               [ editor.lang.image.alignBottom , 'bottom'],\r
+                                                                                                               [ editor.lang.image.alignMiddle , 'middle'],\r
+                                                                                                               [ editor.lang.image.alignRight , 'right'],\r
+                                                                                                               [ editor.lang.image.alignTextTop , 'textTop'],\r
+                                                                                                               [ editor.lang.image.alignTop , 'top']\r
+                                                                                                       ],\r
+                                                                                                       onChange : function()\r
+                                                                                                       {\r
+                                                                                                               updatePreview( this.getDialog() );\r
+                                                                                                       },\r
+                                                                                                       setup : function( type, element )\r
+                                                                                                       {\r
+                                                                                                               if ( type == IMAGE )\r
+                                                                                                                       this.setValue( element.getAttribute( 'align' ) );\r
+                                                                                                       },\r
+                                                                                                       commit : function( type, element )\r
+                                                                                                       {\r
+                                                                                                               var value = this.getValue();\r
+                                                                                                               if ( type == IMAGE )\r
+                                                                                                               {\r
+                                                                                                                       if ( value || this.isChanged() )\r
+                                                                                                                               element.setAttribute( 'align', value );\r
+                                                                                                               }\r
+                                                                                                               else if ( type == PREVIEW )\r
+                                                                                                               {\r
+                                                                                                                       element.setAttribute( 'align', this.getValue() );\r
+\r
+                                                                                                                       if ( value == 'absMiddle' || value == 'middle' )\r
+                                                                                                                               element.setStyle( 'vertical-align', 'middle' );\r
+                                                                                                                       else if ( value == 'top' || value == 'textTop' )\r
+                                                                                                                               element.setStyle( 'vertical-align', 'top' );\r
+                                                                                                                       else\r
+                                                                                                                               element.removeStyle( 'vertical-align' );\r
+\r
+                                                                                                                       if ( value == 'right' || value == 'left' )\r
+                                                                                                                               element.setStyle( 'styleFloat', value );\r
+                                                                                                                       else\r
+                                                                                                                               element.removeStyle( 'styleFloat' );\r
+\r
+                                                                                                               }\r
+                                                                                                               else if ( type == CLEANUP )\r
+                                                                                                               {\r
+                                                                                                                       element.removeAttribute( 'align' );\r
+                                                                                                               }\r
+                                                                                                       }\r
+                                                                                               }\r
+                                                                                       ]\r
+                                                                               }\r
+                                                                       ]\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'vbox',\r
+                                                                       height : '250px',\r
+                                                                       children :\r
+                                                                       [\r
+                                                                               {\r
+                                                                                       type : 'html',\r
+                                                                                       style : 'width:95%;',\r
+                                                                                       html : '<div>' + CKEDITOR.tools.htmlEncode( editor.lang.image.preview ) +'<br>'+\r
+                                                                                       '<div id="ImagePreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div>'+\r
+                                                                                       '<div id="ImagePreviewBox">'+\r
+                                                                                       '<a href="javascript:void(0)" target="_blank" onclick="return false;" id="previewLink">'+\r
+                                                                                       '<img id="previewImage" src="" alt="" /></a>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. '+\r
+                                                                                       'Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, '+\r
+                                                                                       'nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.' +\r
+                                                                                       '</div>'+'</div>'\r
+                                                                               }\r
+                                                                       ]\r
+                                                               }\r
+                                                       ]\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'Link',\r
+                                       label : editor.lang.link.title,\r
+                                       padding : 0,\r
+                                       elements :\r
+                                       [\r
+                                               {\r
+                                                       id : 'txtUrl',\r
+                                                       type : 'text',\r
+                                                       label : editor.lang.image.url,\r
+                                                       style : 'width: 100%',\r
+                                                       'default' : '',\r
+                                                       setup : function( type, element )\r
+                                                       {\r
+                                                               if ( type == LINK )\r
+                                                               {\r
+                                                                       var href = element.getAttribute( '_cke_saved_href' );\r
+                                                                       if ( !href )\r
+                                                                               href = element.getAttribute( 'href' );\r
+                                                                       this.setValue( href );\r
+                                                               }\r
+                                                       },\r
+                                                       commit : function( type, element )\r
+                                                       {\r
+                                                               if ( type == LINK )\r
+                                                               {\r
+                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                       {\r
+                                                                               element.setAttribute( '_cke_saved_href', decodeURI( this.getValue() ) );\r
+                                                                               element.setAttribute( 'href', 'javascript:void(0)/*' +\r
+                                                                                       CKEDITOR.tools.getNextNumber() + '*/' );\r
+\r
+                                                                               if ( this.getValue() || !editor.config.image_removeLinkByEmptyURL )\r
+                                                                                       this.getDialog().addLink = true;\r
+                                                                       }\r
+                                                               }\r
+                                                       }\r
+                                               },\r
+                                               {\r
+                                                       type : 'button',\r
+                                                       id : 'browse',\r
+                                                       filebrowser : 'Link:txtUrl',\r
+                                                       style : 'float:right',\r
+                                                       hidden : true,\r
+                                                       label : editor.lang.common.browseServer\r
+                                               },\r
+                                               {\r
+                                                       id : 'cmbTarget',\r
+                                                       type : 'select',\r
+                                                       label : editor.lang.link.target,\r
+                                                       'default' : '',\r
+                                                       items :\r
+                                                       [\r
+                                                               [ editor.lang.link.targetNotSet , ''],\r
+                                                               [ editor.lang.link.targetNew , '_blank'],\r
+                                                               [ editor.lang.link.targetTop , '_top'],\r
+                                                               [ editor.lang.link.targetSelf , '_self'],\r
+                                                               [ editor.lang.link.targetParent , '_parent']\r
+                                                       ],\r
+                                                       setup : function( type, element )\r
+                                                       {\r
+                                                               if ( type == LINK )\r
+                                                                       this.setValue( element.getAttribute( 'target' ) );\r
+                                                       },\r
+                                                       commit : function( type, element )\r
+                                                       {\r
+                                                               if ( type == LINK )\r
+                                                               {\r
+                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                               element.setAttribute( 'target', this.getValue() );\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'Upload',\r
+                                       hidden : true,\r
+                                       filebrowser : 'uploadButton',\r
+                                       label : editor.lang.image.upload,\r
+                                       elements :\r
+                                       [\r
+                                               {\r
+                                                       type : 'file',\r
+                                                       id : 'upload',\r
+                                                       label : editor.lang.image.btnUpload,\r
+                                                       style: 'height:40px',\r
+                                                       size : 38\r
+                                               },\r
+                                               {\r
+                                                       type : 'fileButton',\r
+                                                       id : 'uploadButton',\r
+                                                       filebrowser : 'info:txtUrl',\r
+                                                       label : editor.lang.image.btnUpload,\r
+                                                       'for' : [ 'Upload', 'upload' ]\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'advanced',\r
+                                       label : editor.lang.common.advancedTab,\r
+                                       elements :\r
+                                       [\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '50%', '25%', '25%' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'linkId',\r
+                                                                       label : editor.lang.common.id,\r
+                                                                       setup : function( type, element )\r
+                                                                       {\r
+                                                                               if ( type == IMAGE )\r
+                                                                                       this.setValue( element.getAttribute( 'id' ) );\r
+                                                                       },\r
+                                                                       commit : function( type, element )\r
+                                                                       {\r
+                                                                               if ( type == IMAGE )\r
+                                                                               {\r
+                                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                                               element.setAttribute( 'id', this.getValue() );\r
+                                                                               }\r
+                                                                       }\r
+                                                               },\r
+                                                               {\r
+                                                                       id : 'cmbLangDir',\r
+                                                                       type : 'select',\r
+                                                                       style : 'width : 100px;',\r
+                                                                       label : editor.lang.common.langDir,\r
+                                                                       'default' : '',\r
+                                                                       items :\r
+                                                                       [\r
+                                                                               [ editor.lang.common.notSet, '' ],\r
+                                                                               [ editor.lang.common.langDirLtr, 'ltr' ],\r
+                                                                               [ editor.lang.common.langDirRtl, 'rtl' ]\r
+                                                                       ],\r
+                                                                       setup : function( type, element )\r
+                                                                       {\r
+                                                                               if ( type == IMAGE )\r
+                                                                                       this.setValue( element.getAttribute( 'dir' ) );\r
+                                                                       },\r
+                                                                       commit : function( type, element )\r
+                                                                       {\r
+                                                                               if ( type == IMAGE )\r
+                                                                               {\r
+                                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                                               element.setAttribute( 'dir', this.getValue() );\r
+                                                                               }\r
+                                                                       }\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'txtLangCode',\r
+                                                                       label : editor.lang.common.langCode,\r
+                                                                       'default' : '',\r
+                                                                       setup : function( type, element )\r
+                                                                       {\r
+                                                                               if ( type == IMAGE )\r
+                                                                                       this.setValue( element.getAttribute( 'lang' ) );\r
+                                                                       },\r
+                                                                       commit : function( type, element )\r
+                                                                       {\r
+                                                                               if ( type == IMAGE )\r
+                                                                               {\r
+                                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                                               element.setAttribute( 'lang', this.getValue() );\r
+                                                                               }\r
+                                                                       }\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'text',\r
+                                                       id : 'txtGenLongDescr',\r
+                                                       label : editor.lang.common.longDescr,\r
+                                                       setup : function( type, element )\r
+                                                       {\r
+                                                               if ( type == IMAGE )\r
+                                                                       this.setValue( element.getAttribute( 'longDesc' ) );\r
+                                                       },\r
+                                                       commit : function( type, element )\r
+                                                       {\r
+                                                               if ( type == IMAGE )\r
+                                                               {\r
+                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                               element.setAttribute( 'longDesc', this.getValue() );\r
+                                                               }\r
+                                                       }\r
+                                               },\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '50%', '50%' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'txtGenClass',\r
+                                                                       label : editor.lang.common.cssClass,\r
+                                                                       'default' : '',\r
+                                                                       setup : function( type, element )\r
+                                                                       {\r
+                                                                               if ( type == IMAGE )\r
+                                                                                       this.setValue( element.getAttribute( 'class' ) );\r
+                                                                       },\r
+                                                                       commit : function( type, element )\r
+                                                                       {\r
+                                                                               if ( type == IMAGE )\r
+                                                                               {\r
+                                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                                               element.setAttribute( 'class', this.getValue() );\r
+                                                                               }\r
+                                                                       }\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'txtGenTitle',\r
+                                                                       label : editor.lang.common.advisoryTitle,\r
+                                                                       'default' : '',\r
+                                                                       onChange : function()\r
+                                                                       {\r
+                                                                               updatePreview( this.getDialog() );\r
+                                                                       },\r
+                                                                       setup : function( type, element )\r
+                                                                       {\r
+                                                                               if ( type == IMAGE )\r
+                                                                                       this.setValue( element.getAttribute( 'title' ) );\r
+                                                                       },\r
+                                                                       commit : function( type, element )\r
+                                                                       {\r
+                                                                               if ( type == IMAGE )\r
+                                                                               {\r
+                                                                                       if ( this.getValue() || this.isChanged() )\r
+                                                                                               element.setAttribute( 'title', this.getValue() );\r
+                                                                               }\r
+                                                                               else if ( type == PREVIEW )\r
+                                                                               {\r
+                                                                                       element.setAttribute( 'title', this.getValue() );\r
+                                                                               }\r
+                                                                               else if ( type == CLEANUP )\r
+                                                                               {\r
+                                                                                       element.removeAttribute( 'title' );\r
+                                                                               }\r
+                                                                       }\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'text',\r
+                                                       id : 'txtdlgGenStyle',\r
+                                                       label : editor.lang.common.cssStyle,\r
+                                                       'default' : '',\r
+                                                       setup : function( type, element )\r
+                                                       {\r
+                                                               if ( type == IMAGE )\r
+                                                               {\r
+                                                                       var genStyle = element.getAttribute( 'style' );\r
+                                                                       if ( !genStyle && element.$.style.cssText )\r
+                                                                               genStyle = element.$.style.cssText;\r
+                                                                       this.setValue( genStyle );\r
+\r
+                                                                       var height = element.$.style.height,\r
+                                                                               width = element.$.style.width,\r
+                                                                               aMatchH  = ( height ? height : '' ).match( regexGetSize ),\r
+                                                                               aMatchW  = ( width ? width : '').match( regexGetSize );\r
+\r
+                                                                       this.attributesInStyle =\r
+                                                                       {\r
+                                                                               height : !!aMatchH,\r
+                                                                               width : !!aMatchW\r
+                                                                       };\r
+                                                               }\r
+                                                       },\r
+                                                       commit : function( type, element )\r
+                                                       {\r
+                                                               if ( type == IMAGE && ( this.getValue() || this.isChanged() ) )\r
+                                                               {\r
+                                                                       element.setAttribute( 'style', this.getValue() );\r
+\r
+                                                                       // Set STYLE dimensions.\r
+                                                                       var height = element.getAttribute( 'height' ),\r
+                                                                               width = element.getAttribute( 'width' );\r
+\r
+                                                                       if ( this.attributesInStyle && this.attributesInStyle.height )\r
+                                                                       {\r
+                                                                               if ( height )\r
+                                                                               {\r
+                                                                                       if ( height.match( regexGetSize )[2] == '%' )                   // % is allowed\r
+                                                                                               element.setStyle( 'height', height + '%' );\r
+                                                                                       else\r
+                                                                                               element.setStyle( 'height', height + 'px' );\r
+                                                                               }\r
+                                                                               else\r
+                                                                                       element.removeStyle( 'height' );\r
+                                                                       }\r
+                                                                       if ( this.attributesInStyle && this.attributesInStyle.width )\r
+                                                                       {\r
+                                                                               if ( width )\r
+                                                                               {\r
+                                                                                       if ( width.match( regexGetSize )[2] == '%' )                    // % is allowed\r
+                                                                                               element.setStyle( 'width', width + '%' );\r
+                                                                                       else\r
+                                                                                               element.setStyle( 'width', width + 'px' );\r
+                                                                               }\r
+                                                                               else\r
+                                                                                       element.removeStyle( 'width' );\r
+                                                                       }\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       ]\r
+                               }\r
+                       ]\r
+               };\r
+       };\r
+\r
+       CKEDITOR.dialog.add( 'image', function( editor )\r
+               {\r
+                       return imageDialog( editor, 'image' );\r
+               });\r
+\r
+       CKEDITOR.dialog.add( 'imagebutton', function( editor )\r
+               {\r
+                       return imageDialog( editor, 'imagebutton' );\r
+               });\r
+})();\r
diff --git a/_source/plugins/image/plugin.js b/_source/plugins/image/plugin.js
new file mode 100644 (file)
index 0000000..09b72c4
--- /dev/null
@@ -0,0 +1,64 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Image plugin\r
+ */\r
+\r
+CKEDITOR.plugins.add( 'image',\r
+{\r
+       init : function( editor )\r
+       {\r
+               var pluginName = 'image';\r
+\r
+               // Register the dialog.\r
+               CKEDITOR.dialog.add( pluginName, this.path + 'dialogs/image.js' );\r
+\r
+               // Register the command.\r
+               editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName ) );\r
+\r
+               // Register the toolbar button.\r
+               editor.ui.addButton( 'Image',\r
+                       {\r
+                               label : editor.lang.common.image,\r
+                               command : pluginName\r
+                       });\r
+\r
+               // If the "menu" plugin is loaded, register the menu items.\r
+               if ( editor.addMenuItems )\r
+               {\r
+                       editor.addMenuItems(\r
+                               {\r
+                                       image :\r
+                                       {\r
+                                               label : editor.lang.image.menu,\r
+                                               command : 'image',\r
+                                               group : 'image'\r
+                                       }\r
+                               });\r
+               }\r
+\r
+               // If the "contextmenu" plugin is loaded, register the listeners.\r
+               if ( editor.contextMenu )\r
+               {\r
+                       editor.contextMenu.addListener( function( element, selection )\r
+                               {\r
+                                       if ( !element || !element.is( 'img' ) || element.getAttribute( '_cke_realelement' ) )\r
+                                               return null;\r
+\r
+                                       return { image : CKEDITOR.TRISTATE_OFF };\r
+                               });\r
+               }\r
+       }\r
+} );\r
+\r
+/**\r
+ * Whether to remove links when emptying the link URL field in the image dialog.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.image_removeLinkByEmptyURL = false;\r
+ */\r
+CKEDITOR.config.image_removeLinkByEmptyURL = true;\r
diff --git a/_source/plugins/indent/plugin.js b/_source/plugins/indent/plugin.js
new file mode 100644 (file)
index 0000000..c688821
--- /dev/null
@@ -0,0 +1,323 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Increse and decrease indent commands.\r
+ */\r
+\r
+(function()\r
+{\r
+       var listNodeNames = { ol : 1, ul : 1 };\r
+\r
+       function setState( editor, state )\r
+       {\r
+               editor.getCommand( this.name ).setState( state );\r
+       }\r
+\r
+       function onSelectionChange( evt )\r
+       {\r
+               var elements = evt.data.path.elements,\r
+                       listNode, listItem,\r
+                       editor = evt.editor;\r
+\r
+               for ( var i = 0 ; i < elements.length ; i++ )\r
+               {\r
+                       if ( elements[i].getName() == 'li' )\r
+                       {\r
+                               listItem = elements[i];\r
+                               continue;\r
+                       }\r
+                       if ( listNodeNames[ elements[i].getName() ] )\r
+                       {\r
+                               listNode = elements[i];\r
+                               break;\r
+                       }\r
+               }\r
+\r
+               if ( listNode )\r
+               {\r
+                       if ( this.name == 'outdent' )\r
+                               return setState.call( this, editor, CKEDITOR.TRISTATE_OFF );\r
+                       else\r
+                       {\r
+                               while ( listItem && ( listItem = listItem.getPrevious( CKEDITOR.dom.walker.whitespaces( true ) ) ) )\r
+                               {\r
+                                       if ( listItem.getName && listItem.getName() == 'li' )\r
+                                               return setState.call( this, editor, CKEDITOR.TRISTATE_OFF );\r
+                               }\r
+                               return setState.call( this, editor, CKEDITOR.TRISTATE_DISABLED );\r
+                       }\r
+               }\r
+\r
+               if ( !this.useIndentClasses && this.name == 'indent' )\r
+                       return setState.call( this, editor, CKEDITOR.TRISTATE_OFF );\r
+\r
+               var path = evt.data.path,\r
+                       firstBlock = path.block || path.blockLimit;\r
+               if ( !firstBlock )\r
+                       return setState.call( this, editor, CKEDITOR.TRISTATE_DISABLED );\r
+\r
+               if ( this.useIndentClasses )\r
+               {\r
+                       var indentClass = firstBlock.$.className.match( this.classNameRegex ),\r
+                               indentStep = 0;\r
+                       if ( indentClass )\r
+                       {\r
+                               indentClass = indentClass[1];\r
+                               indentStep = this.indentClassMap[ indentClass ];\r
+                       }\r
+                       if ( ( this.name == 'outdent' && !indentStep ) ||\r
+                                       ( this.name == 'indent' && indentStep == editor.config.indentClasses.length ) )\r
+                               return setState.call( this, editor, CKEDITOR.TRISTATE_DISABLED );\r
+                       return setState.call( this, editor, CKEDITOR.TRISTATE_OFF );\r
+               }\r
+               else\r
+               {\r
+                       var indent = parseInt( firstBlock.getStyle( this.indentCssProperty ), 10 );\r
+                       if ( isNaN( indent ) )\r
+                               indent = 0;\r
+                       if ( indent <= 0 )\r
+                               return setState.call( this, editor, CKEDITOR.TRISTATE_DISABLED );\r
+                       return setState.call( this, editor, CKEDITOR.TRISTATE_OFF );\r
+               }\r
+       }\r
+\r
+       function indentList( editor, range, listNode )\r
+       {\r
+               // Our starting and ending points of the range might be inside some blocks under a list item...\r
+               // So before playing with the iterator, we need to expand the block to include the list items.\r
+               var startContainer = range.startContainer,\r
+                       endContainer = range.endContainer;\r
+               while ( startContainer && !startContainer.getParent().equals( listNode ) )\r
+                       startContainer = startContainer.getParent();\r
+               while ( endContainer && !endContainer.getParent().equals( listNode ) )\r
+                       endContainer = endContainer.getParent();\r
+\r
+               if ( !startContainer || !endContainer )\r
+                       return;\r
+\r
+               // Now we can iterate over the individual items on the same tree depth.\r
+               var block = startContainer,\r
+                       itemsToMove = [],\r
+                       stopFlag = false;\r
+               while ( !stopFlag )\r
+               {\r
+                       if ( block.equals( endContainer ) )\r
+                               stopFlag = true;\r
+                       itemsToMove.push( block );\r
+                       block = block.getNext();\r
+               }\r
+               if ( itemsToMove.length < 1 )\r
+                       return;\r
+\r
+               // Do indent or outdent operations on the array model of the list, not the\r
+               // list's DOM tree itself. The array model demands that it knows as much as\r
+               // possible about the surrounding lists, we need to feed it the further\r
+               // ancestor node that is still a list.\r
+               var listParents = listNode.getParents( true );\r
+               for ( var i = 0 ; i < listParents.length ; i++ )\r
+               {\r
+                       if ( listParents[i].getName && listNodeNames[ listParents[i].getName() ] )\r
+                       {\r
+                               listNode = listParents[i];\r
+                               break;\r
+                       }\r
+               }\r
+               var indentOffset = this.name == 'indent' ? 1 : -1,\r
+                       startItem = itemsToMove[0],\r
+                       lastItem = itemsToMove[ itemsToMove.length - 1 ],\r
+                       database = {};\r
+\r
+               // Convert the list DOM tree into a one dimensional array.\r
+               var listArray = CKEDITOR.plugins.list.listToArray( listNode, database );\r
+\r
+               // Apply indenting or outdenting on the array.\r
+               var baseIndent = listArray[ lastItem.getCustomData( 'listarray_index' ) ].indent;\r
+               for ( i = startItem.getCustomData( 'listarray_index' ) ; i <= lastItem.getCustomData( 'listarray_index' ) ; i++ )\r
+                       listArray[i].indent += indentOffset;\r
+               for ( i = lastItem.getCustomData( 'listarray_index' ) + 1 ;\r
+                               i < listArray.length && listArray[i].indent > baseIndent ; i++ )\r
+                       listArray[i].indent += indentOffset;\r
+\r
+               // Convert the array back to a DOM forest (yes we might have a few subtrees now).\r
+               // And replace the old list with the new forest.\r
+               var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, 0 );\r
+\r
+               // Avoid nested <li> after outdent even they're visually same,\r
+               // recording them for later refactoring.(#3982)\r
+               if ( this.name == 'outdent' )\r
+               {\r
+                       var parentLiElement;\r
+                       if ( ( parentLiElement = listNode.getParent() ) && parentLiElement.is( 'li' ) )\r
+                       {\r
+                               var children = newList.listNode.getChildren(),\r
+                                       pendingLis = [],\r
+                                       count = children.count(),\r
+                                       child;\r
+\r
+                               for ( i = count - 1 ; i >= 0 ; i-- )\r
+                               {\r
+                                       if( ( child = children.getItem( i ) ) && child.is && child.is( 'li' )  )\r
+                                               pendingLis.push( child );\r
+                               }\r
+                       }\r
+               }\r
+\r
+               if ( newList )\r
+                       newList.listNode.replace( listNode );\r
+\r
+               // Move the nested <li> to be appeared after the parent.\r
+               if ( pendingLis && pendingLis.length )\r
+               {\r
+                       for (  i = 0; i < pendingLis.length ; i++ )\r
+                       {\r
+                               var li = pendingLis[ i ],\r
+                                       followingList = li;\r
+\r
+                               // Nest preceding <ul>/<ol> inside current <li> if any.\r
+                               while( ( followingList = followingList.getNext() ) &&\r
+                                          followingList.is &&\r
+                                          followingList.getName() in listNodeNames )\r
+                               {\r
+                                       li.append( followingList );\r
+                               }\r
+\r
+                               li.insertAfter( parentLiElement );\r
+                       }\r
+               }\r
+\r
+               // Clean up the markers.\r
+               CKEDITOR.dom.element.clearAllMarkers( database );\r
+       }\r
+\r
+       function indentBlock( editor, range )\r
+       {\r
+               var iterator = range.createIterator(),\r
+                       enterMode = editor.config.enterMode;\r
+               iterator.enforceRealBlocks = true;\r
+               iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR;\r
+               var block;\r
+               while ( ( block = iterator.getNextParagraph() ) )\r
+               {\r
+\r
+                       if ( this.useIndentClasses )\r
+                       {\r
+                               // Transform current class name to indent step index.\r
+                               var indentClass = block.$.className.match( this.classNameRegex ),\r
+                                       indentStep = 0;\r
+                               if ( indentClass )\r
+                               {\r
+                                       indentClass = indentClass[1];\r
+                                       indentStep = this.indentClassMap[ indentClass ];\r
+                               }\r
+\r
+                               // Operate on indent step index, transform indent step index back to class\r
+                               // name.\r
+                               if ( this.name == 'outdent' )\r
+                                       indentStep--;\r
+                               else\r
+                                       indentStep++;\r
+                               indentStep = Math.min( indentStep, editor.config.indentClasses.length );\r
+                               indentStep = Math.max( indentStep, 0 );\r
+                               var className = CKEDITOR.tools.ltrim( block.$.className.replace( this.classNameRegex, '' ) );\r
+                               if ( indentStep < 1 )\r
+                                       block.$.className = className;\r
+                               else\r
+                                       block.addClass( editor.config.indentClasses[ indentStep - 1 ] );\r
+                       }\r
+                       else\r
+                       {\r
+                               var currentOffset = parseInt( block.getStyle( this.indentCssProperty ), 10 );\r
+                               if ( isNaN( currentOffset ) )\r
+                                       currentOffset = 0;\r
+                               currentOffset += ( this.name == 'indent' ? 1 : -1 ) * editor.config.indentOffset;\r
+                               currentOffset = Math.max( currentOffset, 0 );\r
+                               currentOffset = Math.ceil( currentOffset / editor.config.indentOffset ) * editor.config.indentOffset;\r
+                               block.setStyle( this.indentCssProperty, currentOffset ? currentOffset + editor.config.indentUnit : '' );\r
+                               if ( block.getAttribute( 'style' ) === '' )\r
+                                       block.removeAttribute( 'style' );\r
+                       }\r
+               }\r
+       }\r
+\r
+       function indentCommand( editor, name )\r
+       {\r
+               this.name = name;\r
+               this.useIndentClasses = editor.config.indentClasses && editor.config.indentClasses.length > 0;\r
+               if ( this.useIndentClasses )\r
+               {\r
+                       this.classNameRegex = new RegExp( '(?:^|\\s+)(' + editor.config.indentClasses.join( '|' ) + ')(?=$|\\s)' );\r
+                       this.indentClassMap = {};\r
+                       for ( var i = 0 ; i < editor.config.indentClasses.length ; i++ )\r
+                               this.indentClassMap[ editor.config.indentClasses[i] ] = i + 1;\r
+               }\r
+               else\r
+                       this.indentCssProperty = editor.config.contentsLangDirection == 'ltr' ? 'margin-left' : 'margin-right';\r
+       }\r
+\r
+       indentCommand.prototype = {\r
+               exec : function( editor )\r
+               {\r
+                       var selection = editor.getSelection(),\r
+                               range = selection && selection.getRanges()[0];\r
+\r
+                       if ( !selection || !range )\r
+                               return;\r
+\r
+                       var bookmarks = selection.createBookmarks( true ),\r
+                               nearestListBlock = range.getCommonAncestor();\r
+\r
+                       while ( nearestListBlock && !( nearestListBlock.type == CKEDITOR.NODE_ELEMENT &&\r
+                               listNodeNames[ nearestListBlock.getName() ] ) )\r
+                               nearestListBlock = nearestListBlock.getParent();\r
+\r
+                       if ( nearestListBlock )\r
+                               indentList.call( this, editor, range, nearestListBlock );\r
+                       else\r
+                               indentBlock.call( this, editor, range );\r
+\r
+                       editor.focus();\r
+                       editor.forceNextSelectionCheck();\r
+                       selection.selectBookmarks( bookmarks );\r
+               }\r
+       };\r
+\r
+       CKEDITOR.plugins.add( 'indent',\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       // Register commands.\r
+                       var indent = new indentCommand( editor, 'indent' ),\r
+                               outdent = new indentCommand( editor, 'outdent' );\r
+                       editor.addCommand( 'indent', indent );\r
+                       editor.addCommand( 'outdent', outdent );\r
+\r
+                       // Register the toolbar buttons.\r
+                       editor.ui.addButton( 'Indent',\r
+                               {\r
+                                       label : editor.lang.indent,\r
+                                       command : 'indent'\r
+                               });\r
+                       editor.ui.addButton( 'Outdent',\r
+                               {\r
+                                       label : editor.lang.outdent,\r
+                                       command : 'outdent'\r
+                               });\r
+\r
+                       // Register the state changing handlers.\r
+                       editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, indent ) );\r
+                       editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, outdent ) );\r
+               },\r
+\r
+               requires : [ 'domiterator', 'list' ]\r
+       } );\r
+})();\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.config,\r
+       {\r
+               indentOffset : 40,\r
+               indentUnit : 'px',\r
+               indentClasses : null\r
+       });\r
diff --git a/_source/plugins/justify/plugin.js b/_source/plugins/justify/plugin.js
new file mode 100644 (file)
index 0000000..39bf8f6
--- /dev/null
@@ -0,0 +1,164 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Justify commands.\r
+ */\r
+\r
+(function()\r
+{\r
+       var alignRemoveRegex = /(-moz-|-webkit-|start|auto)/i;\r
+\r
+       function getState( editor, path )\r
+       {\r
+               var firstBlock = path.block || path.blockLimit;\r
+\r
+               if ( !firstBlock || firstBlock.getName() == 'body' )\r
+                       return CKEDITOR.TRISTATE_OFF;\r
+\r
+               var currentAlign = firstBlock.getComputedStyle( 'text-align' ).replace( alignRemoveRegex, '' );\r
+               if ( ( !currentAlign && this.isDefaultAlign ) || currentAlign == this.value )\r
+                       return CKEDITOR.TRISTATE_ON;\r
+               return CKEDITOR.TRISTATE_OFF;\r
+       }\r
+\r
+       function onSelectionChange( evt )\r
+       {\r
+               var command = evt.editor.getCommand( this.name );\r
+               command.state = getState.call( this, evt.editor, evt.data.path );\r
+               command.fire( 'state' );\r
+       }\r
+\r
+       function justifyCommand( editor, name, value )\r
+       {\r
+               this.name = name;\r
+               this.value = value;\r
+\r
+               var contentDir = editor.config.contentsLangDirection;\r
+               this.isDefaultAlign = ( value == 'left' && contentDir == 'ltr' ) ||\r
+                       ( value == 'right' && contentDir == 'rtl' );\r
+\r
+               var classes = editor.config.justifyClasses;\r
+               if ( classes )\r
+               {\r
+                       switch ( value )\r
+                       {\r
+                               case 'left' :\r
+                                       this.cssClassName = classes[0];\r
+                                       break;\r
+                               case 'center' :\r
+                                       this.cssClassName = classes[1];\r
+                                       break;\r
+                               case 'right' :\r
+                                       this.cssClassName = classes[2];\r
+                                       break;\r
+                               case 'justify' :\r
+                                       this.cssClassName = classes[3];\r
+                                       break;\r
+                       }\r
+\r
+                       this.cssClassRegex = new RegExp( '(?:^|\\s+)(?:' + classes.join( '|' ) + ')(?=$|\\s)' );\r
+               }\r
+       }\r
+\r
+       justifyCommand.prototype = {\r
+               exec : function( editor )\r
+               {\r
+                       var selection = editor.getSelection();\r
+                       if ( !selection )\r
+                               return;\r
+\r
+                       var bookmarks = selection.createBookmarks(),\r
+                               ranges = selection.getRanges();\r
+\r
+\r
+                       var cssClassName = this.cssClassName,\r
+                               iterator,\r
+                               block;\r
+                       for ( var i = ranges.length - 1 ; i >= 0 ; i-- )\r
+                       {\r
+                               iterator = ranges[ i ].createIterator();\r
+                               while ( ( block = iterator.getNextParagraph() ) )\r
+                               {\r
+                                       block.removeAttribute( 'align' );\r
+\r
+                                       if ( cssClassName )\r
+                                       {\r
+                                               // Remove any of the alignment classes from the className.\r
+                                               var className = block.$.className =\r
+                                                       CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) );\r
+\r
+                                               // Append the desired class name.\r
+                                               if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign )\r
+                                                       block.addClass( cssClassName );\r
+                                               else if ( !className )\r
+                                                       block.removeAttribute( 'class' );\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign )\r
+                                                       block.setStyle( 'text-align', this.value );\r
+                                               else\r
+                                                       block.removeStyle( 'text-align' );\r
+                                       }\r
+                               }\r
+\r
+                       }\r
+\r
+                       editor.focus();\r
+                       editor.forceNextSelectionCheck();\r
+                       selection.selectBookmarks( bookmarks );\r
+               }\r
+       };\r
+\r
+       CKEDITOR.plugins.add( 'justify',\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       var left = new justifyCommand( editor, 'justifyleft', 'left' ),\r
+                               center = new justifyCommand( editor, 'justifycenter', 'center' ),\r
+                               right = new justifyCommand( editor, 'justifyright', 'right' ),\r
+                               justify = new justifyCommand( editor, 'justifyblock', 'justify' );\r
+\r
+                       editor.addCommand( 'justifyleft', left );\r
+                       editor.addCommand( 'justifycenter', center );\r
+                       editor.addCommand( 'justifyright', right );\r
+                       editor.addCommand( 'justifyblock', justify );\r
+\r
+                       editor.ui.addButton( 'JustifyLeft',\r
+                               {\r
+                                       label : editor.lang.justify.left,\r
+                                       command : 'justifyleft'\r
+                               } );\r
+                       editor.ui.addButton( 'JustifyCenter',\r
+                               {\r
+                                       label : editor.lang.justify.center,\r
+                                       command : 'justifycenter'\r
+                               } );\r
+                       editor.ui.addButton( 'JustifyRight',\r
+                               {\r
+                                       label : editor.lang.justify.right,\r
+                                       command : 'justifyright'\r
+                               } );\r
+                       editor.ui.addButton( 'JustifyBlock',\r
+                               {\r
+                                       label : editor.lang.justify.block,\r
+                                       command : 'justifyblock'\r
+                               } );\r
+\r
+                       editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, left ) );\r
+                       editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, right ) );\r
+                       editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, center ) );\r
+                       editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, justify ) );\r
+               },\r
+\r
+               requires : [ 'domiterator' ]\r
+       });\r
+})();\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.config,\r
+       {\r
+               justifyClasses : null\r
+       } );\r
diff --git a/_source/plugins/keystrokes/plugin.js b/_source/plugins/keystrokes/plugin.js
new file mode 100644 (file)
index 0000000..b800d2b
--- /dev/null
@@ -0,0 +1,217 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+// Register a plugin named "sample".\r
+CKEDITOR.plugins.add( 'keystrokes',\r
+{\r
+       beforeInit : function( editor )\r
+       {\r
+               /**\r
+                * Controls keystrokes typing in this editor instance.\r
+                * @name CKEDITOR.editor.prototype.keystrokeHandler\r
+                * @type CKEDITOR.keystrokeHandler\r
+                * @example\r
+                */\r
+               editor.keystrokeHandler = new CKEDITOR.keystrokeHandler( editor );\r
+\r
+               editor.specialKeys = {};\r
+       },\r
+\r
+       init : function( editor )\r
+       {\r
+               var keystrokesConfig    = editor.config.keystrokes,\r
+                       blockedConfig           = editor.config.blockedKeystrokes;\r
+\r
+               var keystrokes                  = editor.keystrokeHandler.keystrokes,\r
+                       blockedKeystrokes       = editor.keystrokeHandler.blockedKeystrokes;\r
+\r
+               for ( var i = 0 ; i < keystrokesConfig.length ; i++ )\r
+               {\r
+                       keystrokes[ keystrokesConfig[i][0] ] = keystrokesConfig[i][1];\r
+               }\r
+\r
+               for ( i = 0 ; i < blockedConfig.length ; i++ )\r
+               {\r
+                       blockedKeystrokes[ blockedConfig[i] ] = 1;\r
+               }\r
+       }\r
+});\r
+\r
+/**\r
+ * Controls keystrokes typing in an editor instance.\r
+ * @constructor\r
+ * @param {CKEDITOR.editor} editor The editor instance.\r
+ * @example\r
+ */\r
+CKEDITOR.keystrokeHandler = function( editor )\r
+{\r
+       if ( editor.keystrokeHandler )\r
+               return editor.keystrokeHandler;\r
+\r
+       /**\r
+        * List of keystrokes associated to commands. Each entry points to the\r
+        * command to be executed.\r
+        * @type Object\r
+        * @example\r
+        */\r
+       this.keystrokes = {};\r
+\r
+       /**\r
+        * List of keystrokes that should be blocked if not defined at\r
+        * {@link keystrokes}. In this way it is possible to block the default\r
+        * browser behavior for those keystrokes.\r
+        * @type Object\r
+        * @example\r
+        */\r
+       this.blockedKeystrokes = {};\r
+\r
+       this._ =\r
+       {\r
+               editor : editor\r
+       };\r
+\r
+       return this;\r
+};\r
+\r
+(function()\r
+{\r
+       var cancel;\r
+\r
+       var onKeyDown = function( event )\r
+       {\r
+               // The DOM event object is passed by the "data" property.\r
+               event = event.data;\r
+\r
+               var keyCombination = event.getKeystroke();\r
+               var command = this.keystrokes[ keyCombination ];\r
+               var editor = this._.editor;\r
+\r
+               cancel = ( editor.fire( 'key', { keyCode : keyCombination } ) === true );\r
+\r
+               if ( !cancel )\r
+               {\r
+                       if ( command )\r
+                       {\r
+                               var data = { from : 'keystrokeHandler' };\r
+                               cancel = ( editor.execCommand( command, data ) !== false );\r
+                       }\r
+\r
+                       if  ( !cancel )\r
+                       {\r
+                               var handler = editor.specialKeys[ keyCombination ];\r
+                               cancel = ( handler && handler( editor ) === true );\r
+\r
+                               if ( !cancel )\r
+                                       cancel = !!this.blockedKeystrokes[ keyCombination ];\r
+                       }\r
+               }\r
+\r
+               if ( cancel )\r
+                       event.preventDefault( true );\r
+\r
+               return !cancel;\r
+       };\r
+\r
+       var onKeyPress = function( event )\r
+       {\r
+               if ( cancel )\r
+               {\r
+                       cancel = false;\r
+                       event.data.preventDefault( true );\r
+               }\r
+       };\r
+\r
+       CKEDITOR.keystrokeHandler.prototype =\r
+       {\r
+               /**\r
+                * Attaches this keystroke handle to a DOM object. Keystrokes typed\r
+                ** over this object will get handled by this keystrokeHandler.\r
+                * @param {CKEDITOR.dom.domObject} domObject The DOM object to attach\r
+                *              to.\r
+                * @example\r
+                */\r
+               attach : function( domObject )\r
+               {\r
+                       // For most browsers, it is enough to listen to the keydown event\r
+                       // only.\r
+                       domObject.on( 'keydown', onKeyDown, this );\r
+\r
+                       // Some browsers instead, don't cancel key events in the keydown, but in the\r
+                       // keypress. So we must do a longer trip in those cases.\r
+                       if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) )\r
+                               domObject.on( 'keypress', onKeyPress, this );\r
+               }\r
+       };\r
+})();\r
+\r
+/**\r
+ * A list of keystrokes to be blocked if not defined in the {@link CKEDITOR.config.keystrokes}\r
+ * setting. In this way it is possible to block the default browser behavior\r
+ * for those keystrokes.\r
+ * @type Array\r
+ * @default (see example)\r
+ * @example\r
+ * // This is actually the default value.\r
+ * config.blockedKeystrokes =\r
+ * [\r
+ *     CKEDITOR.CTRL + 66 &#47;*B*&#47;,\r
+ *     CKEDITOR.CTRL + 73 &#47;*I*&#47;,\r
+ *     CKEDITOR.CTRL + 85 &#47;*U*&#47;\r
+ * ];\r
+ */\r
+CKEDITOR.config.blockedKeystrokes =\r
+[\r
+       CKEDITOR.CTRL + 66 /*B*/,\r
+       CKEDITOR.CTRL + 73 /*I*/,\r
+       CKEDITOR.CTRL + 85 /*U*/\r
+];\r
+\r
+/**\r
+ * A list associating keystrokes to editor commands. Each element in the list\r
+ * is an array where the first item is the keystroke, and the second is the\r
+ * name of the command to be executed.\r
+ * @type Array\r
+ * @default (see example)\r
+ * @example\r
+ * // This is actually the default value.\r
+ * config.keystrokes =\r
+ * [\r
+ *     [ CKEDITOR.ALT + 121 &#47;*F10*&#47;, 'toolbarFocus' ],\r
+ *     [ CKEDITOR.ALT + 122 &#47;*F11*&#47;, 'elementsPathFocus' ],\r
+ *\r
+ *     [ CKEDITOR.SHIFT + 121 &#47;*F10*&#47;, 'contextMenu' ],\r
+ *\r
+ *     [ CKEDITOR.CTRL + 90 &#47;*Z*&#47;, 'undo' ],\r
+ *     [ CKEDITOR.CTRL + 89 &#47;*Y*&#47;, 'redo' ],\r
+ *     [ CKEDITOR.CTRL + CKEDITOR.SHIFT + 90 &#47;*Z*&#47;, 'redo' ],\r
+ *\r
+ *     [ CKEDITOR.CTRL + 76 &#47;*L*&#47;, 'link' ],\r
+ *\r
+ *     [ CKEDITOR.CTRL + 66 &#47;*B*&#47;, 'bold' ],\r
+ *     [ CKEDITOR.CTRL + 73 &#47;*I*&#47;, 'italic' ],\r
+ *     [ CKEDITOR.CTRL + 85 &#47;*U*&#47;, 'underline' ],\r
+ *\r
+ *     [ CKEDITOR.ALT + 109 &#47;*-*&#47;, 'toolbarCollapse' ]\r
+ * ];\r
+ */\r
+CKEDITOR.config.keystrokes =\r
+[\r
+       [ CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ],\r
+       [ CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' ],\r
+\r
+       [ CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' ],\r
+\r
+       [ CKEDITOR.CTRL + 90 /*Z*/, 'undo' ],\r
+       [ CKEDITOR.CTRL + 89 /*Y*/, 'redo' ],\r
+       [ CKEDITOR.CTRL + CKEDITOR.SHIFT + 90 /*Z*/, 'redo' ],\r
+\r
+       [ CKEDITOR.CTRL + 76 /*L*/, 'link' ],\r
+\r
+       [ CKEDITOR.CTRL + 66 /*B*/, 'bold' ],\r
+       [ CKEDITOR.CTRL + 73 /*I*/, 'italic' ],\r
+       [ CKEDITOR.CTRL + 85 /*U*/, 'underline' ],\r
+\r
+       [ CKEDITOR.ALT + 109 /*-*/, 'toolbarCollapse' ]\r
+];\r
diff --git a/_source/plugins/link/dialogs/anchor.js b/_source/plugins/link/dialogs/anchor.js
new file mode 100644 (file)
index 0000000..12528f0
--- /dev/null
@@ -0,0 +1,98 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'anchor', function( editor )\r
+{\r
+       // Function called in onShow to load selected element.\r
+       var loadElements = function( editor, selection, element )\r
+       {\r
+               this.editMode = true;\r
+               this.editObj = element;\r
+\r
+               var attributeValue = this.editObj.getAttribute( 'name' );\r
+               if ( attributeValue )\r
+                       this.setValueOf( 'info','txtName', attributeValue );\r
+               else\r
+                       this.setValueOf( 'info','txtName', "" );\r
+       };\r
+\r
+       return {\r
+               title : editor.lang.anchor.title,\r
+               minWidth : 300,\r
+               minHeight : 60,\r
+               onOk : function()\r
+               {\r
+                       // Always create a new anchor, because of IE BUG.\r
+                       var name = this.getValueOf( 'info', 'txtName' ),\r
+                               element = CKEDITOR.env.ie ?\r
+                               editor.document.createElement( '<a name="' + CKEDITOR.tools.htmlEncode( name ) + '">' ) :\r
+                               editor.document.createElement( 'a' );\r
+\r
+                       // Move contents and attributes of old anchor to new anchor.\r
+                       if ( this.editMode )\r
+                       {\r
+                               this.editObj.copyAttributes( element, { name : 1 } );\r
+                               this.editObj.moveChildren( element );\r
+                       }\r
+\r
+                       // Set name.\r
+                       element.removeAttribute( '_cke_saved_name' );\r
+                       element.setAttribute( 'name', name );\r
+\r
+                       // Insert a new anchor.\r
+                       var fakeElement = editor.createFakeElement( element, 'cke_anchor', 'anchor' );\r
+                       if ( !this.editMode )\r
+                               editor.insertElement( fakeElement );\r
+                       else\r
+                       {\r
+                               fakeElement.replace( this.fakeObj );\r
+                               editor.getSelection().selectElement( fakeElement );\r
+                       }\r
+\r
+                       return true;\r
+               },\r
+               onShow : function()\r
+               {\r
+                       this.editObj = false;\r
+                       this.fakeObj = false;\r
+                       this.editMode = false;\r
+\r
+                       var selection = editor.getSelection();\r
+                       var element = selection.getSelectedElement();\r
+                       if ( element && element.getAttribute( '_cke_real_element_type' ) && element.getAttribute( '_cke_real_element_type' ) == 'anchor' )\r
+                       {\r
+                               this.fakeObj = element;\r
+                               element = editor.restoreRealElement( this.fakeObj );\r
+                               loadElements.apply( this, [ editor, selection, element ] );\r
+                               selection.selectElement( this.fakeObj );\r
+                       }\r
+                       this.getContentElement( 'info', 'txtName' ).focus();\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'info',\r
+                               label : editor.lang.anchor.title,\r
+                               accessKey : 'I',\r
+                               elements :\r
+                               [\r
+                                       {\r
+                                               type : 'text',\r
+                                               id : 'txtName',\r
+                                               label : editor.lang.anchor.name,\r
+                                               validate : function()\r
+                                               {\r
+                                                       if ( !this.getValue() )\r
+                                                       {\r
+                                                               alert( editor.lang.anchor.errorName );\r
+                                                               return false;\r
+                                                       }\r
+                                                       return true;\r
+                                               }\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+} );\r
diff --git a/_source/plugins/link/dialogs/link.js b/_source/plugins/link/dialogs/link.js
new file mode 100644 (file)
index 0000000..283c5f7
--- /dev/null
@@ -0,0 +1,1217 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'link', function( editor )\r
+{\r
+       // Handles the event when the "Target" selection box is changed.\r
+       var targetChanged = function()\r
+       {\r
+               var dialog = this.getDialog(),\r
+                       popupFeatures = dialog.getContentElement( 'target', 'popupFeatures' ),\r
+                       targetName = dialog.getContentElement( 'target', 'linkTargetName' ),\r
+                       value = this.getValue();\r
+\r
+               if ( !popupFeatures || !targetName )\r
+                       return;\r
+\r
+               popupFeatures = popupFeatures.getElement();\r
+\r
+               if ( value == 'popup' )\r
+               {\r
+                       popupFeatures.show();\r
+                       targetName.setLabel( editor.lang.link.targetPopupName );\r
+               }\r
+               else\r
+               {\r
+                       popupFeatures.hide();\r
+                       targetName.setLabel( editor.lang.link.targetFrameName );\r
+                       this.getDialog().setValueOf( 'target', 'linkTargetName', value.charAt( 0 ) == '_' ? value : '' );\r
+               }\r
+       };\r
+\r
+       // Handles the event when the "Type" selection box is changed.\r
+       var linkTypeChanged = function()\r
+       {\r
+               var dialog = this.getDialog(),\r
+                       partIds = [ 'urlOptions', 'anchorOptions', 'emailOptions' ],\r
+                       typeValue = this.getValue(),\r
+                       uploadInitiallyHidden = dialog.definition.getContents( 'upload' ).hidden;\r
+\r
+               if ( typeValue == 'url' )\r
+               {\r
+                       if ( editor.config.linkShowTargetTab )\r
+                               dialog.showPage( 'target' );\r
+                       if ( !uploadInitiallyHidden )\r
+                               dialog.showPage( 'upload' );\r
+               }\r
+               else\r
+               {\r
+                       dialog.hidePage( 'target' );\r
+                       if ( !uploadInitiallyHidden )\r
+                               dialog.hidePage( 'upload' );\r
+               }\r
+\r
+               for ( var i = 0 ; i < partIds.length ; i++ )\r
+               {\r
+                       var element = dialog.getContentElement( 'info', partIds[i] );\r
+                       if ( !element )\r
+                               continue;\r
+\r
+                       element = element.getElement().getParent().getParent();\r
+                       if ( partIds[i] == typeValue + 'Options' )\r
+                               element.show();\r
+                       else\r
+                               element.hide();\r
+               }\r
+       };\r
+\r
+       // Loads the parameters in a selected link to the link dialog fields.\r
+       var emailRegex = /^mailto:([^?]+)(?:\?(.+))?$/,\r
+               emailSubjectRegex = /subject=([^;?:@&=$,\/]*)/,\r
+               emailBodyRegex = /body=([^;?:@&=$,\/]*)/,\r
+               anchorRegex = /^#(.*)$/,\r
+               urlRegex = /^((?:http|https|ftp|news):\/\/)?(.*)$/,\r
+               selectableTargets = /^(_(?:self|top|parent|blank))$/;\r
+\r
+       var popupRegex =\r
+               /\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/;\r
+       var popupFeaturesRegex = /(?:^|,)([^=]+)=(\d+|yes|no)/gi;\r
+\r
+       var parseLink = function( editor, element )\r
+       {\r
+               var href = element ? ( element.getAttribute( '_cke_saved_href' ) || element.getAttribute( 'href' ) ) : '',\r
+                       emailMatch = '',\r
+                       anchorMatch = '',\r
+                       urlMatch = false,\r
+                       retval = {};\r
+\r
+               if ( href )\r
+               {\r
+                       emailMatch = href.match( emailRegex );\r
+                       anchorMatch = href.match( anchorRegex );\r
+                       urlMatch = href.match( urlRegex );\r
+               }\r
+\r
+               // Load the link type and URL.\r
+               if ( emailMatch )\r
+               {\r
+                       var subjectMatch = href.match( emailSubjectRegex ),\r
+                               bodyMatch = href.match( emailBodyRegex );\r
+                       retval.type = 'email';\r
+                       retval.email = {};\r
+                       retval.email.address = emailMatch[1];\r
+                       subjectMatch && ( retval.email.subject = decodeURIComponent( subjectMatch[1] ) );\r
+                       bodyMatch && ( retval.email.body = decodeURIComponent( bodyMatch[1] ) );\r
+               }\r
+               else if ( anchorMatch )\r
+               {\r
+                       retval.type = 'anchor';\r
+                       retval.anchor = {};\r
+                       retval.anchor.name = retval.anchor.id = anchorMatch[1];\r
+               }\r
+               else if ( href && urlMatch )            // urlRegex matches empty strings, so need to check for href as well.\r
+               {\r
+                       retval.type = 'url';\r
+                       retval.url = {};\r
+                       retval.url.protocol = urlMatch[1];\r
+                       retval.url.url = urlMatch[2];\r
+               }\r
+               else\r
+                       retval.type = 'url';\r
+\r
+               // Load target and popup settings.\r
+               if ( element )\r
+               {\r
+                       var target = element.getAttribute( 'target' );\r
+                       retval.target = {};\r
+                       retval.adv = {};\r
+\r
+                       // IE BUG: target attribute is an empty string instead of null in IE if it's not set.\r
+                       if ( !target )\r
+                       {\r
+                               var onclick = element.getAttribute( '_cke_pa_onclick' ) || element.getAttribute( 'onclick' ),\r
+                                       onclickMatch = onclick && onclick.match( popupRegex );\r
+                               if ( onclickMatch )\r
+                               {\r
+                                       retval.target.type = 'popup';\r
+                                       retval.target.name = onclickMatch[1];\r
+\r
+                                       var featureMatch;\r
+                                       while ( ( featureMatch = popupFeaturesRegex.exec( onclickMatch[2] ) ) )\r
+                                       {\r
+                                               if ( featureMatch[2] == 'yes' || featureMatch[2] == '1' )\r
+                                                       retval.target[ featureMatch[1] ] = true;\r
+                                               else if ( isFinite( featureMatch[2] ) )\r
+                                                       retval.target[ featureMatch[1] ] = featureMatch[2];\r
+                                       }\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               var targetMatch = target.match( selectableTargets );\r
+                               if ( targetMatch )\r
+                                       retval.target.type = retval.target.name = target;\r
+                               else\r
+                               {\r
+                                       retval.target.type = 'frame';\r
+                                       retval.target.name = target;\r
+                               }\r
+                       }\r
+\r
+                       var me = this;\r
+                       var advAttr = function( inputName, attrName )\r
+                       {\r
+                               var value = element.getAttribute( attrName );\r
+                               if ( value !== null )\r
+                                       retval.adv[ inputName ] = value || '';\r
+                       };\r
+                       advAttr( 'advId', 'id' );\r
+                       advAttr( 'advLangDir', 'dir' );\r
+                       advAttr( 'advAccessKey', 'accessKey' );\r
+                       advAttr( 'advName', 'name' );\r
+                       advAttr( 'advLangCode', 'lang' );\r
+                       advAttr( 'advTabIndex', 'tabindex' );\r
+                       advAttr( 'advTitle', 'title' );\r
+                       advAttr( 'advContentType', 'type' );\r
+                       advAttr( 'advCSSClasses', 'class' );\r
+                       advAttr( 'advCharset', 'charset' );\r
+                       advAttr( 'advStyles', 'style' );\r
+               }\r
+\r
+               // Find out whether we have any anchors in the editor.\r
+               // Get all IMG elements in CK document.\r
+               var elements = editor.document.getElementsByTag( 'img' ),\r
+                       realAnchors = new CKEDITOR.dom.nodeList( editor.document.$.anchors ),\r
+                       anchors = retval.anchors = [];\r
+\r
+               for( var i = 0; i < elements.count() ; i++ )\r
+               {\r
+                       var item = elements.getItem( i );\r
+                       if ( item.getAttribute( '_cke_realelement' ) && item.getAttribute( '_cke_real_element_type' ) == 'anchor' )\r
+                       {\r
+                               anchors.push( editor.restoreRealElement( item ) );\r
+                       }\r
+               }\r
+\r
+               for ( i = 0 ; i < realAnchors.count() ; i++ )\r
+                       anchors.push( realAnchors.getItem( i ) );\r
+\r
+               for ( i = 0 ; i < anchors.length ; i++ )\r
+               {\r
+                       item = anchors[ i ];\r
+                       anchors[ i ] = { name : item.getAttribute( 'name' ), id : item.getAttribute( 'id' ) };\r
+               }\r
+\r
+               // Record down the selected element in the dialog.\r
+               this._.selectedElement = element;\r
+\r
+               return retval;\r
+       };\r
+\r
+       var setupParams = function( page, data )\r
+       {\r
+               if ( data[page] )\r
+                       this.setValue( data[page][this.id] || '' );\r
+       };\r
+\r
+       var setupPopupParams = function( data )\r
+       {\r
+               return setupParams.call( this, 'target', data );\r
+       };\r
+\r
+       var setupAdvParams = function( data )\r
+       {\r
+               return setupParams.call( this, 'adv', data );\r
+       };\r
+\r
+       var commitParams = function( page, data )\r
+       {\r
+               if ( !data[page] )\r
+                       data[page] = {};\r
+\r
+               data[page][this.id] = this.getValue() || '';\r
+       };\r
+\r
+       var commitPopupParams = function( data )\r
+       {\r
+               return commitParams.call( this, 'target', data );\r
+       };\r
+\r
+       var commitAdvParams = function( data )\r
+       {\r
+               return commitParams.call( this, 'adv', data );\r
+       };\r
+\r
+       return {\r
+               title : editor.lang.link.title,\r
+               minWidth : 350,\r
+               minHeight : 230,\r
+               contents : [\r
+                       {\r
+                               id : 'info',\r
+                               label : editor.lang.link.info,\r
+                               title : editor.lang.link.info,\r
+                               elements :\r
+                               [\r
+                                       {\r
+                                               id : 'linkType',\r
+                                               type : 'select',\r
+                                               label : editor.lang.link.type,\r
+                                               'default' : 'url',\r
+                                               items :\r
+                                               [\r
+                                                       [ editor.lang.common.url, 'url' ],\r
+                                                       [ editor.lang.link.toAnchor, 'anchor' ],\r
+                                                       [ editor.lang.link.toEmail, 'email' ]\r
+                                               ],\r
+                                               onChange : linkTypeChanged,\r
+                                               setup : function( data )\r
+                                               {\r
+                                                       if ( data.type )\r
+                                                               this.setValue( data.type );\r
+                                               },\r
+                                               commit : function( data )\r
+                                               {\r
+                                                       data.type = this.getValue();\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               type : 'vbox',\r
+                                               id : 'urlOptions',\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               widths : [ '25%', '75%' ],\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               id : 'protocol',\r
+                                                                               type : 'select',\r
+                                                                               label : editor.lang.common.protocol,\r
+                                                                               'default' : 'http://',\r
+                                                                               style : 'width : 100%;',\r
+                                                                               items :\r
+                                                                               [\r
+                                                                                       [ 'http://' ],\r
+                                                                                       [ 'https://' ],\r
+                                                                                       [ 'ftp://' ],\r
+                                                                                       [ 'news://' ],\r
+                                                                                       [ '<other>', '' ]\r
+                                                                               ],\r
+                                                                               setup : function( data )\r
+                                                                               {\r
+                                                                                       if ( data.url )\r
+                                                                                               this.setValue( data.url.protocol );\r
+                                                                               },\r
+                                                                               commit : function( data )\r
+                                                                               {\r
+                                                                                       if ( !data.url )\r
+                                                                                               data.url = {};\r
+\r
+                                                                                       data.url.protocol = this.getValue();\r
+                                                                               }\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'text',\r
+                                                                               id : 'url',\r
+                                                                               label : editor.lang.common.url,\r
+                                                                               onLoad : function ()\r
+                                                                               {\r
+                                                                                       this.allowOnChange = true;\r
+                                                                               },\r
+                                                                               onKeyUp : function()\r
+                                                                               {\r
+                                                                                       this.allowOnChange = false;\r
+                                                                                       var     protocolCmb = this.getDialog().getContentElement( 'info', 'protocol' ),\r
+                                                                                               url = this.getValue(),\r
+                                                                                               urlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/gi,\r
+                                                                                               urlOnChangeTestOther = /^((javascript:)|[#\/\.])/gi;\r
+\r
+                                                                                       var protocol = urlOnChangeProtocol.exec( url );\r
+                                                                                       if ( protocol )\r
+                                                                                       {\r
+                                                                                               this.setValue( url.substr( protocol[ 0 ].length ) );\r
+                                                                                               protocolCmb.setValue( protocol[ 0 ].toLowerCase() );\r
+                                                                                       }\r
+                                                                                       else if ( urlOnChangeTestOther.test( url ) )\r
+                                                                                               protocolCmb.setValue( '' );\r
+\r
+                                                                                       this.allowOnChange = true;\r
+                                                                               },\r
+                                                                               onChange : function()\r
+                                                                               {\r
+                                                                                       if ( this.allowOnChange )               // Dont't call on dialog load.\r
+                                                                                               this.onKeyUp();\r
+                                                                               },\r
+                                                                               validate : function()\r
+                                                                               {\r
+                                                                                       var dialog = this.getDialog();\r
+\r
+                                                                                       if ( dialog.getContentElement( 'info', 'linkType' ) &&\r
+                                                                                                       dialog.getValueOf( 'info', 'linkType' ) != 'url' )\r
+                                                                                               return true;\r
+\r
+                                                                                       if ( this.getDialog().fakeObj ) // Edit Anchor.\r
+                                                                                               return true;\r
+\r
+                                                                                       var func = CKEDITOR.dialog.validate.notEmpty( editor.lang.link.noUrl );\r
+                                                                                       return func.apply( this );\r
+                                                                               },\r
+                                                                               setup : function( data )\r
+                                                                               {\r
+                                                                                       this.allowOnChange = false;\r
+                                                                                       if ( data.url )\r
+                                                                                               this.setValue( data.url.url );\r
+                                                                                       this.allowOnChange = true;\r
+\r
+                                                                                       var linkType = this.getDialog().getContentElement( 'info', 'linkType' );\r
+                                                                                       if ( linkType && linkType.getValue() == 'url' )\r
+                                                                                               this.select();\r
+\r
+                                                                               },\r
+                                                                               commit : function( data )\r
+                                                                               {\r
+                                                                                       if ( !data.url )\r
+                                                                                               data.url = {};\r
+\r
+                                                                                       data.url.url = this.getValue();\r
+                                                                                       this.allowOnChange = false;\r
+                                                                               }\r
+                                                                       }\r
+                                                               ],\r
+                                                               setup : function( data )\r
+                                                               {\r
+                                                                       if ( !this.getDialog().getContentElement( 'info', 'linkType' ) )\r
+                                                                               this.getElement().show();\r
+                                                               }\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'button',\r
+                                                               id : 'browse',\r
+                                                               hidden : 'true',\r
+                                                               filebrowser : 'info:url',\r
+                                                               label : editor.lang.common.browseServer\r
+                                                       }\r
+                                               ]\r
+                                       },\r
+                                       {\r
+                                               type : 'vbox',\r
+                                               id : 'anchorOptions',\r
+                                               width : 260,\r
+                                               align : 'center',\r
+                                               padding : 0,\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'html',\r
+                                                               id : 'selectAnchorText',\r
+                                                               html : CKEDITOR.tools.htmlEncode( editor.lang.link.selectAnchor ),\r
+                                                               setup : function( data )\r
+                                                               {\r
+                                                                       if ( data.anchors.length > 0 )\r
+                                                                               this.getElement().show();\r
+                                                                       else\r
+                                                                               this.getElement().hide();\r
+                                                               }\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'html',\r
+                                                               id : 'noAnchors',\r
+                                                               style : 'text-align: center;',\r
+                                                               html : '<div>' + CKEDITOR.tools.htmlEncode( editor.lang.link.noAnchors ) + '</div>',\r
+                                                               setup : function( data )\r
+                                                               {\r
+                                                                       if ( data.anchors.length < 1 )\r
+                                                                               this.getElement().show();\r
+                                                                       else\r
+                                                                               this.getElement().hide();\r
+                                                               }\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               id : 'selectAnchor',\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'select',\r
+                                                                               id : 'anchorName',\r
+                                                                               'default' : '',\r
+                                                                               label : editor.lang.link.anchorName,\r
+                                                                               style : 'width: 100%;',\r
+                                                                               items :\r
+                                                                               [\r
+                                                                                       [ '' ]\r
+                                                                               ],\r
+                                                                               setup : function( data )\r
+                                                                               {\r
+                                                                                       this.clear();\r
+                                                                                       this.add( '' );\r
+                                                                                       for ( var i = 0 ; i < data.anchors.length ; i++ )\r
+                                                                                       {\r
+                                                                                               if ( data.anchors[i].name )\r
+                                                                                                       this.add( data.anchors[i].name );\r
+                                                                                       }\r
+\r
+                                                                                       if ( data.anchor )\r
+                                                                                               this.setValue( data.anchor.name );\r
+\r
+                                                                                       var linkType = this.getDialog().getContentElement( 'info', 'linkType' );\r
+                                                                                       if ( linkType && linkType.getValue() == 'email' )\r
+                                                                                               this.focus();\r
+                                                                               },\r
+                                                                               commit : function( data )\r
+                                                                               {\r
+                                                                                       if ( !data.anchor )\r
+                                                                                               data.anchor = {};\r
+\r
+                                                                                       data.anchor.name = this.getValue();\r
+                                                                               }\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'select',\r
+                                                                               id : 'anchorId',\r
+                                                                               'default' : '',\r
+                                                                               label : editor.lang.link.anchorId,\r
+                                                                               style : 'width: 100%;',\r
+                                                                               items :\r
+                                                                               [\r
+                                                                                       [ '' ]\r
+                                                                               ],\r
+                                                                               setup : function( data )\r
+                                                                               {\r
+                                                                                       this.clear();\r
+                                                                                       this.add( '' );\r
+                                                                                       for ( var i = 0 ; i < data.anchors.length ; i++ )\r
+                                                                                       {\r
+                                                                                               if ( data.anchors[i].id )\r
+                                                                                                       this.add( data.anchors[i].id );\r
+                                                                                       }\r
+\r
+                                                                                       if ( data.anchor )\r
+                                                                                               this.setValue( data.anchor.id );\r
+                                                                               },\r
+                                                                               commit : function( data )\r
+                                                                               {\r
+                                                                                       if ( !data.anchor )\r
+                                                                                               data.anchor = {};\r
+\r
+                                                                                       data.anchor.id = this.getValue();\r
+                                                                               }\r
+                                                                       }\r
+                                                               ],\r
+                                                               setup : function( data )\r
+                                                               {\r
+                                                                       if ( data.anchors.length > 0 )\r
+                                                                               this.getElement().show();\r
+                                                                       else\r
+                                                                               this.getElement().hide();\r
+                                                               }\r
+                                                       }\r
+                                               ],\r
+                                               setup : function( data )\r
+                                               {\r
+                                                       if ( !this.getDialog().getContentElement( 'info', 'linkType' ) )\r
+                                                               this.getElement().hide();\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               type :  'vbox',\r
+                                               id : 'emailOptions',\r
+                                               padding : 1,\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'text',\r
+                                                               id : 'emailAddress',\r
+                                                               label : editor.lang.link.emailAddress,\r
+                                                               validate : function()\r
+                                                               {\r
+                                                                       var dialog = this.getDialog();\r
+\r
+                                                                       if ( !dialog.getContentElement( 'info', 'linkType' ) ||\r
+                                                                                       dialog.getValueOf( 'info', 'linkType' ) != 'email' )\r
+                                                                               return true;\r
+\r
+                                                                       var func = CKEDITOR.dialog.validate.notEmpty( editor.lang.link.noEmail );\r
+                                                                       return func.apply( this );\r
+                                                               },\r
+                                                               setup : function( data )\r
+                                                               {\r
+                                                                       if ( data.email )\r
+                                                                               this.setValue( data.email.address );\r
+\r
+                                                                       var linkType = this.getDialog().getContentElement( 'info', 'linkType' );\r
+                                                                       if ( linkType && linkType.getValue() == 'email' )\r
+                                                                               this.select();\r
+                                                               },\r
+                                                               commit : function( data )\r
+                                                               {\r
+                                                                       if ( !data.email )\r
+                                                                               data.email = {};\r
+\r
+                                                                       data.email.address = this.getValue();\r
+                                                               }\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'text',\r
+                                                               id : 'emailSubject',\r
+                                                               label : editor.lang.link.emailSubject,\r
+                                                               setup : function( data )\r
+                                                               {\r
+                                                                       if ( data.email )\r
+                                                                               this.setValue( data.email.subject );\r
+                                                               },\r
+                                                               commit : function( data )\r
+                                                               {\r
+                                                                       if ( !data.email )\r
+                                                                               data.email = {};\r
+\r
+                                                                       data.email.subject = this.getValue();\r
+                                                               }\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'textarea',\r
+                                                               id : 'emailBody',\r
+                                                               label : editor.lang.link.emailBody,\r
+                                                               rows : 3,\r
+                                                               'default' : '',\r
+                                                               setup : function( data )\r
+                                                               {\r
+                                                                       if ( data.email )\r
+                                                                               this.setValue( data.email.body );\r
+                                                               },\r
+                                                               commit : function( data )\r
+                                                               {\r
+                                                                       if ( !data.email )\r
+                                                                               data.email = {};\r
+\r
+                                                                       data.email.body = this.getValue();\r
+                                                               }\r
+                                                       }\r
+                                               ],\r
+                                               setup : function( data )\r
+                                               {\r
+                                                       if ( !this.getDialog().getContentElement( 'info', 'linkType' ) )\r
+                                                               this.getElement().hide();\r
+                                               }\r
+                                       }\r
+                               ]\r
+                       },\r
+                       {\r
+                               id : 'target',\r
+                               label : editor.lang.link.target,\r
+                               title : editor.lang.link.target,\r
+                               elements :\r
+                               [\r
+                                       {\r
+                                               type : 'hbox',\r
+                                               widths : [ '50%', '50%' ],\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'select',\r
+                                                               id : 'linkTargetType',\r
+                                                               label : editor.lang.link.target,\r
+                                                               'default' : 'notSet',\r
+                                                               style : 'width : 100%;',\r
+                                                               'items' :\r
+                                                               [\r
+                                                                       [ editor.lang.link.targetNotSet, 'notSet' ],\r
+                                                                       [ editor.lang.link.targetFrame, 'frame' ],\r
+                                                                       [ editor.lang.link.targetPopup, 'popup' ],\r
+                                                                       [ editor.lang.link.targetNew, '_blank' ],\r
+                                                                       [ editor.lang.link.targetTop, '_top' ],\r
+                                                                       [ editor.lang.link.targetSelf, '_self' ],\r
+                                                                       [ editor.lang.link.targetParent, '_parent' ]\r
+                                                               ],\r
+                                                               onChange : targetChanged,\r
+                                                               setup : function( data )\r
+                                                               {\r
+                                                                       if ( data.target )\r
+                                                                               this.setValue( data.target.type );\r
+                                                               },\r
+                                                               commit : function( data )\r
+                                                               {\r
+                                                                       if ( !data.target )\r
+                                                                               data.target = {};\r
+\r
+                                                                       data.target.type = this.getValue();\r
+                                                               }\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'text',\r
+                                                               id : 'linkTargetName',\r
+                                                               label : editor.lang.link.targetFrameName,\r
+                                                               'default' : '',\r
+                                                               setup : function( data )\r
+                                                               {\r
+                                                                       if ( data.target )\r
+                                                                               this.setValue( data.target.name );\r
+                                                               },\r
+                                                               commit : function( data )\r
+                                                               {\r
+                                                                       if ( !data.target )\r
+                                                                               data.target = {};\r
+\r
+                                                                       data.target.name = this.getValue();\r
+                                                               }\r
+                                                       }\r
+                                               ]\r
+                                       },\r
+                                       {\r
+                                               type : 'vbox',\r
+                                               width : 260,\r
+                                               align : 'center',\r
+                                               padding : 2,\r
+                                               id : 'popupFeatures',\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'html',\r
+                                                               html : CKEDITOR.tools.htmlEncode( editor.lang.link.popupFeatures )\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'checkbox',\r
+                                                                               id : 'resizable',\r
+                                                                               label : editor.lang.link.popupResizable,\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'checkbox',\r
+                                                                               id : 'status',\r
+                                                                               label : editor.lang.link.popupStatusBar,\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+\r
+                                                                       }\r
+                                                               ]\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'checkbox',\r
+                                                                               id : 'location',\r
+                                                                               label : editor.lang.link.popupLocationBar,\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'checkbox',\r
+                                                                               id : 'toolbar',\r
+                                                                               label : editor.lang.link.popupToolbar,\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+\r
+                                                                       }\r
+                                                               ]\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'checkbox',\r
+                                                                               id : 'menubar',\r
+                                                                               label : editor.lang.link.popupMenuBar,\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'checkbox',\r
+                                                                               id : 'fullscreen',\r
+                                                                               label : editor.lang.link.popupFullScreen,\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+\r
+                                                                       }\r
+                                                               ]\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'checkbox',\r
+                                                                               id : 'scrollbars',\r
+                                                                               label : editor.lang.link.popupScrollBars,\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'checkbox',\r
+                                                                               id : 'dependent',\r
+                                                                               label : editor.lang.link.popupDependent,\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+\r
+                                                                       }\r
+                                                               ]\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type :  'text',\r
+                                                                               widths : [ '30%', '70%' ],\r
+                                                                               labelLayout : 'horizontal',\r
+                                                                               label : editor.lang.link.popupWidth,\r
+                                                                               id : 'width',\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type :  'text',\r
+                                                                               labelLayout : 'horizontal',\r
+                                                                               widths : [ '55%', '45%' ],\r
+                                                                               label : editor.lang.link.popupLeft,\r
+                                                                               id : 'left',\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+\r
+                                                                       }\r
+                                                               ]\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type :  'text',\r
+                                                                               labelLayout : 'horizontal',\r
+                                                                               widths : [ '30%', '70%' ],\r
+                                                                               label : editor.lang.link.popupHeight,\r
+                                                                               id : 'height',\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type :  'text',\r
+                                                                               labelLayout : 'horizontal',\r
+                                                                               label : editor.lang.link.popupTop,\r
+                                                                               widths : [ '55%', '45%' ],\r
+                                                                               id : 'top',\r
+                                                                               setup : setupPopupParams,\r
+                                                                               commit : commitPopupParams\r
+\r
+                                                                       }\r
+                                                               ]\r
+                                                       }\r
+                                               ]\r
+                                       }\r
+                               ]\r
+                       },\r
+                       {\r
+                               id : 'upload',\r
+                               label : editor.lang.link.upload,\r
+                               title : editor.lang.link.upload,\r
+                               hidden : true,\r
+                               filebrowser : 'uploadButton',\r
+                               elements :\r
+                               [\r
+                                       {\r
+                                               type : 'file',\r
+                                               id : 'upload',\r
+                                               label : editor.lang.common.upload,\r
+                                               style: 'height:40px',\r
+                                               size : 29\r
+                                       },\r
+                                       {\r
+                                               type : 'fileButton',\r
+                                               id : 'uploadButton',\r
+                                               label : editor.lang.common.uploadSubmit,\r
+                                               filebrowser : 'info:url',\r
+                                               'for' : [ 'upload', 'upload' ]\r
+                                       }\r
+                               ]\r
+                       },\r
+                       {\r
+                               id : 'advanced',\r
+                               label : editor.lang.link.advanced,\r
+                               title : editor.lang.link.advanced,\r
+                               elements :\r
+                               [\r
+                                       {\r
+                                               type : 'vbox',\r
+                                               padding : 1,\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               widths : [ '45%', '35%', '20%' ],\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'text',\r
+                                                                               id : 'advId',\r
+                                                                               label : editor.lang.link.id,\r
+                                                                               setup : setupAdvParams,\r
+                                                                               commit : commitAdvParams\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'select',\r
+                                                                               id : 'advLangDir',\r
+                                                                               label : editor.lang.link.langDir,\r
+                                                                               'default' : '',\r
+                                                                               style : 'width:110px',\r
+                                                                               items :\r
+                                                                               [\r
+                                                                                       [ editor.lang.link.langDirNotSet, '' ],\r
+                                                                                       [ editor.lang.link.langDirLTR, 'ltr' ],\r
+                                                                                       [ editor.lang.link.langDirRTL, 'rtl' ]\r
+                                                                               ],\r
+                                                                               setup : setupAdvParams,\r
+                                                                               commit : commitAdvParams\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'text',\r
+                                                                               id : 'advAccessKey',\r
+                                                                               width : '80px',\r
+                                                                               label : editor.lang.link.acccessKey,\r
+                                                                               maxLength : 1,\r
+                                                                               setup : setupAdvParams,\r
+                                                                               commit : commitAdvParams\r
+\r
+                                                                       }\r
+                                                               ]\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               widths : [ '45%', '35%', '20%' ],\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'text',\r
+                                                                               label : editor.lang.link.name,\r
+                                                                               id : 'advName',\r
+                                                                               setup : setupAdvParams,\r
+                                                                               commit : commitAdvParams\r
+\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'text',\r
+                                                                               label : editor.lang.link.langCode,\r
+                                                                               id : 'advLangCode',\r
+                                                                               width : '110px',\r
+                                                                               'default' : '',\r
+                                                                               setup : setupAdvParams,\r
+                                                                               commit : commitAdvParams\r
+\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'text',\r
+                                                                               label : editor.lang.link.tabIndex,\r
+                                                                               id : 'advTabIndex',\r
+                                                                               width : '80px',\r
+                                                                               maxLength : 5,\r
+                                                                               setup : setupAdvParams,\r
+                                                                               commit : commitAdvParams\r
+\r
+                                                                       }\r
+                                                               ]\r
+                                                       }\r
+                                               ]\r
+                                       },\r
+                                       {\r
+                                               type : 'vbox',\r
+                                               padding : 1,\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               widths : [ '45%', '55%' ],\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'text',\r
+                                                                               label : editor.lang.link.advisoryTitle,\r
+                                                                               'default' : '',\r
+                                                                               id : 'advTitle',\r
+                                                                               setup : setupAdvParams,\r
+                                                                               commit : commitAdvParams\r
+\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'text',\r
+                                                                               label : editor.lang.link.advisoryContentType,\r
+                                                                               'default' : '',\r
+                                                                               id : 'advContentType',\r
+                                                                               setup : setupAdvParams,\r
+                                                                               commit : commitAdvParams\r
+\r
+                                                                       }\r
+                                                               ]\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               widths : [ '45%', '55%' ],\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'text',\r
+                                                                               label : editor.lang.link.cssClasses,\r
+                                                                               'default' : '',\r
+                                                                               id : 'advCSSClasses',\r
+                                                                               setup : setupAdvParams,\r
+                                                                               commit : commitAdvParams\r
+\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'text',\r
+                                                                               label : editor.lang.link.charset,\r
+                                                                               'default' : '',\r
+                                                                               id : 'advCharset',\r
+                                                                               setup : setupAdvParams,\r
+                                                                               commit : commitAdvParams\r
+\r
+                                                                       }\r
+                                                               ]\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'text',\r
+                                                                               label : editor.lang.link.styles,\r
+                                                                               'default' : '',\r
+                                                                               id : 'advStyles',\r
+                                                                               setup : setupAdvParams,\r
+                                                                               commit : commitAdvParams\r
+\r
+                                                                       }\r
+                                                               ]\r
+                                                       }\r
+                                               ]\r
+                                       }\r
+                               ]\r
+                       }\r
+               ],\r
+               onShow : function()\r
+               {\r
+                       this.fakeObj = false;\r
+\r
+                       var editor = this.getParentEditor(),\r
+                               selection = editor.getSelection(),\r
+                               ranges = selection.getRanges(),\r
+                               element = null,\r
+                               me = this;\r
+                       // Fill in all the relevant fields if there's already one link selected.\r
+                       if ( ranges.length == 1 )\r
+                       {\r
+\r
+                               var rangeRoot = ranges[0].getCommonAncestor( true );\r
+                               element = rangeRoot.getAscendant( 'a', true );\r
+                               if ( element && element.getAttribute( 'href' ) )\r
+                               {\r
+                                       selection.selectElement( element );\r
+                               }\r
+                               else if ( ( element = rangeRoot.getAscendant( 'img', true ) ) &&\r
+                                                element.getAttribute( '_cke_real_element_type' ) &&\r
+                                                element.getAttribute( '_cke_real_element_type' ) == 'anchor' )\r
+                               {\r
+                                       this.fakeObj = element;\r
+                                       element = editor.restoreRealElement( this.fakeObj );\r
+                                       selection.selectElement( this.fakeObj );\r
+                               }\r
+                               else\r
+                                       element = null;\r
+                       }\r
+\r
+                       this.setupContent( parseLink.apply( this, [ editor, element ] ) );\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var attributes = { href : 'javascript:void(0)/*' + CKEDITOR.tools.getNextNumber() + '*/' },\r
+                               removeAttributes = [],\r
+                               data = { href : attributes.href },\r
+                               me = this, editor = this.getParentEditor();\r
+\r
+                       this.commitContent( data );\r
+\r
+                       // Compose the URL.\r
+                       switch ( data.type || 'url' )\r
+                       {\r
+                               case 'url':\r
+                                       var protocol = ( data.url && data.url.protocol != undefined ) ? data.url.protocol : 'http://',\r
+                                               url = ( data.url && data.url.url ) || '';\r
+                                       attributes._cke_saved_href = ( url.indexOf( '/' ) === 0 ) ? url : protocol + url;\r
+                                       break;\r
+                               case 'anchor':\r
+                                       var name = ( data.anchor && data.anchor.name ),\r
+                                               id = ( data.anchor && data.anchor.id );\r
+                                       attributes._cke_saved_href = '#' + ( name || id || '' );\r
+                                       break;\r
+                               case 'email':\r
+                                       var address = ( data.email && data.email.address ),\r
+                                               subject = ( data.email && encodeURIComponent( data.email.subject || '' ) ),\r
+                                               body = ( data.email && encodeURIComponent( data.email.body || '' ) ),\r
+                                               linkList = [ 'mailto:', address ];\r
+                                       if ( subject || body )\r
+                                       {\r
+                                               var argList = [];\r
+                                               linkList.push( '?' );\r
+                                               subject && argList.push( 'subject=' + subject );\r
+                                               body && argList.push( 'body=' + body );\r
+                                               linkList.push( argList.join( '&' ) );\r
+                                       }\r
+                                       attributes._cke_saved_href = linkList.join( '' );\r
+                                       break;\r
+                               default:\r
+                       }\r
+\r
+                       // Popups and target.\r
+                       if ( data.target )\r
+                       {\r
+                               if ( data.target.type == 'popup' )\r
+                               {\r
+                                       var onclickList = [ 'window.open(this.href, \'',\r
+                                                       data.target.name || '', '\', \'' ];\r
+                                       var featureList = [ 'resizable', 'status', 'location', 'toolbar', 'menubar', 'fullscreen',\r
+                                                       'scrollbars', 'dependent' ];\r
+                                       var featureLength = featureList.length;\r
+                                       var addFeature = function( featureName )\r
+                                       {\r
+                                               if ( data.target[ featureName ] )\r
+                                                       featureList.push( featureName + '=' + data.target[ featureName ] );\r
+                                       };\r
+\r
+                                       for ( var i = 0 ; i < featureLength ; i++ )\r
+                                               featureList[i] = featureList[i] + ( data.target[ featureList[i] ] ? '=yes' : '=no' ) ;\r
+                                       addFeature( 'width' );\r
+                                       addFeature( 'left' );\r
+                                       addFeature( 'height' );\r
+                                       addFeature( 'top' );\r
+\r
+                                       onclickList.push( featureList.join( ',' ), '\'); return false;' );\r
+                                       attributes[ CKEDITOR.env.ie || CKEDITOR.env.webkit ? '_cke_pa_onclick' : 'onclick' ] = onclickList.join( '' );\r
+                               }\r
+                               else\r
+                               {\r
+                                       if ( data.target.type != 'notSet' && data.target.name )\r
+                                               attributes.target = data.target.name;\r
+                                       removeAttributes.push( '_cke_pa_onclick', 'onclick' );\r
+                               }\r
+                       }\r
+\r
+                       // Advanced attributes.\r
+                       if ( data.adv )\r
+                       {\r
+                               var advAttr = function( inputName, attrName )\r
+                               {\r
+                                       var value = data.adv[ inputName ];\r
+                                       if ( value )\r
+                                               attributes[attrName] = value;\r
+                                       else\r
+                                               removeAttributes.push( attrName );\r
+                               };\r
+\r
+                               if ( this._.selectedElement )\r
+                                       advAttr( 'advId', 'id' );\r
+                               advAttr( 'advLangDir', 'dir' );\r
+                               advAttr( 'advAccessKey', 'accessKey' );\r
+                               advAttr( 'advName', 'name' );\r
+                               advAttr( 'advLangCode', 'lang' );\r
+                               advAttr( 'advTabIndex', 'tabindex' );\r
+                               advAttr( 'advTitle', 'title' );\r
+                               advAttr( 'advContentType', 'type' );\r
+                               advAttr( 'advCSSClasses', 'class' );\r
+                               advAttr( 'advCharset', 'charset' );\r
+                               advAttr( 'advStyles', 'style' );\r
+                       }\r
+\r
+                       if ( !this._.selectedElement )\r
+                       {\r
+                               // Create element if current selection is collapsed.\r
+                               var selection = editor.getSelection(),\r
+                                       ranges = selection.getRanges();\r
+                               if ( ranges.length == 1 && ranges[0].collapsed )\r
+                               {\r
+                                       var text = new CKEDITOR.dom.text( attributes._cke_saved_href, editor.document );\r
+                                       ranges[0].insertNode( text );\r
+                                       ranges[0].selectNodeContents( text );\r
+                                       selection.selectRanges( ranges );\r
+                               }\r
+\r
+                               // Apply style.\r
+                               var style = new CKEDITOR.style( { element : 'a', attributes : attributes } );\r
+                               style.type = CKEDITOR.STYLE_INLINE;             // need to override... dunno why.\r
+                               style.apply( editor.document );\r
+\r
+                               // Id. Apply only to the first link.\r
+                               if ( data.adv && data.adv.advId )\r
+                               {\r
+                                       var links = this.getParentEditor().document.$.getElementsByTagName( 'a' );\r
+                                       for ( i = 0 ; i < links.length ; i++ )\r
+                                       {\r
+                                               if ( links[i].href == attributes.href )\r
+                                               {\r
+                                                       links[i].id = data.adv.advId;\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               // We're only editing an existing link, so just overwrite the attributes.\r
+                               var element = this._.selectedElement;\r
+\r
+                               // IE BUG: Setting the name attribute to an existing link doesn't work.\r
+                               // Must re-create the link from weired syntax to workaround.\r
+                               if ( CKEDITOR.env.ie && attributes.name != element.getAttribute( 'name' ) )\r
+                               {\r
+                                       var newElement = new CKEDITOR.dom.element( '<a name="' + CKEDITOR.tools.htmlEncode( attributes.name ) + '">',\r
+                                                       editor.document );\r
+\r
+                                       selection = editor.getSelection();\r
+\r
+                                       element.moveChildren( newElement );\r
+                                       element.copyAttributes( newElement, { name : 1 } );\r
+                                       newElement.replace( element );\r
+                                       element = newElement;\r
+\r
+                                       selection.selectElement( element );\r
+                               }\r
+\r
+                               element.setAttributes( attributes );\r
+                               element.removeAttributes( removeAttributes );\r
+\r
+                               // Make the element display as an anchor if a name has been set.\r
+                               if ( element.getAttribute( 'name' ) )\r
+                                       element.addClass( 'cke_anchor' );\r
+                               else\r
+                                       element.removeClass( 'cke_anchor' );\r
+\r
+                               if ( this.fakeObj )\r
+                                       editor.createFakeElement( element, 'cke_anchor', 'anchor' ).replace( this.fakeObj );\r
+\r
+                               delete this._.selectedElement;\r
+                       }\r
+               },\r
+               onLoad : function()\r
+               {\r
+                       if ( !editor.config.linkShowAdvancedTab )\r
+                               this.hidePage( 'advanced' );            //Hide Advanded tab.\r
+\r
+                       if ( !editor.config.linkShowTargetTab )\r
+                               this.hidePage( 'target' );              //Hide Target tab.\r
+\r
+               }\r
+       };\r
+} );\r
diff --git a/_source/plugins/link/images/anchor.gif b/_source/plugins/link/images/anchor.gif
new file mode 100644 (file)
index 0000000..5aa797b
Binary files /dev/null and b/_source/plugins/link/images/anchor.gif differ
diff --git a/_source/plugins/link/plugin.js b/_source/plugins/link/plugin.js
new file mode 100644 (file)
index 0000000..3681b8e
--- /dev/null
@@ -0,0 +1,188 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'link',\r
+{\r
+       init : function( editor )\r
+       {\r
+               // Add the link and unlink buttons.\r
+               editor.addCommand( 'link', new CKEDITOR.dialogCommand( 'link' ) );\r
+               editor.addCommand( 'anchor', new CKEDITOR.dialogCommand( 'anchor' ) );\r
+               editor.addCommand( 'unlink', new CKEDITOR.unlinkCommand() );\r
+               editor.ui.addButton( 'Link',\r
+                       {\r
+                               label : editor.lang.link.toolbar,\r
+                               command : 'link'\r
+                       } );\r
+               editor.ui.addButton( 'Unlink',\r
+                       {\r
+                               label : editor.lang.unlink,\r
+                               command : 'unlink'\r
+                       } );\r
+               editor.ui.addButton( 'Anchor',\r
+                       {\r
+                               label : editor.lang.anchor.toolbar,\r
+                               command : 'anchor'\r
+                       } );\r
+               CKEDITOR.dialog.add( 'link', this.path + 'dialogs/link.js' );\r
+               CKEDITOR.dialog.add( 'anchor', this.path + 'dialogs/anchor.js' );\r
+\r
+               // Add the CSS styles for anchor placeholders.\r
+               editor.addCss(\r
+                       'img.cke_anchor' +\r
+                       '{' +\r
+                               'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/anchor.gif' ) + ');' +\r
+                               'background-position: center center;' +\r
+                               'background-repeat: no-repeat;' +\r
+                               'border: 1px solid #a9a9a9;' +\r
+                               'width: 18px;' +\r
+                               'height: 18px;' +\r
+                       '}\n' +\r
+                       'a.cke_anchor' +\r
+                       '{' +\r
+                               'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/anchor.gif' ) + ');' +\r
+                               'background-position: 0 center;' +\r
+                               'background-repeat: no-repeat;' +\r
+                               'border: 1px solid #a9a9a9;' +\r
+                               'padding-left: 18px;' +\r
+                       '}'\r
+                       );\r
+\r
+               // Register selection change handler for the unlink button.\r
+                editor.on( 'selectionChange', function( evt )\r
+                       {\r
+                               /*\r
+                                * Despite our initial hope, document.queryCommandEnabled() does not work\r
+                                * for this in Firefox. So we must detect the state by element paths.\r
+                                */\r
+                               var command = editor.getCommand( 'unlink' ),\r
+                                       element = evt.data.path.lastElement.getAscendant( 'a', true );\r
+                               if ( element && element.getName() == 'a' && element.getAttribute( 'href' ) )\r
+                                       command.setState( CKEDITOR.TRISTATE_OFF );\r
+                               else\r
+                                       command.setState( CKEDITOR.TRISTATE_DISABLED );\r
+                       } );\r
+\r
+               // If the "menu" plugin is loaded, register the menu items.\r
+               if ( editor.addMenuItems )\r
+               {\r
+                       editor.addMenuItems(\r
+                               {\r
+                                       anchor :\r
+                                       {\r
+                                               label : editor.lang.anchor.menu,\r
+                                               command : 'anchor',\r
+                                               group : 'anchor'\r
+                                       },\r
+\r
+                                       link :\r
+                                       {\r
+                                               label : editor.lang.link.menu,\r
+                                               command : 'link',\r
+                                               group : 'link',\r
+                                               order : 1\r
+                                       },\r
+\r
+                                       unlink :\r
+                                       {\r
+                                               label : editor.lang.unlink,\r
+                                               command : 'unlink',\r
+                                               group : 'link',\r
+                                               order : 5\r
+                                       }\r
+                               });\r
+               }\r
+\r
+               // If the "contextmenu" plugin is loaded, register the listeners.\r
+               if ( editor.contextMenu )\r
+               {\r
+                       editor.contextMenu.addListener( function( element, selection )\r
+                               {\r
+                                       if ( !element )\r
+                                               return null;\r
+\r
+                                       var isAnchor = ( element.is( 'img' ) && element.getAttribute( '_cke_real_element_type' ) == 'anchor' );\r
+\r
+                                       if ( !isAnchor )\r
+                                       {\r
+                                               if ( !( element = element.getAscendant( 'a', true ) ) )\r
+                                                       return null;\r
+\r
+                                               isAnchor = ( element.getAttribute( 'name' ) && !element.getAttribute( 'href' ) );\r
+                                       }\r
+\r
+                                       return isAnchor ?\r
+                                                       { anchor : CKEDITOR.TRISTATE_OFF } :\r
+                                                       { link : CKEDITOR.TRISTATE_OFF, unlink : CKEDITOR.TRISTATE_OFF };\r
+                               });\r
+               }\r
+       },\r
+\r
+       afterInit : function( editor )\r
+       {\r
+               // Register a filter to displaying placeholders after mode change.\r
+\r
+               var dataProcessor = editor.dataProcessor,\r
+                       dataFilter = dataProcessor && dataProcessor.dataFilter;\r
+\r
+               if ( dataFilter )\r
+               {\r
+                       dataFilter.addRules(\r
+                               {\r
+                                       elements :\r
+                                       {\r
+                                               a : function( element )\r
+                                               {\r
+                                                       var attributes = element.attributes;\r
+                                                       if ( attributes.name && !attributes.href )\r
+                                                               return editor.createFakeParserElement( element, 'cke_anchor', 'anchor' );\r
+                                               }\r
+                                       }\r
+                               });\r
+               }\r
+       },\r
+\r
+       requires : [ 'fakeobjects' ]\r
+} );\r
+\r
+CKEDITOR.unlinkCommand = function(){};\r
+CKEDITOR.unlinkCommand.prototype =\r
+{\r
+       /** @ignore */\r
+       exec : function( editor )\r
+       {\r
+               /*\r
+                * execCommand( 'unlink', ... ) in Firefox leaves behind <span> tags at where\r
+                * the <a> was, so again we have to remove the link ourselves. (See #430)\r
+                *\r
+                * TODO: Use the style system when it's complete. Let's use execCommand()\r
+                * as a stopgap solution for now.\r
+                */\r
+               var selection = editor.getSelection(),\r
+                       bookmarks = selection.createBookmarks(),\r
+                       ranges = selection.getRanges(),\r
+                       rangeRoot,\r
+                       element;\r
+\r
+               for ( var i = 0 ; i < ranges.length ; i++ )\r
+               {\r
+                       rangeRoot = ranges[i].getCommonAncestor( true );\r
+                       element = rangeRoot.getAscendant( 'a', true );\r
+                       if ( !element )\r
+                               continue;\r
+                       ranges[i].selectNodeContents( element );\r
+               }\r
+\r
+               selection.selectRanges( ranges );\r
+               editor.document.$.execCommand( 'unlink', false, null );\r
+               selection.selectBookmarks( bookmarks );\r
+       }\r
+};\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.config,\r
+{\r
+       linkShowAdvancedTab : true,\r
+       linkShowTargetTab : true\r
+} );\r
diff --git a/_source/plugins/list/plugin.js b/_source/plugins/list/plugin.js
new file mode 100644 (file)
index 0000000..45744e1
--- /dev/null
@@ -0,0 +1,570 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Insert and remove numbered and bulleted lists.\r
+ */\r
+\r
+(function()\r
+{\r
+       var listNodeNames = { ol : 1, ul : 1 },\r
+               emptyTextRegex = /^[\n\r\t ]*$/;\r
+\r
+       CKEDITOR.plugins.list = {\r
+               /*\r
+                * Convert a DOM list tree into a data structure that is easier to\r
+                * manipulate. This operation should be non-intrusive in the sense that it\r
+                * does not change the DOM tree, with the exception that it may add some\r
+                * markers to the list item nodes when database is specified.\r
+                */\r
+               listToArray : function( listNode, database, baseArray, baseIndentLevel, grandparentNode )\r
+               {\r
+                       if ( !listNodeNames[ listNode.getName() ] )\r
+                               return [];\r
+\r
+                       if ( !baseIndentLevel )\r
+                               baseIndentLevel = 0;\r
+                       if ( !baseArray )\r
+                               baseArray = [];\r
+\r
+                       // Iterate over all list items to get their contents and look for inner lists.\r
+                       for ( var i = 0, count = listNode.getChildCount() ; i < count ; i++ )\r
+                       {\r
+                               var listItem = listNode.getChild( i );\r
+\r
+                               // It may be a text node or some funny stuff.\r
+                               if ( listItem.$.nodeName.toLowerCase() != 'li' )\r
+                                       continue;\r
+                               var itemObj = { 'parent' : listNode, indent : baseIndentLevel, contents : [] };\r
+                               if ( !grandparentNode )\r
+                               {\r
+                                       itemObj.grandparent = listNode.getParent();\r
+                                       if ( itemObj.grandparent && itemObj.grandparent.$.nodeName.toLowerCase() == 'li' )\r
+                                               itemObj.grandparent = itemObj.grandparent.getParent();\r
+                               }\r
+                               else\r
+                                       itemObj.grandparent = grandparentNode;\r
+\r
+                               if ( database )\r
+                                       CKEDITOR.dom.element.setMarker( database, listItem, 'listarray_index', baseArray.length );\r
+                               baseArray.push( itemObj );\r
+\r
+                               for ( var j = 0, itemChildCount = listItem.getChildCount() ; j < itemChildCount ; j++ )\r
+                               {\r
+                                       var child = listItem.getChild( j );\r
+                                       if ( child.type == CKEDITOR.NODE_ELEMENT && listNodeNames[ child.getName() ] )\r
+                                               // Note the recursion here, it pushes inner list items with\r
+                                               // +1 indentation in the correct order.\r
+                                               CKEDITOR.plugins.list.listToArray( child, database, baseArray, baseIndentLevel + 1, itemObj.grandparent );\r
+                                       else\r
+                                               itemObj.contents.push( child );\r
+                               }\r
+                       }\r
+                       return baseArray;\r
+               },\r
+\r
+               // Convert our internal representation of a list back to a DOM forest.\r
+               arrayToList : function( listArray, database, baseIndex, paragraphMode )\r
+               {\r
+                       if ( !baseIndex )\r
+                               baseIndex = 0;\r
+                       if ( !listArray || listArray.length < baseIndex + 1 )\r
+                               return null;\r
+                       var doc = listArray[ baseIndex ].parent.getDocument(),\r
+                               retval = new CKEDITOR.dom.documentFragment( doc ),\r
+                               rootNode = null,\r
+                               currentIndex = baseIndex,\r
+                               indentLevel = Math.max( listArray[ baseIndex ].indent, 0 ),\r
+                               currentListItem = null,\r
+                               paragraphName = ( paragraphMode == CKEDITOR.ENTER_P ? 'p' : 'div' );\r
+                       while ( true )\r
+                       {\r
+                               var item = listArray[ currentIndex ];\r
+                               if ( item.indent == indentLevel )\r
+                               {\r
+                                       if ( !rootNode || listArray[ currentIndex ].parent.getName() != rootNode.getName() )\r
+                                       {\r
+                                               rootNode = listArray[ currentIndex ].parent.clone( false, true );\r
+                                               retval.append( rootNode );\r
+                                       }\r
+                                       currentListItem = rootNode.append( doc.createElement( 'li' ) );\r
+                                       for ( var i = 0 ; i < item.contents.length ; i++ )\r
+                                               currentListItem.append( item.contents[i].clone( true, true ) );\r
+                                       currentIndex++;\r
+                               }\r
+                               else if ( item.indent == Math.max( indentLevel, 0 ) + 1 )\r
+                               {\r
+                                       var listData = CKEDITOR.plugins.list.arrayToList( listArray, null, currentIndex, paragraphMode );\r
+                                       currentListItem.append( listData.listNode );\r
+                                       currentIndex = listData.nextIndex;\r
+                               }\r
+                               else if ( item.indent == -1 && !baseIndex && item.grandparent )\r
+                               {\r
+                                       currentListItem;\r
+                                       if ( listNodeNames[ item.grandparent.getName() ] )\r
+                                               currentListItem = doc.createElement( 'li' );\r
+                                       else\r
+                                       {\r
+                                               if ( paragraphMode != CKEDITOR.ENTER_BR && item.grandparent.getName() != 'td' )\r
+                                                       currentListItem = doc.createElement( paragraphName );\r
+                                               else\r
+                                                       currentListItem = new CKEDITOR.dom.documentFragment( doc );\r
+                                       }\r
+\r
+                                       for ( i = 0 ; i < item.contents.length ; i++ )\r
+                                               currentListItem.append( item.contents[i].clone( true, true ) );\r
+\r
+                                       if ( currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT\r
+                                                && currentIndex != listArray.length - 1 )\r
+                                       {\r
+                                               if ( currentListItem.getLast()\r
+                                                               && currentListItem.getLast().type == CKEDITOR.NODE_ELEMENT\r
+                                                               && currentListItem.getLast().getAttribute( 'type' ) == '_moz' )\r
+                                                       currentListItem.getLast().remove();\r
+                                               currentListItem.appendBogus();\r
+                                       }\r
+\r
+                                       if ( currentListItem.type == CKEDITOR.NODE_ELEMENT &&\r
+                                                       currentListItem.getName() == paragraphName &&\r
+                                                       currentListItem.$.firstChild )\r
+                                       {\r
+                                               currentListItem.trim();\r
+                                               var firstChild = currentListItem.getFirst();\r
+                                               if ( firstChild.type == CKEDITOR.NODE_ELEMENT && firstChild.isBlockBoundary() )\r
+                                               {\r
+                                                       var tmp = new CKEDITOR.dom.documentFragment( doc );\r
+                                                       currentListItem.moveChildren( tmp );\r
+                                                       currentListItem = tmp;\r
+                                               }\r
+                                       }\r
+\r
+                                       var currentListItemName = currentListItem.$.nodeName.toLowerCase();\r
+                                       if ( !CKEDITOR.env.ie && ( currentListItemName == 'div' || currentListItemName == 'p' ) )\r
+                                               currentListItem.appendBogus();\r
+                                       retval.append( currentListItem );\r
+                                       rootNode = null;\r
+                                       currentIndex++;\r
+                               }\r
+                               else\r
+                                       return null;\r
+\r
+                               if ( listArray.length <= currentIndex || Math.max( listArray[ currentIndex ].indent, 0 ) < indentLevel )\r
+                                       break;\r
+                       }\r
+\r
+                       // Clear marker attributes for the new list tree made of cloned nodes, if any.\r
+                       if ( database )\r
+                       {\r
+                               var currentNode = retval.getFirst();\r
+                               while ( currentNode )\r
+                               {\r
+                                       if ( currentNode.type == CKEDITOR.NODE_ELEMENT )\r
+                                               CKEDITOR.dom.element.clearMarkers( database, currentNode );\r
+                                       currentNode = currentNode.getNextSourceNode();\r
+                               }\r
+                       }\r
+\r
+                       return { listNode : retval, nextIndex : currentIndex };\r
+               }\r
+       };\r
+\r
+       function setState( editor, state )\r
+       {\r
+               editor.getCommand( this.name ).setState( state );\r
+       }\r
+\r
+       function onSelectionChange( evt )\r
+       {\r
+               var path = evt.data.path,\r
+                       blockLimit = path.blockLimit,\r
+                       elements = path.elements,\r
+                       element;\r
+\r
+               // Grouping should only happen under blockLimit.(#3940).\r
+               for ( var i = 0 ; i < elements.length && ( element = elements[ i ] )\r
+                         && !element.equals( blockLimit ); i++ )\r
+               {\r
+                       if ( listNodeNames[ elements[i].getName() ] )\r
+                       {\r
+                               return setState.call( this, evt.editor,\r
+                                               this.type == elements[i].getName() ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );\r
+                       }\r
+               }\r
+\r
+               return setState.call( this, evt.editor, CKEDITOR.TRISTATE_OFF );\r
+       }\r
+\r
+       function changeListType( editor, groupObj, database, listsCreated )\r
+       {\r
+               // This case is easy...\r
+               // 1. Convert the whole list into a one-dimensional array.\r
+               // 2. Change the list type by modifying the array.\r
+               // 3. Recreate the whole list by converting the array to a list.\r
+               // 4. Replace the original list with the recreated list.\r
+               var listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ),\r
+                       selectedListItems = [];\r
+\r
+               for ( var i = 0 ; i < groupObj.contents.length ; i++ )\r
+               {\r
+                       var itemNode = groupObj.contents[i];\r
+                       itemNode = itemNode.getAscendant( 'li', true );\r
+                       if ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) )\r
+                               continue;\r
+                       selectedListItems.push( itemNode );\r
+                       CKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true );\r
+               }\r
+\r
+               var fakeParent = groupObj.root.getDocument().createElement( this.type );\r
+               for ( i = 0 ; i < selectedListItems.length ; i++ )\r
+               {\r
+                       var listIndex = selectedListItems[i].getCustomData( 'listarray_index' );\r
+                       listArray[listIndex].parent = fakeParent;\r
+               }\r
+               var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode );\r
+               var child, length = newList.listNode.getChildCount();\r
+               for ( i = 0 ; i < length && ( child = newList.listNode.getChild( i ) ) ; i++ )\r
+               {\r
+                       if ( child.getName() == this.type )\r
+                               listsCreated.push( child );\r
+               }\r
+               newList.listNode.replace( groupObj.root );\r
+       }\r
+\r
+       function createList( editor, groupObj, listsCreated )\r
+       {\r
+               var contents = groupObj.contents,\r
+                       doc = groupObj.root.getDocument(),\r
+                       listContents = [];\r
+\r
+               // It is possible to have the contents returned by DomRangeIterator to be the same as the root.\r
+               // e.g. when we're running into table cells.\r
+               // In such a case, enclose the childNodes of contents[0] into a <div>.\r
+               if ( contents.length == 1 && contents[0].equals( groupObj.root ) )\r
+               {\r
+                       var divBlock = doc.createElement( 'div' );\r
+                       contents[0].moveChildren && contents[0].moveChildren( divBlock );\r
+                       contents[0].append( divBlock );\r
+                       contents[0] = divBlock;\r
+               }\r
+\r
+               // Calculate the common parent node of all content blocks.\r
+               var commonParent = groupObj.contents[0].getParent();\r
+               for ( var i = 0 ; i < contents.length ; i++ )\r
+                       commonParent = commonParent.getCommonAncestor( contents[i].getParent() );\r
+\r
+               // We want to insert things that are in the same tree level only, so calculate the contents again\r
+               // by expanding the selected blocks to the same tree level.\r
+               for ( i = 0 ; i < contents.length ; i++ )\r
+               {\r
+                       var contentNode = contents[i],\r
+                               parentNode;\r
+                       while ( ( parentNode = contentNode.getParent() ) )\r
+                       {\r
+                               if ( parentNode.equals( commonParent ) )\r
+                               {\r
+                                       listContents.push( contentNode );\r
+                                       break;\r
+                               }\r
+                               contentNode = parentNode;\r
+                       }\r
+               }\r
+\r
+               if ( listContents.length < 1 )\r
+                       return;\r
+\r
+               // Insert the list to the DOM tree.\r
+               var insertAnchor = listContents[ listContents.length - 1 ].getNext(),\r
+                       listNode = doc.createElement( this.type );\r
+\r
+               listsCreated.push( listNode );\r
+               while ( listContents.length )\r
+               {\r
+                       var contentBlock = listContents.shift(),\r
+                               listItem = doc.createElement( 'li' );\r
+                       contentBlock.moveChildren( listItem );\r
+                       contentBlock.remove();\r
+                       listItem.appendTo( listNode );\r
+\r
+                       // Append a bogus BR to force the LI to render at full height\r
+                       if ( !CKEDITOR.env.ie )\r
+                               listItem.appendBogus();\r
+               }\r
+               if ( insertAnchor )\r
+                       listNode.insertBefore( insertAnchor );\r
+               else\r
+                       listNode.appendTo( commonParent );\r
+       }\r
+\r
+       function removeList( editor, groupObj, database )\r
+       {\r
+               // This is very much like the change list type operation.\r
+               // Except that we're changing the selected items' indent to -1 in the list array.\r
+               var listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ),\r
+                       selectedListItems = [];\r
+\r
+               for ( var i = 0 ; i < groupObj.contents.length ; i++ )\r
+               {\r
+                       var itemNode = groupObj.contents[i];\r
+                       itemNode = itemNode.getAscendant( 'li', true );\r
+                       if ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) )\r
+                               continue;\r
+                       selectedListItems.push( itemNode );\r
+                       CKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true );\r
+               }\r
+\r
+               var lastListIndex = null;\r
+               for ( i = 0 ; i < selectedListItems.length ; i++ )\r
+               {\r
+                       var listIndex = selectedListItems[i].getCustomData( 'listarray_index' );\r
+                       listArray[listIndex].indent = -1;\r
+                       lastListIndex = listIndex;\r
+               }\r
+\r
+               // After cutting parts of the list out with indent=-1, we still have to maintain the array list\r
+               // model's nextItem.indent <= currentItem.indent + 1 invariant. Otherwise the array model of the\r
+               // list cannot be converted back to a real DOM list.\r
+               for ( i = lastListIndex + 1 ; i < listArray.length ; i++ )\r
+               {\r
+                       if ( listArray[i].indent > listArray[i-1].indent + 1 )\r
+                       {\r
+                               var indentOffset = listArray[i-1].indent + 1 - listArray[i].indent;\r
+                               var oldIndent = listArray[i].indent;\r
+                               while ( listArray[i] && listArray[i].indent >= oldIndent )\r
+                               {\r
+                                       listArray[i].indent += indentOffset;\r
+                                       i++;\r
+                               }\r
+                               i--;\r
+                       }\r
+               }\r
+\r
+               var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode );\r
+\r
+               // Compensate <br> before/after the list node if the surrounds are non-blocks.(#3836)\r
+               var docFragment = newList.listNode, boundaryNode, siblingNode;\r
+               function compensateBrs( isStart )\r
+               {\r
+                       if ( ( boundaryNode = docFragment[ isStart ? 'getFirst' : 'getLast' ]() )\r
+                                && !( boundaryNode.is && boundaryNode.isBlockBoundary() )\r
+                                && ( siblingNode = groupObj.root[ isStart ? 'getPrevious' : 'getNext' ]\r
+                                     ( CKEDITOR.dom.walker.whitespaces( true ) ) )\r
+                                && !( siblingNode.is && siblingNode.isBlockBoundary( { br : 1 } ) ) )\r
+                               editor.document.createElement( 'br' )[ isStart ? 'insertBefore' : 'insertAfter' ]( boundaryNode );\r
+               }\r
+               compensateBrs( true );\r
+               compensateBrs();\r
+\r
+               var rootParent = groupObj.root.getParent();\r
+               docFragment.replace( groupObj.root );\r
+       }\r
+\r
+       function listCommand( name, type )\r
+       {\r
+               this.name = name;\r
+               this.type = type;\r
+       }\r
+\r
+       listCommand.prototype = {\r
+               exec : function( editor )\r
+               {\r
+                       editor.focus();\r
+\r
+                       var doc = editor.document,\r
+                               selection = editor.getSelection(),\r
+                               ranges = selection && selection.getRanges();\r
+\r
+                       // There should be at least one selected range.\r
+                       if ( !ranges || ranges.length < 1 )\r
+                               return;\r
+\r
+                       // Midas lists rule #1 says we can create a list even in an empty document.\r
+                       // But DOM iterator wouldn't run if the document is really empty.\r
+                       // So create a paragraph if the document is empty and we're going to create a list.\r
+                       if ( this.state == CKEDITOR.TRISTATE_OFF )\r
+                       {\r
+                               var body = doc.getBody();\r
+                               body.trim();\r
+                               if ( !body.getFirst() )\r
+                               {\r
+                                       var paragraph = doc.createElement( editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' :\r
+                                                       ( editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'br' ) );\r
+                                       paragraph.appendTo( body );\r
+                                       ranges = [ new CKEDITOR.dom.range( doc ) ];\r
+                                       // IE exception on inserting anything when anchor inside <br>.\r
+                                       if ( paragraph.is( 'br' ) )\r
+                                       {\r
+                                               ranges[ 0 ].setStartBefore( paragraph );\r
+                                               ranges[ 0 ].setEndAfter( paragraph );\r
+                                       }\r
+                                       else\r
+                                               ranges[ 0 ].selectNodeContents( paragraph );\r
+                                       selection.selectRanges( ranges );\r
+                               }\r
+                               // Maybe a single range there enclosing the whole list,\r
+                               // turn on the list state manually(#4129).\r
+                               else\r
+                               {\r
+                                       var range = ranges.length == 1 && ranges[ 0 ],\r
+                                               enclosedNode = range && range.getEnclosedNode();\r
+                                       if ( enclosedNode && enclosedNode.is\r
+                                               && this.type == enclosedNode.getName() )\r
+                                       {\r
+                                               setState.call( this, editor, CKEDITOR.TRISTATE_ON );\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       var bookmarks = selection.createBookmarks( true );\r
+\r
+                       // Group the blocks up because there are many cases where multiple lists have to be created,\r
+                       // or multiple lists have to be cancelled.\r
+                       var listGroups = [],\r
+                               database = {};\r
+\r
+                       while ( ranges.length > 0 )\r
+                       {\r
+                               range = ranges.shift();\r
+\r
+                               var boundaryNodes = range.getBoundaryNodes(),\r
+                                       startNode = boundaryNodes.startNode,\r
+                                       endNode = boundaryNodes.endNode;\r
+\r
+                               if ( startNode.type == CKEDITOR.NODE_ELEMENT && startNode.getName() == 'td' )\r
+                                       range.setStartAt( boundaryNodes.startNode, CKEDITOR.POSITION_AFTER_START );\r
+\r
+                               if ( endNode.type == CKEDITOR.NODE_ELEMENT && endNode.getName() == 'td' )\r
+                                       range.setEndAt( boundaryNodes.endNode, CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                               var iterator = range.createIterator(),\r
+                                       block;\r
+\r
+                               iterator.forceBrBreak = ( this.state == CKEDITOR.TRISTATE_OFF );\r
+\r
+                               while ( ( block = iterator.getNextParagraph() ) )\r
+                               {\r
+                                       var path = new CKEDITOR.dom.elementPath( block ),\r
+                                               listNode = null,\r
+                                               processedFlag = false,\r
+                                               blockLimit = path.blockLimit,\r
+                                               element;\r
+\r
+                                       // First, try to group by a list ancestor.\r
+                                       for ( var i = 0 ; i < path.elements.length &&\r
+                                                 ( element = path.elements[ i ] ) && !element.equals( blockLimit ); i++ )\r
+                                       {\r
+                                               if ( listNodeNames[ element.getName() ] )\r
+                                               {\r
+                                                       // If we've encountered a list inside a block limit\r
+                                                       // The last group object of the block limit element should\r
+                                                       // no longer be valid. Since paragraphs after the list\r
+                                                       // should belong to a different group of paragraphs before\r
+                                                       // the list. (Bug #1309)\r
+                                                       blockLimit.removeCustomData( 'list_group_object' );\r
+\r
+                                                       var groupObj = element.getCustomData( 'list_group_object' );\r
+                                                       if ( groupObj )\r
+                                                               groupObj.contents.push( block );\r
+                                                       else\r
+                                                       {\r
+                                                               groupObj = { root : element, contents : [ block ] };\r
+                                                               listGroups.push( groupObj );\r
+                                                               CKEDITOR.dom.element.setMarker( database, element, 'list_group_object', groupObj );\r
+                                                       }\r
+                                                       processedFlag = true;\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+\r
+                                       if ( processedFlag )\r
+                                               continue;\r
+\r
+                                       // No list ancestor? Group by block limit.\r
+                                       var root = blockLimit;\r
+                                       if ( root.getCustomData( 'list_group_object' ) )\r
+                                               root.getCustomData( 'list_group_object' ).contents.push( block );\r
+                                       else\r
+                                       {\r
+                                               groupObj = { root : root, contents : [ block ] };\r
+                                               CKEDITOR.dom.element.setMarker( database, root, 'list_group_object', groupObj );\r
+                                               listGroups.push( groupObj );\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       // Now we have two kinds of list groups, groups rooted at a list, and groups rooted at a block limit element.\r
+                       // We either have to build lists or remove lists, for removing a list does not makes sense when we are looking\r
+                       // at the group that's not rooted at lists. So we have three cases to handle.\r
+                       var listsCreated = [];\r
+                       while ( listGroups.length > 0 )\r
+                       {\r
+                               groupObj = listGroups.shift();\r
+                               if ( this.state == CKEDITOR.TRISTATE_OFF )\r
+                               {\r
+                                       if ( listNodeNames[ groupObj.root.getName() ] )\r
+                                               changeListType.call( this, editor, groupObj, database, listsCreated );\r
+                                       else\r
+                                               createList.call( this, editor, groupObj, listsCreated );\r
+                               }\r
+                               else if ( this.state == CKEDITOR.TRISTATE_ON && listNodeNames[ groupObj.root.getName() ] )\r
+                                       removeList.call( this, editor, groupObj, database );\r
+                       }\r
+\r
+                       // For all new lists created, merge adjacent, same type lists.\r
+                       for ( i = 0 ; i < listsCreated.length ; i++ )\r
+                       {\r
+                               listNode = listsCreated[i];\r
+                               var mergeSibling, listCommand = this;\r
+                               ( mergeSibling = function( rtl ){\r
+\r
+                                       var sibling = listNode[ rtl ?\r
+                                               'getPrevious' : 'getNext' ]( CKEDITOR.dom.walker.whitespaces( true ) );\r
+                                       if ( sibling && sibling.getName &&\r
+                                            sibling.getName() == listCommand.type )\r
+                                       {\r
+                                               sibling.remove();\r
+                                               // Move children order by merge direction.(#3820)\r
+                                               sibling.moveChildren( listNode, rtl ? true : false );\r
+                                       }\r
+                               } )();\r
+                               mergeSibling( true );\r
+                       }\r
+\r
+                       // Clean up, restore selection and update toolbar button states.\r
+                       CKEDITOR.dom.element.clearAllMarkers( database );\r
+                       selection.selectBookmarks( bookmarks );\r
+                       editor.focus();\r
+               }\r
+       };\r
+\r
+       CKEDITOR.plugins.add( 'list',\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       // Register commands.\r
+                       var numberedListCommand = new listCommand( 'numberedlist', 'ol' ),\r
+                               bulletedListCommand = new listCommand( 'bulletedlist', 'ul' );\r
+                       editor.addCommand( 'numberedlist', numberedListCommand );\r
+                       editor.addCommand( 'bulletedlist', bulletedListCommand );\r
+\r
+                       // Register the toolbar button.\r
+                       editor.ui.addButton( 'NumberedList',\r
+                               {\r
+                                       label : editor.lang.numberedlist,\r
+                                       command : 'numberedlist'\r
+                               } );\r
+                       editor.ui.addButton( 'BulletedList',\r
+                               {\r
+                                       label : editor.lang.bulletedlist,\r
+                                       command : 'bulletedlist'\r
+                               } );\r
+\r
+                       // Register the state changing handlers.\r
+                       editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, numberedListCommand ) );\r
+                       editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, bulletedListCommand ) );\r
+               },\r
+\r
+               requires : [ 'domiterator' ]\r
+       } );\r
+})();\r
diff --git a/_source/plugins/listblock/plugin.js b/_source/plugins/listblock/plugin.js
new file mode 100644 (file)
index 0000000..946a54f
--- /dev/null
@@ -0,0 +1,231 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'listblock',\r
+{\r
+       requires : [ 'panel' ],\r
+\r
+       onLoad : function()\r
+       {\r
+               CKEDITOR.ui.panel.prototype.addListBlock = function( name, multiSelect )\r
+               {\r
+                       return this.addBlock( name, new CKEDITOR.ui.listBlock( this.getHolderElement(), multiSelect ) );\r
+               };\r
+\r
+               CKEDITOR.ui.listBlock = CKEDITOR.tools.createClass(\r
+                       {\r
+                               base : CKEDITOR.ui.panel.block,\r
+\r
+                               $ : function( blockHolder, multiSelect )\r
+                               {\r
+                                       // Call the base contructor.\r
+                                       this.base( blockHolder );\r
+\r
+                                       this.multiSelect = !!multiSelect;\r
+\r
+                                       var keys = this.keys;\r
+                                       keys[ 40 ]      = 'next';                                       // ARROW-DOWN\r
+                                       keys[ 9 ]       = 'next';                                       // TAB\r
+                                       keys[ 38 ]      = 'prev';                                       // ARROW-UP\r
+                                       keys[ CKEDITOR.SHIFT + 9 ]      = 'prev';       // SHIFT + TAB\r
+                                       keys[ 32 ]      = 'click';                                      // SPACE\r
+\r
+                                       this._.pendingHtml = [];\r
+                                       this._.items = {};\r
+                                       this._.groups = {};\r
+                               },\r
+\r
+                               _ :\r
+                               {\r
+                                       close : function()\r
+                                       {\r
+                                               if ( this._.started )\r
+                                               {\r
+                                                       this._.pendingHtml.push( '</ul>' );\r
+                                                       delete this._.started;\r
+                                               }\r
+                                       },\r
+\r
+                                       getClick : function()\r
+                                       {\r
+                                               if ( !this._.click )\r
+                                               {\r
+                                                       this._.click = CKEDITOR.tools.addFunction( function( value )\r
+                                                               {\r
+                                                                       var marked = true;\r
+\r
+                                                                       if ( this.multiSelect )\r
+                                                                               marked = this.toggle( value );\r
+                                                                       else\r
+                                                                               this.mark( value );\r
+\r
+                                                                       if ( this.onClick )\r
+                                                                               this.onClick( value, marked );\r
+                                                               },\r
+                                                               this );\r
+                                               }\r
+                                               return this._.click;\r
+                                       }\r
+                               },\r
+\r
+                               proto :\r
+                               {\r
+                                       add : function( value, html, title )\r
+                                       {\r
+                                               var pendingHtml = this._.pendingHtml,\r
+                                                       id = 'cke_' + CKEDITOR.tools.getNextNumber();\r
+\r
+                                               if ( !this._.started )\r
+                                               {\r
+                                                       pendingHtml.push( '<ul class=cke_panel_list>' );\r
+                                                       this._.started = 1;\r
+                                               }\r
+\r
+                                               this._.items[ value ] = id;\r
+\r
+                                               pendingHtml.push(\r
+                                                       '<li id=', id, ' class=cke_panel_listItem>' +\r
+                                                               '<a _cke_focus=1 hidefocus=true' +\r
+                                                                       ' title="', title || value, '"' +\r
+                                                                       ' href="javascript:void(\'', value, '\')"' +\r
+                                                                       ' onclick="CKEDITOR.tools.callFunction(', this._.getClick(), ',\'', value, '\'); return false;">',\r
+                                                                       html || value,\r
+                                                               '</a>' +\r
+                                                       '</li>' );\r
+                                       },\r
+\r
+                                       startGroup : function( title )\r
+                                       {\r
+                                               this._.close();\r
+\r
+                                               var id = 'cke_' + CKEDITOR.tools.getNextNumber();\r
+\r
+                                               this._.groups[ title ] = id;\r
+\r
+                                               this._.pendingHtml.push( '<h1 id=', id, ' class=cke_panel_grouptitle>', title, '</h1>' );\r
+                                       },\r
+\r
+                                       commit : function()\r
+                                       {\r
+                                               this._.close();\r
+                                               this.element.appendHtml( this._.pendingHtml.join( '' ) );\r
+                                               this._.pendingHtml = [];\r
+                                       },\r
+\r
+                                       toggle : function( value )\r
+                                       {\r
+                                               var isMarked = this.isMarked( value );\r
+\r
+                                               if ( isMarked )\r
+                                                       this.unmark( value );\r
+                                               else\r
+                                                       this.mark( value );\r
+\r
+                                               return !isMarked;\r
+                                       },\r
+\r
+                                       hideGroup : function( groupTitle )\r
+                                       {\r
+                                               var group = this.element.getDocument().getById( this._.groups[ groupTitle ] ),\r
+                                                       list = group && group.getNext();\r
+\r
+                                               if ( group )\r
+                                               {\r
+                                                       group.setStyle( 'display', 'none' );\r
+\r
+                                                       if ( list && list.getName() == 'ul' )\r
+                                                               list.setStyle( 'display', 'none' );\r
+                                               }\r
+                                       },\r
+\r
+                                       hideItem : function( value )\r
+                                       {\r
+                                               this.element.getDocument().getById( this._.items[ value ] ).setStyle( 'display', 'none' );\r
+                                       },\r
+\r
+                                       showAll : function()\r
+                                       {\r
+                                               var items = this._.items,\r
+                                                       groups = this._.groups,\r
+                                                       doc = this.element.getDocument();\r
+\r
+                                               for ( var value in items )\r
+                                               {\r
+                                                       doc.getById( items[ value ] ).setStyle( 'display', '' );\r
+                                               }\r
+\r
+                                               for ( var title in groups )\r
+                                               {\r
+                                                       var group = doc.getById( groups[ title ] ),\r
+                                                               list = group.getNext();\r
+\r
+                                                       group.setStyle( 'display', '' );\r
+\r
+                                                       if ( list && list.getName() == 'ul' )\r
+                                                               list.setStyle( 'display', '' );\r
+                                               }\r
+                                       },\r
+\r
+                                       mark : function( value )\r
+                                       {\r
+                                               if ( !this.multiSelect )\r
+                                                       this.unmarkAll();\r
+\r
+                                               this.element.getDocument().getById( this._.items[ value ] ).addClass( 'cke_selected' );\r
+                                       },\r
+\r
+                                       unmark : function( value )\r
+                                       {\r
+                                               this.element.getDocument().getById( this._.items[ value ] ).removeClass( 'cke_selected' );\r
+                                       },\r
+\r
+                                       unmarkAll : function()\r
+                                       {\r
+                                               var items = this._.items,\r
+                                                       doc = this.element.getDocument();\r
+\r
+                                               for ( var value in items )\r
+                                               {\r
+                                                       doc.getById( items[ value ] ).removeClass( 'cke_selected' );\r
+                                               }\r
+                                       },\r
+\r
+                                       isMarked : function( value )\r
+                                       {\r
+                                               return this.element.getDocument().getById( this._.items[ value ] ).hasClass( 'cke_selected' );\r
+                                       },\r
+\r
+                                       focus : function( value )\r
+                                       {\r
+                                               this._.focusIndex = -1;\r
+\r
+                                               if ( value )\r
+                                               {\r
+                                                       var selected = this.element.getDocument().getById( this._.items[ value ] ).getFirst();\r
+\r
+                                                       var links = this.element.getElementsByTag( 'a' ),\r
+                                                               link,\r
+                                                               i = -1;\r
+\r
+                                                       while( ( link = links.getItem( ++i ) ) )\r
+                                                       {\r
+                                                               if ( link.equals( selected ) )\r
+                                                               {\r
+                                                                       this._.focusIndex = i;\r
+                                                                       break;\r
+                                                               }\r
+                                                       }\r
+\r
+                                                       setTimeout( function()\r
+                                                               {\r
+                                                                       selected.focus();\r
+                                                               },\r
+                                                               0 );\r
+                                               }\r
+                                       }\r
+                               }\r
+                       });\r
+       }\r
+});\r
diff --git a/_source/plugins/maximize/plugin.js b/_source/plugins/maximize/plugin.js
new file mode 100644 (file)
index 0000000..2b7ffe3
--- /dev/null
@@ -0,0 +1,267 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       function protectFormStyles( formElement )\r
+       {\r
+               if ( !formElement || formElement.type != CKEDITOR.NODE_ELEMENT || formElement.getName() != 'form' )\r
+                       return [];\r
+\r
+               var hijackRecord = [];\r
+               var hijackNames = [ 'style', 'className' ];\r
+               for ( var i = 0 ; i < hijackNames.length ; i++ )\r
+               {\r
+                       var name = hijackNames[i];\r
+                       var $node = formElement.$.elements.namedItem( name );\r
+                       if ( $node )\r
+                       {\r
+                               var hijackNode = new CKEDITOR.dom.element( $node );\r
+                               hijackRecord.push( [ hijackNode, hijackNode.nextSibling ] );\r
+                               hijackNode.remove();\r
+                       }\r
+               }\r
+\r
+               return hijackRecord;\r
+       }\r
+\r
+       function restoreFormStyles( formElement, hijackRecord )\r
+       {\r
+               if ( !formElement || formElement.type != CKEDITOR.NODE_ELEMENT || formElement.getName() != 'form' )\r
+                       return;\r
+\r
+               if ( hijackRecord.length > 0 )\r
+               {\r
+                       for ( var i = hijackRecord.length - 1 ; i >= 0 ; i-- )\r
+                       {\r
+                               var node = hijackRecord[i][0];\r
+                               var sibling = hijackRecord[i][1];\r
+                               if ( sibling )\r
+                                       node.insertBefore( sibling );\r
+                               else\r
+                                       node.appendTo( formElement );\r
+                       }\r
+               }\r
+       }\r
+\r
+       function saveStyles( element, isInsideEditor )\r
+       {\r
+               var data = protectFormStyles( element );\r
+               var retval = {};\r
+\r
+               var $element = element.$;\r
+\r
+               if ( !isInsideEditor )\r
+               {\r
+                       retval[ 'class' ] = $element.className || '';\r
+                       $element.className = '';\r
+               }\r
+\r
+               retval.inline = $element.style.cssText || '';\r
+               if ( !isInsideEditor )          // Reset any external styles that might interfere. (#2474)\r
+                       $element.style.cssText = 'position: static; overflow: visible';\r
+\r
+               restoreFormStyles( data );\r
+               return retval;\r
+       }\r
+\r
+       function restoreStyles( element, savedStyles )\r
+       {\r
+               var data = protectFormStyles( element );\r
+               var $element = element.$;\r
+               if ( 'class' in savedStyles )\r
+                       $element.className = savedStyles[ 'class' ];\r
+               if ( 'inline' in savedStyles )\r
+                       $element.style.cssText = savedStyles.inline;\r
+               restoreFormStyles( data );\r
+       }\r
+\r
+       function getResizeHandler( mainWindow, editor )\r
+       {\r
+               return function()\r
+               {\r
+                       var viewPaneSize = mainWindow.getViewPaneSize();\r
+                       editor.resize( viewPaneSize.width, viewPaneSize.height, null, true );\r
+               };\r
+       }\r
+\r
+       CKEDITOR.plugins.add( 'maximize',\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       var lang = editor.lang;\r
+                       var mainDocument = CKEDITOR.document;\r
+                       var mainWindow = mainDocument.getWindow();\r
+\r
+                       // Saved selection and scroll position for the editing area.\r
+                       var savedSelection;\r
+                       var savedScroll;\r
+\r
+                       // Saved scroll position for the outer window.\r
+                       var outerScroll;\r
+\r
+                       // Saved resize handler function.\r
+                       var resizeHandler = getResizeHandler( mainWindow, editor );\r
+\r
+                       // Retain state after mode switches.\r
+                       var savedState = CKEDITOR.TRISTATE_OFF;\r
+\r
+                       editor.addCommand( 'maximize',\r
+                               {\r
+                                       modes : { wysiwyg : 1, source : 1 },\r
+\r
+                                       exec : function()\r
+                                       {\r
+                                               var container = editor.container.getChild( [ 0, 0 ] );\r
+                                               var contents = editor.getThemeSpace( 'contents' );\r
+\r
+                                               // Save current selection and scroll position in editing area.\r
+                                               if ( editor.mode == 'wysiwyg' )\r
+                                               {\r
+                                                       savedSelection = editor.getSelection().getRanges();\r
+                                                       savedScroll = mainWindow.getScrollPosition();\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       var $textarea = editor.textarea.$;\r
+                                                       savedSelection = !CKEDITOR.env.ie && [ $textarea.selectionStart, $textarea.selectionEnd ];\r
+                                                       savedScroll = [ $textarea.scrollLeft, $textarea.scrollTop ];\r
+                                               }\r
+\r
+                                               if ( this.state == CKEDITOR.TRISTATE_OFF )              // Go fullscreen if the state is off.\r
+                                               {\r
+                                                       // Add event handler for resizing.\r
+                                                       mainWindow.on( 'resize', resizeHandler );\r
+\r
+                                                       // Save the scroll bar position.\r
+                                                       outerScroll = mainWindow.getScrollPosition();\r
+\r
+                                                       // Save and reset the styles for the entire node tree.\r
+                                                       var currentNode = editor.container;\r
+                                                       while ( ( currentNode = currentNode.getParent() ) )\r
+                                                       {\r
+                                                               currentNode.setCustomData( 'maximize_saved_styles', saveStyles( currentNode ) );\r
+                                                               currentNode.setStyle( 'z-index', editor.config.baseFloatZIndex - 1 );\r
+                                                       }\r
+                                                       contents.setCustomData( 'maximize_saved_styles', saveStyles( contents, true ) );\r
+                                                       container.setCustomData( 'maximize_saved_styles', saveStyles( container, true ) );\r
+\r
+                                                       // Hide scroll bars.\r
+                                                       if ( CKEDITOR.env.ie )\r
+                                                       {\r
+                                                               mainDocument.$.documentElement.style.overflow =\r
+                                                                       mainDocument.getBody().$.style.overflow = 'hidden';\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               mainDocument.getBody().setStyles(\r
+                                                                       {\r
+                                                                               overflow : 'hidden',\r
+                                                                               width : '0px',\r
+                                                                               height : '0px'\r
+                                                                       } );\r
+                                                       }\r
+\r
+                                                       // Scroll to the top left.\r
+                                                       mainWindow.$.scrollTo( 0, 0 );\r
+\r
+                                                       // Resize and move to top left.\r
+                                                       var viewPaneSize = mainWindow.getViewPaneSize();\r
+                                                       container.setStyle( 'position', 'absolute' );\r
+                                                       container.$.offsetLeft;                 // SAFARI BUG: See #2066.\r
+                                                       container.setStyles(\r
+                                                               {\r
+                                                                       'z-index' : editor.config.baseFloatZIndex - 1,\r
+                                                                       left : '0px',\r
+                                                                       top : '0px'\r
+                                                               } );\r
+                                                       editor.resize( viewPaneSize.width, viewPaneSize.height, null, true );\r
+\r
+                                                       // Still not top left? Fix it. (Bug #174)\r
+                                                       var offset = container.getDocumentPosition();\r
+                                                       container.setStyles(\r
+                                                               {\r
+                                                                       left : ( -1 * offset.x ) + 'px',\r
+                                                                       top : ( -1 * offset.y ) + 'px'\r
+                                                               } );\r
+\r
+                                                       // Add cke_maximized class.\r
+                                                       container.addClass( 'cke_maximized' );\r
+                                               }\r
+                                               else if ( this.state == CKEDITOR.TRISTATE_ON )  // Restore from fullscreen if the state is on.\r
+                                               {\r
+                                                       // Remove event handler for resizing.\r
+                                                       mainWindow.removeListener( 'resize', resizeHandler );\r
+\r
+                                                       // Restore CSS styles for the entire node tree.\r
+                                                       var editorElements = [ contents, container ];\r
+                                                       for ( var i = 0 ; i < editorElements.length ; i++ )\r
+                                                       {\r
+                                                               restoreStyles( editorElements[i], editorElements[i].getCustomData( 'maximize_saved_styles' ) );\r
+                                                               editorElements[i].removeCustomData( 'maximize_saved_styles' );\r
+                                                       }\r
+\r
+                                                       currentNode = editor.container;\r
+                                                       while ( ( currentNode = currentNode.getParent() ) )\r
+                                                       {\r
+                                                               restoreStyles( currentNode, currentNode.getCustomData( 'maximize_saved_styles' ) );\r
+                                                               currentNode.removeCustomData( 'maximize_saved_styles' );\r
+                                                       }\r
+\r
+                                                       // Restore the window scroll position.\r
+                                                       mainWindow.$.scrollTo( outerScroll.x, outerScroll.y );\r
+\r
+                                                       // Remove cke_maximized class.\r
+                                                       container.removeClass( 'cke_maximized' );\r
+\r
+                                                       // Emit a resize event, because this time the size is modified in\r
+                                                       // restoreStyles.\r
+                                                       editor.fire( 'resize' );\r
+                                               }\r
+\r
+                                               this.toggleState();\r
+\r
+                                               // Restore selection and scroll position in editing area.\r
+                                               if ( editor.mode == 'wysiwyg' )\r
+                                               {\r
+                                                       editor.getSelection().selectRanges( savedSelection );\r
+\r
+                                                       var element = editor.getSelection().getStartElement();\r
+                                                       if ( element )\r
+                                                               element.scrollIntoView( true );\r
+                                                       else\r
+                                                               mainWindow.$.scrollTo( savedScroll.x, savedScroll.y );\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       if ( savedSelection )\r
+                                                       {\r
+                                                               $textarea.selectionStart = savedSelection[0];\r
+                                                               $textarea.selectionEnd = savedSelection[1];\r
+                                                       }\r
+                                                       $textarea.scrollLeft = savedScroll[0];\r
+                                                       $textarea.scrollTop = savedScroll[1];\r
+                                               }\r
+\r
+                                               savedSelection = savedScroll = null;\r
+                                               savedState = this.state;\r
+                                       },\r
+                                       canUndo : false\r
+                               } );\r
+\r
+                       editor.ui.addButton( 'Maximize',\r
+                               {\r
+                                       label : lang.maximize,\r
+                                       command : 'maximize'\r
+                               } );\r
+\r
+                       // Restore the command state after mode change.\r
+                       editor.on( 'mode', function()\r
+                               {\r
+                                       editor.getCommand( 'maximize' ).setState( savedState );\r
+                               }, null, null, 100 );\r
+               }\r
+       } );\r
+})();\r
diff --git a/_source/plugins/menu/plugin.js b/_source/plugins/menu/plugin.js
new file mode 100644 (file)
index 0000000..790f16f
--- /dev/null
@@ -0,0 +1,377 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'menu',\r
+{\r
+       beforeInit : function( editor )\r
+       {\r
+               var groups = editor.config.menu_groups.split( ',' ),\r
+                       groupsOrder = {};\r
+\r
+               for ( var i = 0 ; i < groups.length ; i++ )\r
+                       groupsOrder[ groups[ i ] ] = i + 1;\r
+\r
+               editor._.menuGroups = groupsOrder;\r
+               editor._.menuItems = {};\r
+       },\r
+\r
+       requires : [ 'floatpanel' ]\r
+});\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.editor.prototype,\r
+{\r
+       addMenuGroup : function( name, order )\r
+       {\r
+               this._.menuGroups[ name ] = order || 100;\r
+       },\r
+\r
+       addMenuItem : function( name, definition )\r
+       {\r
+               if ( this._.menuGroups[ definition.group ] )\r
+                       this._.menuItems[ name ] = new CKEDITOR.menuItem( this, name, definition );\r
+       },\r
+\r
+       addMenuItems : function( definitions )\r
+       {\r
+               for ( var itemName in definitions )\r
+               {\r
+                       this.addMenuItem( itemName, definitions[ itemName ] );\r
+               }\r
+       },\r
+\r
+       getMenuItem : function( name )\r
+       {\r
+               return this._.menuItems[ name ];\r
+       }\r
+});\r
+\r
+(function()\r
+{\r
+       CKEDITOR.menu = CKEDITOR.tools.createClass(\r
+       {\r
+               $ : function( editor, level )\r
+               {\r
+                       this.id = 'cke_' + CKEDITOR.tools.getNextNumber();\r
+\r
+                       this.editor = editor;\r
+                       this.items = [];\r
+\r
+                       this._.level = level || 1;\r
+               },\r
+\r
+               _ :\r
+               {\r
+                       showSubMenu : function( index )\r
+                       {\r
+                               var menu = this._.subMenu,\r
+                                       item = this.items[ index ],\r
+                                       subItems = item.getItems && item.getItems();\r
+\r
+                               // If this item has no subitems, we just hide the submenu, if\r
+                               // available, and return back.\r
+                               if ( !subItems )\r
+                               {\r
+                                       this._.panel.hideChild();\r
+                                       return;\r
+                               }\r
+\r
+                               // Create the submenu, if not available, or clean the existing\r
+                               // one.\r
+                               if ( menu )\r
+                                       menu.removeAll();\r
+                               else\r
+                               {\r
+                                       menu = this._.subMenu = new CKEDITOR.menu( this.editor, this._.level + 1 );\r
+                                       menu.parent = this;\r
+                                       menu.onClick = CKEDITOR.tools.bind( this.onClick, this );\r
+                               }\r
+\r
+                               // Add all submenu items to the menu.\r
+                               for ( var itemName in subItems )\r
+                               {\r
+                                       menu.add( this.editor.getMenuItem( itemName ) );\r
+                               }\r
+\r
+                               // Get the element representing the current item.\r
+                               var element = this._.panel.getBlock( this.id ).element.getDocument().getById( this.id + String( index ) );\r
+\r
+                               // Show the submenu.\r
+                               menu.show( element, 2 );\r
+                       }\r
+               },\r
+\r
+               proto :\r
+               {\r
+                       add : function( item )\r
+                       {\r
+                               // Later we may sort the items, but Array#sort is not stable in\r
+                               // some browsers, here we're forcing the original sequence with\r
+                               // 'order' attribute if it hasn't been assigned. (#3868)\r
+                               if ( !item.order )\r
+                                       item.order = this.items.length;\r
+\r
+                               this.items.push( item );\r
+                       },\r
+\r
+                       removeAll : function()\r
+                       {\r
+                               this.items = [];\r
+                       },\r
+\r
+                       show : function( offsetParent, corner, offsetX, offsetY )\r
+                       {\r
+                               var items = this.items,\r
+                                       editor = this.editor,\r
+                                       panel = this._.panel,\r
+                                       element = this._.element;\r
+\r
+                               // Create the floating panel for this menu.\r
+                               if ( !panel )\r
+                               {\r
+                                       panel = this._.panel = new CKEDITOR.ui.floatPanel( this.editor, CKEDITOR.document.getBody(),\r
+                                               {\r
+                                                       css : [ CKEDITOR.getUrl( editor.skinPath + 'editor.css' ) ],\r
+                                                       level : this._.level - 1,\r
+                                                       className : editor.skinClass + ' cke_contextmenu'\r
+                                               },\r
+                                               this._.level);\r
+\r
+                                       panel.onEscape = CKEDITOR.tools.bind( function()\r
+                                       {\r
+                                               this.onEscape && this.onEscape();\r
+                                               this.hide();\r
+                                       },\r
+                                       this );\r
+\r
+                                       panel.onHide = CKEDITOR.tools.bind( function()\r
+                                       {\r
+                                               this.onHide && this.onHide();\r
+                                       },\r
+                                       this );\r
+\r
+                                       // Create an autosize block inside the panel.\r
+                                       var block = panel.addBlock( this.id );\r
+                                       block.autoSize = true;\r
+\r
+                                       var keys = block.keys;\r
+                                       keys[ 40 ]      = 'next';                                       // ARROW-DOWN\r
+                                       keys[ 9 ]       = 'next';                                       // TAB\r
+                                       keys[ 38 ]      = 'prev';                                       // ARROW-UP\r
+                                       keys[ CKEDITOR.SHIFT + 9 ]      = 'prev';       // SHIFT + TAB\r
+                                       keys[ 32 ]      = 'click';                                      // SPACE\r
+                                       keys[ 39 ]      = 'click';                                      // ARROW-RIGHT\r
+\r
+                                       element = this._.element = block.element;\r
+                                       element.addClass( editor.skinClass );\r
+\r
+                                       var elementDoc = element.getDocument();\r
+                                       elementDoc.getBody().setStyle( 'overflow', 'hidden' );\r
+                                       elementDoc.getElementsByTag( 'html' ).getItem( 0 ).setStyle( 'overflow', 'hidden' );\r
+\r
+                                       this._.itemOverFn = CKEDITOR.tools.addFunction( function( index )\r
+                                               {\r
+                                                       clearTimeout( this._.showSubTimeout );\r
+                                                       this._.showSubTimeout = CKEDITOR.tools.setTimeout( this._.showSubMenu, editor.config.menu_subMenuDelay, this, [ index ] );\r
+                                               },\r
+                                               this);\r
+\r
+                                       this._.itemOutFn = CKEDITOR.tools.addFunction( function( index )\r
+                                               {\r
+                                                       clearTimeout( this._.showSubTimeout );\r
+                                               },\r
+                                               this);\r
+\r
+                                       this._.itemClickFn = CKEDITOR.tools.addFunction( function( index )\r
+                                               {\r
+                                                       var item = this.items[ index ];\r
+\r
+                                                       if ( item.state == CKEDITOR.TRISTATE_DISABLED )\r
+                                                       {\r
+                                                               this.hide();\r
+                                                               return;\r
+                                                       }\r
+\r
+                                                       if ( item.getItems )\r
+                                                               this._.showSubMenu( index );\r
+                                                       else\r
+                                                               this.onClick && this.onClick( item );\r
+                                               },\r
+                                               this);\r
+                               }\r
+\r
+                               // Put the items in the right order.\r
+                               sortItems( items );\r
+\r
+                               // Build the HTML that composes the menu and its items.\r
+                               var output = [ '<div class="cke_menu">' ];\r
+\r
+                               var length = items.length,\r
+                                       lastGroup = length && items[ 0 ].group;\r
+\r
+                               for ( var i = 0 ; i < length ; i++ )\r
+                               {\r
+                                       var item = items[ i ];\r
+                                       if ( lastGroup != item.group )\r
+                                       {\r
+                                               output.push( '<div class="cke_menuseparator"></div>' );\r
+                                               lastGroup = item.group;\r
+                                       }\r
+\r
+                                       item.render( this, i, output );\r
+                               }\r
+\r
+                               output.push( '</div>' );\r
+\r
+                               // Inject the HTML inside the panel.\r
+                               element.setHtml( output.join( '' ) );\r
+\r
+                               // Show the panel.\r
+                               if ( this.parent )\r
+                                       this.parent._.panel.showAsChild( panel, this.id, offsetParent, corner, offsetX, offsetY );\r
+                               else\r
+                                       panel.showBlock( this.id, offsetParent, corner, offsetX, offsetY );\r
+                       },\r
+\r
+                       hide : function()\r
+                       {\r
+                               this._.panel && this._.panel.hide();\r
+                       }\r
+               }\r
+       });\r
+\r
+       function sortItems( items )\r
+       {\r
+               items.sort( function( itemA, itemB )\r
+                       {\r
+                               if ( itemA.group < itemB.group )\r
+                                       return -1;\r
+                               else if ( itemA.group > itemB.group )\r
+                                       return 1;\r
+\r
+                               return itemA.order < itemB.order ? -1 :\r
+                                       itemA.order > itemB.order ? 1 :\r
+                                       0;\r
+                       });\r
+       }\r
+})();\r
+\r
+CKEDITOR.menuItem = CKEDITOR.tools.createClass(\r
+{\r
+       $ : function( editor, name, definition )\r
+       {\r
+               CKEDITOR.tools.extend( this, definition,\r
+                       // Defaults\r
+                       {\r
+                               order : 0,\r
+                               className : 'cke_button_' + name\r
+                       });\r
+\r
+               // Transform the group name into its order number.\r
+               this.group = editor._.menuGroups[ this.group ];\r
+\r
+               this.editor = editor;\r
+               this.name = name;\r
+       },\r
+\r
+       proto :\r
+       {\r
+               render : function( menu, index, output )\r
+               {\r
+                       var id = menu.id + String( index ),\r
+                               state = ( typeof this.state == 'undefined' ) ? CKEDITOR.TRISTATE_OFF : this.state;\r
+\r
+                       var classes = ' cke_' + (\r
+                               state == CKEDITOR.TRISTATE_ON ? 'on' :\r
+                               state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' :\r
+                               'off' );\r
+\r
+                       var htmlLabel = this.label;\r
+                       if ( state == CKEDITOR.TRISTATE_DISABLED )\r
+                               htmlLabel = this.editor.lang.common.unavailable.replace( '%1', htmlLabel );\r
+\r
+                       if ( this.className )\r
+                               classes += ' ' + this.className;\r
+\r
+                       output.push(\r
+                               '<span class="cke_menuitem">' +\r
+                               '<a id="', id, '"' +\r
+                                       ' class="', classes, '" href="javascript:void(\'', ( this.label || '' ).replace( "'", '' ), '\')"' +\r
+                                       ' title="', this.label, '"' +\r
+                                       ' tabindex="-1"' +\r
+                                       '_cke_focus=1' +\r
+                                       ' hidefocus="true"' );\r
+\r
+                       // Some browsers don't cancel key events in the keydown but in the\r
+                       // keypress.\r
+                       // TODO: Check if really needed for Gecko+Mac.\r
+                       if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) )\r
+                       {\r
+                               output.push(\r
+                                       ' onkeypress="return false;"' );\r
+                       }\r
+\r
+                       // With Firefox, we need to force the button to redraw, otherwise it\r
+                       // will remain in the focus state.\r
+                       if ( CKEDITOR.env.gecko )\r
+                       {\r
+                               output.push(\r
+                                       ' onblur="this.style.cssText = this.style.cssText;"' );\r
+                       }\r
+\r
+                       var offset = ( this.iconOffset || 0 ) * -16;\r
+                       output.push(\r
+//                                     ' onkeydown="return CKEDITOR.ui.button._.keydown(', index, ', event);"' +\r
+                                       ' onmouseover="CKEDITOR.tools.callFunction(', menu._.itemOverFn, ',', index, ');"' +\r
+                                       ' onmouseout="CKEDITOR.tools.callFunction(', menu._.itemOutFn, ',', index, ');"' +\r
+                                       ' onclick="CKEDITOR.tools.callFunction(', menu._.itemClickFn, ',', index, '); return false;"' +\r
+                                       '>' +\r
+                                               '<span class="cke_icon_wrapper"><span class="cke_icon"' +\r
+                                                       ( this.icon ? ' style="background-image:url(' + CKEDITOR.getUrl( this.icon ) + ');background-position:0 ' + offset + 'px;"></span>'\r
+                                                       : '' ) +\r
+                                                       '></span></span>' +\r
+                                               '<span class="cke_label">' );\r
+\r
+                       if ( this.getItems )\r
+                       {\r
+                               output.push(\r
+                                                       '<span class="cke_menuarrow"></span>' );\r
+                       }\r
+\r
+                       output.push(\r
+                                                       htmlLabel,\r
+                                               '</span>' +\r
+                               '</a>' +\r
+                               '</span>' );\r
+               }\r
+       }\r
+});\r
+\r
+/**\r
+ * The amount of time, in milliseconds, the editor waits before showing submenu\r
+ * options when moving the mouse over options that contains submenus, like the\r
+ * "Cell Properties" entry for tables.\r
+ * @type Number\r
+ * @default 400\r
+ * @example\r
+ * // Remove the submenu delay.\r
+ * config.menu_subMenuDelay = 0;\r
+ */\r
+CKEDITOR.config.menu_subMenuDelay = 400;\r
+\r
+/**\r
+ * A comma separated list of items group names to be displayed in the context\r
+ * menu. The items order will reflect the order in this list if no priority\r
+ * has been definted in the groups.\r
+ * @type String\r
+ * @default 'clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea'\r
+ * @example\r
+ * config.menu_groups = 'clipboard,table,anchor,link,image';\r
+ */\r
+CKEDITOR.config.menu_groups =\r
+       'clipboard,' +\r
+       'form,' +\r
+       'tablecell,tablecellproperties,tablerow,tablecolumn,table,'+\r
+       'anchor,link,image,flash,' +\r
+       'checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea';\r
diff --git a/_source/plugins/menubutton/plugin.js b/_source/plugins/menubutton/plugin.js
new file mode 100644 (file)
index 0000000..ed17b0e
--- /dev/null
@@ -0,0 +1,93 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'menubutton',\r
+{\r
+       requires : [ 'button', 'contextmenu' ],\r
+       beforeInit : function( editor )\r
+       {\r
+               editor.ui.addHandler( CKEDITOR.UI_MENUBUTTON, CKEDITOR.ui.menuButton.handler );\r
+       }\r
+});\r
+\r
+/**\r
+ * Button UI element.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.UI_MENUBUTTON = 5;\r
+\r
+(function()\r
+{\r
+       var clickFn = function( editor )\r
+       {\r
+               var _ = this._;\r
+\r
+               // Do nothing if this button is disabled.\r
+               if ( _.state === CKEDITOR.TRISTATE_DISABLED )\r
+                       return;\r
+\r
+               _.previousState = _.state;\r
+\r
+               // Check if we already have a menu for it, otherwise just create it.\r
+               var menu = _.menu;\r
+               if ( !menu )\r
+               {\r
+                       menu = _.menu = new CKEDITOR.plugins.contextMenu( editor );\r
+\r
+                       menu.onHide = CKEDITOR.tools.bind( function()\r
+                               {\r
+                                       this.setState( _.previousState );\r
+                               },\r
+                               this );\r
+\r
+                       // Initialize the menu items at this point.\r
+                       if ( this.onMenu )\r
+                       {\r
+                               menu.addListener( this.onMenu );\r
+                       }\r
+               }\r
+\r
+               if ( _.on )\r
+               {\r
+                       menu.hide();\r
+                       return;\r
+               }\r
+\r
+               this.setState( CKEDITOR.TRISTATE_ON );\r
+\r
+               menu.show( CKEDITOR.document.getById( this._.id ), 4 );\r
+       };\r
+\r
+\r
+       CKEDITOR.ui.menuButton = CKEDITOR.tools.createClass(\r
+       {\r
+               base : CKEDITOR.ui.button,\r
+\r
+               $ : function( definition )\r
+               {\r
+                       // We don't want the panel definition in this object.\r
+                       var panelDefinition = definition.panel;\r
+                       delete definition.panel;\r
+\r
+                       this.base( definition );\r
+\r
+                       this.hasArrow = true;\r
+\r
+                       this.click = clickFn;\r
+               },\r
+\r
+               statics :\r
+               {\r
+                       handler :\r
+                       {\r
+                               create : function( definition )\r
+                               {\r
+                                       return new CKEDITOR.ui.menuButton( definition );\r
+                               }\r
+                       }\r
+               }\r
+       });\r
+})();\r
diff --git a/_source/plugins/newpage/plugin.js b/_source/plugins/newpage/plugin.js
new file mode 100644 (file)
index 0000000..2c76877
--- /dev/null
@@ -0,0 +1,65 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Horizontal Page Break\r
+ */\r
+\r
+// Register a plugin named "newpage".\r
+CKEDITOR.plugins.add( 'newpage',\r
+{\r
+       init : function( editor )\r
+       {\r
+               editor.addCommand( 'newpage',\r
+                       {\r
+                               modes : { wysiwyg:1, source:1 },\r
+\r
+                               exec : function( editor )\r
+                               {\r
+                                       var command = this;\r
+                                       function afterCommand()\r
+                                       {\r
+                                               // Defer to happen after 'selectionChange'.\r
+                                               setTimeout( function()\r
+                                               {\r
+                                                       editor.fire( 'afterCommandExec',\r
+                                                       {\r
+                                                               name: command.name,\r
+                                                               command: command\r
+                                                       } );\r
+                                               }, 500 );\r
+                                       }\r
+                                       if ( editor.mode == 'wysiwyg')\r
+                                               editor.on( 'contentDom', function( evt ){\r
+\r
+                                                       evt.removeListener();\r
+                               afterCommand();\r
+                                               } );\r
+\r
+                                       editor.setData( editor.config.newpage_html );\r
+                                       editor.focus();\r
+\r
+                                       if( editor.mode == 'source' )\r
+                                               afterCommand();\r
+\r
+                               },\r
+                               async : true\r
+                       });\r
+\r
+               editor.ui.addButton( 'NewPage',\r
+                       {\r
+                               label : editor.lang.newPage,\r
+                               command : 'newpage'\r
+                       });\r
+       }\r
+});\r
+/**\r
+ * The HTML to load in the editor when the "new page" command is executed.\r
+ * @type String\r
+ * @default ''\r
+ * @example\r
+ * config.newpage_html = '&lt;p&gt;Type your text here.&lt;/p&gt;';\r
+ */\r
+CKEDITOR.config.newpage_html = '';\r
diff --git a/_source/plugins/pagebreak/images/pagebreak.gif b/_source/plugins/pagebreak/images/pagebreak.gif
new file mode 100644 (file)
index 0000000..8d1cffd
Binary files /dev/null and b/_source/plugins/pagebreak/images/pagebreak.gif differ
diff --git a/_source/plugins/pagebreak/plugin.js b/_source/plugins/pagebreak/plugin.js
new file mode 100644 (file)
index 0000000..eaee4a6
--- /dev/null
@@ -0,0 +1,96 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Horizontal Page Break\r
+ */\r
+\r
+// Register a plugin named "pagebreak".\r
+CKEDITOR.plugins.add( 'pagebreak',\r
+{\r
+       init : function( editor )\r
+       {\r
+               // Register the command.\r
+               editor.addCommand( 'pagebreak', CKEDITOR.plugins.pagebreakCmd );\r
+\r
+               // Register the toolbar button.\r
+               editor.ui.addButton( 'PageBreak',\r
+                       {\r
+                               label : editor.lang.pagebreak,\r
+                               command : 'pagebreak'\r
+                       });\r
+\r
+               // Add the style that renders our placeholder.\r
+               editor.addCss(\r
+                       'img.cke_pagebreak' +\r
+                       '{' +\r
+                               'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/pagebreak.gif' ) + ');' +\r
+                               'background-position: center center;' +\r
+                               'background-repeat: no-repeat;' +\r
+                               'clear: both;' +\r
+                               'display: block;' +\r
+                               'float: none;' +\r
+                               'width: 100%;' +\r
+                               'border-top: #999999 1px dotted;' +\r
+                               'border-bottom: #999999 1px dotted;' +\r
+                               'height: 5px;' +\r
+\r
+                       '}' );\r
+       },\r
+\r
+       afterInit : function( editor )\r
+       {\r
+               // Register a filter to displaying placeholders after mode change.\r
+\r
+               var dataProcessor = editor.dataProcessor,\r
+                       dataFilter = dataProcessor && dataProcessor.dataFilter;\r
+\r
+               if ( dataFilter )\r
+               {\r
+                       dataFilter.addRules(\r
+                               {\r
+                                       elements :\r
+                                       {\r
+                                               div : function( element )\r
+                                               {\r
+                                                       var style = element.attributes.style,\r
+                                                               child = style && element.children.length == 1 && element.children[ 0 ],\r
+                                                               childStyle = child && ( child.name == 'span' ) && child.attributes.style;\r
+\r
+                                                       if ( childStyle && ( /page-break-after\s*:\s*always/i ).test( style ) && ( /display\s*:\s*none/i ).test( childStyle ) )\r
+                                                               return editor.createFakeParserElement( element, 'cke_pagebreak', 'div' );\r
+                                               }\r
+                                       }\r
+                               });\r
+               }\r
+       },\r
+\r
+       requires : [ 'fakeobjects' ]\r
+});\r
+\r
+CKEDITOR.plugins.pagebreakCmd =\r
+{\r
+       exec : function( editor )\r
+       {\r
+               // Create the element that represents a print break.\r
+               var breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;"><span style="display: none;">&nbsp;</span></div>' );\r
+\r
+               // Creates the fake image used for this element.\r
+               breakObject = editor.createFakeElement( breakObject, 'cke_pagebreak', 'div' );\r
+\r
+               var ranges = editor.getSelection().getRanges();\r
+\r
+               for ( var range, i = 0 ; i < ranges.length ; i++ )\r
+               {\r
+                       range = ranges[ i ];\r
+\r
+                       if ( i > 0 )\r
+                               breakObject = breakObject.clone( true );\r
+\r
+                       range.splitBlock( 'p' );\r
+                       range.insertNode( breakObject );\r
+               }\r
+       }\r
+};\r
diff --git a/_source/plugins/panel/plugin.js b/_source/plugins/panel/plugin.js
new file mode 100644 (file)
index 0000000..603fc25
--- /dev/null
@@ -0,0 +1,330 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'panel',\r
+{\r
+       beforeInit : function( editor )\r
+       {\r
+               editor.ui.addHandler( CKEDITOR.UI_PANEL, CKEDITOR.ui.panel.handler );\r
+       }\r
+});\r
+\r
+/**\r
+ * Panel UI element.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.UI_PANEL = 2;\r
+\r
+CKEDITOR.ui.panel = function( document, definition )\r
+{\r
+       // Copy all definition properties to this object.\r
+       if ( definition )\r
+               CKEDITOR.tools.extend( this, definition );\r
+\r
+       // Set defaults.\r
+       CKEDITOR.tools.extend( this,\r
+               {\r
+                       className : '',\r
+                       css : []\r
+               });\r
+\r
+       this.id = CKEDITOR.tools.getNextNumber();\r
+       this.document = document;\r
+\r
+       this._ =\r
+       {\r
+               blocks : {}\r
+       };\r
+};\r
+\r
+/**\r
+ * Transforms a rich combo definition in a {@link CKEDITOR.ui.richCombo}\r
+ * instance.\r
+ * @type Object\r
+ * @example\r
+ */\r
+CKEDITOR.ui.panel.handler =\r
+{\r
+       create : function( definition )\r
+       {\r
+               return new CKEDITOR.ui.panel( definition );\r
+       }\r
+};\r
+\r
+CKEDITOR.ui.panel.prototype =\r
+{\r
+       renderHtml : function( editor )\r
+       {\r
+               var output = [];\r
+               this.render( editor, output );\r
+               return output.join( '' );\r
+       },\r
+\r
+       /**\r
+        * Renders the combo.\r
+        * @param {CKEDITOR.editor} editor The editor instance which this button is\r
+        *              to be used by.\r
+        * @param {Array} output The output array to which append the HTML relative\r
+        *              to this button.\r
+        * @example\r
+        */\r
+       render : function( editor, output )\r
+       {\r
+               var id = 'cke_' + this.id;\r
+\r
+               output.push(\r
+                       '<div class="', editor.skinClass ,'"' +\r
+                               ' lang="', editor.langCode, '"' +\r
+                               // iframe loading need sometime, keep the panel hidden(#4186).\r
+                               ' style="display:none;z-index:' + ( editor.config.baseFloatZIndex + 1 ) + '">' +\r
+                               '<div' +\r
+                                       ' id=', id,\r
+                                       ' dir=', editor.lang.dir,\r
+                                       ' class="cke_panel cke_', editor.lang.dir );\r
+\r
+               if ( this.className )\r
+                       output.push( ' ', this.className );\r
+\r
+               output.push(\r
+                               '">' );\r
+\r
+               if ( this.forceIFrame || this.css.length )\r
+               {\r
+                       output.push(\r
+                                               '<iframe id="', id, '_frame"' +\r
+                                                       ' frameborder="0"' +\r
+                                                       ' src="javascript:void(' );\r
+\r
+                       output.push(\r
+                                                       // Support for custom document.domain in IE.\r
+                                                       CKEDITOR.env.isCustomDomain() ?\r
+                                                               '(function(){' +\r
+                                                                       'document.open();' +\r
+                                                                       'document.domain=\'' + document.domain + '\';' +\r
+                                                                       'document.close();' +\r
+                                                               '})()'\r
+                                                       :\r
+                                                               '0' );\r
+\r
+                       output.push(\r
+                                               ')"></iframe>' );\r
+               }\r
+\r
+               output.push(\r
+                               '</div>' +\r
+                       '</div>' );\r
+\r
+               return id;\r
+       },\r
+\r
+       getHolderElement : function()\r
+       {\r
+               var holder = this._.holder;\r
+\r
+               if ( !holder )\r
+               {\r
+                       if ( this.forceIFrame || this.css.length )\r
+                       {\r
+                               var iframe = this.document.getById( 'cke_' + this.id + '_frame' ),\r
+                                       parentDiv = iframe.getParent(),\r
+                                       dir = parentDiv.getAttribute( 'dir' ),\r
+                                       className = parentDiv.getParent().getAttribute( 'class' ),\r
+                                       langCode = parentDiv.getParent().getAttribute( 'lang' ),\r
+                                       doc = iframe.getFrameDocument();\r
+                               // Initialize the IFRAME document body.\r
+                               doc.$.open();\r
+\r
+                               // Support for custom document.domain in IE.\r
+                               if ( CKEDITOR.env.isCustomDomain() )\r
+                                       doc.$.domain = document.domain;\r
+\r
+                               var onLoad = CKEDITOR.tools.addFunction( CKEDITOR.tools.bind( function( ev )\r
+                                       {\r
+                                               this.isLoaded = true;\r
+                                               if ( this.onLoad )\r
+                                                       this.onLoad();\r
+                                       }, this ) );\r
+\r
+                               doc.$.write(\r
+                                       '<!DOCTYPE html>' +\r
+                                       '<html dir="' + dir + '" class="' + className + '_container" lang="' + langCode + '">' +\r
+                                               '<head>' +\r
+                                                       '<style>.' + className + '_container{visibility:hidden}</style>' +\r
+                                               '</head>' +\r
+                                               '<body class="cke_' + dir + ' cke_panel_frame ' + CKEDITOR.env.cssClass + '" style="margin:0;padding:0"' +\r
+                                               ' onload="( window.CKEDITOR || window.parent.CKEDITOR ).tools.callFunction(' + onLoad + ');">' +\r
+                                               '</body>' +\r
+                                               // It looks strange, but for FF2, the styles must go\r
+                                               // after <body>, so it (body) becames immediatelly\r
+                                               // available. (#3031)\r
+                                               '<link type="text/css" rel=stylesheet href="' + this.css.join( '"><link type="text/css" rel="stylesheet" href="' ) + '">' +\r
+                                       '<\/html>' );\r
+                               doc.$.close();\r
+\r
+                               var win = doc.getWindow();\r
+\r
+                               // Register the CKEDITOR global.\r
+                               win.$.CKEDITOR = CKEDITOR;\r
+\r
+                               doc.on( 'keydown', function( evt )\r
+                                       {\r
+                                               var keystroke = evt.data.getKeystroke();\r
+\r
+                                               // Delegate key processing to block.\r
+                                               if ( this._.onKeyDown && this._.onKeyDown( keystroke ) === false )\r
+                                               {\r
+                                                       evt.data.preventDefault();\r
+                                                       return;\r
+                                               }\r
+\r
+                                               if ( keystroke == 27 )          // ESC\r
+                                                       this.onEscape && this.onEscape();\r
+                                       },\r
+                                       this );\r
+\r
+                               holder = doc.getBody();\r
+                       }\r
+                       else\r
+                               holder = this.document.getById( 'cke_' + this.id );\r
+\r
+                       this._.holder = holder;\r
+               }\r
+\r
+               return holder;\r
+       },\r
+\r
+       addBlock : function( name, block )\r
+       {\r
+               block = this._.blocks[ name ] = block || new CKEDITOR.ui.panel.block( this.getHolderElement() );\r
+\r
+               if ( !this._.currentBlock )\r
+                       this.showBlock( name );\r
+\r
+               return block;\r
+       },\r
+\r
+       getBlock : function( name )\r
+       {\r
+               return this._.blocks[ name ];\r
+       },\r
+\r
+       showBlock : function( name )\r
+       {\r
+               var blocks = this._.blocks,\r
+                       block = blocks[ name ],\r
+                       current = this._.currentBlock;\r
+\r
+               if ( current )\r
+                       current.hide();\r
+\r
+               this._.currentBlock = block;\r
+\r
+               // Reset the focus index, so it will always go into the first one.\r
+               block._.focusIndex = -1;\r
+\r
+               this._.onKeyDown = block.onKeyDown && CKEDITOR.tools.bind( block.onKeyDown, block );\r
+\r
+               block.show();\r
+\r
+               return block;\r
+       }\r
+};\r
+\r
+CKEDITOR.ui.panel.block = CKEDITOR.tools.createClass(\r
+{\r
+       $ : function( blockHolder )\r
+       {\r
+               this.element = blockHolder.append(\r
+                       blockHolder.getDocument().createElement( 'div',\r
+                               {\r
+                                       attributes :\r
+                                       {\r
+                                               'class' : 'cke_panel_block'\r
+                                       },\r
+                                       styles :\r
+                                       {\r
+                                               display : 'none'\r
+                                       }\r
+                               }) );\r
+\r
+               this.keys = {};\r
+\r
+               this._.focusIndex = -1;\r
+       },\r
+\r
+       _ : {},\r
+\r
+       proto :\r
+       {\r
+               show : function()\r
+               {\r
+                       this.element.setStyle( 'display', '' );\r
+               },\r
+\r
+               hide : function()\r
+               {\r
+                       if ( !this.onHide || this.onHide.call( this )  !== true )\r
+                               this.element.setStyle( 'display', 'none' );\r
+               },\r
+\r
+               onKeyDown : function( keystroke )\r
+               {\r
+                       var keyAction = this.keys[ keystroke ];\r
+                       switch ( keyAction )\r
+                       {\r
+                               // Move forward.\r
+                               case 'next' :\r
+                                       var index = this._.focusIndex,\r
+                                               links = this.element.getElementsByTag( 'a' ),\r
+                                               link;\r
+\r
+                                       while ( ( link = links.getItem( ++index ) ) )\r
+                                       {\r
+                                               // Move the focus only if the element is marked with\r
+                                               // the _cke_focus and it it's visible (check if it has\r
+                                               // width).\r
+                                               if ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth )\r
+                                               {\r
+                                                       this._.focusIndex = index;\r
+                                                       link.focus();\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                                       return false;\r
+\r
+                               // Move backward.\r
+                               case 'prev' :\r
+                                       index = this._.focusIndex;\r
+                                       links = this.element.getElementsByTag( 'a' );\r
+\r
+                                       while ( index > 0 && ( link = links.getItem( --index ) ) )\r
+                                       {\r
+                                               // Move the focus only if the element is marked with\r
+                                               // the _cke_focus and it it's visible (check if it has\r
+                                               // width).\r
+                                               if ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth )\r
+                                               {\r
+                                                       this._.focusIndex = index;\r
+                                                       link.focus();\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                                       return false;\r
+\r
+                               case 'click' :\r
+                                       index = this._.focusIndex;\r
+                                       link = index >= 0 && this.element.getElementsByTag( 'a' ).getItem( index );\r
+\r
+                                       if ( link )\r
+                                               link.$.click ? link.$.click() : link.$.onclick();\r
+\r
+                                       return false;\r
+                       }\r
+\r
+                       return true;\r
+               }\r
+       }\r
+});\r
diff --git a/_source/plugins/panelbutton/plugin.js b/_source/plugins/panelbutton/plugin.js
new file mode 100644 (file)
index 0000000..155fa95
--- /dev/null
@@ -0,0 +1,140 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'panelbutton',\r
+{\r
+       requires : [ 'button' ],\r
+       beforeInit : function( editor )\r
+       {\r
+               editor.ui.addHandler( CKEDITOR.UI_PANELBUTTON, CKEDITOR.ui.panelButton.handler );\r
+       }\r
+});\r
+\r
+/**\r
+ * Button UI element.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.UI_PANELBUTTON = 4;\r
+\r
+(function()\r
+{\r
+       var clickFn = function( editor )\r
+       {\r
+               var _ = this._;\r
+\r
+               if ( _.state == CKEDITOR.TRISTATE_DISABLED )\r
+                       return;\r
+\r
+               this.createPanel( editor );\r
+\r
+               if ( _.on )\r
+               {\r
+                       _.panel.hide();\r
+                       return;\r
+               }\r
+\r
+               _.panel.showBlock( this._.id, this.document.getById( this._.id ), 4 );\r
+       };\r
+\r
+\r
+       CKEDITOR.ui.panelButton = CKEDITOR.tools.createClass(\r
+       {\r
+               base : CKEDITOR.ui.button,\r
+\r
+               $ : function( definition )\r
+               {\r
+                       // We don't want the panel definition in this object.\r
+                       var panelDefinition = definition.panel;\r
+                       delete definition.panel;\r
+\r
+                       this.base( definition );\r
+\r
+                       this.document = ( panelDefinition\r
+                                                               && panelDefinition.parent\r
+                                                               && panelDefinition.parent.getDocument() )\r
+                                                       || CKEDITOR.document;\r
+\r
+                       this.hasArrow = true;\r
+\r
+                       this.click = clickFn;\r
+\r
+                       this._ =\r
+                       {\r
+                               panelDefinition : panelDefinition\r
+                       };\r
+               },\r
+\r
+               statics :\r
+               {\r
+                       handler :\r
+                       {\r
+                               create : function( definition )\r
+                               {\r
+                                       return new CKEDITOR.ui.panelButton( definition );\r
+                               }\r
+                       }\r
+               },\r
+\r
+               proto :\r
+               {\r
+                       createPanel : function( editor )\r
+                       {\r
+                               var _ = this._;\r
+\r
+                               if ( _.panel )\r
+                                       return;\r
+\r
+                               var panelDefinition = this._.panelDefinition || {},\r
+                                       panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(),\r
+                                       panel = this._.panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ),\r
+                                       me = this;\r
+\r
+                               panel.onShow = function()\r
+                                       {\r
+                                               if ( me.className )\r
+                                                       this.element.getFirst().addClass( me.className + '_panel' );\r
+\r
+                                               _.oldState = me._.state;\r
+                                               me.setState( CKEDITOR.TRISTATE_ON );\r
+\r
+                                               _.on = 1;\r
+\r
+                                               if ( me.onOpen )\r
+                                                       me.onOpen();\r
+                                       };\r
+\r
+                               panel.onHide = function()\r
+                                       {\r
+                                               if ( me.className )\r
+                                                       this.element.getFirst().removeClass( me.className + '_panel' );\r
+\r
+                                               me.setState( _.oldState );\r
+\r
+                                               _.on = 0;\r
+\r
+                                               if ( me.onClose )\r
+                                                       me.onClose();\r
+                                       };\r
+\r
+                               panel.onEscape = function()\r
+                                       {\r
+                                               panel.hide();\r
+                                               me.document.getById( _.id ).focus();\r
+                                       };\r
+\r
+                               if ( this.onBlock )\r
+                                       this.onBlock( panel, _.id );\r
+\r
+                               panel.getBlock( _.id ).onHide = function()\r
+                                               {\r
+                                                               _.on = 0;\r
+                                                               me.setState( CKEDITOR.TRISTATE_OFF );\r
+                                               };\r
+                       }\r
+               }\r
+       });\r
+\r
+})();\r
diff --git a/_source/plugins/pastefromword/dialogs/pastefromword.js b/_source/plugins/pastefromword/dialogs/pastefromword.js
new file mode 100644 (file)
index 0000000..a10f297
--- /dev/null
@@ -0,0 +1,307 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'pastefromword', function( editor )\r
+{\r
+       return {\r
+               title : editor.lang.pastefromword.title,\r
+               minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks ? 370 : 350,\r
+               minHeight : CKEDITOR.env.ie && CKEDITOR.env.quirks ? 270 : 260,\r
+               htmlToLoad : '<!doctype html><script type="text/javascript">'\r
+                               + 'window.onload = function()'\r
+                               + '{'\r
+                                       + 'if ( ' + CKEDITOR.env.ie + ' ) '\r
+                                               + 'document.body.contentEditable = "true";'\r
+                                       + 'else '\r
+                                               + 'document.designMode = "on";'\r
+                                       + 'var iframe = new window.parent.CKEDITOR.dom.element( frameElement );'\r
+                                       + 'var dialog = iframe.getCustomData( "dialog" );'\r
+                     + ''\r
+                                       + 'iframe.getFrameDocument().on( "keydown", function( e )\\r
+                                               {\\r
+                                                       if ( e.data.getKeystroke() == 27 )\\r
+                                                               dialog.hide();\\r
+                                               });'\r
+                                       + 'dialog.fire( "iframeAdded", { iframe : iframe } );'\r
+                               + '};'\r
+                               + '</script><style>body { margin: 3px; height: 95%; } </style><body></body>',\r
+               cleanWord : function( editor, html, ignoreFont, removeStyles )\r
+               {\r
+                       // Remove comments [SF BUG-1481861].\r
+                       html = html.replace(/<\!--[\s\S]*?-->/g, '' ) ;\r
+\r
+                       html = html.replace(/<o:p>\s*<\/o:p>/g, '') ;\r
+                       html = html.replace(/<o:p>[\s\S]*?<\/o:p>/g, '&nbsp;') ;\r
+\r
+                       // Remove mso-xxx styles.\r
+                       html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '' ) ;\r
+\r
+                       // Remove margin styles.\r
+                       html = html.replace( /\s*MARGIN: 0(?:cm|in) 0(?:cm|in) 0pt\s*;/gi, '' ) ;\r
+                       html = html.replace( /\s*MARGIN: 0(?:cm|in) 0(?:cm|in) 0pt\s*"/gi, "\"" ) ;\r
+\r
+                       html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '' ) ;\r
+                       html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ;\r
+\r
+                       html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ;\r
+\r
+                       html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ;\r
+\r
+                       html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ;\r
+\r
+                       html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '' ) ;\r
+                       html = html.replace( /\s*tab-stops:[^"]*/gi, '' ) ;\r
+\r
+                       // Remove FONT face attributes.\r
+                       if ( ignoreFont )\r
+                       {\r
+                               html = html.replace( /\s*face="[^"]*"/gi, '' ) ;\r
+                               html = html.replace( /\s*face=[^ >]*/gi, '' ) ;\r
+\r
+                               html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, '' ) ;\r
+                       }\r
+\r
+                       // Remove Class attributes\r
+                       html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;\r
+\r
+                       // Remove styles.\r
+                       if ( removeStyles )\r
+                               html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ;\r
+\r
+                       // Remove style, meta and link tags\r
+                       html = html.replace( /<STYLE[^>]*>[\s\S]*?<\/STYLE[^>]*>/gi, '' ) ;\r
+                       html = html.replace( /<(?:META|LINK)[^>]*>\s*/gi, '' ) ;\r
+\r
+                       // Remove empty styles.\r
+                       html =  html.replace( /\s*style="\s*"/gi, '' ) ;\r
+\r
+                       html = html.replace( /<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;' ) ;\r
+\r
+                       html = html.replace( /<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ;\r
+\r
+                       // Remove Lang attributes\r
+                       html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;\r
+\r
+                       html = html.replace( /<SPAN\s*>([\s\S]*?)<\/SPAN>/gi, '$1' ) ;\r
+\r
+                       html = html.replace( /<FONT\s*>([\s\S]*?)<\/FONT>/gi, '$1' ) ;\r
+\r
+                       // Remove XML elements and declarations\r
+                       html = html.replace(/<\\?\?xml[^>]*>/gi, '' ) ;\r
+\r
+                       // Remove w: tags with contents.\r
+                       html = html.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '' ) ;\r
+\r
+                       // Remove Tags with XML namespace declarations: <o:p><\/o:p>\r
+                       html = html.replace(/<\/?\w+:[^>]*>/gi, '' ) ;\r
+\r
+                       html = html.replace( /<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;' ) ;\r
+\r
+                       html = html.replace( /<H\d>\s*<\/H\d>/gi, '' ) ;\r
+\r
+                       // Remove "display:none" tags.\r
+                       html = html.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none[\s\S]*?<\/\1>/ig, '' ) ;\r
+\r
+                       // Remove language tags\r
+                       html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3") ;\r
+\r
+                       // Remove onmouseover and onmouseout events (from MS Word comments effect)\r
+                       html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3") ;\r
+                       html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3") ;\r
+\r
+                       if ( editor.config.pasteFromWordKeepsStructure )\r
+                       {\r
+                               // The original <Hn> tag send from Word is something like this: <Hn style="margin-top:0px;margin-bottom:0px">\r
+                               html = html.replace( /<H(\d)([^>]*)>/gi, '<h$1>' ) ;\r
+\r
+                               // Word likes to insert extra <font> tags, when using MSIE. (Wierd).\r
+                               html = html.replace( /<(H\d)><FONT[^>]*>([\s\S]*?)<\/FONT><\/\1>/gi, '<$1>$2<\/$1>' );\r
+                               html = html.replace( /<(H\d)><EM>([\s\S]*?)<\/EM><\/\1>/gi, '<$1>$2<\/$1>' );\r
+                       }\r
+                       else\r
+                       {\r
+                               html = html.replace( /<H1([^>]*)>/gi, '<div$1><b><font size="6">' ) ;\r
+                               html = html.replace( /<H2([^>]*)>/gi, '<div$1><b><font size="5">' ) ;\r
+                               html = html.replace( /<H3([^>]*)>/gi, '<div$1><b><font size="4">' ) ;\r
+                               html = html.replace( /<H4([^>]*)>/gi, '<div$1><b><font size="3">' ) ;\r
+                               html = html.replace( /<H5([^>]*)>/gi, '<div$1><b><font size="2">' ) ;\r
+                               html = html.replace( /<H6([^>]*)>/gi, '<div$1><b><font size="1">' ) ;\r
+\r
+                               html = html.replace( /<\/H\d>/gi, '<\/font><\/b><\/div>' ) ;\r
+\r
+                               // Transform <P> to <DIV>\r
+                               var re = new RegExp( '(<P)([^>]*>[\\s\\S]*?)(<\/P>)', 'gi' ) ;  // Different because of a IE 5.0 error\r
+                               html = html.replace( re, '<div$2<\/div>' ) ;\r
+\r
+                               // Remove empty tags (three times, just to be sure).\r
+                               // This also removes any empty anchor\r
+                               html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;\r
+                               html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;\r
+                               html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;\r
+                       }\r
+\r
+                       return html ;\r
+               },\r
+               onShow : function()\r
+               {\r
+                       // To avoid JAWS putting virtual cursor back to the editor document,\r
+                       // disable main document 'contentEditable' during dialog opening.\r
+                       if ( CKEDITOR.env.ie )\r
+                               this.getParentEditor().document.getBody().$.contentEditable = 'false';\r
+\r
+                       // FIREFOX BUG: Force the browser to render the dialog to make the to-be-\r
+                       // inserted iframe editable. (#3366)\r
+                       this.parts.dialog.$.offsetHeight;\r
+\r
+                       var container = this.getContentElement( 'general', 'editing_area' ).getElement(),\r
+                               iframe = CKEDITOR.dom.element.createFromHtml( '<iframe src="javascript:void(0)" frameborder="0" allowtransparency="1"></iframe>' );\r
+\r
+                       var lang = this.getParentEditor().lang;\r
+\r
+                       iframe.setStyles(\r
+                               {\r
+                                       width : '346px',\r
+                                       height : '152px',\r
+                                       'background-color' : 'white',\r
+                                       border : '1px solid black'\r
+                               } );\r
+                       iframe.setCustomData( 'dialog', this );\r
+\r
+                       var accTitle = lang.editorTitle.replace( '%1', lang.pastefromword.title );\r
+\r
+                       if ( CKEDITOR.env.ie )\r
+                               container.setHtml( '<legend style="position:absolute;top:-1000000px;left:-1000000px;">'\r
+                                               + CKEDITOR.tools.htmlEncode( accTitle )\r
+                                               + '</legend>' );\r
+                       else\r
+                       {\r
+                               container.setHtml( '' );\r
+                               container.setAttributes(\r
+                                       {\r
+                                               role : 'region',\r
+                                               title : accTitle\r
+                                       } );\r
+                               iframe.setAttributes(\r
+                                       {\r
+                                               role : 'region',\r
+                                               title : ' '\r
+                                       } );\r
+                       }\r
+                       container.append( iframe );\r
+                       if ( CKEDITOR.env.ie )\r
+                               container.setStyle( 'height', ( iframe.$.offsetHeight + 2 ) + 'px' );\r
+\r
+                       var isCustomDomain = CKEDITOR.env.ie && document.domain != window.location.hostname;\r
+                       if ( isCustomDomain )\r
+                       {\r
+                               CKEDITOR._cke_htmlToLoad = this.definition.htmlToLoad;\r
+                               iframe.setAttribute( 'src',\r
+                                       'javascript:void( (function(){' +\r
+                                                  'document.open();' +\r
+                                                  'document.domain="' + document.domain + '";' +\r
+                                                  'document.write( window.parent.CKEDITOR._cke_htmlToLoad );' +\r
+                                                  'delete window.parent.CKEDITOR._cke_htmlToLoad;' +\r
+                                                  'document.close();' +\r
+                                       '})() )' );\r
+                       }\r
+                       else\r
+                       {\r
+                               var doc = iframe.$.contentWindow.document;\r
+                               doc.open();\r
+                               doc.write( this.definition.htmlToLoad );\r
+                               doc.close();\r
+                       }\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var container = this.getContentElement( 'general', 'editing_area' ).getElement(),\r
+                               iframe = container.getElementsByTag( 'iframe' ).getItem( 0 ),\r
+                               editor = this.getParentEditor(),\r
+                               html = this.definition.cleanWord( editor, iframe.$.contentWindow.document.body.innerHTML,\r
+                                               this.getValueOf( 'general', 'ignoreFontFace' ),\r
+                                               this.getValueOf( 'general', 'removeStyle' ) );\r
+\r
+                               // Insertion should happen after main document design mode turned on.\r
+                               setTimeout( function(){\r
+                                       editor.insertHtml( html );\r
+                               }, 0 );\r
+               },\r
+               onHide : function()\r
+               {\r
+                       if ( CKEDITOR.env.ie )\r
+                               this.getParentEditor().document.getBody().$.contentEditable = 'true';\r
+               },\r
+               onLoad : function()\r
+               {\r
+                       if ( ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) && editor.lang.dir == 'rtl' )\r
+                               this.parts.contents.setStyle( 'overflow', 'hidden' );\r
+               },\r
+               contents :\r
+               [\r
+                       {\r
+                               id : 'general',\r
+                               label : editor.lang.pastefromword.title,\r
+                               elements :\r
+                               [\r
+                                       {\r
+                                               type : 'html',\r
+                                               style : 'white-space:normal;width:346px;display:block',\r
+                                               onShow : function()\r
+                                               {\r
+                                                       /*\r
+                                                        * SAFARI BUG: The advice label would overflow if the table layout\r
+                                                        * isn't fixed.\r
+                                                        */\r
+                                                       if ( CKEDITOR.env.webkit )\r
+                                                               this.getElement().getAscendant( 'table' ).setStyle( 'table-layout', 'fixed' );\r
+                                               },\r
+                                               html : editor.lang.pastefromword.advice\r
+                                       },\r
+                                       {\r
+                                               type : 'html',\r
+                                               id : 'editing_area',\r
+                                               style : 'width: 100%; height: 100%;',\r
+                                               html : '<fieldset></fieldset>',\r
+                                               focus : function()\r
+                                               {\r
+                                                       var div = this.getElement();\r
+                                                       var iframe = div.getElementsByTag( 'iframe' );\r
+                                                       if ( iframe.count() < 1 )\r
+                                                               return;\r
+                                                       iframe = iframe.getItem( 0 );\r
+\r
+                                                       // #3291 : JAWS needs the 500ms delay to detect that the editor iframe\r
+                                                       // iframe is no longer editable. So that it will put the focus into the\r
+                                                       // Paste from Word dialog's editable area instead.\r
+                                                       setTimeout( function()\r
+                                                       {\r
+                                                               iframe.$.contentWindow.focus();\r
+                                                       }, 500 );\r
+                                               }\r
+                                       },\r
+                                       {\r
+                                               type : 'vbox',\r
+                                               padding : 0,\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'checkbox',\r
+                                                               id : 'ignoreFontFace',\r
+                                                               label : editor.lang.pastefromword.ignoreFontFace,\r
+                                                               'default' : editor.config.pasteFromWordIgnoreFontFace\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'checkbox',\r
+                                                               id : 'removeStyle',\r
+                                                               label : editor.lang.pastefromword.removeStyle,\r
+                                                               'default' : editor.config.pasteFromWordRemoveStyle\r
+                                                       }\r
+                                               ]\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+} );\r
diff --git a/_source/plugins/pastefromword/plugin.js b/_source/plugins/pastefromword/plugin.js
new file mode 100644 (file)
index 0000000..d7cf4b5
--- /dev/null
@@ -0,0 +1,54 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'pastefromword',\r
+{\r
+       init : function( editor )\r
+       {\r
+               // Register the command.\r
+               editor.addCommand( 'pastefromword', new CKEDITOR.dialogCommand( 'pastefromword' ) );\r
+\r
+               // Register the toolbar button.\r
+               editor.ui.addButton( 'PasteFromWord',\r
+                       {\r
+                               label : editor.lang.pastefromword.toolbar,\r
+                               command : 'pastefromword'\r
+                       } );\r
+\r
+               // Register the dialog.\r
+               CKEDITOR.dialog.add( 'pastefromword', this.path + 'dialogs/pastefromword.js' );\r
+       }\r
+} );\r
+\r
+/**\r
+ * Whether the "Ignore font face definitions" checkbox is enabled by default in\r
+ * the Paste from Word dialog.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.pasteFromWordIgnoreFontFace = false;\r
+ */\r
+CKEDITOR.config.pasteFromWordIgnoreFontFace = true;\r
+\r
+/**\r
+ * Whether the "Remove styles definitions" checkbox is enabled by default in\r
+ * the Paste from Word dialog.\r
+ * @type Boolean\r
+ * @default false\r
+ * @example\r
+ * config.pasteFromWordRemoveStyle = true;\r
+ */\r
+CKEDITOR.config.pasteFromWordRemoveStyle = false;\r
+\r
+/**\r
+ * Whether to keep structure markup (&lt;h1&gt;, &lt;h2&gt;, etc.) or replace\r
+ * it with elements that create more similar pasting results when pasting\r
+ * content from Microsoft Word into the Paste from Word dialog.\r
+ * @type Boolean\r
+ * @default false\r
+ * @example\r
+ * config.pasteFromWordKeepsStructure = true;\r
+ */\r
+CKEDITOR.config.pasteFromWordKeepsStructure = false;\r
diff --git a/_source/plugins/pastetext/dialogs/pastetext.js b/_source/plugins/pastetext/dialogs/pastetext.js
new file mode 100644 (file)
index 0000000..a0dfe48
--- /dev/null
@@ -0,0 +1,65 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       CKEDITOR.dialog.add( 'pastetext', function( editor )\r
+               {\r
+                       return {\r
+                               title : editor.lang.pasteText.title,\r
+\r
+                               minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks ? 368 : 350,\r
+                               minHeight : 240,\r
+\r
+                               onShow : function()\r
+                               {\r
+                                       // Reset the textarea value.\r
+                                       this.getContentElement( 'general', 'content' ).getInputElement().setValue( '' );\r
+                               },\r
+\r
+                               onOk : function()\r
+                               {\r
+                                       // Get the textarea value.\r
+                                       var text = this.getContentElement( 'general', 'content' ).getInputElement().getValue();\r
+\r
+                                       // Inserts the text.\r
+                                       this.getParentEditor().insertText( text );\r
+                               },\r
+\r
+                               contents :\r
+                               [\r
+                                       {\r
+                                               label : editor.lang.common.generalTab,\r
+                                               id : 'general',\r
+                                               elements :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'html',\r
+                                                               id : 'pasteMsg',\r
+                                                               html : '<div style="white-space:normal;width:340px;">' + editor.lang.clipboard.pasteMsg + '</div>'\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'html',\r
+                                                               id : 'content',\r
+                                                               style : 'width:340px;height:170px',\r
+                                                               html :\r
+                                                                       '<textarea style="' +\r
+                                                                               'width:346px;' +\r
+                                                                               'height:170px;' +\r
+                                                                               'resize: none;' +\r
+                                                                               'border:1px solid black;' +\r
+                                                                               'background-color:white">' +\r
+                                                                       '</textarea>',\r
+                                                               focus : function()\r
+                                                               {\r
+                                                                       this.getElement().focus();\r
+                                                               }\r
+                                                       }\r
+                                               ]\r
+                                       }\r
+                               ]\r
+                       };\r
+               });\r
+})();\r
diff --git a/_source/plugins/pastetext/plugin.js b/_source/plugins/pastetext/plugin.js
new file mode 100644 (file)
index 0000000..3a1678d
--- /dev/null
@@ -0,0 +1,142 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Paste as plain text plugin\r
+ */\r
+\r
+(function()\r
+{\r
+       // The pastetext command definition.\r
+       var pasteTextCmd =\r
+       {\r
+               exec : function( editor )\r
+               {\r
+                       // We use getClipboardData just to test if the clipboard access has\r
+                       // been granted by the user.\r
+                       if ( CKEDITOR.getClipboardData() === false || !window.clipboardData )\r
+                       {\r
+                               editor.openDialog( 'pastetext' );\r
+                               return;\r
+                       }\r
+\r
+                       editor.insertText( window.clipboardData.getData( 'Text' ) );\r
+               }\r
+       };\r
+\r
+       // Register the plugin.\r
+       CKEDITOR.plugins.add( 'pastetext',\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       var commandName = 'pastetext',\r
+                               command = editor.addCommand( commandName, pasteTextCmd );\r
+\r
+                       editor.ui.addButton( 'PasteText',\r
+                               {\r
+                                       label : editor.lang.pasteText.button,\r
+                                       command : commandName\r
+                               });\r
+\r
+                       CKEDITOR.dialog.add( commandName, CKEDITOR.getUrl( this.path + 'dialogs/pastetext.js' ) );\r
+\r
+                       if ( editor.config.forcePasteAsPlainText )\r
+                       {\r
+                               editor.on( 'beforePaste', function( event )\r
+                                       {\r
+                                               if ( editor.mode == "wysiwyg" )\r
+                                               {\r
+                                                       setTimeout( function() { command.exec(); }, 0 );\r
+                                                       event.cancel();\r
+                                               }\r
+                                       },\r
+                                       null, null, 20 );\r
+                       }\r
+               },\r
+               requires : [ 'clipboard' ]\r
+       });\r
+\r
+       var clipboardDiv;\r
+\r
+       CKEDITOR.getClipboardData = function()\r
+       {\r
+               if ( !CKEDITOR.env.ie )\r
+                       return false;\r
+\r
+               var doc = CKEDITOR.document,\r
+                       body = doc.getBody();\r
+\r
+               if ( !clipboardDiv )\r
+               {\r
+                       clipboardDiv = doc.createElement( 'div',\r
+                               {\r
+                                       attributes :\r
+                                               {\r
+                                                       id: 'cke_hiddenDiv'\r
+                                               },\r
+                                       styles :\r
+                                               {\r
+                                                       position : 'absolute',\r
+                                                       visibility : 'hidden',\r
+                                                       overflow : 'hidden',\r
+                                                       width : '1px',\r
+                                                       height : '1px'\r
+                                               }\r
+                               });\r
+\r
+                       clipboardDiv.setHtml( '' );\r
+\r
+                       clipboardDiv.appendTo( body );\r
+               }\r
+\r
+               // The "enabled" flag is used to check whether the paste operation has\r
+               // been completed (the onpaste event has been fired).\r
+               var     enabled = false;\r
+               var setEnabled = function()\r
+               {\r
+                       enabled = true;\r
+               };\r
+\r
+               body.on( 'paste', setEnabled );\r
+\r
+               // Create a text range and move it inside the div.\r
+               var textRange = body.$.createTextRange();\r
+               textRange.moveToElementText( clipboardDiv.$ );\r
+\r
+               // The execCommand in will fire the "onpaste", only if the\r
+               // security settings are enabled.\r
+               textRange.execCommand( 'Paste' );\r
+\r
+               // Get the DIV html and reset it.\r
+               var html = clipboardDiv.getHtml();\r
+               clipboardDiv.setHtml( '' );\r
+\r
+               body.removeListener( 'paste', setEnabled );\r
+\r
+               // Return the HTML or false if not enabled.\r
+               return enabled && html;\r
+       };\r
+})();\r
+\r
+CKEDITOR.editor.prototype.insertText = function( text )\r
+{\r
+       text = CKEDITOR.tools.htmlEncode( text );\r
+\r
+       // TODO: Replace the following with fill line break processing (see V2).\r
+       text = text.replace( /(?:\r\n)|\n|\r/g, '<br>' );\r
+\r
+       this.insertHtml( text );\r
+};\r
+\r
+/**\r
+ * Whether to force all pasting operations to insert on plain text into the\r
+ * editor, loosing any formatting information possibly available in the source\r
+ * text.\r
+ * @type Boolean\r
+ * @default false\r
+ * @example\r
+ * config.forcePasteAsPlainText = true;\r
+ */\r
+CKEDITOR.config.forcePasteAsPlainText = false;\r
diff --git a/_source/plugins/popup/plugin.js b/_source/plugins/popup/plugin.js
new file mode 100644 (file)
index 0000000..731ab19
--- /dev/null
@@ -0,0 +1,62 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'popup');\r
+\r
+CKEDITOR.tools.extend( CKEDITOR.editor.prototype,\r
+{\r
+       /**\r
+        * Opens Browser in a popup. The "width" and "height" parameters accept\r
+        * numbers (pixels) or percent (of screen size) values.\r
+        * @param {String} url The url of the external file browser.\r
+        * @param {String} width Popup window width.\r
+        * @param {String} height Popup window height.\r
+        */\r
+       popup : function( url, width, height )\r
+       {\r
+               width = width || '80%';\r
+               height = height || '70%';\r
+\r
+               if ( typeof width == 'string' && width.length > 1 && width.substr( width.length - 1, 1 ) == '%' )\r
+                       width = parseInt( window.screen.width * parseInt( width, 10 ) / 100, 10 );\r
+\r
+               if ( typeof height == 'string' && height.length > 1 && height.substr( height.length - 1, 1 ) == '%' )\r
+                       height = parseInt( window.screen.height * parseInt( height, 10 ) / 100, 10 );\r
+\r
+               if ( width < 640 )\r
+                       width = 640;\r
+\r
+               if ( height < 420 )\r
+                       height = 420;\r
+\r
+               var top = parseInt( ( window.screen.height - height ) / 2, 10 ),\r
+                       left = parseInt( ( window.screen.width  - width ) / 2, 10 ),\r
+                       options = 'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes' +\r
+                       ',width='  + width +\r
+                       ',height=' + height +\r
+                       ',top='  + top +\r
+                       ',left=' + left;\r
+\r
+               var popupWindow = window.open( '', null, options, true );\r
+\r
+               // Blocked by a popup blocker.\r
+               if ( !popupWindow )\r
+                       return false;\r
+\r
+               try\r
+               {\r
+                       popupWindow.moveTo( left, top );\r
+                       popupWindow.resizeTo( width, height );\r
+                       popupWindow.focus();\r
+                       popupWindow.location.href = url;\r
+               }\r
+               catch (e)\r
+               {\r
+                       popupWindow = window.open( url, null, options, true );\r
+               }\r
+\r
+               return true ;\r
+       }\r
+});\r
diff --git a/_source/plugins/preview/plugin.js b/_source/plugins/preview/plugin.js
new file mode 100644 (file)
index 0000000..2238f92
--- /dev/null
@@ -0,0 +1,97 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Preview plugin.\r
+ */\r
+\r
+(function()\r
+{\r
+       var previewCmd =\r
+       {\r
+               modes : { wysiwyg:1, source:1 },\r
+               canUndo : false,\r
+               exec : function( editor )\r
+               {\r
+                       var sHTML,\r
+                               isCustomDomain = CKEDITOR.env.ie && document.domain != window.location.hostname;\r
+                       if ( editor.config.fullPage )\r
+                               sHTML = editor.getData();\r
+                       else\r
+                       {\r
+                               var bodyHtml = '<body ',\r
+                                       body = CKEDITOR.document.getBody(),\r
+                                       baseTag = ( editor.config.baseHref.length > 0 ) ? '<base href="' + editor.config.baseHref + '" _cktemp="true"></base>' : '';\r
+\r
+                               if ( body.getAttribute( 'id' ) )\r
+                                       bodyHtml += 'id="' + body.getAttribute( 'id' ) + '" ';\r
+                               if ( body.getAttribute( 'class' ) )\r
+                                       bodyHtml += 'class="' + body.getAttribute( 'class' ) + '" ';\r
+                               bodyHtml += '>';\r
+\r
+                               sHTML =\r
+                                       editor.config.docType +\r
+                                       '<html dir="' + editor.config.contentsLangDirection + '">' +\r
+                                       '<head>' +\r
+                                       baseTag +\r
+                                       '<title>' + editor.lang.preview + '</title>' +\r
+                                       '<link href="' + editor.config.contentsCss + '" type="text/css" rel="stylesheet" _cktemp="true"/>' +\r
+                                       '</head>' + bodyHtml +\r
+                                       editor.getData() +\r
+                                       '</body></html>';\r
+                       }\r
+\r
+                       var iWidth      = 640,  // 800 * 0.8,\r
+                               iHeight = 420,  // 600 * 0.7,\r
+                               iLeft   = 80;   // (800 - 0.8 * 800) /2 = 800 * 0.1.\r
+                       try\r
+                       {\r
+                               var screen = window.screen;\r
+                               iWidth = Math.round( screen.width * 0.8 );\r
+                               iHeight = Math.round( screen.height * 0.7 );\r
+                               iLeft = Math.round( screen.width * 0.1 );\r
+                       }\r
+                       catch ( e ){}\r
+\r
+                       var sOpenUrl = '';\r
+                       if ( isCustomDomain )\r
+                       {\r
+                               window._cke_htmlToLoad = sHTML;\r
+                               sOpenUrl = 'javascript:void( (function(){' +\r
+                                       'document.open();' +\r
+                                       'document.domain="' + document.domain + '";' +\r
+                                       'document.write( window.opener._cke_htmlToLoad );' +\r
+                                       'document.close();' +\r
+                                       'window.opener._cke_htmlToLoad = null;' +\r
+                                       '})() )';\r
+                       }\r
+\r
+                       var oWindow = window.open( sOpenUrl, null, 'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=' +\r
+                               iWidth + ',height=' + iHeight + ',left=' + iLeft );\r
+\r
+                       if ( !isCustomDomain )\r
+                       {\r
+                               oWindow.document.write( sHTML );\r
+                               oWindow.document.close();\r
+                       }\r
+               }\r
+       };\r
+\r
+       var pluginName = 'preview';\r
+\r
+       // Register a plugin named "preview".\r
+       CKEDITOR.plugins.add( pluginName,\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       editor.addCommand( pluginName, previewCmd );\r
+                       editor.ui.addButton( 'Preview',\r
+                               {\r
+                                       label : editor.lang.preview,\r
+                                       command : pluginName\r
+                               });\r
+               }\r
+       });\r
+})();\r
diff --git a/_source/plugins/print/plugin.js b/_source/plugins/print/plugin.js
new file mode 100644 (file)
index 0000000..d008785
--- /dev/null
@@ -0,0 +1,41 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Print Plugin\r
+ */\r
+\r
+CKEDITOR.plugins.add( 'print',\r
+{\r
+       init : function( editor )\r
+       {\r
+               var pluginName = 'print';\r
+\r
+               // Register the command.\r
+               var command = editor.addCommand( pluginName, CKEDITOR.plugins.print );\r
+\r
+               // Register the toolbar button.\r
+               editor.ui.addButton( 'Print',\r
+                       {\r
+                               label : editor.lang.print,\r
+                               command : pluginName\r
+                       });\r
+       }\r
+} );\r
+\r
+CKEDITOR.plugins.print =\r
+{\r
+       exec : function( editor )\r
+       {\r
+               if ( CKEDITOR.env.opera )\r
+                       return;\r
+               else if ( CKEDITOR.env.gecko )\r
+                       editor.window.$.print();\r
+               else\r
+                       editor.document.$.execCommand( "Print" );\r
+       },\r
+       canUndo : false,\r
+       modes : { wysiwyg : !( CKEDITOR.env.opera ) }           // It is imposible to print the inner document in Opera.\r
+};\r
diff --git a/_source/plugins/removeformat/plugin.js b/_source/plugins/removeformat/plugin.js
new file mode 100644 (file)
index 0000000..227ae05
--- /dev/null
@@ -0,0 +1,132 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'removeformat',\r
+{\r
+       requires : [ 'selection' ],\r
+\r
+       init : function( editor )\r
+       {\r
+               editor.addCommand( 'removeFormat', CKEDITOR.plugins.removeformat.commands.removeformat );\r
+               editor.ui.addButton( 'RemoveFormat',\r
+                       {\r
+                               label : editor.lang.removeFormat,\r
+                               command : 'removeFormat'\r
+                       });\r
+       }\r
+});\r
+\r
+CKEDITOR.plugins.removeformat =\r
+{\r
+       commands :\r
+       {\r
+               removeformat :\r
+               {\r
+                       exec : function( editor )\r
+                       {\r
+                               var tagsRegex = editor._.removeFormatRegex ||\r
+                                       ( editor._.removeFormatRegex = new RegExp( '^(?:' + editor.config.removeFormatTags.replace( /,/g,'|' ) + ')$', 'i' ) );\r
+\r
+                               var removeAttributes = editor._.removeAttributes ||\r
+                                       ( editor._.removeAttributes = editor.config.removeFormatAttributes.split( ',' ) );\r
+\r
+                               var ranges = editor.getSelection().getRanges();\r
+\r
+                               for ( var i = 0, range ; range = ranges[ i ] ; i++ )\r
+                               {\r
+                                       if ( range.collapsed )\r
+                                               continue;\r
+\r
+                                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                                       // Bookmark the range so we can re-select it after processing.\r
+                                       var bookmark = range.createBookmark();\r
+\r
+                                       // The style will be applied within the bookmark boundaries.\r
+                                       var startNode   = bookmark.startNode;\r
+                                       var endNode             = bookmark.endNode;\r
+\r
+                                       // We need to check the selection boundaries (bookmark spans) to break\r
+                                       // the code in a way that we can properly remove partially selected nodes.\r
+                                       // For example, removing a <b> style from\r
+                                       //              <b>This is [some text</b> to show <b>the] problem</b>\r
+                                       // ... where [ and ] represent the selection, must result:\r
+                                       //              <b>This is </b>[some text to show the]<b> problem</b>\r
+                                       // The strategy is simple, we just break the partial nodes before the\r
+                                       // removal logic, having something that could be represented this way:\r
+                                       //              <b>This is </b>[<b>some text</b> to show <b>the</b>]<b> problem</b>\r
+\r
+                                       var breakParent = function( node )\r
+                                       {\r
+                                               // Let's start checking the start boundary.\r
+                                               var path = new CKEDITOR.dom.elementPath( node );\r
+                                               var pathElements = path.elements;\r
+\r
+                                               for ( var i = 1, pathElement ; pathElement = pathElements[ i ] ; i++ )\r
+                                               {\r
+                                                       if ( pathElement.equals( path.block ) || pathElement.equals( path.blockLimit ) )\r
+                                                               break;\r
+\r
+                                                       // If this element can be removed (even partially).\r
+                                                       if ( tagsRegex.test( pathElement.getName() ) )\r
+                                                               node.breakParent( pathElement );\r
+                                               }\r
+                                       };\r
+\r
+                                       breakParent( startNode );\r
+                                       breakParent( endNode );\r
+\r
+                                       // Navigate through all nodes between the bookmarks.\r
+                                       var currentNode = startNode.getNextSourceNode( true, CKEDITOR.NODE_ELEMENT );\r
+\r
+                                       while ( currentNode )\r
+                                       {\r
+                                               // If we have reached the end of the selection, stop looping.\r
+                                               if ( currentNode.equals( endNode ) )\r
+                                                       break;\r
+\r
+                                               // Cache the next node to be processed. Do it now, because\r
+                                               // currentNode may be removed.\r
+                                               var nextNode = currentNode.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT );\r
+\r
+                                               // This node must not be a fake element.\r
+                                               if ( currentNode.getName() != 'img' || !currentNode.getAttribute( '_cke_protected_html' ) )\r
+                                               {\r
+                                                       // Remove elements nodes that match with this style rules.\r
+                                                       if ( tagsRegex.test( currentNode.getName() ) )\r
+                                                               currentNode.remove( true );\r
+                                                       else\r
+                                                               currentNode.removeAttributes( removeAttributes );\r
+                                               }\r
+\r
+                                               currentNode = nextNode;\r
+                                       }\r
+\r
+                                       range.moveToBookmark( bookmark );\r
+                               }\r
+\r
+                               editor.getSelection().selectRanges( ranges );\r
+                       }\r
+               }\r
+       }\r
+};\r
+\r
+/**\r
+ * A comma separated list of elements to be removed when executing the "remove\r
+ " format" command. Note that only inline elements are allowed.\r
+ * @type String\r
+ * @default 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var'\r
+ * @example\r
+ */\r
+CKEDITOR.config.removeFormatTags = 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var';\r
+\r
+/**\r
+ * A comma separated list of elements attributes to be removed when executing\r
+ * the "remove format" command.\r
+ * @type String\r
+ * @default 'class,style,lang,width,height,align,hspace,valign'\r
+ * @example\r
+ */\r
+CKEDITOR.config.removeFormatAttributes = 'class,style,lang,width,height,align,hspace,valign';\r
diff --git a/_source/plugins/resize/plugin.js b/_source/plugins/resize/plugin.js
new file mode 100644 (file)
index 0000000..6ef729f
--- /dev/null
@@ -0,0 +1,115 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'resize',\r
+{\r
+       init : function( editor )\r
+       {\r
+               var config = editor.config;\r
+\r
+               if ( config.resize_enabled )\r
+               {\r
+                       var container = null;\r
+                       var origin, startSize;\r
+\r
+                       function dragHandler( evt )\r
+                       {\r
+                               var dx = evt.data.$.screenX - origin.x;\r
+                               var dy = evt.data.$.screenY - origin.y;\r
+                               var internalWidth = startSize.width + dx * ( editor.lang.dir == 'rtl' ? -1 : 1 );\r
+                               var internalHeight = startSize.height + dy;\r
+\r
+                               editor.resize( Math.max( config.resize_minWidth, Math.min( internalWidth, config.resize_maxWidth ) ),\r
+                                               Math.max( config.resize_minHeight, Math.min( internalHeight, config.resize_maxHeight ) ) );\r
+                       }\r
+\r
+                       function dragEndHandler ( evt )\r
+                       {\r
+                               CKEDITOR.document.removeListener( 'mousemove', dragHandler );\r
+                               CKEDITOR.document.removeListener( 'mouseup', dragEndHandler );\r
+\r
+                               if ( editor.document )\r
+                               {\r
+                                       editor.document.removeListener( 'mousemove', dragHandler );\r
+                                       editor.document.removeListener( 'mouseup', dragEndHandler );\r
+                               }\r
+                       }\r
+\r
+                       var mouseDownFn = CKEDITOR.tools.addFunction( function( $event )\r
+                               {\r
+                                       if ( !container )\r
+                                               container = editor.getResizable();\r
+\r
+                                       startSize = { width : container.$.offsetWidth || 0, height : container.$.offsetHeight || 0 };\r
+                                       origin = { x : $event.screenX, y : $event.screenY };\r
+\r
+                                       CKEDITOR.document.on( 'mousemove', dragHandler );\r
+                                       CKEDITOR.document.on( 'mouseup', dragEndHandler );\r
+\r
+                                       if ( editor.document )\r
+                                       {\r
+                                               editor.document.on( 'mousemove', dragHandler );\r
+                                               editor.document.on( 'mouseup', dragEndHandler );\r
+                                       }\r
+                               } );\r
+\r
+                       editor.on( 'themeSpace', function( event )\r
+                               {\r
+                                       if ( event.data.space == 'bottom' )\r
+                                       {\r
+                                               event.data.html += '<div class="cke_resizer"' +\r
+                                                       ' title="' + CKEDITOR.tools.htmlEncode( editor.lang.resize ) + '"' +\r
+                                                       ' onmousedown="CKEDITOR.tools.callFunction(' + mouseDownFn + ', event)"' +\r
+                                                       '></div>';\r
+                                       }\r
+                               }, editor, null, 100 );\r
+               }\r
+       }\r
+} );\r
+\r
+/**\r
+ * The minimum editor width, in pixels, when resizing it with the resize handle.\r
+ * @type Number\r
+ * @default 750\r
+ * @example\r
+ * config.resize_minWidth = 500;\r
+ */\r
+CKEDITOR.config.resize_minWidth = 750;\r
+\r
+/**\r
+ * The minimum editor height, in pixels, when resizing it with the resize handle.\r
+ * @type Number\r
+ * @default 250\r
+ * @example\r
+ * config.resize_minHeight = 600;\r
+ */\r
+CKEDITOR.config.resize_minHeight = 250;\r
+\r
+/**\r
+ * The maximum editor width, in pixels, when resizing it with the resize handle.\r
+ * @type Number\r
+ * @default 3000\r
+ * @example\r
+ * config.resize_maxWidth = 750;\r
+ */\r
+CKEDITOR.config.resize_maxWidth = 3000;\r
+\r
+/**\r
+ * The maximum editor height, in pixels, when resizing it with the resize handle.\r
+ * @type Number\r
+ * @default 3000\r
+ * @example\r
+ * config.resize_maxHeight = 600;\r
+ */\r
+CKEDITOR.config.resize_maxHeight = 3000;\r
+\r
+/**\r
+ * Whether to enable the resizing feature. If disabed the resize handler will not be visible.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.resize_enabled = false;\r
+ */\r
+CKEDITOR.config.resize_enabled = true;\r
diff --git a/_source/plugins/richcombo/plugin.js b/_source/plugins/richcombo/plugin.js
new file mode 100644 (file)
index 0000000..f76db46
--- /dev/null
@@ -0,0 +1,357 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'richcombo',\r
+{\r
+       requires : [ 'floatpanel', 'listblock', 'button' ],\r
+\r
+       beforeInit : function( editor )\r
+       {\r
+               editor.ui.addHandler( CKEDITOR.UI_RICHCOMBO, CKEDITOR.ui.richCombo.handler );\r
+       }\r
+});\r
+\r
+/**\r
+ * Button UI element.\r
+ * @constant\r
+ * @example\r
+ */\r
+CKEDITOR.UI_RICHCOMBO = 3;\r
+\r
+CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass(\r
+{\r
+       $ : function( definition )\r
+       {\r
+               // Copy all definition properties to this object.\r
+               CKEDITOR.tools.extend( this, definition,\r
+                       // Set defaults.\r
+                       {\r
+                               title : definition.label,\r
+                               modes : { wysiwyg : 1 }\r
+                       });\r
+\r
+               // We don't want the panel definition in this object.\r
+               var panelDefinition = this.panel || {};\r
+               delete this.panel;\r
+\r
+               this.id = CKEDITOR.tools.getNextNumber();\r
+\r
+               this.document = ( panelDefinition\r
+                                                       && panelDefinition.parent\r
+                                                       && panelDefinition.parent.getDocument() )\r
+                                               || CKEDITOR.document;\r
+\r
+               panelDefinition.className = ( panelDefinition.className || '' ) + ' cke_rcombopanel';\r
+\r
+               this._ =\r
+               {\r
+                       panelDefinition : panelDefinition,\r
+                       items : {},\r
+                       state : CKEDITOR.TRISTATE_OFF\r
+               };\r
+       },\r
+\r
+       statics :\r
+       {\r
+               handler :\r
+               {\r
+                       create : function( definition )\r
+                       {\r
+                               return new CKEDITOR.ui.richCombo( definition );\r
+                       }\r
+               }\r
+       },\r
+\r
+       proto :\r
+       {\r
+               renderHtml : function( editor )\r
+               {\r
+                       var output = [];\r
+                       this.render( editor, output );\r
+                       return output.join( '' );\r
+               },\r
+\r
+               /**\r
+                * Renders the combo.\r
+                * @param {CKEDITOR.editor} editor The editor instance which this button is\r
+                *              to be used by.\r
+                * @param {Array} output The output array to which append the HTML relative\r
+                *              to this button.\r
+                * @example\r
+                */\r
+               render : function( editor, output )\r
+               {\r
+                       var id = 'cke_' + this.id;\r
+                       var clickFn = CKEDITOR.tools.addFunction( function( $element )\r
+                               {\r
+                                       var _ = this._;\r
+\r
+                                       if ( _.state == CKEDITOR.TRISTATE_DISABLED )\r
+                                               return;\r
+\r
+                                       this.createPanel( editor );\r
+\r
+                                       if ( _.on )\r
+                                       {\r
+                                               _.panel.hide();\r
+                                               return;\r
+                                       }\r
+\r
+                                       if ( !_.committed )\r
+                                       {\r
+                                               _.list.commit();\r
+                                               _.committed = 1;\r
+                                       }\r
+\r
+                                       var value = this.getValue();\r
+                                       if ( value )\r
+                                               _.list.mark( value );\r
+                                       else\r
+                                               _.list.unmarkAll();\r
+\r
+                                       _.panel.showBlock( this.id, new CKEDITOR.dom.element( $element ), 4 );\r
+                               },\r
+                               this );\r
+\r
+                       var instance = {\r
+                               id : id,\r
+                               combo : this,\r
+                               focus : function()\r
+                               {\r
+                                       var element = CKEDITOR.document.getById( id ).getChild( 1 );\r
+                                       element.focus();\r
+                               },\r
+                               execute : clickFn\r
+                       };\r
+\r
+                       editor.on( 'mode', function()\r
+                               {\r
+                                       this.setState( this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );\r
+                               },\r
+                               this );\r
+\r
+                       var keyDownFn = CKEDITOR.tools.addFunction( function( ev, element )\r
+                               {\r
+                                       ev = new CKEDITOR.dom.event( ev );\r
+\r
+                                       var keystroke = ev.getKeystroke();\r
+                                       switch ( keystroke )\r
+                                       {\r
+                                               case 13 :       // ENTER\r
+                                               case 32 :       // SPACE\r
+                                               case 40 :       // ARROW-DOWN\r
+                                                       // Show panel\r
+                                                       CKEDITOR.tools.callFunction( clickFn, element );\r
+                                                       break;\r
+                                               default :\r
+                                                       // Delegate the default behavior to toolbar button key handling.\r
+                                                       instance.onkey( instance,  keystroke );\r
+                                       }\r
+\r
+                                       // Avoid subsequent focus grab on editor document.\r
+                                       ev.preventDefault();\r
+                               });\r
+\r
+                       output.push(\r
+                               '<span class="cke_rcombo">',\r
+                               '<span id=', id );\r
+\r
+                       if ( this.className )\r
+                               output.push( ' class="', this.className, ' cke_off"');\r
+\r
+                       output.push(\r
+                               '>' +\r
+                                       '<span class=cke_label>', this.label, '</span>' +\r
+                                       '<a hidefocus=true title="', this.title, '" tabindex="-1" href="javascript:void(\'', this.label, '\')"' );\r
+\r
+                       // Some browsers don't cancel key events in the keydown but in the\r
+                       // keypress.\r
+                       // TODO: Check if really needed for Gecko+Mac.\r
+                       if ( CKEDITOR.env.opera || ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) )\r
+                       {\r
+                               output.push(\r
+                                       ' onkeypress="return false;"' );\r
+                       }\r
+\r
+                       // With Firefox, we need to force it to redraw, otherwise it\r
+                       // will remain in the focus state.\r
+                       if ( CKEDITOR.env.gecko )\r
+                       {\r
+                               output.push(\r
+                                       ' onblur="this.style.cssText = this.style.cssText;"' );\r
+                       }\r
+\r
+                       output.push(\r
+                                       ' onkeydown="CKEDITOR.tools.callFunction( ', keyDownFn, ', event, this );"' +\r
+                                       ' onclick="CKEDITOR.tools.callFunction(', clickFn, ', this); return false;">' +\r
+                                               '<span>' +\r
+                                                       '<span class="cke_accessibility">' + ( this.voiceLabel ? this.voiceLabel + ' ' : '' ) + '</span>' +\r
+                                                       '<span id="' + id + '_text" class="cke_text cke_inline_label">' + this.label + '</span>' +\r
+                                               '</span>' +\r
+                                               '<span class=cke_openbutton></span>' +\r
+                                       '</a>' +\r
+                               '</span>' +\r
+                               '</span>' );\r
+\r
+                       if ( this.onRender )\r
+                               this.onRender();\r
+\r
+                       return instance;\r
+               },\r
+\r
+               createPanel : function( editor )\r
+               {\r
+                       if ( this._.panel )\r
+                               return;\r
+\r
+                       var panelDefinition = this._.panelDefinition,\r
+                               panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(),\r
+                               panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ),\r
+                               list = panel.addListBlock( this.id, this.multiSelect ),\r
+                               me = this;\r
+\r
+                       panel.onShow = function()\r
+                               {\r
+                                       if ( me.className )\r
+                                               this.element.getFirst().addClass( me.className + '_panel' );\r
+\r
+                                       me.setState( CKEDITOR.TRISTATE_ON );\r
+\r
+                                       list.focus( !me.multiSelect && me.getValue() );\r
+\r
+                                       me._.on = 1;\r
+\r
+                                       if ( me.onOpen )\r
+                                               me.onOpen();\r
+                               };\r
+\r
+                       panel.onHide = function()\r
+                               {\r
+                                       if ( me.className )\r
+                                               this.element.getFirst().removeClass( me.className + '_panel' );\r
+\r
+                                       me.setState( CKEDITOR.TRISTATE_OFF );\r
+\r
+                                       me._.on = 0;\r
+\r
+                                       if ( me.onClose )\r
+                                               me.onClose();\r
+                               };\r
+\r
+                       panel.onEscape = function()\r
+                               {\r
+                                       panel.hide();\r
+                                       me.document.getById( 'cke_' + me.id ).getFirst().getNext().focus();\r
+                               };\r
+\r
+                       list.onClick = function( value, marked )\r
+                               {\r
+                                       // Move the focus to the main windows, otherwise it will stay\r
+                                       // into the floating panel, even if invisible, and Safari and\r
+                                       // Opera will go a bit crazy.\r
+                                       me.document.getWindow().focus();\r
+\r
+                                       if ( me.onClick )\r
+                                               me.onClick.call( me, value, marked );\r
+\r
+                                       if ( marked )\r
+                                               me.setValue( value, me._.items[ value ] );\r
+                                       else\r
+                                               me.setValue( '' );\r
+\r
+                                       panel.hide();\r
+                               };\r
+\r
+                       this._.panel = panel;\r
+                       this._.list = list;\r
+\r
+                       panel.getBlock( this.id ).onHide = function()\r
+                               {\r
+                                       me._.on = 0;\r
+                                       me.setState( CKEDITOR.TRISTATE_OFF );\r
+                               };\r
+\r
+                       if ( this.init )\r
+                               this.init();\r
+               },\r
+\r
+               setValue : function( value, text )\r
+               {\r
+                       this._.value = value;\r
+\r
+                       var textElement = this.document.getById( 'cke_' + this.id + '_text' );\r
+\r
+                       if ( !value )\r
+                       {\r
+                               text = this.label;\r
+                               textElement.addClass( 'cke_inline_label' );\r
+                       }\r
+                       else\r
+                               textElement.removeClass( 'cke_inline_label' );\r
+                       textElement.setHtml( typeof text != 'undefined' ? text : value );\r
+               },\r
+\r
+               getValue : function()\r
+               {\r
+                       return this._.value || '';\r
+               },\r
+\r
+               unmarkAll : function()\r
+               {\r
+                       this._.list.unmarkAll();\r
+               },\r
+\r
+               mark : function( value )\r
+               {\r
+                       this._.list.mark( value );\r
+               },\r
+\r
+               hideItem : function( value )\r
+               {\r
+                       this._.list.hideItem( value );\r
+               },\r
+\r
+               hideGroup : function( groupTitle )\r
+               {\r
+                       this._.list.hideGroup( groupTitle );\r
+               },\r
+\r
+               showAll : function()\r
+               {\r
+                       this._.list.showAll();\r
+               },\r
+\r
+               add : function( value, html, text )\r
+               {\r
+                       this._.items[ value ] = text || value;\r
+                       this._.list.add( value, html, text );\r
+               },\r
+\r
+               startGroup : function( title )\r
+               {\r
+                       this._.list.startGroup( title );\r
+               },\r
+\r
+               commit : function()\r
+               {\r
+                       this._.list.commit();\r
+               },\r
+\r
+               setState : function( state )\r
+               {\r
+                       if ( this._.state == state )\r
+                               return;\r
+\r
+                       this.document.getById( 'cke_' + this.id ).setState( state );\r
+\r
+                       this._.state = state;\r
+               }\r
+       }\r
+});\r
+\r
+CKEDITOR.ui.prototype.addRichCombo = function( name, definition )\r
+{\r
+       this.add( name, CKEDITOR.UI_RICHCOMBO, definition );\r
+};\r
diff --git a/_source/plugins/save/plugin.js b/_source/plugins/save/plugin.js
new file mode 100644 (file)
index 0000000..e2d84bc
--- /dev/null
@@ -0,0 +1,55 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileSave plugin.\r
+ */\r
+\r
+(function()\r
+{\r
+       var saveCmd =\r
+       {\r
+               modes : { wysiwyg:1, source:1 },\r
+\r
+               exec : function( editor )\r
+               {\r
+                       var $form = editor.element.$.form;\r
+\r
+                       if ( $form )\r
+                       {\r
+                               try\r
+                               {\r
+                                       $form.submit();\r
+                               }\r
+                               catch( e )\r
+                               {\r
+                                       // If there's a button named "submit" then the form.submit\r
+                                       // function is masked and can't be called in IE/FF, so we\r
+                                       // call the click() method of that button.\r
+                                       if ( $form.submit.click )\r
+                                               $form.submit.click();\r
+                               }\r
+                       }\r
+               }\r
+       };\r
+\r
+       var pluginName = 'save';\r
+\r
+       // Register a plugin named "save".\r
+       CKEDITOR.plugins.add( pluginName,\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       var command = editor.addCommand( pluginName, saveCmd );\r
+                       command.modes = { wysiwyg : !!( editor.element.$.form ) };\r
+\r
+                       editor.ui.addButton( 'Save',\r
+                               {\r
+                                       label : editor.lang.save,\r
+                                       command : pluginName\r
+                               });\r
+               }\r
+       });\r
+})();\r
diff --git a/_source/plugins/scayt/dialogs/options.js b/_source/plugins/scayt/dialogs/options.js
new file mode 100644 (file)
index 0000000..120adbc
--- /dev/null
@@ -0,0 +1,494 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'scaytcheck', function( editor )\r
+{\r
+       var firstLoad = true,\r
+               captions,\r
+               doc = CKEDITOR.document,\r
+               tags = [],\r
+               i,\r
+               contents = [],\r
+               userDicActive = false;\r
+       var dic_buttons = [\r
+               // [0] contains buttons for creating\r
+               "dic_create,dic_restore",\r
+               // [1] contains buton for manipulation\r
+               "dic_rename,dic_delete"\r
+       ];\r
+       var tags_contents =  [\r
+                               {\r
+                                       id : 'options',\r
+                                       label : editor.lang.scayt.optionsTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       id : 'options',\r
+                                                       html :  '<div class="inner_options">' +\r
+                                                                       '       <div class="messagebox"></div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '               <input type="checkbox" value="0" id="allCaps" />' +\r
+                                                                       '               <label for="allCaps" id="label_allCaps"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '               <input type="checkbox" value="0" id="ignoreDomainNames" />' +\r
+                                                                       '               <label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '       <input type="checkbox" value="0" id="mixedCase" />' +\r
+                                                                       '               <label for="mixedCase" id="label_mixedCase"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '               <input type="checkbox" value="0" id="mixedWithDigits" />' +\r
+                                                                       '               <label for="mixedWithDigits" id="label_mixedWithDigits"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '</div>'\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'langs',\r
+                                       label : editor.lang.scayt.languagesTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       id : 'langs',\r
+                                                       html :  '<div class="inner_langs">' +\r
+                                                                       '       <div class="messagebox"></div>  ' +\r
+                                                                       '   <div style="float:left;width:47%;margin-left:5px;" id="scayt_lcol" ></div>' +\r
+                                                                       '   <div style="float:left;width:47%;margin-left:15px;" id="scayt_rcol"></div>' +\r
+                                                                       '</div>'\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'dictionaries',\r
+                                       label : editor.lang.scayt.dictionariesTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       style: '',\r
+                                                       id : 'dic',\r
+                                                       html :  '<div class="inner_dictionary" style="text-align:left; white-space:normal;">' +\r
+                                                                       '       <div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message"> </div>' +\r
+                                                                       '       <div style="margin:5px auto; width:80%;white-space:normal;"> ' +\r
+                                                                       '       <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>'+\r
+                                                                       '               <span class="cke_dialog_ui_labeled_content" >'+\r
+                                                                       '                       <div class="cke_dialog_ui_input_text">'+\r
+                                                                       '                               <input id="dic_name" type="text" class="cke_dialog_ui_input_text"/>'+\r
+                                                                       '               </div></span></div>'+\r
+                                                                       '               <div style="margin:5px auto; width:80%;white-space:normal;">'+\r
+                                                                       '                       <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '               </div>' +\r
+                                                                       '       <div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info"></div>' +\r
+                                                                       '</div>'\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'about',\r
+                                       label : editor.lang.scayt.aboutTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       id : 'about',\r
+                                                       style : 'margin: 10px 40px;',\r
+                                                       html : '<div id="scayt_about"></div>'\r
+                                               }\r
+                                       ]\r
+                               }\r
+                       ];\r
+       var dialogDefiniton = {\r
+               title : editor.lang.scayt.title,\r
+               minWidth : 340,\r
+               minHeight : 200,\r
+               onShow : function()\r
+               {\r
+                       var dialog = this;\r
+                       dialog.data = editor.fire( 'scaytDialog', {} );\r
+                       dialog.options = dialog.data.scayt_control.option();\r
+                       dialog.sLang = dialog.data.scayt_control.sLang;\r
+\r
+                       if ( !dialog.data || !dialog.data.scayt || !dialog.data.scayt_control )\r
+                       {\r
+                               alert( 'Error loading application service' );\r
+                               dialog.hide();\r
+                               return;\r
+                       }\r
+\r
+                       var stop = 0;\r
+                       if ( firstLoad )\r
+                       {\r
+                               dialog.data.scayt.getCaption( 'en', function( caps )\r
+                                       {\r
+                                               if ( stop++ > 0 )       // Once only\r
+                                                       return;\r
+                                               captions = caps;\r
+                                               init_with_captions.apply( dialog );\r
+                                               reload.apply( dialog );\r
+                                               firstLoad = false;\r
+                                       });\r
+                       }\r
+                       else\r
+                               reload.apply( dialog );\r
+\r
+                       dialog.selectPage( dialog.data.tab );\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var scayt_control =  this.data.scayt_control,\r
+                               o = scayt_control.option(),\r
+                               c = 0;\r
+\r
+                       // Set up options if any was set.\r
+                       for ( var i in this.options )\r
+                       {\r
+                               if (o[i] != this.options[ i ] && c === 0 )\r
+                               {\r
+                                       scayt_control.option( this.options );\r
+                                       c++;\r
+                               }\r
+                       }\r
+\r
+                       // Setup languge if it was changed.\r
+                       var csLang = this.chosed_lang;\r
+                       if ( csLang && this.data.sLang != csLang )\r
+                       {\r
+                               scayt_control.setLang( csLang );\r
+                               c++;\r
+                       }\r
+                       if ( c > 0 )\r
+                               scayt_control.refresh();\r
+               },\r
+               contents : contents\r
+        };\r
+\r
+       var scayt_control = CKEDITOR.plugins.scayt.getScayt( editor );\r
+       if ( scayt_control )\r
+       {\r
+               tags = scayt_control.uiTags;\r
+       }\r
+\r
+       for ( i in tags ) {\r
+               if ( tags[ i ] == 1 )\r
+                       contents[ contents.length ] = tags_contents[ i ];\r
+       }\r
+       if ( tags[2] == 1 )\r
+               userDicActive = true;\r
+\r
+       function onDicButtonClick()\r
+       {\r
+               var dic_name = doc.getById('dic_name').getValue();\r
+               if ( !dic_name )\r
+               {\r
+                       dic_error_message(" Dictionary name should not be empty. ");\r
+                       return false;\r
+               }\r
+               //apply handler\r
+               window.dic[ this.getId() ].apply( null, [ this, dic_name, dic_buttons ] );\r
+\r
+               return true;\r
+       }\r
+       var init_with_captions = function()\r
+       {\r
+               var dialog = this,\r
+                       lang_list = dialog.data.scayt.getLangList(),\r
+                       buttons = [ 'dic_create','dic_delete','dic_rename','dic_restore' ],\r
+                       labels = [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ],\r
+                       i;\r
+\r
+               // Add buttons titles\r
+               if (userDicActive)\r
+               {\r
+                       for ( i in buttons )\r
+                       {\r
+                               var button = buttons[ i ];\r
+                               doc.getById( button ).setHtml( '<span class="cke_dialog_ui_button">' + captions[ 'button_' + button]  +'</span>' );\r
+                       }\r
+                       doc.getById( 'dic_info' ).setHtml( captions[ 'dic_info' ] );\r
+               }\r
+\r
+\r
+               // Fill options and dictionary labels.\r
+               for ( i in labels )\r
+               {\r
+                       var label = 'label_' + labels[ i ],\r
+                               labelElement = doc.getById( label );\r
+\r
+                       if (  'undefined' != typeof labelElement\r
+                          && 'undefined' != typeof captions[ label ]\r
+                          && 'undefined' != typeof dialog.options[labels[ i ]] )\r
+                       {\r
+                               labelElement.setHtml( captions[ label ] );\r
+                               var labelParent = labelElement.getParent();\r
+                               labelParent.$.style.display = "block";\r
+                       }\r
+               }\r
+\r
+               var about = '<p>' + captions[ 'about_throwt_image' ] + '</p>'+\r
+                                       '<p>' + captions[ 'version' ]  + dialog.data.scayt.version.toString() + '</p>' +\r
+                                       '<p>' + captions[ 'about_throwt_copy' ] + '</p>';\r
+\r
+               doc.getById( 'scayt_about' ).setHtml( about );\r
+\r
+               // Create languages tab.\r
+               var createOption = function( option, list )\r
+               {\r
+                       var label = doc.createElement( 'label' );\r
+                       label.setAttribute( 'for', 'cke_option' + option );\r
+                       label.setHtml( list[ option ] );\r
+\r
+                       if ( dialog.sLang == option )   // Current.\r
+                               dialog.chosed_lang = option;\r
+\r
+                       var div = doc.createElement( 'div' );\r
+                       var radio = CKEDITOR.dom.element.createFromHtml( '<input id="cke_option' +\r
+                                       option + '" type="radio" ' +\r
+                                       ( dialog.sLang == option ? 'checked="checked"' : '' ) +\r
+                                       ' value="' + option + '" name="scayt_lang" />' );\r
+\r
+                       radio.on( 'click', function()\r
+                               {\r
+                                       this.$.checked = true;\r
+                                       dialog.chosed_lang = option;\r
+                               });\r
+\r
+                       div.append( radio );\r
+                       div.append( label );\r
+\r
+                       return {\r
+                               lang : list[ option ],\r
+                               code : option,\r
+                               radio : div\r
+                       };\r
+               };\r
+\r
+               var langList = [];\r
+               for ( i in lang_list.rtl )\r
+                       langList[ langList.length ] = createOption( i, lang_list.ltr );\r
+\r
+               for ( i in lang_list.ltr )\r
+                       langList[ langList.length  ] = createOption( i, lang_list.ltr );\r
+\r
+               langList.sort(  function( lang1, lang2 )\r
+                       {\r
+                               return ( lang2.lang > lang1.lang ) ? -1 : 1 ;\r
+                       });\r
+\r
+               var fieldL = doc.getById( 'scayt_lcol' ),\r
+                       fieldR = doc.getById( 'scayt_rcol' );\r
+               for ( i=0; i < langList.length; i++ )\r
+               {\r
+                       var field = ( i < langList.length / 2 ) ? fieldL : fieldR;\r
+                       field.append( langList[ i ].radio );\r
+               }\r
+\r
+               // user dictionary handlers\r
+               var dic = {};\r
+               dic.dic_create = function( el, dic_name , dic_buttons )\r
+                       {\r
+                               // comma separated button's ids include repeats if exists\r
+                               var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];\r
+\r
+                               var err_massage = captions["err_dic_create"];\r
+                               var suc_massage = captions["succ_dic_create"];\r
+                               //console.info("--plugin ");\r
+\r
+                               window.scayt.createUserDictionary(dic_name,\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_create callback called with args" , arg );\r
+                                                       hide_dic_buttons ( all_buttons );\r
+                                                       display_dic_buttons ( dic_buttons[1] );\r
+                                                       suc_massage = suc_massage.replace("%s" , arg.dname );\r
+                                                       dic_success_message (suc_massage);\r
+                                               },\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_create errorback called with args" , arg )\r
+                                                       err_massage = err_massage.replace("%s" ,arg.dname );\r
+                                                       dic_error_message ( err_massage + "( "+ (arg.message || "") +")");\r
+                                               });\r
+\r
+                       };\r
+\r
+               dic.dic_rename = function( el, dic_name )\r
+                       {\r
+                               //\r
+                               // try to rename dictionary\r
+                               // @TODO: rename dict\r
+                               //console.info ( captions["err_dic_rename"] )\r
+                               var err_massage = captions["err_dic_rename"] || "";\r
+                               var suc_massage = captions["succ_dic_rename"] || "";\r
+                               window.scayt.renameUserDictionary(dic_name,\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_rename callback called with args" , arg );\r
+                                                       suc_massage = suc_massage.replace("%s" , arg.dname );\r
+                                                       set_dic_name( dic_name );\r
+                                                       dic_success_message ( suc_massage );\r
+                                               },\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_rename errorback called with args" , arg )\r
+                                                       err_massage = err_massage.replace("%s" , arg.dname  );\r
+                                                       set_dic_name( dic_name );\r
+                                                       dic_error_message( err_massage + "( " + ( arg.message || "" ) + " )" );\r
+                                               });\r
+                       };\r
+\r
+               dic.dic_delete = function ( el, dic_name , dic_buttons )\r
+                       {\r
+                               var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];\r
+                               var err_massage = captions["err_dic_delete"];\r
+                               var suc_massage = captions["succ_dic_delete"];\r
+\r
+                               // try to delete dictionary\r
+                               // @TODO: delete dict\r
+                               window.scayt.deleteUserDictionary(\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_delete callback " , dic_name ,arg );\r
+                                                       suc_massage = suc_massage.replace("%s" , arg.dname );\r
+                                                       hide_dic_buttons ( all_buttons );\r
+                                                       display_dic_buttons ( dic_buttons[0] );\r
+                                                       set_dic_name( "" ); // empty input field\r
+                                                       dic_success_message( suc_massage );\r
+                                               },\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( " dic_delete errorback called with args" , arg )\r
+                                                       err_massage = err_massage.replace("%s" , arg.dname );\r
+                                                       dic_error_message(err_massage);\r
+                                               });\r
+                       };\r
+\r
+               dic.dic_restore = dialog.dic_restore || function ( el, dic_name , dic_buttons )\r
+                       {\r
+                               // try to restore existing dictionary\r
+                               var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];\r
+                               var err_massage = captions["err_dic_restore"];\r
+                               var suc_massage = captions["succ_dic_restore"];\r
+\r
+                               window.scayt.restoreUserDictionary(dic_name,\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_restore callback called with args" , arg );\r
+                                                       suc_massage = suc_massage.replace("%s" , arg.dname );\r
+                                                       hide_dic_buttons ( all_buttons );\r
+                                                       display_dic_buttons(dic_buttons[1]);\r
+                                                       dic_success_message( suc_massage );\r
+                                               },\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( " dic_restore errorback called with args" , arg )\r
+                                                       err_massage = err_massage.replace("%s" , arg.dname );\r
+                                                       dic_error_message( err_massage );\r
+                                               });\r
+                       };\r
+\r
+               // ** bind event listeners\r
+               var arr_buttons = ( dic_buttons[0] + ',' + dic_buttons[1] ).split( ',' ),\r
+                       l;\r
+\r
+               for ( i = 0, l = arr_buttons.length ; i < l ; i += 1 )\r
+               {\r
+                       var dic_button = doc.getById(arr_buttons[i]);\r
+                       if ( dic_button )\r
+                               dic_button.on( 'click', onDicButtonClick, this );\r
+               }\r
+       };\r
+\r
+       var reload = function()\r
+       {\r
+               var dialog = this;\r
+\r
+               // Animate options.\r
+               for ( var i in dialog.options )\r
+               {\r
+                       var checkbox = doc.getById( i );\r
+                       if ( checkbox )\r
+                       {\r
+                               checkbox.removeAttribute( 'checked' );\r
+                               if ( dialog.options[ i ] == 1 )\r
+                                       checkbox.setAttribute( 'checked', 'checked' );\r
+\r
+                               // Bind events. Do it only once.\r
+                               if ( firstLoad )\r
+                               {\r
+                                       checkbox.on( 'click', function()\r
+                                               {\r
+                                                       dialog.options[ this.getId() ] = this.$.checked ? 1 : 0 ;\r
+                                               } );\r
+                               }\r
+                       }\r
+               }\r
+\r
+               // * user dictionary\r
+               if ( userDicActive ){\r
+                       window.scayt.getNameUserDictionary(\r
+                       function( o )\r
+                       {\r
+                               var dic_name = o.dname;\r
+                               if ( dic_name )\r
+                               {\r
+                                       doc.getById( 'dic_name' ).setValue(dic_name);\r
+                                       display_dic_buttons( dic_buttons[1] );\r
+                               }\r
+                               else\r
+                                       display_dic_buttons( dic_buttons[0] );\r
+\r
+                       },\r
+                       function ()\r
+                       {\r
+                               doc.getById( 'dic_name' ).setValue("");\r
+                       });\r
+                       dic_success_message("");\r
+               }\r
+\r
+       };\r
+\r
+       function dic_error_message ( m )\r
+               {\r
+                       doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' );\r
+               }\r
+    function dic_success_message ( m )\r
+               {\r
+                       doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ;\r
+               }\r
+       function display_dic_buttons ( sIds )\r
+               {\r
+\r
+                       sIds = String( sIds );\r
+                       var aIds = sIds.split(',');\r
+                       for ( var i=0, l = aIds.length; i < l ; i+=1)\r
+                       {\r
+                               doc.getById( aIds[i] ).$.style.display = "inline";\r
+                       }\r
+\r
+               }\r
+       function hide_dic_buttons ( sIds )\r
+               {\r
+                       sIds = String( sIds );\r
+                       var aIds = sIds.split(',');\r
+                       for ( var i = 0, l = aIds.length; i < l ; i += 1 )\r
+                       {\r
+                               doc.getById( aIds[i] ).$.style.display = "none";\r
+                       }\r
+               }\r
+       function set_dic_name ( dic_name )\r
+               {\r
+                       doc.getById('dic_name').$.value= dic_name;\r
+               }\r
+\r
+       return dialogDefiniton;\r
+});\r
diff --git a/_source/plugins/scayt/dialogs/toolbar.css b/_source/plugins/scayt/dialogs/toolbar.css
new file mode 100644 (file)
index 0000000..ecabdac
--- /dev/null
@@ -0,0 +1,71 @@
+a\r
+{\r
+       text-decoration:none;\r
+       padding: 2px 4px 4px 6px;\r
+       display : block;\r
+       border-width: 1px;\r
+       border-style: solid;\r
+       margin : 0px;\r
+}\r
+\r
+a.cke_scayt_toogle:hover,\r
+a.cke_scayt_toogle:focus,\r
+a.cke_scayt_toogle:active\r
+{\r
+       border-color: #316ac5;\r
+       background-color: #dff1ff;\r
+       color : #000;\r
+       cursor: pointer;\r
+       margin : 0px;\r
+}\r
+a.cke_scayt_toogle {\r
+       color : #316ac5;\r
+       border-color: #fff;\r
+}\r
+.scayt_enabled a.cke_scayt_item {\r
+       color : #316ac5;\r
+       border-color: #fff;\r
+       margin : 0px;\r
+}\r
+.scayt_disabled a.cke_scayt_item {\r
+       color : gray;\r
+       border-color : #fff;\r
+}\r
+.scayt_enabled a.cke_scayt_item:hover,\r
+.scayt_enabled a.cke_scayt_item:focus,\r
+.scayt_enabled a.cke_scayt_item:active\r
+{\r
+       border-color: #316ac5;\r
+       background-color: #dff1ff;\r
+       color : #000;\r
+       cursor: pointer;\r
+}\r
+.scayt_disabled a.cke_scayt_item:hover,\r
+.scayt_disabled a.cke_scayt_item:focus,\r
+.scayt_disabled a.cke_scayt_item:active\r
+{\r
+       border-color: gray;\r
+       background-color: #dff1ff;\r
+       color : gray;\r
+       cursor: no-drop;\r
+}\r
+.cke_scayt_set_on, .cke_scayt_set_off\r
+{\r
+       display: none;\r
+}\r
+.scayt_enabled .cke_scayt_set_on\r
+{\r
+       display: none;\r
+}\r
+.scayt_disabled .cke_scayt_set_on\r
+{\r
+       display: inline;\r
+}\r
+.scayt_disabled .cke_scayt_set_off\r
+{\r
+       display: none;\r
+}\r
+.scayt_enabled  .cke_scayt_set_off\r
+{\r
+       display: inline;\r
+}\r
diff --git a/_source/plugins/scayt/plugin.js b/_source/plugins/scayt/plugin.js
new file mode 100644 (file)
index 0000000..cfe35d6
--- /dev/null
@@ -0,0 +1,511 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Spell Check As You Type (SCAYT).\r
+ * Button name : Scayt.\r
+ */\r
+\r
+(function()\r
+{\r
+       var commandName         = 'scaytcheck',\r
+               openPage                = '';\r
+\r
+       var onEngineLoad = function()\r
+       {\r
+               var editor = this;\r
+\r
+               var createInstance = function() // Create new instance every time Document is created.\r
+               {\r
+                       // Initialise Scayt instance.\r
+                       var oParams = {};\r
+                       oParams.srcNodeRef = editor.document.getWindow().$.frameElement;                // Get the iframe.\r
+                       // syntax : AppName.AppVersion@AppRevision\r
+                       oParams.assocApp  = "CKEDITOR." + CKEDITOR.version + "@" + CKEDITOR.revision;\r
+\r
+                       oParams.customerid = editor.config.scayt_customerid  || "1:11111111111111111111111111111111111111";\r
+                       oParams.customDictionaryName = editor.config.scayt_customDictionaryName;\r
+                       oParams.userDictionaryName = editor.config.scayt_userDictionaryName;\r
+                       oParams.defLang = editor.scayt_defLang;\r
+\r
+                       if ( CKEDITOR._scaytParams )\r
+                       {\r
+                               for ( var k in CKEDITOR._scaytParams )\r
+                               {\r
+                                       oParams[ k ] = CKEDITOR._scaytParams[ k ];\r
+                               }\r
+                       }\r
+\r
+                       var scayt_control = new window.scayt( oParams );\r
+\r
+                       // Copy config.\r
+                       var     lastInstance = plugin.instances[ editor.name ];\r
+                       if ( lastInstance )\r
+                       {\r
+                               scayt_control.sLang = lastInstance.sLang;\r
+                               scayt_control.option( lastInstance.option() );\r
+                               scayt_control.paused = lastInstance.paused;\r
+                       }\r
+\r
+                       plugin.instances[ editor.name ] = scayt_control;\r
+\r
+                       try {\r
+                               scayt_control.setDisabled( scayt_control.paused === false );                            // I really don't know why it causes JS error in IE\r
+                       } catch (e) {}\r
+                       editor.fire( 'showScaytState' );\r
+               };\r
+\r
+               editor.on( 'contentDom', createInstance );\r
+               editor.on( 'contentDomUnload', function()\r
+                       {\r
+                               // Remove scripts.\r
+                               var scripts = CKEDITOR.document.getElementsByTag( 'script' ),\r
+                                       scaytIdRegex =  /^dojoIoScript(\d+)$/i,\r
+                                       scaytSrcRegex =  /^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i;\r
+\r
+                               for ( var i=0; i < scripts.count(); i++ )\r
+                               {\r
+                                       var script = scripts.getItem( i ),\r
+                                               id = script.getId(),\r
+                                               src = script.getAttribute( 'src' );\r
+\r
+                                       if ( id && src && id.match( scaytIdRegex ) && src.match( scaytSrcRegex ))\r
+                                               script.remove();\r
+                               }\r
+                       });\r
+\r
+               editor.on( 'beforeCommandExec', function( ev )          // Disable SCAYT before Source command execution.\r
+                       {\r
+                               if ( (ev.data.name == 'source' ||  ev.data.name == 'newpage') && editor.mode == 'wysiwyg' )\r
+                               {\r
+                                       var scayt_instanse = plugin.getScayt( editor );\r
+                                       if ( scayt_instanse )\r
+                                       {\r
+                                               scayt_instanse.paused = !scayt_instanse.disabled;\r
+                                               scayt_instanse.destroy();\r
+                                               delete plugin.instances[ editor.name ];\r
+                                       }\r
+                               }\r
+                       });\r
+\r
+               // Listen to data manipulation to reflect scayt markup.\r
+               editor.on( 'afterSetData', function()\r
+                       {\r
+                               if ( plugin.isScaytEnabled( editor ) )\r
+                                       plugin.getScayt( editor ).refresh();\r
+                       });\r
+\r
+               // Reload spell-checking for current word after insertion completed.\r
+               editor.on( 'insertElement', function()\r
+                       {\r
+                               var scayt_instance = plugin.getScayt( editor );\r
+                               if ( plugin.isScaytEnabled( editor ) )\r
+                               {\r
+                                       // Unlock the selection before reload, SCAYT will take\r
+                                       // care selection update.\r
+                                       if ( CKEDITOR.env.ie )\r
+                                               editor.getSelection().unlock( true );\r
+\r
+                                       // Swallow any SCAYT engine errors.\r
+                                       try{\r
+                                               scayt_instance.refresh();\r
+                                       }catch( er )\r
+                                       {}\r
+                               }\r
+                       }, this, null, 50 );\r
+\r
+               editor.on( 'scaytDialog', function( ev )        // Communication with dialog.\r
+                       {\r
+                               ev.data.djConfig = window.djConfig;\r
+                               ev.data.scayt_control = plugin.getScayt( editor );\r
+                               ev.data.tab = openPage;\r
+                               ev.data.scayt = window.scayt;\r
+                       });\r
+\r
+               var dataProcessor = editor.dataProcessor,\r
+                       htmlFilter = dataProcessor && dataProcessor.htmlFilter;\r
+               if ( htmlFilter )\r
+               {\r
+                       htmlFilter.addRules(\r
+                               {\r
+                                       elements :\r
+                                       {\r
+                                               span : function( element )\r
+                                               {\r
+                                                       if ( element.attributes.scayt_word && element.attributes.scaytid )\r
+                                                       {\r
+                                                               delete element.name;    // Write children, but don't write this node.\r
+                                                               return element;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               }\r
+                       );\r
+               }\r
+\r
+               if ( editor.document )\r
+                       createInstance();\r
+       };\r
+\r
+       CKEDITOR.plugins.scayt =\r
+       {\r
+               engineLoaded : false,\r
+               instances : {},\r
+               getScayt : function( editor )\r
+               {\r
+                       return this.instances[ editor.name ];\r
+               },\r
+               isScaytReady : function( editor )\r
+               {\r
+                       return this.engineLoaded === true &&\r
+                               'undefined' !== typeof window.scayt && this.getScayt( editor );\r
+               },\r
+               isScaytEnabled : function( editor )\r
+               {\r
+                       var scayt_instanse = this.getScayt( editor );\r
+                       return ( scayt_instanse ) ? scayt_instanse.disabled === false : false;\r
+               },\r
+               loadEngine : function( editor )\r
+               {\r
+                       if ( this.engineLoaded === true )\r
+                               return onEngineLoad.apply( editor );    // Add new instance.\r
+                       else if ( this.engineLoaded == -1 )                     // We are waiting.\r
+                               return CKEDITOR.on( 'scaytReady', function(){ onEngineLoad.apply( editor );} ); // Use function(){} to avoid rejection as duplicate.\r
+\r
+                       CKEDITOR.on( 'scaytReady', onEngineLoad, editor );\r
+                       CKEDITOR.on( 'scaytReady', function()\r
+                               {\r
+                                       this.engineLoaded = true;\r
+                               },\r
+                               this,\r
+                               null,\r
+                               0 );    // First to run.\r
+\r
+                       this.engineLoaded = -1; // Loading in progress.\r
+\r
+                       // compose scayt url\r
+                       var protocol = document.location.protocol;\r
+                       // Default to 'http' for unknown.\r
+                       protocol = protocol.search( /https?:/) != -1? protocol : 'http:';\r
+                       var baseUrl  = "svc.spellchecker.net/spellcheck/lf/scayt/scayt1.js";\r
+\r
+                       var scaytUrl  =  editor.config.scayt_srcUrl || ( protocol + "//" + baseUrl );\r
+                       var scaytConfigBaseUrl =  plugin.parseUrl( scaytUrl ).path +  "/";\r
+\r
+                       CKEDITOR._djScaytConfig =\r
+                       {\r
+                               baseUrl: scaytConfigBaseUrl,\r
+                               addOnLoad:\r
+                               [\r
+                                       function()\r
+                                       {\r
+                                               CKEDITOR.fireOnce( "scaytReady" );\r
+                                       }\r
+                               ],\r
+                               isDebug: false\r
+                       };\r
+                       // Append javascript code.\r
+                       CKEDITOR.document.getHead().append(\r
+                               CKEDITOR.document.createElement( 'script',\r
+                                       {\r
+                                               attributes :\r
+                                                       {\r
+                                                               type : 'text/javascript',\r
+                                                               src : scaytUrl\r
+                                                       }\r
+                                       })\r
+                       );\r
+\r
+                       return null;\r
+               },\r
+               parseUrl : function ( data )\r
+               {\r
+                       var match;\r
+                       if ( data.match && ( match = data.match(/(.*)[\/\\](.*?\.\w+)$/) ) )\r
+                               return { path: match[1], file: match[2] };\r
+                       else\r
+                               return data;\r
+               }\r
+       };\r
+\r
+       var plugin = CKEDITOR.plugins.scayt;\r
+\r
+       // Context menu constructing.\r
+       var addButtonCommand = function( editor, buttonName, buttonLabel, commandName, command, menugroup, menuOrder )\r
+       {\r
+               editor.addCommand( commandName, command );\r
+\r
+               // If the "menu" plugin is loaded, register the menu item.\r
+               editor.addMenuItem( commandName,\r
+                       {\r
+                               label : buttonLabel,\r
+                               command : commandName,\r
+                               group : menugroup,\r
+                               order : menuOrder\r
+                       });\r
+       };\r
+\r
+       var commandDefinition =\r
+       {\r
+               preserveState : true,\r
+\r
+               exec: function( editor )\r
+               {\r
+                       if ( plugin.isScaytReady( editor ) )\r
+                       {\r
+                               var isEnabled = plugin.isScaytEnabled( editor );\r
+\r
+                               this.setState( isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_ON );\r
+\r
+                               var scayt_control = plugin.getScayt( editor );\r
+                               scayt_control.setDisabled( isEnabled );\r
+                       }\r
+                       else if ( !editor.config.scayt_autoStartup && plugin.engineLoaded >= 0 )        // Load first time\r
+                       {\r
+                               this.setState( CKEDITOR.TRISTATE_DISABLED );\r
+\r
+                               editor.on( 'showScaytState', function()\r
+                                       {\r
+                                               this.removeListener();\r
+                                               this.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );\r
+                                       },\r
+                                       this);\r
+\r
+                               plugin.loadEngine( editor );\r
+                       }\r
+               }\r
+       };\r
+\r
+       // Add scayt plugin.\r
+       CKEDITOR.plugins.add( 'scayt',\r
+       {\r
+               requires : [ 'menubutton' ],\r
+\r
+               beforeInit : function( editor )\r
+               {\r
+                       // Register own rbc menu group.\r
+                       editor.config.menu_groups = 'scayt_suggest,scayt_moresuggest,scayt_control,' + editor.config.menu_groups;\r
+               },\r
+\r
+               init : function( editor )\r
+               {\r
+                       var moreSuggestions = {};\r
+                       var mainSuggestions = {};\r
+\r
+                       // Scayt command.\r
+                       var command = editor.addCommand( commandName, commandDefinition );\r
+\r
+                       // Add Options dialog.\r
+                       CKEDITOR.dialog.add( commandName, CKEDITOR.getUrl( this.path + 'dialogs/options.js' ) );\r
+\r
+                       var menuGroup = 'scaytButton';\r
+                       editor.addMenuGroup( menuGroup );\r
+                       editor.addMenuItems(\r
+                               {\r
+                                       scaytToggle :\r
+                                       {\r
+                                               label : editor.lang.scayt.enable,\r
+                                               command : commandName,\r
+                                               group : menuGroup\r
+                                       },\r
+\r
+                                       scaytOptions :\r
+                                       {\r
+                                               label : editor.lang.scayt.options,\r
+                                               group : menuGroup,\r
+                                               onClick : function()\r
+                                               {\r
+                                                       openPage = 'options';\r
+                                                       editor.openDialog( commandName );\r
+                                               }\r
+                                       },\r
+\r
+                                       scaytLangs :\r
+                                       {\r
+                                               label : editor.lang.scayt.langs,\r
+                                               group : menuGroup,\r
+                                               onClick : function()\r
+                                               {\r
+                                                       openPage = 'langs';\r
+                                                       editor.openDialog( commandName );\r
+                                               }\r
+                                       },\r
+\r
+                                       scaytAbout :\r
+                                       {\r
+                                               label : editor.lang.scayt.about,\r
+                                               group : menuGroup,\r
+                                               onClick : function()\r
+                                               {\r
+                                                       openPage = 'about';\r
+                                                       editor.openDialog( commandName );\r
+                                               }\r
+                                       }\r
+                               });\r
+\r
+                               editor.ui.add( 'Scayt', CKEDITOR.UI_MENUBUTTON,\r
+                                       {\r
+                                               label : editor.lang.scayt.title,\r
+                                               title : editor.lang.scayt.title,\r
+                                               className : 'cke_button_scayt',\r
+                                               onRender: function()\r
+                                               {\r
+                                               command.on( 'state', function()\r
+                                                       {\r
+                                                               this.setState( command.state );\r
+                                                       },\r
+                                                       this);\r
+                                       },\r
+                                       onMenu : function()\r
+                                       {\r
+                                               var isEnabled = plugin.isScaytEnabled( editor );\r
+\r
+                                               editor.getMenuItem( 'scaytToggle' ).label = editor.lang.scayt[ isEnabled ? 'disable' : 'enable' ];\r
+\r
+                                                       return {\r
+                                                               scaytToggle : CKEDITOR.TRISTATE_OFF,\r
+                                                               scaytOptions : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,\r
+                                                               scaytLangs : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,\r
+                                                               scaytAbout : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED\r
+                                                       };\r
+                                               }\r
+                                       });\r
+\r
+                       // If the "contextmenu" plugin is loaded, register the listeners.\r
+                       if ( editor.contextMenu && editor.addMenuItems )\r
+                       {\r
+                               editor.contextMenu.addListener( function( element )\r
+                                       {\r
+                                               if ( !( plugin.isScaytEnabled( editor ) && element ) )\r
+                                                       return null;\r
+\r
+                                               var scayt_control = plugin.getScayt( editor ),\r
+                                                       word = scayt_control.getWord( element.$ );\r
+\r
+                                               if ( !word )\r
+                                                       return null;\r
+\r
+                                               var sLang = scayt_control.getLang(),\r
+                                                       _r = {},\r
+                                                       items_suggestion = window.scayt.getSuggestion( word, sLang );\r
+                                               if (!items_suggestion || !items_suggestion.length )\r
+                                                       return null;\r
+                                               // Remove unused commands and menuitems\r
+                                               for ( i in moreSuggestions )\r
+                                               {\r
+                                                       delete editor._.menuItems[ i ];\r
+                                                       delete editor._.commands[ i ];\r
+                                               }\r
+                                               for ( i in mainSuggestions )\r
+                                               {\r
+                                                       delete editor._.menuItems[ i ];\r
+                                                       delete editor._.commands[ i ];\r
+                                               }\r
+                                               moreSuggestions = {};           // Reset items.\r
+                                               mainSuggestions = {};\r
+\r
+                                               var moreSuggestionsUnable = false;\r
+\r
+                                               for ( var i = 0, l = items_suggestion.length; i < l; i += 1 )\r
+                                               {\r
+                                                       var commandName = 'scayt_suggestion_' + items_suggestion[i].replace( ' ', '_' );\r
+                                                       var exec = ( function( el, s )\r
+                                                               {\r
+                                                                       return {\r
+                                                                               exec: function()\r
+                                                                               {\r
+                                                                                       scayt_control.replace(el, s);\r
+                                                                               }\r
+                                                                       };\r
+                                                               })( element.$, items_suggestion[i] );\r
+\r
+                                                       if ( i < editor.config.scayt_maxSuggestions )\r
+                                                       {\r
+                                                               addButtonCommand( editor, 'button_' + commandName, items_suggestion[i],\r
+                                                                       commandName, exec, 'scayt_suggest', i + 1 );\r
+                                                               _r[ commandName ] = CKEDITOR.TRISTATE_OFF;\r
+                                                               mainSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF;\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               addButtonCommand( editor, 'button_' + commandName, items_suggestion[i],\r
+                                                                       commandName, exec, 'scayt_moresuggest', i + 1 );\r
+                                                               moreSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF;\r
+                                                               moreSuggestionsUnable = true;\r
+                                                       }\r
+                                               }\r
+                                               if ( moreSuggestionsUnable )\r
+                                                       // Rgister the More suggestions group;\r
+                                                       editor.addMenuItem( 'scayt_moresuggest',\r
+                                                               {\r
+                                                                       label : editor.lang.scayt.moreSuggestions,\r
+                                                                       group : 'scayt_moresuggest',\r
+                                                                       order : 10,\r
+                                                                       getItems : function()\r
+                                                                       {\r
+                                                                               return moreSuggestions;\r
+                                                                       }\r
+                                                               });\r
+\r
+\r
+                                               var ignore_command =\r
+                                               {\r
+                                                       exec: function()\r
+                                                       {\r
+                                                               scayt_control.ignore( element.$ );\r
+                                                       }\r
+                                               };\r
+                                               var ignore_all_command =\r
+                                               {\r
+                                                       exec: function()\r
+                                                       {\r
+                                                               scayt_control.ignoreAll( element.$ );\r
+                                                       }\r
+                                               };\r
+                                               var addword_command =\r
+                                               {\r
+                                                       exec: function()\r
+                                                       {\r
+                                                               window.scayt.addWordToUserDictionary( element.$ );\r
+                                                       }\r
+                                               };\r
+\r
+                                               addButtonCommand( editor, 'ignore', editor.lang.scayt.ignore,\r
+                                                       'scayt_ignore', ignore_command, 'scayt_control', 1);\r
+                                               addButtonCommand( editor, 'ignore_all', editor.lang.scayt.ignoreAll,\r
+                                                       'scayt_ignore_all', ignore_all_command, 'scayt_control', 2);\r
+                                               addButtonCommand( editor, 'add_word', editor.lang.scayt.addWord,\r
+                                                       'scayt_add_word', addword_command, 'scayt_control', 3);\r
+\r
+                                               mainSuggestions[ 'scayt_moresuggest' ] = CKEDITOR.TRISTATE_OFF;\r
+                                               mainSuggestions[ 'scayt_ignore' ] = CKEDITOR.TRISTATE_OFF;\r
+                                               mainSuggestions[ 'scayt_ignore_all' ] = CKEDITOR.TRISTATE_OFF;\r
+                                               mainSuggestions[ 'scayt_add_word' ] = CKEDITOR.TRISTATE_OFF;\r
+\r
+                                               if ( scayt_control.fireOnContextMenu )\r
+                                                       scayt_control.fireOnContextMenu( editor );\r
+\r
+                                               return mainSuggestions;\r
+                                       });\r
+                       }\r
+\r
+                       // Start plugin\r
+                       if ( editor.config.scayt_autoStartup )\r
+                       {\r
+                               var showInitialState = function()\r
+                               {\r
+                                       editor.removeListener( 'showScaytState', showInitialState );\r
+                                       command.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );\r
+                               };\r
+                               editor.on( 'showScaytState', showInitialState );\r
+\r
+                               plugin.loadEngine( editor );\r
+                       }\r
+               }\r
+       });\r
+})();\r
+\r
+CKEDITOR.config.scayt_maxSuggestions =  5;\r
+CKEDITOR.config.scayt_autoStartup = false;\r
diff --git a/_source/plugins/selection/plugin.js b/_source/plugins/selection/plugin.js
new file mode 100644 (file)
index 0000000..e7c24b7
--- /dev/null
@@ -0,0 +1,1072 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       // #### checkSelectionChange : START\r
+\r
+       // The selection change check basically saves the element parent tree of\r
+       // the current node and check it on successive requests. If there is any\r
+       // change on the tree, then the selectionChange event gets fired.\r
+       function checkSelectionChange()\r
+       {\r
+               try\r
+               {\r
+                       // In IE, the "selectionchange" event may still get thrown when\r
+                       // releasing the WYSIWYG mode, so we need to check it first.\r
+                       var sel = this.getSelection();\r
+                       if ( !sel )\r
+                               return;\r
+\r
+                       var firstElement = sel.getStartElement();\r
+                       var currentPath = new CKEDITOR.dom.elementPath( firstElement );\r
+\r
+                       if ( !currentPath.compare( this._.selectionPreviousPath ) )\r
+                       {\r
+                               this._.selectionPreviousPath = currentPath;\r
+                               this.fire( 'selectionChange', { selection : sel, path : currentPath, element : firstElement } );\r
+                       }\r
+               }\r
+               catch (e)\r
+               {}\r
+       }\r
+\r
+       var checkSelectionChangeTimer,\r
+               checkSelectionChangeTimeoutPending;\r
+\r
+       function checkSelectionChangeTimeout()\r
+       {\r
+               // Firing the "OnSelectionChange" event on every key press started to\r
+               // be too slow. This function guarantees that there will be at least\r
+               // 200ms delay between selection checks.\r
+\r
+               checkSelectionChangeTimeoutPending = true;\r
+\r
+               if ( checkSelectionChangeTimer )\r
+                       return;\r
+\r
+               checkSelectionChangeTimeoutExec.call( this );\r
+\r
+               checkSelectionChangeTimer = CKEDITOR.tools.setTimeout( checkSelectionChangeTimeoutExec, 200, this );\r
+       }\r
+\r
+       function checkSelectionChangeTimeoutExec()\r
+       {\r
+               checkSelectionChangeTimer = null;\r
+\r
+               if ( checkSelectionChangeTimeoutPending )\r
+               {\r
+                       // Call this with a timeout so the browser properly moves the\r
+                       // selection after the mouseup. It happened that the selection was\r
+                       // being moved after the mouseup when clicking inside selected text\r
+                       // with Firefox.\r
+                       CKEDITOR.tools.setTimeout( checkSelectionChange, 0, this );\r
+\r
+                       checkSelectionChangeTimeoutPending = false;\r
+               }\r
+       }\r
+\r
+       // #### checkSelectionChange : END\r
+\r
+       var selectAllCmd =\r
+       {\r
+               exec : function( editor )\r
+               {\r
+                       switch ( editor.mode )\r
+                       {\r
+                               case 'wysiwyg' :\r
+                                       editor.document.$.execCommand( 'SelectAll', false, null );\r
+                                       break;\r
+                               case 'source' :\r
+                                       // TODO\r
+                       }\r
+               },\r
+               canUndo : false\r
+       };\r
+\r
+       CKEDITOR.plugins.add( 'selection',\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       editor.on( 'contentDom', function()\r
+                               {\r
+                                       var doc = editor.document;\r
+\r
+                                       if ( CKEDITOR.env.ie )\r
+                                       {\r
+                                               // Other browsers don't loose the selection if the\r
+                                               // editor document loose the focus. In IE, we don't\r
+                                               // have support for it, so we reproduce it here, other\r
+                                               // than firing the selection change event.\r
+\r
+                                               var savedRange,\r
+                                                       saveEnabled;\r
+\r
+                                               // "onfocusin" is fired before "onfocus". It makes it\r
+                                               // possible to restore the selection before click\r
+                                               // events get executed.\r
+                                               doc.on( 'focusin', function()\r
+                                                       {\r
+                                                               // If we have saved a range, restore it at this\r
+                                                               // point.\r
+                                                               if ( savedRange )\r
+                                                               {\r
+                                                                       // Well not break because of this.\r
+                                                                       try\r
+                                                                       {\r
+                                                                               savedRange.select();\r
+                                                                       }\r
+                                                                       catch (e)\r
+                                                                       {}\r
+\r
+                                                                       savedRange = null;\r
+                                                               }\r
+                                                       });\r
+\r
+                                               editor.window.on( 'focus', function()\r
+                                                       {\r
+                                                               // Enable selections to be saved.\r
+                                                               saveEnabled = true;\r
+\r
+                                                               saveSelection();\r
+                                                       });\r
+\r
+                                               // Check document selection before 'blur' fired, this\r
+                                               // will prevent us from breaking text selection somewhere\r
+                                               // else on the host page.(#3909)\r
+                                               editor.document.on( 'beforedeactivate', function()\r
+                                                       {\r
+                                                               // Disable selections from being saved.\r
+                                                               saveEnabled = false;\r
+\r
+                                                               // IE may leave the selection still inside the\r
+                                                               // document. Let's force it to be removed.\r
+                                                               // TODO: The following has effect for\r
+                                                               // collapsed selections.\r
+                                                               editor.document.$.execCommand( 'Unselect' );\r
+                                                       });\r
+\r
+                                               // IE fires the "selectionchange" event when clicking\r
+                                               // inside a selection. We don't want to capture that.\r
+                                               doc.on( 'mousedown', disableSave );\r
+                                               doc.on( 'mouseup',\r
+                                                       function()\r
+                                                       {\r
+                                                               saveEnabled = true;\r
+                                                               setTimeout( function()\r
+                                                                       {\r
+                                                                               saveSelection( true );\r
+                                                                       },\r
+                                                                       0 );\r
+                                                       });\r
+\r
+                                               doc.on( 'keydown', disableSave );\r
+                                               doc.on( 'keyup',\r
+                                                       function()\r
+                                                       {\r
+                                                               saveEnabled = true;\r
+                                                               saveSelection();\r
+                                                       });\r
+\r
+\r
+                                               // IE is the only to provide the "selectionchange"\r
+                                               // event.\r
+                                               doc.on( 'selectionchange', saveSelection );\r
+\r
+                                               function disableSave()\r
+                                               {\r
+                                                       saveEnabled = false;\r
+                                               }\r
+\r
+                                               function saveSelection( testIt )\r
+                                               {\r
+                                                       if ( saveEnabled )\r
+                                                       {\r
+                                                               var doc = editor.document,\r
+                                                                       sel = doc && doc.$.selection;\r
+\r
+                                                               // There is a very specific case, when clicking\r
+                                                               // inside a text selection. In that case, the\r
+                                                               // selection collapses at the clicking point,\r
+                                                               // but the selection object remains in an\r
+                                                               // unknown state, making createRange return a\r
+                                                               // range at the very start of the document. In\r
+                                                               // such situation we have to test the range, to\r
+                                                               // be sure it's valid.\r
+                                                               if ( testIt && sel && sel.type == 'None' )\r
+                                                               {\r
+                                                                       // The "InsertImage" command can be used to\r
+                                                                       // test whether the selection is good or not.\r
+                                                                       // If not, it's enough to give some time to\r
+                                                                       // IE to put things in order for us.\r
+                                                                       if ( !doc.$.queryCommandEnabled( 'InsertImage' ) )\r
+                                                                       {\r
+                                                                               CKEDITOR.tools.setTimeout( saveSelection, 50, this, true );\r
+                                                                               return;\r
+                                                                       }\r
+                                                               }\r
+\r
+                                                               savedRange = sel && sel.createRange();\r
+\r
+                                                               checkSelectionChangeTimeout.call( editor );\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               // In other browsers, we make the selection change\r
+                                               // check based on other events, like clicks or keys\r
+                                               // press.\r
+\r
+                                               doc.on( 'mouseup', checkSelectionChangeTimeout, editor );\r
+                                               doc.on( 'keyup', checkSelectionChangeTimeout, editor );\r
+                                       }\r
+                               });\r
+\r
+                       editor.addCommand( 'selectAll', selectAllCmd );\r
+                       editor.ui.addButton( 'SelectAll',\r
+                               {\r
+                                       label : editor.lang.selectAll,\r
+                                       command : 'selectAll'\r
+                               });\r
+\r
+                       editor.selectionChange = checkSelectionChangeTimeout;\r
+               }\r
+       });\r
+\r
+       /**\r
+        * Gets the current selection from the editing area when in WYSIWYG mode.\r
+        * @returns {CKEDITOR.dom.selection} A selection object or null if not on\r
+        *              WYSIWYG mode or no selection is available.\r
+        * @example\r
+        * var selection = CKEDITOR.instances.editor1.<b>getSelection()</b>;\r
+        * alert( selection.getType() );\r
+        */\r
+       CKEDITOR.editor.prototype.getSelection = function()\r
+       {\r
+               return this.document && this.document.getSelection();\r
+       };\r
+\r
+       CKEDITOR.editor.prototype.forceNextSelectionCheck = function()\r
+       {\r
+               delete this._.selectionPreviousPath;\r
+       };\r
+\r
+       /**\r
+        * Gets the current selection from the document.\r
+        * @returns {CKEDITOR.dom.selection} A selection object.\r
+        * @example\r
+        * var selection = CKEDITOR.instances.editor1.document.<b>getSelection()</b>;\r
+        * alert( selection.getType() );\r
+        */\r
+       CKEDITOR.dom.document.prototype.getSelection = function()\r
+       {\r
+               var sel = new CKEDITOR.dom.selection( this );\r
+               return ( !sel || sel.isInvalid ) ? null : sel;\r
+       };\r
+\r
+       /**\r
+        * No selection.\r
+        * @constant\r
+        * @example\r
+        * if ( editor.getSelection().getType() == CKEDITOR.SELECTION_NONE )\r
+        *     alert( 'Nothing is selected' );\r
+        */\r
+       CKEDITOR.SELECTION_NONE         = 1;\r
+\r
+       /**\r
+        * Text or collapsed selection.\r
+        * @constant\r
+        * @example\r
+        * if ( editor.getSelection().getType() == CKEDITOR.SELECTION_TEXT )\r
+        *     alert( 'Text is selected' );\r
+        */\r
+       CKEDITOR.SELECTION_TEXT         = 2;\r
+\r
+       /**\r
+        * Element selection.\r
+        * @constant\r
+        * @example\r
+        * if ( editor.getSelection().getType() == CKEDITOR.SELECTION_ELEMENT )\r
+        *     alert( 'An element is selected' );\r
+        */\r
+       CKEDITOR.SELECTION_ELEMENT      = 3;\r
+\r
+       /**\r
+        * Manipulates the selection in a DOM document.\r
+        * @constructor\r
+        * @example\r
+        */\r
+       CKEDITOR.dom.selection = function( document )\r
+       {\r
+               var lockedSelection = document.getCustomData( 'cke_locked_selection' );\r
+\r
+               if ( lockedSelection )\r
+                       return lockedSelection;\r
+\r
+               this.document = document;\r
+               this.isLocked = false;\r
+               this._ =\r
+               {\r
+                       cache : {}\r
+               };\r
+\r
+               /**\r
+                * IE BUG: The selection's document may be a different document than the\r
+                * editor document. Return null if that's the case.\r
+                */\r
+               if ( CKEDITOR.env.ie )\r
+               {\r
+                       var range = this.getNative().createRange();\r
+                       if ( !range\r
+                               || ( range.item && range.item(0).ownerDocument != this.document.$ )\r
+                               || ( range.parentElement && range.parentElement().ownerDocument != this.document.$ ) )\r
+                       {\r
+                               this.isInvalid = true;\r
+                       }\r
+               }\r
+\r
+               return this;\r
+       };\r
+\r
+       var styleObjectElements =\r
+       {\r
+               img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1,\r
+               a:1, input:1, form:1, select:1, textarea:1, button:1, fieldset:1, th:1, thead:1, tfoot:1\r
+       };\r
+\r
+       CKEDITOR.dom.selection.prototype =\r
+       {\r
+               /**\r
+                * Gets the native selection object from the browser.\r
+                * @function\r
+                * @returns {Object} The native selection object.\r
+                * @example\r
+                * var selection = editor.getSelection().<b>getNative()</b>;\r
+                */\r
+               getNative :\r
+                       CKEDITOR.env.ie ?\r
+                               function()\r
+                               {\r
+                                       return this._.cache.nativeSel || ( this._.cache.nativeSel = this.document.$.selection );\r
+                               }\r
+                       :\r
+                               function()\r
+                               {\r
+                                       return this._.cache.nativeSel || ( this._.cache.nativeSel = this.document.getWindow().$.getSelection() );\r
+                               },\r
+\r
+               /**\r
+                * Gets the type of the current selection. The following values are\r
+                * available:\r
+                * <ul>\r
+                *              <li>{@link CKEDITOR.SELECTION_NONE} (1): No selection.</li>\r
+                *              <li>{@link CKEDITOR.SELECTION_TEXT} (2): Text is selected or\r
+                *                      collapsed selection.</li>\r
+                *              <li>{@link CKEDITOR.SELECTION_ELEMENT} (3): A element\r
+                *                      selection.</li>\r
+                * </ul>\r
+                * @function\r
+                * @returns {Number} One of the following constant values:\r
+                *              {@link CKEDITOR.SELECTION_NONE}, {@link CKEDITOR.SELECTION_TEXT} or\r
+                *              {@link CKEDITOR.SELECTION_ELEMENT}.\r
+                * @example\r
+                * if ( editor.getSelection().<b>getType()</b> == CKEDITOR.SELECTION_TEXT )\r
+                *     alert( 'Text is selected' );\r
+                */\r
+               getType :\r
+                       CKEDITOR.env.ie ?\r
+                               function()\r
+                               {\r
+                                       var cache = this._.cache;\r
+                                       if ( cache.type )\r
+                                               return cache.type;\r
+\r
+                                       var type = CKEDITOR.SELECTION_NONE;\r
+\r
+                                       try\r
+                                       {\r
+                                               var sel = this.getNative(),\r
+                                                       ieType = sel.type;\r
+\r
+                                               if ( ieType == 'Text' )\r
+                                                       type = CKEDITOR.SELECTION_TEXT;\r
+\r
+                                               if ( ieType == 'Control' )\r
+                                                       type = CKEDITOR.SELECTION_ELEMENT;\r
+\r
+                                               // It is possible that we can still get a text range\r
+                                               // object even when type == 'None' is returned by IE.\r
+                                               // So we'd better check the object returned by\r
+                                               // createRange() rather than by looking at the type.\r
+                                               if ( sel.createRange().parentElement )\r
+                                                       type = CKEDITOR.SELECTION_TEXT;\r
+                                       }\r
+                                       catch(e) {}\r
+\r
+                                       return ( cache.type = type );\r
+                               }\r
+                       :\r
+                               function()\r
+                               {\r
+                                       var cache = this._.cache;\r
+                                       if ( cache.type )\r
+                                               return cache.type;\r
+\r
+                                       var type = CKEDITOR.SELECTION_TEXT;\r
+\r
+                                       var sel = this.getNative();\r
+\r
+                                       if ( !sel )\r
+                                               type = CKEDITOR.SELECTION_NONE;\r
+                                       else if ( sel.rangeCount == 1 )\r
+                                       {\r
+                                               // Check if the actual selection is a control (IMG,\r
+                                               // TABLE, HR, etc...).\r
+\r
+                                               var range = sel.getRangeAt(0),\r
+                                                       startContainer = range.startContainer;\r
+\r
+                                               if ( startContainer == range.endContainer\r
+                                                       && startContainer.nodeType == 1\r
+                                                       && ( range.endOffset - range.startOffset ) == 1\r
+                                                       && styleObjectElements[ startContainer.childNodes[ range.startOffset ].nodeName.toLowerCase() ] )\r
+                                               {\r
+                                                       type = CKEDITOR.SELECTION_ELEMENT;\r
+                                               }\r
+                                       }\r
+\r
+                                       return ( cache.type = type );\r
+                               },\r
+\r
+               getRanges :\r
+                       CKEDITOR.env.ie ?\r
+                               ( function()\r
+                               {\r
+                                       // Finds the container and offset for a specific boundary\r
+                                       // of an IE range.\r
+                                       var getBoundaryInformation = function( range, start )\r
+                                       {\r
+                                               // Creates a collapsed range at the requested boundary.\r
+                                               range = range.duplicate();\r
+                                               range.collapse( start );\r
+\r
+                                               // Gets the element that encloses the range entirely.\r
+                                               var parent = range.parentElement();\r
+                                               var siblings = parent.childNodes;\r
+\r
+                                               var testRange;\r
+\r
+                                               for ( var i = 0 ; i < siblings.length ; i++ )\r
+                                               {\r
+                                                       var child = siblings[ i ];\r
+                                                       if ( child.nodeType == 1 )\r
+                                                       {\r
+                                                               testRange = range.duplicate();\r
+\r
+                                                               testRange.moveToElementText( child );\r
+                                                               testRange.collapse();\r
+\r
+                                                               var comparison = testRange.compareEndPoints( 'StartToStart', range );\r
+\r
+                                                               if ( comparison > 0 )\r
+                                                                       break;\r
+                                                               else if ( comparison === 0 )\r
+                                                                       return {\r
+                                                                               container : parent,\r
+                                                                               offset : i\r
+                                                                       };\r
+\r
+                                                               testRange = null;\r
+                                                       }\r
+                                               }\r
+\r
+                                               if ( !testRange )\r
+                                               {\r
+                                                       testRange = range.duplicate();\r
+                                                       testRange.moveToElementText( parent );\r
+                                                       testRange.collapse( false );\r
+                                               }\r
+\r
+                                               testRange.setEndPoint( 'StartToStart', range );\r
+                                               // IE report line break as CRLF with range.text but\r
+                                               // only LF with textnode.nodeValue, normalize them to avoid\r
+                                               // breaking character counting logic below. (#3949)\r
+                                               var distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length;\r
+\r
+                                               while ( distance > 0 )\r
+                                                       distance -= siblings[ --i ].nodeValue.length;\r
+\r
+                                               if ( distance === 0 )\r
+                                               {\r
+                                                       return {\r
+                                                               container : parent,\r
+                                                               offset : i\r
+                                                       };\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       return {\r
+                                                               container : siblings[ i ],\r
+                                                               offset : -distance\r
+                                                       };\r
+                                               }\r
+                                       };\r
+\r
+                                       return function()\r
+                                       {\r
+                                               var cache = this._.cache;\r
+                                               if ( cache.ranges )\r
+                                                       return cache.ranges;\r
+\r
+                                               // IE doesn't have range support (in the W3C way), so we\r
+                                               // need to do some magic to transform selections into\r
+                                               // CKEDITOR.dom.range instances.\r
+\r
+                                               var sel = this.getNative(),\r
+                                                       nativeRange = sel && sel.createRange(),\r
+                                                       type = this.getType(),\r
+                                                       range;\r
+\r
+                                               if ( !sel )\r
+                                                       return [];\r
+\r
+                                               if ( type == CKEDITOR.SELECTION_TEXT )\r
+                                               {\r
+                                                       range = new CKEDITOR.dom.range( this.document );\r
+\r
+                                                       var boundaryInfo = getBoundaryInformation( nativeRange, true );\r
+                                                       range.setStart( new CKEDITOR.dom.node( boundaryInfo.container ), boundaryInfo.offset );\r
+\r
+                                                       boundaryInfo = getBoundaryInformation( nativeRange );\r
+                                                       range.setEnd( new CKEDITOR.dom.node( boundaryInfo.container ), boundaryInfo.offset );\r
+\r
+                                                       return ( cache.ranges = [ range ] );\r
+                                               }\r
+                                               else if ( type == CKEDITOR.SELECTION_ELEMENT )\r
+                                               {\r
+                                                       var retval = this._.cache.ranges = [];\r
+\r
+                                                       for ( var i = 0 ; i < nativeRange.length ; i++ )\r
+                                                       {\r
+                                                               var element = nativeRange.item( i ),\r
+                                                                       parentElement = element.parentNode,\r
+                                                                       j = 0;\r
+\r
+                                                               range = new CKEDITOR.dom.range( this.document );\r
+\r
+                                                               for (; j < parentElement.childNodes.length && parentElement.childNodes[j] != element ; j++ )\r
+                                                               { /*jsl:pass*/ }\r
+\r
+                                                               range.setStart( new CKEDITOR.dom.node( parentElement ), j );\r
+                                                               range.setEnd( new CKEDITOR.dom.node( parentElement ), j + 1 );\r
+                                                               retval.push( range );\r
+                                                       }\r
+\r
+                                                       return retval;\r
+                                               }\r
+\r
+                                               return ( cache.ranges = [] );\r
+                                       };\r
+                               })()\r
+                       :\r
+                               function()\r
+                               {\r
+                                       var cache = this._.cache;\r
+                                       if ( cache.ranges )\r
+                                               return cache.ranges;\r
+\r
+                                       // On browsers implementing the W3C range, we simply\r
+                                       // tranform the native ranges in CKEDITOR.dom.range\r
+                                       // instances.\r
+\r
+                                       var ranges = [];\r
+                                       var sel = this.getNative();\r
+\r
+                                       if ( !sel )\r
+                                               return [];\r
+\r
+                                       for ( var i = 0 ; i < sel.rangeCount ; i++ )\r
+                                       {\r
+                                               var nativeRange = sel.getRangeAt( i );\r
+                                               var range = new CKEDITOR.dom.range( this.document );\r
+\r
+                                               range.setStart( new CKEDITOR.dom.node( nativeRange.startContainer ), nativeRange.startOffset );\r
+                                               range.setEnd( new CKEDITOR.dom.node( nativeRange.endContainer ), nativeRange.endOffset );\r
+                                               ranges.push( range );\r
+                                       }\r
+\r
+                                       return ( cache.ranges = ranges );\r
+                               },\r
+\r
+               /**\r
+                * Gets the DOM element in which the selection starts.\r
+                * @returns {CKEDITOR.dom.element} The element at the beginning of the\r
+                *              selection.\r
+                * @example\r
+                * var element = editor.getSelection().<b>getStartElement()</b>;\r
+                * alert( element.getName() );\r
+                */\r
+               getStartElement : function()\r
+               {\r
+                       var cache = this._.cache;\r
+                       if ( cache.startElement !== undefined )\r
+                               return cache.startElement;\r
+\r
+                       var node,\r
+                               sel = this.getNative();\r
+\r
+                       switch ( this.getType() )\r
+                       {\r
+                               case CKEDITOR.SELECTION_ELEMENT :\r
+                                       return this.getSelectedElement();\r
+\r
+                               case CKEDITOR.SELECTION_TEXT :\r
+\r
+                                       var range = this.getRanges()[0];\r
+\r
+                                       if ( range )\r
+                                       {\r
+                                               if ( !range.collapsed )\r
+                                               {\r
+                                                       range.optimize();\r
+\r
+                                                       // Decrease the range content to exclude particial\r
+                                                       // selected node on the start which doesn't have\r
+                                                       // visual impact. ( #3231 )\r
+                                                       while( true )\r
+                                                       {\r
+                                                               var startContainer = range.startContainer,\r
+                                                                       startOffset = range.startOffset;\r
+                                                               if ( startOffset == ( startContainer.getChildCount ?\r
+                                                                       startContainer.getChildCount() : startContainer.getLength() ) )\r
+                                                                       range.setStartAfter( startContainer );\r
+                                                               else break;\r
+                                                       }\r
+\r
+                                                       node = range.startContainer;\r
+\r
+                                                       if ( node.type != CKEDITOR.NODE_ELEMENT )\r
+                                                               return node.getParent();\r
+\r
+                                                       node = node.getChild( range.startOffset );\r
+\r
+                                                       if ( !node || node.type != CKEDITOR.NODE_ELEMENT )\r
+                                                               return range.startContainer;\r
+\r
+                                                       var child = node.getFirst();\r
+                                                       while (  child && child.type == CKEDITOR.NODE_ELEMENT )\r
+                                                       {\r
+                                                               node = child;\r
+                                                               child = child.getFirst();\r
+                                                       }\r
+\r
+                                                       return node;\r
+                                               }\r
+                                       }\r
+\r
+                                       if ( CKEDITOR.env.ie )\r
+                                       {\r
+                                               range = sel.createRange();\r
+                                               range.collapse( true );\r
+\r
+                                               node = range.parentElement();\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               node = sel.anchorNode;\r
+\r
+                                               if ( node.nodeType != 1 )\r
+                                                       node = node.parentNode;\r
+                                       }\r
+                       }\r
+\r
+                       return cache.startElement = ( node ? new CKEDITOR.dom.element( node ) : null );\r
+               },\r
+\r
+               /**\r
+                * Gets the current selected element.\r
+                * @returns {CKEDITOR.dom.element} The selected element. Null if no\r
+                *              selection is available or the selection type is not\r
+                *              {@link CKEDITOR.SELECTION_ELEMENT}.\r
+                * @example\r
+                * var element = editor.getSelection().<b>getSelectedElement()</b>;\r
+                * alert( element.getName() );\r
+                */\r
+               getSelectedElement : function()\r
+               {\r
+                       var cache = this._.cache;\r
+                       if ( cache.selectedElement !== undefined )\r
+                               return cache.selectedElement;\r
+\r
+                       var node;\r
+\r
+                       if ( this.getType() == CKEDITOR.SELECTION_ELEMENT )\r
+                       {\r
+                               var sel = this.getNative();\r
+\r
+                               if ( CKEDITOR.env.ie )\r
+                               {\r
+                                       try\r
+                                       {\r
+                                               node = sel.createRange().item(0);\r
+                                       }\r
+                                       catch(e) {}\r
+                               }\r
+                               else\r
+                               {\r
+                                       var range = sel.getRangeAt( 0 );\r
+                                       node = range.startContainer.childNodes[ range.startOffset ];\r
+                               }\r
+                       }\r
+\r
+                       return cache.selectedElement = ( node ? new CKEDITOR.dom.element( node ) : null );\r
+               },\r
+\r
+               lock : function()\r
+               {\r
+                       // Call all cacheable function.\r
+                       this.getRanges();\r
+                       this.getStartElement();\r
+                       this.getSelectedElement();\r
+\r
+                       // The native selection is not available when locked.\r
+                       this._.cache.nativeSel = {};\r
+\r
+                       this.isLocked = true;\r
+\r
+                       // Save this selection inside the DOM document.\r
+                       this.document.setCustomData( 'cke_locked_selection', this );\r
+               },\r
+\r
+               unlock : function( restore )\r
+               {\r
+                       var doc = this.document,\r
+                               lockedSelection = doc.getCustomData( 'cke_locked_selection' );\r
+\r
+                       if ( lockedSelection )\r
+                       {\r
+                               doc.setCustomData( 'cke_locked_selection', null );\r
+\r
+                               if ( restore )\r
+                               {\r
+                                       var selectedElement = lockedSelection.getSelectedElement(),\r
+                                               ranges = !selectedElement && lockedSelection.getRanges();\r
+\r
+                                       this.isLocked = false;\r
+                                       this.reset();\r
+\r
+                                       doc.getBody().focus();\r
+\r
+                                       if ( selectedElement )\r
+                                               this.selectElement( selectedElement );\r
+                                       else\r
+                                               this.selectRanges( ranges );\r
+                               }\r
+                       }\r
+\r
+                       if  ( !lockedSelection || !restore )\r
+                       {\r
+                               this.isLocked = false;\r
+                               this.reset();\r
+                       }\r
+               },\r
+\r
+               reset : function()\r
+               {\r
+                       this._.cache = {};\r
+               },\r
+\r
+               selectElement : function( element )\r
+               {\r
+                       if ( this.isLocked )\r
+                       {\r
+                               var range = new CKEDITOR.dom.range( this.document );\r
+                               range.setStartBefore( element );\r
+                               range.setEndAfter( element );\r
+\r
+                               this._.cache.selectedElement = element;\r
+                               this._.cache.startElement = element;\r
+                               this._.cache.ranges = [ range ];\r
+                               this._.cache.type = CKEDITOR.SELECTION_ELEMENT;\r
+\r
+                               return;\r
+                       }\r
+\r
+                       if ( CKEDITOR.env.ie )\r
+                       {\r
+                               this.getNative().empty();\r
+\r
+                               try\r
+                               {\r
+                                       // Try to select the node as a control.\r
+                                       range = this.document.$.body.createControlRange();\r
+                                       range.addElement( element.$ );\r
+                                       range.select();\r
+                               }\r
+                               catch(e)\r
+                               {\r
+                                       // If failed, select it as a text range.\r
+                                       range = this.document.$.body.createTextRange();\r
+                                       range.moveToElementText( element.$ );\r
+                                       range.select();\r
+                               }\r
+\r
+                               this.reset();\r
+                       }\r
+                       else\r
+                       {\r
+                               // Create the range for the element.\r
+                               range = this.document.$.createRange();\r
+                               range.selectNode( element.$ );\r
+\r
+                               // Select the range.\r
+                               var sel = this.getNative();\r
+                               sel.removeAllRanges();\r
+                               sel.addRange( range );\r
+\r
+                               this.reset();\r
+                       }\r
+               },\r
+\r
+               selectRanges : function( ranges )\r
+               {\r
+                       if ( this.isLocked )\r
+                       {\r
+                               this._.cache.selectedElement = null;\r
+                               this._.cache.startElement = ranges[ 0 ].getTouchedStartNode();\r
+                               this._.cache.ranges = ranges;\r
+                               this._.cache.type = CKEDITOR.SELECTION_TEXT;\r
+\r
+                               return;\r
+                       }\r
+\r
+                       if ( CKEDITOR.env.ie )\r
+                       {\r
+                               // IE doesn't accept multiple ranges selection, so we just\r
+                               // select the first one.\r
+                               if ( ranges[ 0 ] )\r
+                                       ranges[ 0 ].select();\r
+\r
+                               this.reset();\r
+                       }\r
+                       else\r
+                       {\r
+                               var sel = this.getNative();\r
+                               sel.removeAllRanges();\r
+\r
+                               for ( var i = 0 ; i < ranges.length ; i++ )\r
+                               {\r
+                                       var range = ranges[ i ];\r
+                                       var nativeRange = this.document.$.createRange();\r
+                                       var startContainer = range.startContainer;\r
+\r
+                                       // In FF2, if we have a collapsed range, inside an empty\r
+                                       // element, we must add something to it otherwise the caret\r
+                                       // will not be visible.\r
+                                       if ( range.collapsed &&\r
+                                               ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) &&\r
+                                               startContainer.type == CKEDITOR.NODE_ELEMENT &&\r
+                                               !startContainer.getChildCount() )\r
+                                       {\r
+                                               startContainer.appendText( '' );\r
+                                       }\r
+\r
+                                       nativeRange.setStart( startContainer.$, range.startOffset );\r
+                                       nativeRange.setEnd( range.endContainer.$, range.endOffset );\r
+\r
+                                       // Select the range.\r
+                                       sel.addRange( nativeRange );\r
+                               }\r
+\r
+                               this.reset();\r
+                       }\r
+               },\r
+\r
+               createBookmarks : function( serializable )\r
+               {\r
+                       var retval = [],\r
+                               ranges = this.getRanges(),\r
+                               length = ranges.length,\r
+                               bookmark;\r
+                       for ( var i = 0; i < length ; i++ )\r
+                       {\r
+                           retval.push( bookmark = ranges[ i ].createBookmark( serializable, true ) );\r
+\r
+                               serializable = bookmark.serializable;\r
+\r
+                               var bookmarkStart = serializable ? this.document.getById( bookmark.startNode ) : bookmark.startNode,\r
+                                       bookmarkEnd = serializable ? this.document.getById( bookmark.endNode ) : bookmark.endNode;\r
+\r
+                           // Updating the offset values for rest of ranges which have been mangled(#3256).\r
+                           for ( var j = i + 1 ; j < length ; j++ )\r
+                           {\r
+                               var dirtyRange = ranges[ j ],\r
+                                      rangeStart = dirtyRange.startContainer,\r
+                                      rangeEnd = dirtyRange.endContainer;\r
+\r
+                              rangeStart.equals( bookmarkStart.getParent() ) && dirtyRange.startOffset++;\r
+                              rangeStart.equals( bookmarkEnd.getParent() ) && dirtyRange.startOffset++;\r
+                              rangeEnd.equals( bookmarkStart.getParent() ) && dirtyRange.endOffset++;\r
+                              rangeEnd.equals( bookmarkEnd.getParent() ) && dirtyRange.endOffset++;\r
+                           }\r
+                       }\r
+\r
+                       return retval;\r
+               },\r
+\r
+               createBookmarks2 : function( normalized )\r
+               {\r
+                       var bookmarks = [],\r
+                               ranges = this.getRanges();\r
+\r
+                       for ( var i = 0 ; i < ranges.length ; i++ )\r
+                               bookmarks.push( ranges[i].createBookmark2( normalized ) );\r
+\r
+                       return bookmarks;\r
+               },\r
+\r
+               selectBookmarks : function( bookmarks )\r
+               {\r
+                       var ranges = [];\r
+                       for ( var i = 0 ; i < bookmarks.length ; i++ )\r
+                       {\r
+                               var range = new CKEDITOR.dom.range( this.document );\r
+                               range.moveToBookmark( bookmarks[i] );\r
+                               ranges.push( range );\r
+                       }\r
+                       this.selectRanges( ranges );\r
+                       return this;\r
+               }\r
+       };\r
+})();\r
+\r
+CKEDITOR.dom.range.prototype.select =\r
+       CKEDITOR.env.ie ?\r
+               // V2\r
+               function( forceExpand )\r
+               {\r
+                       var collapsed = this.collapsed;\r
+                       var isStartMarkerAlone;\r
+                       var dummySpan;\r
+\r
+                       var bookmark = this.createBookmark();\r
+\r
+                       // Create marker tags for the start and end boundaries.\r
+                       var startNode = bookmark.startNode;\r
+\r
+                       var endNode;\r
+                       if ( !collapsed )\r
+                               endNode = bookmark.endNode;\r
+\r
+                       // Create the main range which will be used for the selection.\r
+                       var ieRange = this.document.$.body.createTextRange();\r
+\r
+                       // Position the range at the start boundary.\r
+                       ieRange.moveToElementText( startNode.$ );\r
+                       ieRange.moveStart( 'character', 1 );\r
+\r
+                       if ( endNode )\r
+                       {\r
+                               // Create a tool range for the end.\r
+                               var ieRangeEnd = this.document.$.body.createTextRange();\r
+\r
+                               // Position the tool range at the end.\r
+                               ieRangeEnd.moveToElementText( endNode.$ );\r
+\r
+                               // Move the end boundary of the main range to match the tool range.\r
+                               ieRange.setEndPoint( 'EndToEnd', ieRangeEnd );\r
+                               ieRange.moveEnd( 'character', -1 );\r
+                       }\r
+                       else\r
+                       {\r
+                               // The isStartMarkerAlone logic comes from V2. It guarantees that the lines\r
+                               // will expand and that the cursor will be blinking on the right place.\r
+                               // Actually, we are using this flag just to avoid using this hack in all\r
+                               // situations, but just on those needed.\r
+                               isStartMarkerAlone = forceExpand || !startNode.hasPrevious() || ( startNode.getPrevious().is && startNode.getPrevious().is( 'br' ) );\r
+\r
+                               // Append a temporary <span>&#65279;</span> before the selection.\r
+                               // This is needed to avoid IE destroying selections inside empty\r
+                               // inline elements, like <b></b> (#253).\r
+                               // It is also needed when placing the selection right after an inline\r
+                               // element to avoid the selection moving inside of it.\r
+                               dummySpan = this.document.createElement( 'span' );\r
+                               dummySpan.setHtml( '&#65279;' );        // Zero Width No-Break Space (U+FEFF). See #1359.\r
+                               dummySpan.insertBefore( startNode );\r
+\r
+                               if ( isStartMarkerAlone )\r
+                               {\r
+                                       // To expand empty blocks or line spaces after <br>, we need\r
+                                       // instead to have any char, which will be later deleted using the\r
+                                       // selection.\r
+                                       // \ufeff = Zero Width No-Break Space (U+FEFF). (#1359)\r
+                                       this.document.createText( '\ufeff' ).insertBefore( startNode );\r
+                               }\r
+                       }\r
+\r
+                       // Remove the markers (reset the position, because of the changes in the DOM tree).\r
+                       this.setStartBefore( startNode );\r
+                       startNode.remove();\r
+\r
+                       if ( collapsed )\r
+                       {\r
+                               if ( isStartMarkerAlone )\r
+                               {\r
+                                       // Move the selection start to include the temporary \ufeff.\r
+                                       ieRange.moveStart( 'character', -1 );\r
+\r
+                                       ieRange.select();\r
+\r
+                                       // Remove our temporary stuff.\r
+                                       this.document.$.selection.clear();\r
+                               }\r
+                               else\r
+                                       ieRange.select();\r
+\r
+                               dummySpan.remove();\r
+                       }\r
+                       else\r
+                       {\r
+                               this.setEndBefore( endNode );\r
+                               endNode.remove();\r
+                               ieRange.select();\r
+                       }\r
+               }\r
+       :\r
+               function()\r
+               {\r
+                       var startContainer = this.startContainer;\r
+\r
+                       // If we have a collapsed range, inside an empty element, we must add\r
+                       // something to it, otherwise the caret will not be visible.\r
+                       if ( this.collapsed && startContainer.type == CKEDITOR.NODE_ELEMENT && !startContainer.getChildCount() )\r
+                               startContainer.append( new CKEDITOR.dom.text( '' ) );\r
+\r
+                       var nativeRange = this.document.$.createRange();\r
+                       nativeRange.setStart( startContainer.$, this.startOffset );\r
+\r
+                       try\r
+                       {\r
+                               nativeRange.setEnd( this.endContainer.$, this.endOffset );\r
+                       }\r
+                       catch ( e )\r
+                       {\r
+                               // There is a bug in Firefox implementation (it would be too easy\r
+                               // otherwise). The new start can't be after the end (W3C says it can).\r
+                               // So, let's create a new range and collapse it to the desired point.\r
+                               if ( e.toString().indexOf( 'NS_ERROR_ILLEGAL_VALUE' ) >= 0 )\r
+                               {\r
+                                       this.collapse( true );\r
+                                       nativeRange.setEnd( this.endContainer.$, this.endOffset );\r
+                               }\r
+                               else\r
+                                       throw( e );\r
+                       }\r
+\r
+                       var selection = this.document.getSelection().getNative();\r
+                       selection.removeAllRanges();\r
+                       selection.addRange( nativeRange );\r
+               };\r
diff --git a/_source/plugins/showblocks/images/block_address.png b/_source/plugins/showblocks/images/block_address.png
new file mode 100644 (file)
index 0000000..8bbae6e
Binary files /dev/null and b/_source/plugins/showblocks/images/block_address.png differ
diff --git a/_source/plugins/showblocks/images/block_blockquote.png b/_source/plugins/showblocks/images/block_blockquote.png
new file mode 100644 (file)
index 0000000..cf065ba
Binary files /dev/null and b/_source/plugins/showblocks/images/block_blockquote.png differ
diff --git a/_source/plugins/showblocks/images/block_div.png b/_source/plugins/showblocks/images/block_div.png
new file mode 100644 (file)
index 0000000..a2806b1
Binary files /dev/null and b/_source/plugins/showblocks/images/block_div.png differ
diff --git a/_source/plugins/showblocks/images/block_h1.png b/_source/plugins/showblocks/images/block_h1.png
new file mode 100644 (file)
index 0000000..d43fbdb
Binary files /dev/null and b/_source/plugins/showblocks/images/block_h1.png differ
diff --git a/_source/plugins/showblocks/images/block_h2.png b/_source/plugins/showblocks/images/block_h2.png
new file mode 100644 (file)
index 0000000..27b5475
Binary files /dev/null and b/_source/plugins/showblocks/images/block_h2.png differ
diff --git a/_source/plugins/showblocks/images/block_h3.png b/_source/plugins/showblocks/images/block_h3.png
new file mode 100644 (file)
index 0000000..3c3034f
Binary files /dev/null and b/_source/plugins/showblocks/images/block_h3.png differ
diff --git a/_source/plugins/showblocks/images/block_h4.png b/_source/plugins/showblocks/images/block_h4.png
new file mode 100644 (file)
index 0000000..ab3f64d
Binary files /dev/null and b/_source/plugins/showblocks/images/block_h4.png differ
diff --git a/_source/plugins/showblocks/images/block_h5.png b/_source/plugins/showblocks/images/block_h5.png
new file mode 100644 (file)
index 0000000..93477d0
Binary files /dev/null and b/_source/plugins/showblocks/images/block_h5.png differ
diff --git a/_source/plugins/showblocks/images/block_h6.png b/_source/plugins/showblocks/images/block_h6.png
new file mode 100644 (file)
index 0000000..11ea1c2
Binary files /dev/null and b/_source/plugins/showblocks/images/block_h6.png differ
diff --git a/_source/plugins/showblocks/images/block_p.png b/_source/plugins/showblocks/images/block_p.png
new file mode 100644 (file)
index 0000000..d055c51
Binary files /dev/null and b/_source/plugins/showblocks/images/block_p.png differ
diff --git a/_source/plugins/showblocks/images/block_pre.png b/_source/plugins/showblocks/images/block_pre.png
new file mode 100644 (file)
index 0000000..be8ad26
Binary files /dev/null and b/_source/plugins/showblocks/images/block_pre.png differ
diff --git a/_source/plugins/showblocks/plugin.js b/_source/plugins/showblocks/plugin.js
new file mode 100644 (file)
index 0000000..6a5ebc2
--- /dev/null
@@ -0,0 +1,153 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview The "showblocks" plugin. Enable it will make all block level\r
+ *               elements being decorated with a border and the element name\r
+ *               displayed on the left-right corner.\r
+ */\r
+\r
+(function()\r
+{\r
+       var cssTemplate = '.%2 p,'+\r
+               '.%2 div,'+\r
+               '.%2 pre,'+\r
+               '.%2 address,'+\r
+               '.%2 blockquote,'+\r
+               '.%2 h1,'+\r
+               '.%2 h2,'+\r
+               '.%2 h3,'+\r
+               '.%2 h4,'+\r
+               '.%2 h5,'+\r
+               '.%2 h6'+\r
+               '{'+\r
+                       'background-repeat: no-repeat;'+\r
+                       'border: 1px dotted gray;'+\r
+                       'padding-top: 8px;'+\r
+                       'padding-left: 8px;'+\r
+               '}'+\r
+\r
+               '.%2 p'+\r
+               '{'+\r
+                       '%1p.png);'+\r
+               '}'+\r
+\r
+               '.%2 div'+\r
+               '{'+\r
+                       '%1div.png);'+\r
+               '}'+\r
+\r
+               '.%2 pre'+\r
+               '{'+\r
+                       '%1pre.png);'+\r
+               '}'+\r
+\r
+               '.%2 address'+\r
+               '{'+\r
+                       '%1address.png);'+\r
+               '}'+\r
+\r
+               '.%2 blockquote'+\r
+               '{'+\r
+                       '%1blockquote.png);'+\r
+               '}'+\r
+\r
+               '.%2 h1'+\r
+               '{'+\r
+                       '%1h1.png);'+\r
+               '}'+\r
+\r
+               '.%2 h2'+\r
+               '{'+\r
+                       '%1h2.png);'+\r
+               '}'+\r
+\r
+               '.%2 h3'+\r
+               '{'+\r
+                       '%1h3.png);'+\r
+               '}'+\r
+\r
+               '.%2 h4'+\r
+               '{'+\r
+                       '%1h4.png);'+\r
+               '}'+\r
+\r
+               '.%2 h5'+\r
+               '{'+\r
+                       '%1h5.png);'+\r
+               '}'+\r
+\r
+               '.%2 h6'+\r
+               '{'+\r
+                       '%1h6.png);'+\r
+               '}';\r
+\r
+       var cssTemplateRegex = /%1/g, cssClassRegex = /%2/g;\r
+\r
+       var commandDefinition =\r
+       {\r
+               preserveState : true,\r
+\r
+               exec : function ( editor )\r
+               {\r
+                       this.toggleState();\r
+                       this.refresh( editor );\r
+               },\r
+\r
+               refresh : function( editor )\r
+               {\r
+                       var funcName = ( this.state == CKEDITOR.TRISTATE_ON ) ? 'addClass' : 'removeClass';\r
+                       editor.document.getBody()[ funcName ]( 'cke_show_blocks' );\r
+               }\r
+       };\r
+\r
+       CKEDITOR.plugins.add( 'showblocks',\r
+       {\r
+               requires : [ 'wysiwygarea' ],\r
+\r
+               init : function( editor )\r
+               {\r
+                       var command = editor.addCommand( 'showblocks', commandDefinition );\r
+                       command.canUndo = false;\r
+\r
+                       if ( editor.config.startupOutlineBlocks )\r
+                               command.setState( CKEDITOR.TRISTATE_ON );\r
+\r
+                       editor.addCss( cssTemplate\r
+                               .replace( cssTemplateRegex, 'background-image: url(' + CKEDITOR.getUrl( this.path ) + 'images/block_' )\r
+                               .replace( cssClassRegex, 'cke_show_blocks ' ) );\r
+\r
+                       editor.ui.addButton( 'ShowBlocks',\r
+                               {\r
+                                       label : editor.lang.showBlocks,\r
+                                       command : 'showblocks'\r
+                               });\r
+\r
+                       // Refresh the command on setData.\r
+                       editor.on( 'mode', function()\r
+                               {\r
+                                       if ( command.state != CKEDITOR.TRISTATE_DISABLED )\r
+                                               command.refresh( editor );\r
+                               });\r
+\r
+                       // Refresh the command on setData.\r
+                       editor.on( 'contentDom', function()\r
+                               {\r
+                                       if ( command.state != CKEDITOR.TRISTATE_DISABLED )\r
+                                               command.refresh( editor );\r
+                               });\r
+               }\r
+       });\r
+} )();\r
+\r
+/**\r
+ * Whether to automaticaly enable the "show block" command when the editor\r
+ * loads.\r
+ * @type Boolean\r
+ * @default false\r
+ * @example\r
+ * config.startupOutlineBlocks = true;\r
+ */\r
+CKEDITOR.config.startupOutlineBlocks = false;\r
diff --git a/_source/plugins/smiley/dialogs/smiley.js b/_source/plugins/smiley/dialogs/smiley.js
new file mode 100644 (file)
index 0000000..5127be2
--- /dev/null
@@ -0,0 +1,219 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'smiley', function( editor )\r
+{\r
+       var config = editor.config,\r
+               images = config.smiley_images,\r
+               columns = 8,\r
+               i;\r
+\r
+       /**\r
+        * Simulate "this" of a dialog for non-dialog events.\r
+        * @type {CKEDITOR.dialog}\r
+        */\r
+       var dialog;\r
+       var onClick = function( evt )\r
+       {\r
+               var target = evt.data.getTarget(),\r
+                       targetName = target.getName();\r
+\r
+               if ( targetName == 'td' )\r
+                       target = target.getChild( [ 0, 0 ] );\r
+               else if ( targetName == 'a' )\r
+                       target = target.getChild( 0 );\r
+               else if ( targetName != 'img' )\r
+                       return;\r
+\r
+               var src = target.getAttribute( 'cke_src' ),\r
+                       title = target.getAttribute( 'title' );\r
+\r
+               var img = editor.document.createElement( 'img',\r
+                       {\r
+                               attributes :\r
+                               {\r
+                                       src : src,\r
+                                       _cke_saved_src : src,\r
+                                       title : title,\r
+                                       alt : title\r
+                               }\r
+                       });\r
+\r
+               editor.insertElement( img );\r
+\r
+               dialog.hide();\r
+       };\r
+\r
+       var onKeydown = CKEDITOR.tools.addFunction( function( ev, element )\r
+       {\r
+               ev = new CKEDITOR.dom.event( ev );\r
+               element = new CKEDITOR.dom.element( element );\r
+               var relative, nodeToMove;\r
+\r
+               var keystroke = ev.getKeystroke();\r
+               switch ( keystroke )\r
+               {\r
+                       // RIGHT-ARROW\r
+                       case 39 :\r
+                               // relative is TD\r
+                               if ( ( relative = element.getParent().getNext() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( 0 );\r
+                                       nodeToMove.focus();\r
+                               }\r
+                               ev.preventDefault();\r
+                               break;\r
+                       // LEFT-ARROW\r
+                       case 37 :\r
+                               // relative is TD\r
+                               if ( ( relative = element.getParent().getPrevious() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( 0 );\r
+                                       nodeToMove.focus();\r
+                               }\r
+                               ev.preventDefault();\r
+                               break;\r
+                       // UP-ARROW\r
+                       case 38 :\r
+                               // relative is TR\r
+                               if ( ( relative = element.getParent().getParent().getPrevious() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );\r
+                                       nodeToMove.focus();\r
+                               }\r
+                               ev.preventDefault();\r
+                               break;\r
+                       // DOWN-ARROW\r
+                       case 40 :\r
+                               // relative is TR\r
+                               if ( ( relative = element.getParent().getParent().getNext() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );\r
+                                       if ( nodeToMove )\r
+                                               nodeToMove.focus();\r
+                               }\r
+                               ev.preventDefault();\r
+                               break;\r
+                       // ENTER\r
+                       // SPACE\r
+                       case 32 :\r
+                               onClick( { data: ev } );\r
+                               ev.preventDefault();\r
+                               break;\r
+                       // TAB\r
+                       case 9 :\r
+                               // relative is TD\r
+                               if ( ( relative = element.getParent().getNext() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( 0 );\r
+                                       nodeToMove.focus();\r
+                                       ev.preventDefault(true);\r
+                               }\r
+                               // relative is TR\r
+                               else if ( ( relative = element.getParent().getParent().getNext() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( [0, 0] );\r
+                                       if ( nodeToMove )\r
+                                               nodeToMove.focus();\r
+                                       ev.preventDefault(true);\r
+                               }\r
+                               break;\r
+                       // SHIFT + TAB\r
+                       case CKEDITOR.SHIFT + 9 :\r
+                               // relative is TD\r
+                               if ( ( relative = element.getParent().getPrevious() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( 0 );\r
+                                       nodeToMove.focus();\r
+                                       ev.preventDefault(true);\r
+                               }\r
+                               // relative is TR\r
+                               else if ( ( relative = element.getParent().getParent().getPrevious() ) )\r
+                               {\r
+                                       nodeToMove = relative.getLast().getChild( 0 );\r
+                                       nodeToMove.focus();\r
+                                       ev.preventDefault(true);\r
+                               }\r
+                               break;\r
+                       default :\r
+                               // Do not stop not handled events.\r
+                               return;\r
+               }\r
+       });\r
+\r
+       // Build the HTML for the smiley images table.\r
+       var html =\r
+       [\r
+               '<table cellspacing="2" cellpadding="2"',\r
+               CKEDITOR.env.ie && CKEDITOR.env.quirks ? ' style="position:absolute;"' : '',\r
+               '><tbody>'\r
+       ];\r
+\r
+       for ( i = 0 ; i < images.length ; i++ )\r
+       {\r
+               if ( i % columns === 0 )\r
+                       html.push( '<tr>' );\r
+\r
+               html.push(\r
+                       '<td class="cke_dark_background cke_hand cke_centered" style="vertical-align: middle;">' +\r
+                               '<a href="javascript:void(0)" class="cke_smile" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">',\r
+                                       '<img class="hand" title="', config.smiley_descriptions[i], '"' +\r
+                                               ' cke_src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '" alt="', config.smiley_descriptions[i], '"',\r
+                                               ' src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"',\r
+                                               // IE BUG: Below is a workaround to an IE image loading bug to ensure the image sizes are correct.\r
+                                               ( CKEDITOR.env.ie ? ' onload="this.setAttribute(\'width\', 2); this.removeAttribute(\'width\');" ' : '' ),\r
+                                       '>' +\r
+                               '</a>',\r
+                       '</td>' );\r
+\r
+               if ( i % columns == columns - 1 )\r
+                       html.push( '</tr>' );\r
+       }\r
+\r
+       if ( i < columns - 1 )\r
+       {\r
+               for ( ; i < columns - 1 ; i++ )\r
+                       html.push( '<td></td>' );\r
+               html.push( '</tr>' );\r
+       }\r
+\r
+       html.push( '</tbody></table>' );\r
+\r
+       var smileySelector =\r
+       {\r
+               type : 'html',\r
+               html : html.join( '' ),\r
+               onLoad : function( event )\r
+               {\r
+                       dialog = event.sender;\r
+               },\r
+               focus : function()\r
+               {\r
+                       var firstSmile = this.getElement().getChild( [0, 0, 0, 0] );\r
+                       firstSmile.focus();\r
+               },\r
+               onClick : onClick,\r
+               style : 'width: 100%; height: 100%; border-collapse: separate;'\r
+       };\r
+\r
+       return {\r
+               title : editor.lang.smiley.title,\r
+               minWidth : 270,\r
+               minHeight : 120,\r
+               contents : [\r
+                       {\r
+                               id : 'tab1',\r
+                               label : '',\r
+                               title : '',\r
+                               expand : true,\r
+                               padding : 0,\r
+                               elements : [\r
+                                               smileySelector\r
+                                       ]\r
+                       }\r
+               ],\r
+               buttons : [ CKEDITOR.dialog.cancelButton ]\r
+       };\r
+} );\r
diff --git a/_source/plugins/smiley/images/angel_smile.gif b/_source/plugins/smiley/images/angel_smile.gif
new file mode 100644 (file)
index 0000000..2cf4894
Binary files /dev/null and b/_source/plugins/smiley/images/angel_smile.gif differ
diff --git a/_source/plugins/smiley/images/angry_smile.gif b/_source/plugins/smiley/images/angry_smile.gif
new file mode 100644 (file)
index 0000000..40b52d3
Binary files /dev/null and b/_source/plugins/smiley/images/angry_smile.gif differ
diff --git a/_source/plugins/smiley/images/broken_heart.gif b/_source/plugins/smiley/images/broken_heart.gif
new file mode 100644 (file)
index 0000000..b6d0166
Binary files /dev/null and b/_source/plugins/smiley/images/broken_heart.gif differ
diff --git a/_source/plugins/smiley/images/confused_smile.gif b/_source/plugins/smiley/images/confused_smile.gif
new file mode 100644 (file)
index 0000000..a52db7a
Binary files /dev/null and b/_source/plugins/smiley/images/confused_smile.gif differ
diff --git a/_source/plugins/smiley/images/cry_smile.gif b/_source/plugins/smiley/images/cry_smile.gif
new file mode 100644 (file)
index 0000000..1ef6ba4
Binary files /dev/null and b/_source/plugins/smiley/images/cry_smile.gif differ
diff --git a/_source/plugins/smiley/images/devil_smile.gif b/_source/plugins/smiley/images/devil_smile.gif
new file mode 100644 (file)
index 0000000..bfb2507
Binary files /dev/null and b/_source/plugins/smiley/images/devil_smile.gif differ
diff --git a/_source/plugins/smiley/images/embaressed_smile.gif b/_source/plugins/smiley/images/embaressed_smile.gif
new file mode 100644 (file)
index 0000000..d9cedc5
Binary files /dev/null and b/_source/plugins/smiley/images/embaressed_smile.gif differ
diff --git a/_source/plugins/smiley/images/envelope.gif b/_source/plugins/smiley/images/envelope.gif
new file mode 100644 (file)
index 0000000..94e0b1f
Binary files /dev/null and b/_source/plugins/smiley/images/envelope.gif differ
diff --git a/_source/plugins/smiley/images/heart.gif b/_source/plugins/smiley/images/heart.gif
new file mode 100644 (file)
index 0000000..680ae2f
Binary files /dev/null and b/_source/plugins/smiley/images/heart.gif differ
diff --git a/_source/plugins/smiley/images/kiss.gif b/_source/plugins/smiley/images/kiss.gif
new file mode 100644 (file)
index 0000000..70e5255
Binary files /dev/null and b/_source/plugins/smiley/images/kiss.gif differ
diff --git a/_source/plugins/smiley/images/lightbulb.gif b/_source/plugins/smiley/images/lightbulb.gif
new file mode 100644 (file)
index 0000000..d44c2ff
Binary files /dev/null and b/_source/plugins/smiley/images/lightbulb.gif differ
diff --git a/_source/plugins/smiley/images/omg_smile.gif b/_source/plugins/smiley/images/omg_smile.gif
new file mode 100644 (file)
index 0000000..ab7ea69
Binary files /dev/null and b/_source/plugins/smiley/images/omg_smile.gif differ
diff --git a/_source/plugins/smiley/images/regular_smile.gif b/_source/plugins/smiley/images/regular_smile.gif
new file mode 100644 (file)
index 0000000..e5bc34b
Binary files /dev/null and b/_source/plugins/smiley/images/regular_smile.gif differ
diff --git a/_source/plugins/smiley/images/sad_smile.gif b/_source/plugins/smiley/images/sad_smile.gif
new file mode 100644 (file)
index 0000000..ae4cf1e
Binary files /dev/null and b/_source/plugins/smiley/images/sad_smile.gif differ
diff --git a/_source/plugins/smiley/images/shades_smile.gif b/_source/plugins/smiley/images/shades_smile.gif
new file mode 100644 (file)
index 0000000..b454017
Binary files /dev/null and b/_source/plugins/smiley/images/shades_smile.gif differ
diff --git a/_source/plugins/smiley/images/teeth_smile.gif b/_source/plugins/smiley/images/teeth_smile.gif
new file mode 100644 (file)
index 0000000..7d734d1
Binary files /dev/null and b/_source/plugins/smiley/images/teeth_smile.gif differ
diff --git a/_source/plugins/smiley/images/thumbs_down.gif b/_source/plugins/smiley/images/thumbs_down.gif
new file mode 100644 (file)
index 0000000..90b9978
Binary files /dev/null and b/_source/plugins/smiley/images/thumbs_down.gif differ
diff --git a/_source/plugins/smiley/images/thumbs_up.gif b/_source/plugins/smiley/images/thumbs_up.gif
new file mode 100644 (file)
index 0000000..b633284
Binary files /dev/null and b/_source/plugins/smiley/images/thumbs_up.gif differ
diff --git a/_source/plugins/smiley/images/tounge_smile.gif b/_source/plugins/smiley/images/tounge_smile.gif
new file mode 100644 (file)
index 0000000..b2e657f
Binary files /dev/null and b/_source/plugins/smiley/images/tounge_smile.gif differ
diff --git a/_source/plugins/smiley/images/whatchutalkingabout_smile.gif b/_source/plugins/smiley/images/whatchutalkingabout_smile.gif
new file mode 100644 (file)
index 0000000..7709882
Binary files /dev/null and b/_source/plugins/smiley/images/whatchutalkingabout_smile.gif differ
diff --git a/_source/plugins/smiley/images/wink_smile.gif b/_source/plugins/smiley/images/wink_smile.gif
new file mode 100644 (file)
index 0000000..b210295
Binary files /dev/null and b/_source/plugins/smiley/images/wink_smile.gif differ
diff --git a/_source/plugins/smiley/plugin.js b/_source/plugins/smiley/plugin.js
new file mode 100644 (file)
index 0000000..ae2523f
--- /dev/null
@@ -0,0 +1,74 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'smiley',\r
+{\r
+       requires : [ 'dialog' ],\r
+\r
+       init : function( editor )\r
+       {\r
+               editor.addCommand( 'smiley', new CKEDITOR.dialogCommand( 'smiley' ) );\r
+               editor.ui.addButton( 'Smiley',\r
+                       {\r
+                               label : editor.lang.smiley.toolbar,\r
+                               command : 'smiley'\r
+                       });\r
+               CKEDITOR.dialog.add( 'smiley', this.path + 'dialogs/smiley.js' );\r
+       }\r
+} );\r
+\r
+/**\r
+ * The base path used to build the URL for the smiley images. It must end with\r
+ * a slash.\r
+ * @type String\r
+ * @default {@link CKEDITOR.basePath} + 'plugins/smiley/images/'\r
+ * @example\r
+ * config.smiley_path = 'http://www.example.com/images/smileys/';\r
+ * @example\r
+ * config.smiley_path = '/images/smileys/';\r
+ */\r
+CKEDITOR.config.smiley_path = CKEDITOR.basePath +\r
+       'plugins/smiley/images/';\r
+\r
+/**\r
+ * The file names for the smileys to be displayed. These files must be\r
+ * contained inside the URL path defined with the\r
+ * {@link CKEDITOR.config.smiley_path} setting.\r
+ * @type Array\r
+ * @default (see example)\r
+ * @example\r
+ * // This is actually the default value.\r
+ * config.smiley_images = [\r
+ *     'regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif',\r
+ *     'embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif',\r
+ *     'devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif',\r
+ *     'broken_heart.gif','kiss.gif','envelope.gif'];\r
+ */\r
+CKEDITOR.config.smiley_images = [\r
+       'regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif',\r
+       'embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif',\r
+       'devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif',\r
+       'broken_heart.gif','kiss.gif','envelope.gif'];\r
+\r
+/**\r
+ * The description to be used for each of the smileys defined in the\r
+ * {@link CKEDITOR.config.smiley_images} setting. Each entry in this array list\r
+ * must match its relative pair in the {@link CKEDITOR.config.smiley_images}\r
+ * setting.\r
+ * @type Array\r
+ * @default (see example)\r
+ * @example\r
+ * // This is actually the default value.\r
+ * config.smiley_descriptions = [\r
+ *     ':)', ':(', ';)', ':D', ':/', ':P',\r
+ *     '', '', '', '', '', '',\r
+ *     '', ';(', '', '', '', '',\r
+ *     '', ':kiss', '' ];\r
+ */\r
+CKEDITOR.config.smiley_descriptions = [\r
+       ':)', ':(', ';)', ':D', ':/', ':P',\r
+       '', '', '', '', '', '',\r
+       '', ';(', '', '', '', '',\r
+       '', ':kiss', '' ];\r
diff --git a/_source/plugins/sourcearea/plugin.js b/_source/plugins/sourcearea/plugin.js
new file mode 100644 (file)
index 0000000..54f9d54
--- /dev/null
@@ -0,0 +1,185 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview The "sourcearea" plugin. It registers the "source" editing\r
+ *             mode, which displays the raw data being edited in the editor.\r
+ */\r
+\r
+CKEDITOR.plugins.add( 'sourcearea',\r
+{\r
+       requires : [ 'editingblock' ],\r
+\r
+       init : function( editor )\r
+       {\r
+               var sourcearea = CKEDITOR.plugins.sourcearea;\r
+\r
+               editor.on( 'editingBlockReady', function()\r
+                       {\r
+                               var textarea,\r
+                                       onResize;\r
+\r
+                               editor.addMode( 'source',\r
+                                       {\r
+                                               load : function( holderElement, data )\r
+                                               {\r
+                                                       if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 )\r
+                                                               holderElement.setStyle( 'position', 'relative' );\r
+\r
+                                                       // Create the source area <textarea>.\r
+                                                       editor.textarea = textarea = new CKEDITOR.dom.element( 'textarea' );\r
+                                                       textarea.setAttributes(\r
+                                                               {\r
+                                                                       dir : 'ltr',\r
+                                                                       tabIndex : -1\r
+                                                               });\r
+                                                       textarea.addClass( 'cke_source' );\r
+\r
+                                                       var styles =\r
+                                                       {\r
+                                                               // IE7 has overflow the <textarea> from wrapping table cell.\r
+                                                               width   : CKEDITOR.env.ie7Compat ?  '99%' : '100%',\r
+                                                               height  : '100%',\r
+                                                               resize  : 'none',\r
+                                                               outline : 'none',\r
+                                                               'text-align' : 'left'\r
+                                                       };\r
+\r
+                                                       // The textarea height/width='100%' doesn't\r
+                                                       // constraint to the 'td' in IE strick mode\r
+                                                       if ( CKEDITOR.env.ie )\r
+                                                       {\r
+                                                               if ( !CKEDITOR.env.ie8Compat )\r
+                                                               {\r
+                                                                       onResize = function()\r
+                                                                               {\r
+                                                                                       // Holder rectange size is stretched by textarea,\r
+                                                                                       // so hide it just for a moment.\r
+                                                                                       textarea.hide();\r
+                                                                                       textarea.setStyle( 'height', holderElement.$.clientHeight + 'px' );\r
+                                                                                       // When we have proper holder size, show textarea again.\r
+                                                                                       textarea.show();\r
+                                                                               };\r
+                                                                       editor.on( 'resize', onResize );\r
+                                                                       styles.height = holderElement.$.clientHeight + 'px';\r
+                                                               }\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               // By some yet unknown reason, we must stop the\r
+                                                               // mousedown propagation for the textarea,\r
+                                                               // otherwise it's not possible to place the caret\r
+                                                               // inside of it (non IE).\r
+                                                               textarea.on( 'mousedown', function( evt )\r
+                                                                       {\r
+                                                                               evt = evt.data.$;\r
+                                                                               if ( evt.stopPropagation )\r
+                                                                                       evt.stopPropagation();\r
+                                                                       } );\r
+                                                       }\r
+\r
+                                                       // Reset the holder element and append the\r
+                                                       // <textarea> to it.\r
+                                                       holderElement.setHtml( '' );\r
+                                                       holderElement.append( textarea );\r
+                                                       textarea.setStyles( styles );\r
+\r
+                                                       // The editor data "may be dirty" after this point.\r
+                                                       editor.mayBeDirty = true;\r
+\r
+                                                       // Set the <textarea> value.\r
+                                                       this.loadData( data );\r
+\r
+                                                       var keystrokeHandler = editor.keystrokeHandler;\r
+                                                       if ( keystrokeHandler )\r
+                                                               keystrokeHandler.attach( textarea );\r
+\r
+                                                       setTimeout( function()\r
+                                                       {\r
+                                                               editor.mode = 'source';\r
+                                                               editor.fire( 'mode' );\r
+                                                       },\r
+                                                       ( CKEDITOR.env.gecko || CKEDITOR.env.webkit ) ? 100 : 0 );\r
+                                               },\r
+\r
+                                               loadData : function( data )\r
+                                               {\r
+                                                       textarea.setValue( data );\r
+                                               },\r
+\r
+                                               getData : function()\r
+                                               {\r
+                                                       return textarea.getValue();\r
+                                               },\r
+\r
+                                               getSnapshotData : function()\r
+                                               {\r
+                                                       return textarea.getValue();\r
+                                               },\r
+\r
+                                               unload : function( holderElement )\r
+                                               {\r
+                                                       editor.textarea = textarea = null;\r
+\r
+                                                       if ( onResize )\r
+                                                               editor.removeListener( 'resize', onResize );\r
+\r
+                                                       if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 )\r
+                                                               holderElement.removeStyle( 'position' );\r
+                                               },\r
+\r
+                                               focus : function()\r
+                                               {\r
+                                                       textarea.focus();\r
+                                               }\r
+                                       });\r
+                       });\r
+\r
+               editor.addCommand( 'source', sourcearea.commands.source );\r
+\r
+               if ( editor.ui.addButton )\r
+               {\r
+                       editor.ui.addButton( 'Source',\r
+                               {\r
+                                       label : editor.lang.source,\r
+                                       command : 'source'\r
+                               });\r
+               }\r
+\r
+               editor.on( 'mode', function()\r
+                       {\r
+                               editor.getCommand( 'source' ).setState(\r
+                                       editor.mode == 'source' ?\r
+                                               CKEDITOR.TRISTATE_ON :\r
+                                               CKEDITOR.TRISTATE_OFF );\r
+                       });\r
+       }\r
+});\r
+\r
+/**\r
+ * Holds the definition of commands an UI elements included with the sourcearea\r
+ * plugin.\r
+ * @example\r
+ */\r
+CKEDITOR.plugins.sourcearea =\r
+{\r
+       commands :\r
+       {\r
+               source :\r
+               {\r
+                       modes : { wysiwyg:1, source:1 },\r
+\r
+                       exec : function( editor )\r
+                       {\r
+                               if ( editor.mode == 'wysiwyg' )\r
+                                       editor.fire( 'saveSnapshot' );\r
+                               editor.getCommand( 'source' ).setState( CKEDITOR.TRISTATE_DISABLED );\r
+                               editor.setMode( editor.mode == 'source' ? 'wysiwyg' : 'source' );\r
+                       },\r
+\r
+                       canUndo : false\r
+               }\r
+       }\r
+};\r
diff --git a/_source/plugins/specialchar/dialogs/specialchar.js b/_source/plugins/specialchar/dialogs/specialchar.js
new file mode 100644 (file)
index 0000000..5b6e622
--- /dev/null
@@ -0,0 +1,362 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'specialchar', function( editor )\r
+{\r
+       /**\r
+        * Simulate "this" of a dialog for non-dialog events.\r
+        * @type {CKEDITOR.dialog}\r
+        */\r
+       var dialog;\r
+       var onChoice = function( evt )\r
+       {\r
+               var target, value;\r
+               if ( evt.data )\r
+                       target = evt.data.getTarget();\r
+               else\r
+                       target = new CKEDITOR.dom.element( evt );\r
+\r
+               if ( target.getName() == 'a' && ( value = target.getChild( 0 ).getHtml() ) )\r
+               {\r
+                       target.removeClass( "cke_light_background" );\r
+                       dialog.hide();\r
+                       editor.insertHtml( value );\r
+               }\r
+       };\r
+\r
+       var onClick = CKEDITOR.tools.addFunction( onChoice );\r
+\r
+       var focusedNode;\r
+\r
+       var onFocus = function( evt, target )\r
+       {\r
+               var value;\r
+               target = target || evt.data.getTarget();\r
+\r
+               if ( target.getName() == 'span' )\r
+                       target = target.getParent();\r
+\r
+               if ( target.getName() == 'a' && ( value = target.getChild( 0 ).getHtml() ) )\r
+               {\r
+                       // Trigger blur manually if there is focused node.\r
+                       if ( focusedNode )\r
+                               onBlur( null, focusedNode );\r
+\r
+                       var htmlPreview = dialog.getContentElement( 'info', 'htmlPreview' ).getElement();\r
+\r
+                       dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( value );\r
+                       htmlPreview.setHtml( CKEDITOR.tools.htmlEncode( value ) );\r
+                       target.getParent().addClass( "cke_light_background" );\r
+\r
+                       // Memorize focused node.\r
+                       focusedNode = target;\r
+               }\r
+       };\r
+\r
+       var onBlur = function( evt, target )\r
+       {\r
+               target = target || evt.data.getTarget();\r
+\r
+               if ( target.getName() == 'span' )\r
+                       target = target.getParent();\r
+\r
+               if ( target.getName() == 'a' )\r
+               {\r
+                       dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( '&nbsp;' );\r
+                       dialog.getContentElement( 'info', 'htmlPreview' ).getElement().setHtml( '&nbsp;' );\r
+                       target.getParent().removeClass( "cke_light_background" );\r
+\r
+                       focusedNode = undefined;\r
+               }\r
+       };\r
+\r
+       var onKeydown = CKEDITOR.tools.addFunction( function( ev )\r
+       {\r
+               ev = new CKEDITOR.dom.event( ev );\r
+\r
+               // Get an Anchor element.\r
+               var element = ev.getTarget();\r
+               var relative, nodeToMove;\r
+               var keystroke = ev.getKeystroke();\r
+\r
+               switch ( keystroke )\r
+               {\r
+                       // RIGHT-ARROW\r
+                       case 39 :\r
+                               // relative is TD\r
+                               if ( ( relative = element.getParent().getNext() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( 0 );\r
+                                       if ( nodeToMove.type == 1 )\r
+                                       {\r
+                                               nodeToMove.focus();\r
+                                               onBlur( null, element );\r
+                                               onFocus( null, nodeToMove );\r
+                                       }\r
+                               }\r
+                               ev.preventDefault();\r
+                               break;\r
+                       // LEFT-ARROW\r
+                       case 37 :\r
+                               // relative is TD\r
+                               if ( ( relative = element.getParent().getPrevious() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( 0 );\r
+                                       nodeToMove.focus();\r
+                                       onBlur( null, element );\r
+                                       onFocus( null, nodeToMove );\r
+                               }\r
+                               ev.preventDefault();\r
+                               break;\r
+                       // UP-ARROW\r
+                       case 38 :\r
+                               // relative is TR\r
+                               if ( ( relative = element.getParent().getParent().getPrevious() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );\r
+                                       nodeToMove.focus();\r
+                                       onBlur( null, element );\r
+                                       onFocus( null, nodeToMove );\r
+                               }\r
+                               ev.preventDefault();\r
+                               break;\r
+                       // DOWN-ARROW\r
+                       case 40 :\r
+                               // relative is TR\r
+                               if ( ( relative = element.getParent().getParent().getNext() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( [ element.getParent().getIndex(), 0 ] );\r
+                                       if ( nodeToMove && nodeToMove.type == 1 )\r
+                                       {\r
+                                               nodeToMove.focus();\r
+                                               onBlur( null, element );\r
+                                               onFocus( null, nodeToMove );\r
+                                       }\r
+                               }\r
+                               ev.preventDefault();\r
+                               break;\r
+                       // SPACE\r
+                       // ENTER is already handled as onClick\r
+                       case 32 :\r
+                               onChoice( { data: ev } );\r
+                               ev.preventDefault();\r
+                               break;\r
+                       // TAB\r
+                       case 9 :\r
+                               // relative is TD\r
+                               if ( ( relative = element.getParent().getNext() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( 0 );\r
+                                       if ( nodeToMove.type == 1 )\r
+                                       {\r
+                                               nodeToMove.focus();\r
+                                               onBlur( null, element );\r
+                                               onFocus( null, nodeToMove );\r
+                                               ev.preventDefault( true );\r
+                                       }\r
+                                       else\r
+                                               onBlur( null, element );\r
+                               }\r
+                               // relative is TR\r
+                               else if ( ( relative = element.getParent().getParent().getNext() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( [ 0, 0 ] );\r
+                                       if ( nodeToMove && nodeToMove.type == 1 )\r
+                                       {\r
+                                               nodeToMove.focus();\r
+                                               onBlur( null, element );\r
+                                               onFocus( null, nodeToMove );\r
+                                               ev.preventDefault( true );\r
+                                       }\r
+                                       else\r
+                                               onBlur( null, element );\r
+                               }\r
+                               break;\r
+                       // SHIFT + TAB\r
+                       case CKEDITOR.SHIFT + 9 :\r
+                               // relative is TD\r
+                               if ( ( relative = element.getParent().getPrevious() ) )\r
+                               {\r
+                                       nodeToMove = relative.getChild( 0 );\r
+                                       nodeToMove.focus();\r
+                                       onBlur( null, element );\r
+                                       onFocus( null, nodeToMove );\r
+                                       ev.preventDefault( true );\r
+                               }\r
+                               // relative is TR\r
+                               else if ( ( relative = element.getParent().getParent().getPrevious() ) )\r
+                               {\r
+                                       nodeToMove = relative.getLast().getChild( 0 );\r
+                                       nodeToMove.focus();\r
+                                       onBlur( null, element );\r
+                                       onFocus( null, nodeToMove );\r
+                                       ev.preventDefault( true );\r
+                               }\r
+                               else\r
+                                       onBlur( null, element );\r
+                               break;\r
+                       default :\r
+                               // Do not stop not handled events.\r
+                               return;\r
+               }\r
+       });\r
+\r
+       return {\r
+               title : editor.lang.specialChar.title,\r
+               minWidth : 430,\r
+               minHeight : 280,\r
+               buttons : [ CKEDITOR.dialog.cancelButton ],\r
+               charColumns : 17,\r
+               chars :\r
+                       [\r
+                               '!','&quot;','#','$','%','&amp;',"'",'(',')','*','+','-','.','/',\r
+                               '0','1','2','3','4','5','6','7','8','9',':',';',\r
+                               '&lt;','=','&gt;','?','@',\r
+                               'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',\r
+                               'P','Q','R','S','T','U','V','W','X','Y','Z',\r
+                               '[',']','^','_','`',\r
+                               'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p',\r
+                               'q','r','s','t','u','v','w','x','y','z',\r
+                               '{','|','}','~','&euro;','&lsquo;','&rsquo;','&rsquo;','&ldquo;',\r
+                               '&rdquo;','&ndash;','&mdash;','&iexcl;','&cent;','&pound;',\r
+                               '&curren;','&yen;','&brvbar;','&sect;','&uml;','&copy;','&ordf;',\r
+                               '&laquo;','&not;','&reg;','&macr;','&deg;','&plusmn;','&sup2;',\r
+                               '&sup3;','&acute;','&micro;','&para;','&middot;','&cedil;',\r
+                               '&sup1;','&ordm;','&raquo;','&frac14;','&frac12;','&frac34;',\r
+                               '&iquest;','&Agrave;','&Aacute;','&Acirc;','&Atilde;','&Auml;',\r
+                               '&Aring;','&AElig;','&Ccedil;','&Egrave;','&Eacute;','&Ecirc;',\r
+                               '&Euml;','&Igrave;','&Iacute;','&Icirc;','&Iuml;','&ETH;',\r
+                               '&Ntilde;','&Ograve;','&Oacute;','&Ocirc;','&Otilde;','&Ouml;',\r
+                               '&times;','&Oslash;','&Ugrave;','&Uacute;','&Ucirc;','&Uuml;',\r
+                               '&Yacute;','&THORN;','&szlig;','&agrave;','&aacute;','&acirc;',\r
+                               '&atilde;','&auml;','&aring;','&aelig;','&ccedil;','&egrave;',\r
+                               '&eacute;','&ecirc;','&euml;','&igrave;','&iacute;','&icirc;',\r
+                               '&iuml;','&eth;','&ntilde;','&ograve;','&oacute;','&ocirc;',\r
+                               '&otilde;','&ouml;','&divide;','&oslash;','&ugrave;','&uacute;',\r
+                               '&ucirc;','&uuml;','&uuml;','&yacute;','&thorn;','&yuml;',\r
+                               '&OElig;','&oelig;','&#372;','&#374','&#373','&#375;','&sbquo;',\r
+                               '&#8219;','&bdquo;','&hellip;','&trade;','&#9658;','&bull;',\r
+                               '&rarr;','&rArr;','&hArr;','&diams;','&asymp;'\r
+                       ],\r
+               onLoad :  function()\r
+               {\r
+                       var columns = this.definition.charColumns,\r
+                               chars = this.definition.chars;\r
+\r
+                       var html = [ '<table style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">' ];\r
+\r
+                       var i = 0 ;\r
+                       while ( i < chars.length )\r
+                       {\r
+                               html.push( '<tr>' ) ;\r
+\r
+                               for( var j = 0 ; j < columns ; j++, i++ )\r
+                               {\r
+                                       if ( chars[ i ] )\r
+                                       {\r
+                                               html.push(\r
+                                                       '<td class="cke_dark_background" style="cursor: default">' +\r
+                                                       '<a href="javascript: void(0);" style="cursor: inherit; display: block; height: 1.25em; margin-top: 0.25em; text-align: center;" title="', chars[i].replace( /&/g, '&amp;' ), '"' +\r
+                                                       ' onkeydown="CKEDITOR.tools.callFunction( ' + onKeydown + ', event, this )"' +\r
+                                                       ' onclick="CKEDITOR.tools.callFunction(' + onClick + ', this); return false;"' +\r
+                                                       ' tabindex="-1">' +\r
+                                                       '<span style="margin: 0 auto;cursor: inherit">' +\r
+                                                       chars[i] +\r
+                                                       '</span></a>');\r
+                                       }\r
+                                       else\r
+                                               html.push( '<td class="cke_dark_background">&nbsp;' );\r
+\r
+                                       html.push( '</td>' );\r
+                               }\r
+                               html.push( '</tr>' );\r
+                       }\r
+\r
+                       html.push( '</tbody></table>' );\r
+\r
+                       this.getContentElement( 'info', 'charContainer' ).getElement().setHtml( html.join( '' ) );\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'info',\r
+                               label : editor.lang.common.generalTab,\r
+                               title : editor.lang.common.generalTab,\r
+                               padding : 0,\r
+                               align : 'top',\r
+                               elements : [\r
+                                       {\r
+                                               type : 'hbox',\r
+                                               align : 'top',\r
+                                               widths : [ '320px', '90px' ],\r
+                                               children :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'html',\r
+                                                               id : 'charContainer',\r
+                                                               html : '',\r
+                                                               onMouseover : onFocus,\r
+                                                               onMouseout : onBlur,\r
+                                                               focus : function()\r
+                                                               {\r
+                                                                       var firstChar = this.getElement().getChild( [0, 0, 0, 0, 0] );\r
+                                                                       setTimeout(function()\r
+                                                                       {\r
+                                                                               firstChar.focus();\r
+                                                                               onFocus( null, firstChar );\r
+                                                                       });\r
+                                                               },\r
+                                                               // Needed only for webkit.\r
+                                                               onShow : function()\r
+                                                               {\r
+                                                                       var firstChar = this.getElement().getChild( [0, 0, 0, 0, 0] );\r
+                                                                       setTimeout(function()\r
+                                                                       {\r
+                                                                               firstChar.focus();\r
+                                                                               onFocus( null, firstChar );\r
+                                                                       });\r
+                                                               },\r
+                                                               onLoad : function( event )\r
+                                                               {\r
+                                                                       dialog = event.sender;\r
+                                                               }\r
+                                                       },\r
+                                                       {\r
+                                                               type : 'hbox',\r
+                                                               align : 'top',\r
+                                                               widths : [ '100%' ],\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'vbox',\r
+                                                                               align : 'top',\r
+                                                                               children :\r
+                                                                               [\r
+                                                                                       {\r
+                                                                                               type : 'html',\r
+                                                                                               html : '<div></div>'\r
+                                                                                       },\r
+                                                                                       {\r
+                                                                                               type : 'html',\r
+                                                                                               id : 'charPreview',\r
+                                                                                               style : 'border:1px solid #eeeeee;background-color:#EAEAD1;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:\'Microsoft Sans Serif\',Arial,Helvetica,Verdana;text-align:center;',\r
+                                                                                               html : '<div>&nbsp;</div>'\r
+                                                                                       },\r
+                                                                                       {\r
+                                                                                               type : 'html',\r
+                                                                                               id : 'htmlPreview',\r
+                                                                                               style : 'border:1px solid #eeeeee;background-color:#EAEAD1;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:\'Microsoft Sans Serif\',Arial,Helvetica,Verdana;text-align:center;',\r
+                                                                                               html : '<div>&nbsp;</div>'\r
+                                                                                       }\r
+                                                                               ]\r
+                                                                       }\r
+                                                               ]\r
+                                                       }\r
+                                               ]\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+} );\r
diff --git a/_source/plugins/specialchar/plugin.js b/_source/plugins/specialchar/plugin.js
new file mode 100644 (file)
index 0000000..ff9568d
--- /dev/null
@@ -0,0 +1,29 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Special Character plugin\r
+ */\r
+\r
+CKEDITOR.plugins.add( 'specialchar',\r
+{\r
+       init : function( editor )\r
+       {\r
+               var pluginName = 'specialchar';\r
+\r
+               // Register the dialog.\r
+               CKEDITOR.dialog.add( pluginName, this.path + 'dialogs/specialchar.js' );\r
+\r
+               // Register the command.\r
+               editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName ) );\r
+\r
+               // Register the toolbar button.\r
+               editor.ui.addButton( 'SpecialChar',\r
+                       {\r
+                               label : editor.lang.specialChar.toolbar,\r
+                               command : pluginName\r
+                       });\r
+       }\r
+} );\r
diff --git a/_source/plugins/styles/plugin.js b/_source/plugins/styles/plugin.js
new file mode 100644 (file)
index 0000000..1d468ad
--- /dev/null
@@ -0,0 +1,1242 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'styles',\r
+{\r
+       requires : [ 'selection' ]\r
+});\r
+\r
+/**\r
+ * Registers a function to be called whenever a style changes its state in the\r
+ * editing area. The current state is passed to the function. The possible\r
+ * states are {@link CKEDITOR.TRISTATE_ON} and {@link CKEDITOR.TRISTATE_OFF}.\r
+ * @param {CKEDITOR.style} The style to be watched.\r
+ * @param {Function} The function to be called when the style state changes.\r
+ * @example\r
+ * // Create a style object for the &lt;b&gt; element.\r
+ * var style = new CKEDITOR.style( { element : 'b' } );\r
+ * var editor = CKEDITOR.instances.editor1;\r
+ * editor.attachStyleStateChange( style, function( state )\r
+ *     {\r
+ *         if ( state == CKEDITOR.TRISTATE_ON )\r
+ *             alert( 'The current state for the B element is ON' );\r
+ *         else\r
+ *             alert( 'The current state for the B element is OFF' );\r
+ *     });\r
+ */\r
+CKEDITOR.editor.prototype.attachStyleStateChange = function( style, callback )\r
+{\r
+       // Try to get the list of attached callbacks.\r
+       var styleStateChangeCallbacks = this._.styleStateChangeCallbacks;\r
+\r
+       // If it doesn't exist, it means this is the first call. So, let's create\r
+       // all the structure to manage the style checks and the callback calls.\r
+       if ( !styleStateChangeCallbacks )\r
+       {\r
+               // Create the callbacks array.\r
+               styleStateChangeCallbacks = this._.styleStateChangeCallbacks = [];\r
+\r
+               // Attach to the selectionChange event, so we can check the styles at\r
+               // that point.\r
+               this.on( 'selectionChange', function( ev )\r
+                       {\r
+                               // Loop throw all registered callbacks.\r
+                               for ( var i = 0 ; i < styleStateChangeCallbacks.length ; i++ )\r
+                               {\r
+                                       var callback = styleStateChangeCallbacks[ i ];\r
+\r
+                                       // Check the current state for the style defined for that\r
+                                       // callback.\r
+                                       var currentState = callback.style.checkActive( ev.data.path ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF;\r
+\r
+                                       // If the state changed since the last check.\r
+                                       if ( callback.state !== currentState )\r
+                                       {\r
+                                               // Call the callback function, passing the current\r
+                                               // state to it.\r
+                                               callback.fn.call( this, currentState );\r
+\r
+                                               // Save the current state, so it can be compared next\r
+                                               // time.\r
+                                               callback.state !== currentState;\r
+                                       }\r
+                               }\r
+                       });\r
+       }\r
+\r
+       // Save the callback info, so it can be checked on the next occurence of\r
+       // selectionChange.\r
+       styleStateChangeCallbacks.push( { style : style, fn : callback } );\r
+};\r
+\r
+CKEDITOR.STYLE_BLOCK = 1;\r
+CKEDITOR.STYLE_INLINE = 2;\r
+CKEDITOR.STYLE_OBJECT = 3;\r
+\r
+(function()\r
+{\r
+       var blockElements       = { address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 };\r
+       var objectElements      = { a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,ul:1 };\r
+\r
+       var semicolonFixRegex = /\s*(?:;\s*|$)/;\r
+\r
+       CKEDITOR.style = function( styleDefinition, variablesValues )\r
+       {\r
+               if ( variablesValues )\r
+               {\r
+                       styleDefinition = CKEDITOR.tools.clone( styleDefinition );\r
+\r
+                       replaceVariables( styleDefinition.attributes, variablesValues );\r
+                       replaceVariables( styleDefinition.styles, variablesValues );\r
+               }\r
+\r
+               var element = this.element = ( styleDefinition.element || '*' ).toLowerCase();\r
+\r
+               this.type =\r
+                       ( element == '#' || blockElements[ element ] ) ?\r
+                               CKEDITOR.STYLE_BLOCK\r
+                       : objectElements[ element ] ?\r
+                               CKEDITOR.STYLE_OBJECT\r
+                       :\r
+                               CKEDITOR.STYLE_INLINE;\r
+\r
+               this._ =\r
+               {\r
+                       definition : styleDefinition\r
+               };\r
+       };\r
+\r
+       CKEDITOR.style.prototype =\r
+       {\r
+               apply : function( document )\r
+               {\r
+                       applyStyle.call( this, document, false );\r
+               },\r
+\r
+               remove : function( document )\r
+               {\r
+                       applyStyle.call( this, document, true );\r
+               },\r
+\r
+               applyToRange : function( range )\r
+               {\r
+                       return ( this.applyToRange =\r
+                                               this.type == CKEDITOR.STYLE_INLINE ?\r
+                                                       applyInlineStyle\r
+                                               : this.type == CKEDITOR.STYLE_BLOCK ?\r
+                                                       applyBlockStyle\r
+                                               : null ).call( this, range );\r
+               },\r
+\r
+               removeFromRange : function( range )\r
+               {\r
+                       return ( this.removeFromRange =\r
+                                               this.type == CKEDITOR.STYLE_INLINE ?\r
+                                                       removeInlineStyle\r
+                                               : null ).call( this, range );\r
+               },\r
+\r
+               applyToObject : function( element )\r
+               {\r
+                       setupElement( element, this );\r
+               },\r
+\r
+               /**\r
+                * Get the style state inside an element path. Returns "true" if the\r
+                * element is active in the path.\r
+                */\r
+               checkActive : function( elementPath )\r
+               {\r
+                       switch ( this.type )\r
+                       {\r
+                               case CKEDITOR.STYLE_BLOCK :\r
+                                       return this.checkElementRemovable( elementPath.block || elementPath.blockLimit, true );\r
+\r
+                               case CKEDITOR.STYLE_INLINE :\r
+\r
+                                       var elements = elementPath.elements;\r
+\r
+                                       for ( var i = 0, element ; i < elements.length ; i++ )\r
+                                       {\r
+                                               element = elements[i];\r
+\r
+                                               if ( element == elementPath.block || element == elementPath.blockLimit )\r
+                                                       continue;\r
+\r
+                                               if ( this.checkElementRemovable( element, true ) )\r
+                                                       return true;\r
+                                       }\r
+                       }\r
+                       return false;\r
+               },\r
+\r
+               // Checks if an element, or any of its attributes, is removable by the\r
+               // current style definition.\r
+               checkElementRemovable : function( element, fullMatch )\r
+               {\r
+                       if ( !element )\r
+                               return false;\r
+\r
+                       var def = this._.definition,\r
+                               attribs;\r
+\r
+                       // If the element name is the same as the style name.\r
+                       if ( element.getName() == this.element )\r
+                       {\r
+                               // If no attributes are defined in the element.\r
+                               if ( !fullMatch && !element.hasAttributes() )\r
+                                       return true;\r
+\r
+                               attribs = getAttributesForComparison( def );\r
+\r
+                               if ( attribs._length )\r
+                               {\r
+                                       for ( var attName in attribs )\r
+                                       {\r
+                                               if ( attName == '_length' )\r
+                                                       continue;\r
+\r
+                                               var elementAttr = element.getAttribute( attName );\r
+                                               if ( attribs[attName] ==\r
+                                                        ( attName == 'style' ?\r
+                                                          normalizeCssText( elementAttr, false ) : elementAttr  ) )\r
+                                               {\r
+                                                       if ( !fullMatch )\r
+                                                               return true;\r
+                                               }\r
+                                               else if ( fullMatch )\r
+                                                               return false;\r
+                                       }\r
+                                       if( fullMatch )\r
+                                               return true;\r
+                               }\r
+                               else\r
+                                       return true;\r
+                       }\r
+\r
+                       // Check if the element can be somehow overriden.\r
+                       var override = getOverrides( this )[ element.getName() ] ;\r
+                       if ( override )\r
+                       {\r
+                               // If no attributes have been defined, remove the element.\r
+                               if ( !( attribs = override.attributes ) )\r
+                                       return true;\r
+\r
+                               for ( var i = 0 ; i < attribs.length ; i++ )\r
+                               {\r
+                                       attName = attribs[i][0];\r
+                                       var actualAttrValue = element.getAttribute( attName );\r
+                                       if ( actualAttrValue )\r
+                                       {\r
+                                               var attValue = attribs[i][1];\r
+\r
+                                               // Remove the attribute if:\r
+                                               //    - The override definition value is null;\r
+                                               //    - The override definition value is a string that\r
+                                               //      matches the attribute value exactly.\r
+                                               //    - The override definition value is a regex that\r
+                                               //      has matches in the attribute value.\r
+                                               if ( attValue === null ||\r
+                                                               ( typeof attValue == 'string' && actualAttrValue == attValue ) ||\r
+                                                               attValue.test( actualAttrValue ) )\r
+                                                       return true;\r
+                                       }\r
+                               }\r
+                       }\r
+                       return false;\r
+               }\r
+       };\r
+\r
+       // Build the cssText based on the styles definition.\r
+       CKEDITOR.style.getStyleText = function( styleDefinition )\r
+       {\r
+               // If we have already computed it, just return it.\r
+               var stylesDef = styleDefinition._ST;\r
+               if ( stylesDef )\r
+                       return stylesDef;\r
+\r
+               stylesDef = styleDefinition.styles;\r
+\r
+               // Builds the StyleText.\r
+\r
+               var stylesText = ( styleDefinition.attributes && styleDefinition.attributes[ 'style' ] ) || '';\r
+\r
+               if ( stylesText.length )\r
+                       stylesText = stylesText.replace( semicolonFixRegex, ';' );\r
+\r
+               for ( var style in stylesDef )\r
+                       stylesText += style + ':' + stylesDef[ style ] + ';';\r
+\r
+               // Browsers make some changes to the style when applying them. So, here\r
+               // we normalize it to the browser format.\r
+               if ( stylesText.length )\r
+                       stylesText = normalizeCssText( stylesText );\r
+\r
+               // Return it, saving it to the next request.\r
+               return ( styleDefinition._ST = stylesText );\r
+       };\r
+\r
+       function applyInlineStyle( range )\r
+       {\r
+               var document = range.document;\r
+\r
+               if ( range.collapsed )\r
+               {\r
+                       // Create the element to be inserted in the DOM.\r
+                       var collapsedElement = getElement( this, document );\r
+\r
+                       // Insert the empty element into the DOM at the range position.\r
+                       range.insertNode( collapsedElement );\r
+\r
+                       // Place the selection right inside the empty element.\r
+                       range.moveToPosition( collapsedElement, CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       return;\r
+               }\r
+\r
+               var elementName = this.element;\r
+               var def = this._.definition;\r
+               var isUnknownElement;\r
+\r
+               // Get the DTD definition for the element. Defaults to "span".\r
+               var dtd = CKEDITOR.dtd[ elementName ] || ( isUnknownElement = true, CKEDITOR.dtd.span );\r
+\r
+               // Bookmark the range so we can re-select it after processing.\r
+               var bookmark = range.createBookmark();\r
+\r
+               // Expand the range.\r
+               range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+               range.trim();\r
+\r
+               // Get the first node to be processed and the last, which concludes the\r
+               // processing.\r
+               var boundaryNodes = range.getBoundaryNodes();\r
+               var firstNode = boundaryNodes.startNode;\r
+               var lastNode = boundaryNodes.endNode.getNextSourceNode( true );\r
+\r
+               // Probably the document end is reached, we need a marker node.\r
+               if ( !lastNode )\r
+               {\r
+                               var marker;\r
+                               lastNode = marker = document.createText( '' );\r
+                               lastNode.insertAfter( range.endContainer );\r
+               }\r
+               // The detection algorithm below skips the contents inside bookmark nodes, so\r
+               // we'll need to make sure lastNode isn't the &nbsp; inside a bookmark node.\r
+               var lastParent = lastNode.getParent();\r
+               if ( lastParent && lastParent.getAttribute( '_fck_bookmark' ) )\r
+                       lastNode = lastParent;\r
+\r
+               if ( lastNode.equals( firstNode ) )\r
+               {\r
+                       // If the last node is the same as the the first one, we must move\r
+                       // it to the next one, otherwise the first one will not be\r
+                       // processed.\r
+                       lastNode = lastNode.getNextSourceNode( true );\r
+\r
+                       // It may happen that there are no more nodes after it (the end of\r
+                       // the document), so we must add something there to make our code\r
+                       // simpler.\r
+                       if ( !lastNode )\r
+                       {\r
+                               lastNode = marker = document.createText( '' );\r
+                               lastNode.insertAfter( firstNode );\r
+                       }\r
+               }\r
+\r
+               var currentNode = firstNode;\r
+\r
+               var styleRange;\r
+\r
+               // Indicates that that some useful inline content has been found, so\r
+               // the style should be applied.\r
+               var hasContents;\r
+\r
+               while ( currentNode )\r
+               {\r
+                       var applyStyle = false;\r
+\r
+                       if ( currentNode.equals( lastNode ) )\r
+                       {\r
+                               currentNode = null;\r
+                               applyStyle = true;\r
+                       }\r
+                       else\r
+                       {\r
+                               var nodeType = currentNode.type;\r
+                               var nodeName = nodeType == CKEDITOR.NODE_ELEMENT ? currentNode.getName() : null;\r
+\r
+                               if ( nodeName && currentNode.getAttribute( '_fck_bookmark' ) )\r
+                               {\r
+                                       currentNode = currentNode.getNextSourceNode( true );\r
+                                       continue;\r
+                               }\r
+\r
+                               // Check if the current node can be a child of the style element.\r
+                               if ( !nodeName || ( dtd[ nodeName ] && ( currentNode.getPosition( lastNode ) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED ) ) )\r
+                               {\r
+                                       var currentParent = currentNode.getParent();\r
+\r
+                                       // Check if the style element can be a child of the current\r
+                                       // node parent or if the element is not defined in the DTD.\r
+                                       if ( currentParent && ( ( currentParent.getDtd() || CKEDITOR.dtd.span )[ elementName ] || isUnknownElement ) )\r
+                                       {\r
+                                               // This node will be part of our range, so if it has not\r
+                                               // been started, place its start right before the node.\r
+                                               // In the case of an element node, it will be included\r
+                                               // only if it is entirely inside the range.\r
+                                               if ( !styleRange && ( !nodeName || !CKEDITOR.dtd.$removeEmpty[ nodeName ] || ( currentNode.getPosition( lastNode ) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED ) ) )\r
+                                               {\r
+                                                       styleRange = new CKEDITOR.dom.range( document );\r
+                                                       styleRange.setStartBefore( currentNode );\r
+                                               }\r
+\r
+                                               // Non element nodes, or empty elements can be added\r
+                                               // completely to the range.\r
+                                               if ( nodeType == CKEDITOR.NODE_TEXT || ( nodeType == CKEDITOR.NODE_ELEMENT && !currentNode.getChildCount() ) )\r
+                                               {\r
+                                                       var includedNode = currentNode;\r
+                                                       var parentNode;\r
+\r
+                                                       // This node is about to be included completelly, but,\r
+                                                       // if this is the last node in its parent, we must also\r
+                                                       // check if the parent itself can be added completelly\r
+                                                       // to the range.\r
+                                                       while ( !includedNode.$.nextSibling\r
+                                                               && ( parentNode = includedNode.getParent(), dtd[ parentNode.getName() ] )\r
+                                                               && ( parentNode.getPosition( firstNode ) | CKEDITOR.POSITION_FOLLOWING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_FOLLOWING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED ) )\r
+                                                       {\r
+                                                               includedNode = parentNode;\r
+                                                       }\r
+\r
+                                                       styleRange.setEndAfter( includedNode );\r
+\r
+                                                       // If the included node still is the last node in its\r
+                                                       // parent, it means that the parent can't be included\r
+                                                       // in this style DTD, so apply the style immediately.\r
+                                                       if ( !includedNode.$.nextSibling )\r
+                                                               applyStyle = true;\r
+\r
+                                                       if ( !hasContents )\r
+                                                               hasContents = ( nodeType != CKEDITOR.NODE_TEXT || (/[^\s\ufeff]/).test( currentNode.getText() ) );\r
+                                               }\r
+                                       }\r
+                                       else\r
+                                               applyStyle = true;\r
+                               }\r
+                               else\r
+                                       applyStyle = true;\r
+\r
+                               // Get the next node to be processed.\r
+                               currentNode = currentNode.getNextSourceNode();\r
+                       }\r
+\r
+                       // Apply the style if we have something to which apply it.\r
+                       if ( applyStyle && hasContents && styleRange && !styleRange.collapsed )\r
+                       {\r
+                               // Build the style element, based on the style object definition.\r
+                               var styleNode = getElement( this, document );\r
+\r
+                               // Get the element that holds the entire range.\r
+                               var parent = styleRange.getCommonAncestor();\r
+\r
+                               // Loop through the parents, removing the redundant attributes\r
+                               // from the element to be applied.\r
+                               while ( styleNode && parent )\r
+                               {\r
+                                       if ( parent.getName() == elementName )\r
+                                       {\r
+                                               for ( var attName in def.attributes )\r
+                                               {\r
+                                                       if ( styleNode.getAttribute( attName ) == parent.getAttribute( attName ) )\r
+                                                               styleNode.removeAttribute( attName );\r
+                                               }\r
+\r
+                                               for ( var styleName in def.styles )\r
+                                               {\r
+                                                       if ( styleNode.getStyle( styleName ) == parent.getStyle( styleName ) )\r
+                                                               styleNode.removeStyle( styleName );\r
+                                               }\r
+\r
+                                               if ( !styleNode.hasAttributes() )\r
+                                               {\r
+                                                       styleNode = null;\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+\r
+                                       parent = parent.getParent();\r
+                               }\r
+\r
+                               if ( styleNode )\r
+                               {\r
+                                       // Move the contents of the range to the style element.\r
+                                       styleRange.extractContents().appendTo( styleNode );\r
+\r
+                                       // Here we do some cleanup, removing all duplicated\r
+                                       // elements from the style element.\r
+                                       removeFromInsideElement( this, styleNode );\r
+\r
+                                       // Insert it into the range position (it is collapsed after\r
+                                       // extractContents.\r
+                                       styleRange.insertNode( styleNode );\r
+\r
+                                       // Let's merge our new style with its neighbors, if possible.\r
+                                       mergeSiblings( styleNode );\r
+\r
+                                       // As the style system breaks text nodes constantly, let's normalize\r
+                                       // things for performance.\r
+                                       // With IE, some paragraphs get broken when calling normalize()\r
+                                       // repeatedly. Also, for IE, we must normalize body, not documentElement.\r
+                                       // IE is also known for having a "crash effect" with normalize().\r
+                                       // We should try to normalize with IE too in some way, somewhere.\r
+                                       if ( !CKEDITOR.env.ie )\r
+                                               styleNode.$.normalize();\r
+                               }\r
+\r
+                               // Style applied, let's release the range, so it gets\r
+                               // re-initialization in the next loop.\r
+                               styleRange = null;\r
+                       }\r
+               }\r
+\r
+               // Remove the temporary marking node.(#4111)\r
+               marker && marker.remove();\r
+               range.moveToBookmark( bookmark );\r
+       }\r
+\r
+       function removeInlineStyle( range )\r
+       {\r
+               /*\r
+                * Make sure our range has included all "collpased" parent inline nodes so\r
+                * that our operation logic can be simpler.\r
+                */\r
+               range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+               var bookmark = range.createBookmark(),\r
+                       startNode = bookmark.startNode;\r
+\r
+               if ( range.collapsed )\r
+               {\r
+\r
+                       var startPath = new CKEDITOR.dom.elementPath( startNode.getParent() ),\r
+                               // The topmost element in elementspatch which we should jump out of.\r
+                               boundaryElement;\r
+\r
+\r
+                       for ( var i = 0, element ; i < startPath.elements.length\r
+                                       && ( element = startPath.elements[i] ) ; i++ )\r
+                       {\r
+                               /*\r
+                                * 1. If it's collaped inside text nodes, try to remove the style from the whole element.\r
+                                *\r
+                                * 2. Otherwise if it's collapsed on element boundaries, moving the selection\r
+                                *  outside the styles instead of removing the whole tag,\r
+                                *  also make sure other inner styles were well preserverd.(#3309)\r
+                                */\r
+                               if ( element == startPath.block || element == startPath.blockLimit )\r
+                                       break;\r
+\r
+                               if ( this.checkElementRemovable( element ) )\r
+                               {\r
+                                       var endOfElement = range.checkBoundaryOfElement( element, CKEDITOR.END ),\r
+                                                       startOfElement = !endOfElement && range.checkBoundaryOfElement( element, CKEDITOR.START );\r
+                                       if ( startOfElement || endOfElement )\r
+                                       {\r
+                                               boundaryElement = element;\r
+                                               boundaryElement.match = startOfElement ? 'start' : 'end';\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               /*\r
+                                                * Before removing the style node, there may be a sibling to the style node\r
+                                                * that's exactly the same to the one to be removed. To the user, it makes\r
+                                                * no difference that they're separate entities in the DOM tree. So, merge\r
+                                                * them before removal.\r
+                                                */\r
+                                               mergeSiblings( element );\r
+                                               removeFromElement( this, element );\r
+\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       // Re-create the style tree after/before the boundary element,\r
+                       // the replication start from bookmark start node to define the\r
+                       // new range.\r
+                       if ( boundaryElement )\r
+                       {\r
+                               var clonedElement = startNode;\r
+                               for ( i = 0 ;; i++ )\r
+                               {\r
+                                       var newElement = startPath.elements[ i ];\r
+                                       if ( newElement.equals( boundaryElement ) )\r
+                                               break;\r
+                                       // Avoid copying any matched element.\r
+                                       else if( newElement.match )\r
+                                               continue;\r
+                                       else\r
+                                               newElement = newElement.clone();\r
+                                       newElement.append( clonedElement );\r
+                                       clonedElement = newElement;\r
+                               }\r
+                               clonedElement[ boundaryElement.match == 'start' ?\r
+                                                       'insertBefore' : 'insertAfter' ]( boundaryElement );\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       /*\r
+                        * Now our range isn't collapsed. Lets walk from the start node to the end\r
+                        * node via DFS and remove the styles one-by-one.\r
+                        */\r
+                       var endNode = bookmark.endNode,\r
+                               me = this;\r
+\r
+                       /*\r
+                        * Find out the style ancestor that needs to be broken down at startNode\r
+                        * and endNode.\r
+                        */\r
+                       function breakNodes()\r
+                       {\r
+                               var startPath = new CKEDITOR.dom.elementPath( startNode.getParent() ),\r
+                                       endPath = new CKEDITOR.dom.elementPath( endNode.getParent() ),\r
+                                       breakStart = null,\r
+                                       breakEnd = null;\r
+                               for ( var i = 0 ; i < startPath.elements.length ; i++ )\r
+                               {\r
+                                       var element = startPath.elements[ i ];\r
+\r
+                                       if ( element == startPath.block || element == startPath.blockLimit )\r
+                                               break;\r
+\r
+                                       if ( me.checkElementRemovable( element ) )\r
+                                               breakStart = element;\r
+                               }\r
+                               for ( i = 0 ; i < endPath.elements.length ; i++ )\r
+                               {\r
+                                       element = endPath.elements[ i ];\r
+\r
+                                       if ( element == endPath.block || element == endPath.blockLimit )\r
+                                               break;\r
+\r
+                                       if ( me.checkElementRemovable( element ) )\r
+                                               breakEnd = element;\r
+                               }\r
+\r
+                               if ( breakEnd )\r
+                                       endNode.breakParent( breakEnd );\r
+                               if ( breakStart )\r
+                                       startNode.breakParent( breakStart );\r
+                       }\r
+                       breakNodes();\r
+\r
+                       // Now, do the DFS walk.\r
+                       var currentNode = startNode.getNext();\r
+                       while ( !currentNode.equals( endNode ) )\r
+                       {\r
+                               /*\r
+                                * Need to get the next node first because removeFromElement() can remove\r
+                                * the current node from DOM tree.\r
+                                */\r
+                               var nextNode = currentNode.getNextSourceNode();\r
+                               if ( currentNode.type == CKEDITOR.NODE_ELEMENT && this.checkElementRemovable( currentNode ) )\r
+                               {\r
+                                       // Remove style from element or overriding element.\r
+                                       if( currentNode.getName() == this.element )\r
+                                               removeFromElement( this, currentNode );\r
+                                       else\r
+                                               removeOverrides( currentNode, getOverrides( this )[ currentNode.getName() ] );\r
+\r
+                                       /*\r
+                                        * removeFromElement() may have merged the next node with something before\r
+                                        * the startNode via mergeSiblings(). In that case, the nextNode would\r
+                                        * contain startNode and we'll have to call breakNodes() again and also\r
+                                        * reassign the nextNode to something after startNode.\r
+                                        */\r
+                                       if ( nextNode.type == CKEDITOR.NODE_ELEMENT && nextNode.contains( startNode ) )\r
+                                       {\r
+                                               breakNodes();\r
+                                               nextNode = startNode.getNext();\r
+                                       }\r
+                               }\r
+                               currentNode = nextNode;\r
+                       }\r
+               }\r
+\r
+               range.moveToBookmark( bookmark );\r
+}\r
+\r
+       function applyBlockStyle( range )\r
+       {\r
+               // Serializible bookmarks is needed here since\r
+               // elements may be merged.\r
+               var bookmark = range.createBookmark( true );\r
+\r
+               var iterator = range.createIterator();\r
+               iterator.enforceRealBlocks = true;\r
+\r
+               var block;\r
+               var doc = range.document;\r
+               var previousPreBlock;\r
+\r
+               while( ( block = iterator.getNextParagraph() ) )                // Only one =\r
+               {\r
+                       var newBlock = getElement( this, doc );\r
+                       replaceBlock( block, newBlock );\r
+               }\r
+\r
+               range.moveToBookmark( bookmark );\r
+       }\r
+\r
+       // Replace the original block with new one, with special treatment\r
+       // for <pre> blocks to make sure content format is well preserved, and merging/splitting adjacent\r
+       // when necessary.(#3188)\r
+       function replaceBlock( block, newBlock )\r
+       {\r
+               var newBlockIsPre       = newBlock.is( 'pre' );\r
+               var blockIsPre          = block.is( 'pre' );\r
+\r
+               var isToPre     = newBlockIsPre && !blockIsPre;\r
+               var isFromPre   = !newBlockIsPre && blockIsPre;\r
+\r
+               if ( isToPre )\r
+                       newBlock = toPre( block, newBlock );\r
+               else if ( isFromPre )\r
+                       // Split big <pre> into pieces before start to convert.\r
+                       newBlock = fromPres( splitIntoPres( block ), newBlock );\r
+               else\r
+                       block.moveChildren( newBlock );\r
+\r
+               newBlock.replace( block );\r
+\r
+               if ( newBlockIsPre )\r
+               {\r
+                       // Merge previous <pre> blocks.\r
+                       mergePre( newBlock );\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Merge a <pre> block with a previous sibling if available.\r
+        */\r
+       function mergePre( preBlock )\r
+       {\r
+               var previousBlock;\r
+               if ( !( ( previousBlock = preBlock.getPreviousSourceNode( true, CKEDITOR.NODE_ELEMENT ) )\r
+                                && previousBlock.is\r
+                                && previousBlock.is( 'pre') ) )\r
+                       return;\r
+\r
+               // Merge the previous <pre> block contents into the current <pre>\r
+               // block.\r
+               //\r
+               // Another thing to be careful here is that currentBlock might contain\r
+               // a '\n' at the beginning, and previousBlock might contain a '\n'\r
+               // towards the end. These new lines are not normally displayed but they\r
+               // become visible after merging.\r
+               var mergedHtml = replace( previousBlock.getHtml(), /\n$/, '' ) + '\n\n' +\r
+                               replace( preBlock.getHtml(), /^\n/, '' ) ;\r
+\r
+               // Krugle: IE normalizes innerHTML from <pre>, breaking whitespaces.\r
+               if ( CKEDITOR.env.ie )\r
+                       preBlock.$.outerHTML = '<pre>' + mergedHtml + '</pre>';\r
+               else\r
+                       preBlock.setHtml( mergedHtml );\r
+\r
+               previousBlock.remove();\r
+       }\r
+\r
+       /**\r
+        * Split into multiple <pre> blocks separated by double line-break.\r
+        * @param preBlock\r
+        */\r
+       function splitIntoPres( preBlock )\r
+       {\r
+               // Exclude the ones at header OR at tail,\r
+               // and ignore bookmark content between them.\r
+               var duoBrRegex = /(\S\s*)\n(?:\s|(<span[^>]+_fck_bookmark.*?\/span>))*\n(?!$)/gi,\r
+                       blockName = preBlock.getName(),\r
+                       splitedHtml = replace( preBlock.getOuterHtml(),\r
+                               duoBrRegex,\r
+                               function( match, charBefore, bookmark )\r
+                               {\r
+                                 return charBefore + '</pre>' + bookmark + '<pre>';\r
+                               } );\r
+\r
+               var pres = [];\r
+               splitedHtml.replace( /<pre>([\s\S]*?)<\/pre>/gi, function( match, preContent ){\r
+                       pres.push( preContent );\r
+               } );\r
+               return pres;\r
+       }\r
+\r
+       // Wrapper function of String::replace without considering of head/tail bookmarks nodes.\r
+       function replace( str, regexp, replacement )\r
+       {\r
+               var headBookmark = '',\r
+                       tailBookmark = '';\r
+\r
+               str = str.replace( /(^<span[^>]+_fck_bookmark.*?\/span>)|(<span[^>]+_fck_bookmark.*?\/span>$)/gi,\r
+                       function( str, m1, m2 ){\r
+                                       m1 && ( headBookmark = m1 );\r
+                                       m2 && ( tailBookmark = m2 );\r
+                               return '';\r
+                       } );\r
+               return headBookmark + str.replace( regexp, replacement ) + tailBookmark;\r
+       }\r
+       /**\r
+        * Converting a list of <pre> into blocks with format well preserved.\r
+        */\r
+       function fromPres( preHtmls, newBlock )\r
+       {\r
+               var docFrag = new CKEDITOR.dom.documentFragment( newBlock.getDocument() );\r
+               for ( var i = 0 ; i < preHtmls.length ; i++ )\r
+               {\r
+                       var blockHtml = preHtmls[ i ];\r
+\r
+                       // 1. Trim the first and last line-breaks immediately after and before <pre>,\r
+                       // they're not visible.\r
+                        blockHtml =  blockHtml.replace( /(\r\n|\r)/g, '\n' ) ;\r
+                        blockHtml = replace(  blockHtml, /^[ \t]*\n/, '' ) ;\r
+                        blockHtml = replace(  blockHtml, /\n$/, '' ) ;\r
+                       // 2. Convert spaces or tabs at the beginning or at the end to &nbsp;\r
+                        blockHtml = replace(  blockHtml, /^[ \t]+|[ \t]+$/g, function( match, offset, s )\r
+                                       {\r
+                                               if ( match.length == 1 )        // one space, preserve it\r
+                                                       return '&nbsp;' ;\r
+                                               else if ( !offset )             // beginning of block\r
+                                                       return CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 ) + ' ';\r
+                                               else                            // end of block\r
+                                                       return ' ' + CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 );\r
+                                       } ) ;\r
+\r
+                       // 3. Convert \n to <BR>.\r
+                       // 4. Convert contiguous (i.e. non-singular) spaces or tabs to &nbsp;\r
+                        blockHtml =  blockHtml.replace( /\n/g, '<br>' ) ;\r
+                        blockHtml =  blockHtml.replace( /[ \t]{2,}/g,\r
+                                       function ( match )\r
+                                       {\r
+                                               return CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 ) + ' ' ;\r
+                                       } ) ;\r
+\r
+                       var newBlockClone = newBlock.clone();\r
+                       newBlockClone.setHtml(  blockHtml );\r
+                       docFrag.append( newBlockClone );\r
+               }\r
+               return docFrag;\r
+       }\r
+\r
+       /**\r
+        * Converting from a non-PRE block to a PRE block in formatting operations.\r
+        */\r
+       function toPre( block, newBlock )\r
+       {\r
+               // First trim the block content.\r
+               var preHtml = block.getHtml();\r
+\r
+               // 1. Trim head/tail spaces, they're not visible.\r
+               preHtml = replace( preHtml, /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g, '' );\r
+               // 2. Delete ANSI whitespaces immediately before and after <BR> because\r
+               //    they are not visible.\r
+               preHtml = preHtml.replace( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi, '$1' );\r
+               // 3. Compress other ANSI whitespaces since they're only visible as one\r
+               //    single space previously.\r
+               // 4. Convert &nbsp; to spaces since &nbsp; is no longer needed in <PRE>.\r
+               preHtml = preHtml.replace( /([ \t\n\r]+|&nbsp;)/g, ' ' );\r
+               // 5. Convert any <BR /> to \n. This must not be done earlier because\r
+               //    the \n would then get compressed.\r
+               preHtml = preHtml.replace( /<br\b[^>]*>/gi, '\n' );\r
+\r
+               // Krugle: IE normalizes innerHTML to <pre>, breaking whitespaces.\r
+               if ( CKEDITOR.env.ie )\r
+               {\r
+                       var temp = block.getDocument().createElement( 'div' );\r
+                       temp.append( newBlock );\r
+                       newBlock.$.outerHTML =  '<pre>' + preHtml + '</pre>';\r
+                       newBlock = temp.getFirst().remove();\r
+               }\r
+               else\r
+                       newBlock.setHtml( preHtml );\r
+\r
+               return newBlock;\r
+       }\r
+\r
+       // Removes a style from an element itself, don't care about its subtree.\r
+       function removeFromElement( style, element )\r
+       {\r
+               var def = style._.definition,\r
+                       attributes = def.attributes,\r
+                       styles = def.styles,\r
+                       overrides = getOverrides( style );\r
+\r
+               function removeAttrs()\r
+               {\r
+                       for ( var attName in attributes )\r
+                       {\r
+                               // The 'class' element value must match (#1318).\r
+                               if ( attName == 'class' && element.getAttribute( attName ) != attributes[ attName ] )\r
+                                       continue;\r
+                               element.removeAttribute( attName );\r
+                       }\r
+               }\r
+\r
+               // Remove definition attributes/style from the elemnt.\r
+               removeAttrs();\r
+               for ( var styleName in styles )\r
+                       element.removeStyle( styleName );\r
+\r
+               // Now remove override styles on the element.\r
+               attributes = overrides[ element.getName() ];\r
+               if( attributes )\r
+                       removeAttrs();\r
+               removeNoAttribsElement( element );\r
+       }\r
+\r
+       // Removes a style from inside an element.\r
+       function removeFromInsideElement( style, element )\r
+       {\r
+               var def = style._.definition,\r
+                       attribs = def.attributes,\r
+                       styles = def.styles,\r
+                       overrides = getOverrides( style );\r
+\r
+               var innerElements = element.getElementsByTag( style.element );\r
+\r
+               for ( var i = innerElements.count(); --i >= 0 ; )\r
+                       removeFromElement( style,  innerElements.getItem( i ) );\r
+\r
+               // Now remove any other element with different name that is\r
+               // defined to be overriden.\r
+               for ( var overrideElement in overrides )\r
+               {\r
+                       if ( overrideElement != style.element )\r
+                       {\r
+                               innerElements = element.getElementsByTag( overrideElement ) ;\r
+                               for ( i = innerElements.count() - 1 ; i >= 0 ; i-- )\r
+                               {\r
+                                       var innerElement = innerElements.getItem( i );\r
+                                       removeOverrides( innerElement, overrides[ overrideElement ] ) ;\r
+                               }\r
+                       }\r
+               }\r
+\r
+       }\r
+\r
+       /**\r
+        *  Remove overriding styles/attributes from the specific element.\r
+        *  Note: Remove the element if no attributes remain.\r
+        * @param {Object} element\r
+        * @param {Object} overrides\r
+        */\r
+       function removeOverrides( element, overrides )\r
+       {\r
+               var attributes = overrides && overrides.attributes ;\r
+\r
+               if ( attributes )\r
+               {\r
+                       for ( var i = 0 ; i < attributes.length ; i++ )\r
+                       {\r
+                               var attName = attributes[i][0], actualAttrValue ;\r
+\r
+                               if ( ( actualAttrValue = element.getAttribute( attName ) ) )\r
+                               {\r
+                                       var attValue = attributes[i][1] ;\r
+\r
+                                       // Remove the attribute if:\r
+                                       //    - The override definition value is null ;\r
+                                       //    - The override definition valie is a string that\r
+                                       //      matches the attribute value exactly.\r
+                                       //    - The override definition value is a regex that\r
+                                       //      has matches in the attribute value.\r
+                                       if ( attValue === null ||\r
+                                                       ( attValue.test && attValue.test( actualAttrValue ) ) ||\r
+                                                       ( typeof attValue == 'string' && actualAttrValue == attValue ) )\r
+                                               element.removeAttribute( attName ) ;\r
+                               }\r
+                       }\r
+               }\r
+\r
+               removeNoAttribsElement( element );\r
+       }\r
+\r
+       // If the element has no more attributes, remove it.\r
+       function removeNoAttribsElement( element )\r
+       {\r
+               // If no more attributes remained in the element, remove it,\r
+               // leaving its children.\r
+               if ( !element.hasAttributes() )\r
+               {\r
+                       // Removing elements may open points where merging is possible,\r
+                       // so let's cache the first and last nodes for later checking.\r
+                       var firstChild  = element.getFirst();\r
+                       var lastChild   = element.getLast();\r
+\r
+                       element.remove( true );\r
+\r
+                       if ( firstChild )\r
+                       {\r
+                               // Check the cached nodes for merging.\r
+                               mergeSiblings( firstChild );\r
+\r
+                               if ( lastChild && !firstChild.equals( lastChild ) )\r
+                                       mergeSiblings( lastChild );\r
+                       }\r
+               }\r
+       }\r
+\r
+       function mergeSiblings( element )\r
+       {\r
+               if ( !element || element.type != CKEDITOR.NODE_ELEMENT || !CKEDITOR.dtd.$removeEmpty[ element.getName() ] )\r
+                       return;\r
+\r
+               mergeElements( element, element.getNext(), true );\r
+               mergeElements( element, element.getPrevious() );\r
+       }\r
+\r
+       function mergeElements( element, sibling, isNext )\r
+       {\r
+               if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT )\r
+               {\r
+                       var hasBookmark = sibling.getAttribute( '_fck_bookmark' );\r
+\r
+                       if ( hasBookmark )\r
+                               sibling = isNext ? sibling.getNext() : sibling.getPrevious();\r
+\r
+                       if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT && element.isIdentical( sibling ) )\r
+                       {\r
+                               // Save the last child to be checked too, to merge things like\r
+                               // <b><i></i></b><b><i></i></b> => <b><i></i></b>\r
+                               var innerSibling = isNext ? element.getLast() : element.getFirst();\r
+\r
+                               if ( hasBookmark )\r
+                                       ( isNext ? sibling.getPrevious() : sibling.getNext() ).move( element, !isNext );\r
+\r
+                               sibling.moveChildren( element, !isNext );\r
+                               sibling.remove();\r
+\r
+                               // Now check the last inner child (see two comments above).\r
+                               if ( innerSibling )\r
+                                       mergeSiblings( innerSibling );\r
+                       }\r
+               }\r
+       }\r
+\r
+       function getElement( style, targetDocument )\r
+       {\r
+               var el;\r
+\r
+               var def = style._.definition;\r
+\r
+               var elementName = style.element;\r
+\r
+               // The "*" element name will always be a span for this function.\r
+               if ( elementName == '*' )\r
+                       elementName = 'span';\r
+\r
+               // Create the element.\r
+               el = new CKEDITOR.dom.element( elementName, targetDocument );\r
+\r
+               return setupElement( el, style );\r
+       }\r
+\r
+       function setupElement( el, style )\r
+       {\r
+               var def = style._.definition;\r
+               var attributes = def.attributes;\r
+               var styles = CKEDITOR.style.getStyleText( def );\r
+\r
+               // Assign all defined attributes.\r
+               if ( attributes )\r
+               {\r
+                       for ( var att in attributes )\r
+                       {\r
+                               el.setAttribute( att, attributes[ att ] );\r
+                       }\r
+               }\r
+\r
+               // Assign all defined styles.\r
+               if ( styles )\r
+                       el.setAttribute( 'style', styles );\r
+\r
+               return el;\r
+       }\r
+\r
+       var varRegex = /#\((.+?)\)/g;\r
+       function replaceVariables( list, variablesValues )\r
+       {\r
+               for ( var item in list )\r
+               {\r
+                       list[ item ] = list[ item ].replace( varRegex, function( match, varName )\r
+                               {\r
+                                       return variablesValues[ varName ];\r
+                               });\r
+               }\r
+       }\r
+\r
+\r
+       // Returns an object that can be used for style matching comparison.\r
+       // Attributes names and values are all lowercased, and the styles get\r
+       // merged with the style attribute.\r
+       function getAttributesForComparison( styleDefinition )\r
+       {\r
+               // If we have already computed it, just return it.\r
+               var attribs = styleDefinition._AC;\r
+               if ( attribs )\r
+                       return attribs;\r
+\r
+               attribs = {};\r
+\r
+               var length = 0;\r
+\r
+               // Loop through all defined attributes.\r
+               var styleAttribs = styleDefinition.attributes;\r
+               if ( styleAttribs )\r
+               {\r
+                       for ( var styleAtt in styleAttribs )\r
+                       {\r
+                               length++;\r
+                               attribs[ styleAtt ] = styleAttribs[ styleAtt ];\r
+                       }\r
+               }\r
+\r
+               // Includes the style definitions.\r
+               var styleText = CKEDITOR.style.getStyleText( styleDefinition );\r
+               if ( styleText )\r
+               {\r
+                       if ( !attribs[ 'style' ] )\r
+                               length++;\r
+                       attribs[ 'style' ] = styleText;\r
+               }\r
+\r
+               // Appends the "length" information to the object.\r
+               attribs._length = length;\r
+\r
+               // Return it, saving it to the next request.\r
+               return ( styleDefinition._AC = attribs );\r
+       }\r
+\r
+       /**\r
+        * Get the the collection used to compare the elements and attributes,\r
+        * defined in this style overrides, with other element. All information in\r
+        * it is lowercased.\r
+        * @param {CKEDITOR.style} style\r
+        */\r
+       function getOverrides( style )\r
+       {\r
+               if( style._.overrides )\r
+                       return style._.overrides;\r
+\r
+               var overrides = ( style._.overrides = {} ),\r
+                       definition = style._.definition.overrides;\r
+\r
+               if ( definition )\r
+               {\r
+                       // The override description can be a string, object or array.\r
+                       // Internally, well handle arrays only, so transform it if needed.\r
+                       if ( !CKEDITOR.tools.isArray( definition ) )\r
+                               definition = [ definition ];\r
+\r
+                       // Loop through all override definitions.\r
+                       for ( var i = 0 ; i < definition.length ; i++ )\r
+                       {\r
+                               var override = definition[i];\r
+                               var elementName;\r
+                               var overrideEl;\r
+                               var attrs;\r
+\r
+                               // If can be a string with the element name.\r
+                               if ( typeof override == 'string' )\r
+                                       elementName = override.toLowerCase();\r
+                               // Or an object.\r
+                               else\r
+                               {\r
+                                       elementName = override.element ? override.element.toLowerCase() : style.element;\r
+                                       attrs = override.attributes;\r
+                               }\r
+\r
+                               // We can have more than one override definition for the same\r
+                               // element name, so we attempt to simply append information to\r
+                               // it if it already exists.\r
+                               overrideEl = overrides[ elementName ] || ( overrides[ elementName ] = {} );\r
+\r
+                               if ( attrs )\r
+                               {\r
+                                       // The returning attributes list is an array, because we\r
+                                       // could have different override definitions for the same\r
+                                       // attribute name.\r
+                                       var overrideAttrs = ( overrideEl.attributes = overrideEl.attributes || new Array() );\r
+                                       for ( var attName in attrs )\r
+                                       {\r
+                                               // Each item in the attributes array is also an array,\r
+                                               // where [0] is the attribute name and [1] is the\r
+                                               // override value.\r
+                                               overrideAttrs.push( [ attName.toLowerCase(), attrs[ attName ] ] );\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               return overrides;\r
+       }\r
+\r
+       function normalizeCssText( unparsedCssText, nativeNormalize )\r
+       {\r
+               var styleText;\r
+               if ( nativeNormalize !== false )\r
+               {\r
+                       // Injects the style in a temporary span object, so the browser parses it,\r
+                       // retrieving its final format.\r
+                       var temp = new CKEDITOR.dom.element( 'span' );\r
+                       temp.setAttribute( 'style', unparsedCssText );\r
+                       styleText = temp.getAttribute( 'style' );\r
+               }\r
+               else\r
+                       styleText = unparsedCssText;\r
+\r
+               // Shrinking white-spaces around colon and semi-colon (#4147).\r
+               // Compensate tail semi-colon.\r
+               return styleText.replace( /\s*([;:])\s*/, '$1' )\r
+                                                        .replace( /([^\s;])$/, '$1;')\r
+                                                        .toLowerCase();\r
+       }\r
+\r
+       function applyStyle( document, remove )\r
+       {\r
+               // Get all ranges from the selection.\r
+               var selection = document.getSelection();\r
+               var ranges = selection.getRanges();\r
+               var func = remove ? this.removeFromRange : this.applyToRange;\r
+\r
+               // Apply the style to the ranges.\r
+               for ( var i = 0 ; i < ranges.length ; i++ )\r
+                       func.call( this, ranges[ i ] );\r
+\r
+               // Select the ranges again.\r
+               selection.selectRanges( ranges );\r
+       }\r
+})();\r
+\r
+CKEDITOR.styleCommand = function( style )\r
+{\r
+       this.style = style;\r
+};\r
+\r
+CKEDITOR.styleCommand.prototype.exec = function( editor )\r
+{\r
+       editor.focus();\r
+\r
+       var doc = editor.document;\r
+\r
+       if ( doc )\r
+       {\r
+               if ( this.state == CKEDITOR.TRISTATE_OFF )\r
+                       this.style.apply( doc );\r
+               else if ( this.state == CKEDITOR.TRISTATE_ON )\r
+                       this.style.remove( doc );\r
+       }\r
+\r
+       return !!doc;\r
+};\r
diff --git a/_source/plugins/stylescombo/plugin.js b/_source/plugins/stylescombo/plugin.js
new file mode 100644 (file)
index 0000000..1a336d3
--- /dev/null
@@ -0,0 +1,295 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       CKEDITOR.plugins.add( 'stylescombo',\r
+       {\r
+               requires : [ 'richcombo', 'styles' ],\r
+\r
+               init : function( editor )\r
+               {\r
+                       var config = editor.config,\r
+                               lang = editor.lang.stylesCombo,\r
+                               pluginPath = this.path,\r
+                               styles;\r
+\r
+                       editor.ui.addRichCombo( 'Styles',\r
+                               {\r
+                                       label : lang.label,\r
+                                       title : lang.panelTitle,\r
+                                       voiceLabel : lang.voiceLabel,\r
+                                       className : 'cke_styles',\r
+                                       multiSelect : true,\r
+\r
+                                       panel :\r
+                                       {\r
+                                               css : [ config.contentsCss, CKEDITOR.getUrl( editor.skinPath + 'editor.css' ) ],\r
+                                               voiceLabel : lang.panelVoiceLabel\r
+                                       },\r
+\r
+                                       init : function()\r
+                                       {\r
+                                               var combo = this,\r
+                                                       stylesSet = config.stylesCombo_stylesSet.split( ':', 2 ),\r
+                                                       stylesSetPath = stylesSet[ 1 ] || CKEDITOR.getUrl( pluginPath + 'styles/' + stylesSet[ 0 ] + '.js' ) ;\r
+\r
+                                               stylesSet = stylesSet[ 0 ];\r
+\r
+                                               CKEDITOR.loadStylesSet( stylesSet, stylesSetPath, function( stylesDefinitions )\r
+                                                       {\r
+                                                               var style,\r
+                                                                       styleName,\r
+                                                                       stylesList = [];\r
+\r
+                                                               styles = {};\r
+\r
+                                                               // Put all styles into an Array.\r
+                                                               for ( var i = 0 ; i < stylesDefinitions.length ; i++ )\r
+                                                               {\r
+                                                                       var styleDefinition = stylesDefinitions[ i ];\r
+\r
+                                                                       styleName = styleDefinition.name;\r
+\r
+                                                                       style = styles[ styleName ] = new CKEDITOR.style( styleDefinition );\r
+                                                                       style._name = styleName;\r
+\r
+                                                                       stylesList.push( style );\r
+                                                               }\r
+\r
+                                                               // Sorts the Array, so the styles get grouped\r
+                                                               // by type.\r
+                                                               stylesList.sort( sortStyles );\r
+\r
+                                                               // Loop over the Array, adding all items to the\r
+                                                               // combo.\r
+                                                               var lastType;\r
+                                                               for ( i = 0 ; i < stylesList.length ; i++ )\r
+                                                               {\r
+                                                                       style = stylesList[ i ];\r
+                                                                       styleName = style._name;\r
+\r
+                                                                       var type = style.type;\r
+\r
+                                                                       if ( type != lastType )\r
+                                                                       {\r
+                                                                               combo.startGroup( lang[ 'panelTitle' + String( type ) ] );\r
+                                                                               lastType = type;\r
+                                                                       }\r
+\r
+                                                                       combo.add(\r
+                                                                               styleName,\r
+                                                                               style.type == CKEDITOR.STYLE_OBJECT ? styleName : buildPreview( style._.definition ),\r
+                                                                               styleName );\r
+                                                               }\r
+\r
+                                                               combo.commit();\r
+\r
+                                                               combo.onOpen();\r
+                                                       });\r
+                                       },\r
+\r
+                                       onClick : function( value )\r
+                                       {\r
+                                               editor.focus();\r
+                                               editor.fire( 'saveSnapshot' );\r
+\r
+                                               var style = styles[ value ],\r
+                                                       selection = editor.getSelection();\r
+\r
+                                               if ( style.type == CKEDITOR.STYLE_OBJECT )\r
+                                               {\r
+                                                       var element = selection.getSelectedElement();\r
+                                                       if ( element )\r
+                                                               style.applyToObject( element );\r
+\r
+                                                       return;\r
+                                               }\r
+\r
+                                               var elementPath = new CKEDITOR.dom.elementPath( selection.getStartElement() );\r
+\r
+                                               if ( style.type == CKEDITOR.STYLE_INLINE && style.checkActive( elementPath ) )\r
+                                                       style.remove( editor.document );\r
+                                               else\r
+                                                       style.apply( editor.document );\r
+\r
+                                               editor.fire( 'saveSnapshot' );\r
+                                       },\r
+\r
+                                       onRender : function()\r
+                                       {\r
+                                               editor.on( 'selectionChange', function( ev )\r
+                                                       {\r
+                                                               var currentValue = this.getValue();\r
+\r
+                                                               var elementPath = ev.data.path,\r
+                                                                       elements = elementPath.elements;\r
+\r
+                                                               // For each element into the elements path.\r
+                                                               for ( var i = 0, element ; i < elements.length ; i++ )\r
+                                                               {\r
+                                                                       element = elements[i];\r
+\r
+                                                                       // Check if the element is removable by any of\r
+                                                                       // the styles.\r
+                                                                       for ( var value in styles )\r
+                                                                       {\r
+                                                                               if ( styles[ value ].checkElementRemovable( element, true ) )\r
+                                                                               {\r
+                                                                                       if ( value != currentValue )\r
+                                                                                               this.setValue( value );\r
+                                                                                       return;\r
+                                                                               }\r
+                                                                       }\r
+                                                               }\r
+\r
+                                                               // If no styles match, just empty it.\r
+                                                               this.setValue( '' );\r
+                                                       },\r
+                                                       this);\r
+                                       },\r
+\r
+                                       onOpen : function()\r
+                                       {\r
+                                               if ( CKEDITOR.env.ie )\r
+                                                       editor.focus();\r
+\r
+                                               var selection = editor.getSelection();\r
+\r
+                                               var element = selection.getSelectedElement(),\r
+                                                       elementName = element && element.getName(),\r
+                                                       elementPath = new CKEDITOR.dom.elementPath( element || selection.getStartElement() );\r
+\r
+                                               var counter = [ 0, 0, 0, 0 ];\r
+                                               this.showAll();\r
+                                               this.unmarkAll();\r
+                                               for ( var name in styles )\r
+                                               {\r
+                                                       var style = styles[ name ],\r
+                                                               type = style.type;\r
+\r
+                                                       if ( type == CKEDITOR.STYLE_OBJECT )\r
+                                                       {\r
+                                                               if ( element && style.element == elementName )\r
+                                                               {\r
+                                                                       if ( style.checkElementRemovable( element, true ) )\r
+                                                                               this.mark( name );\r
+\r
+                                                                       counter[ type ]++;\r
+                                                               }\r
+                                                               else\r
+                                                                       this.hideItem( name );\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               if ( style.checkActive( elementPath ) )\r
+                                                                       this.mark( name );\r
+\r
+                                                               counter[ type ]++;\r
+                                                       }\r
+                                               }\r
+\r
+                                               if ( !counter[ CKEDITOR.STYLE_BLOCK ] )\r
+                                                       this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_BLOCK ) ] );\r
+\r
+                                               if ( !counter[ CKEDITOR.STYLE_INLINE ] )\r
+                                                       this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_INLINE ) ] );\r
+\r
+                                               if ( !counter[ CKEDITOR.STYLE_OBJECT ] )\r
+                                                       this.hideGroup( lang[ 'panelTitle' + String( CKEDITOR.STYLE_OBJECT ) ] );\r
+                                       }\r
+                               });\r
+               }\r
+       });\r
+\r
+       var stylesSets = {};\r
+\r
+       CKEDITOR.addStylesSet = function( name, styles )\r
+       {\r
+               stylesSets[ name ] = styles;\r
+       };\r
+\r
+       CKEDITOR.loadStylesSet = function( name, url, callback )\r
+       {\r
+               var stylesSet = stylesSets[ name ];\r
+\r
+               if ( stylesSet )\r
+               {\r
+                       callback( stylesSet );\r
+                       return ;\r
+               }\r
+\r
+               CKEDITOR.scriptLoader.load( url, function()\r
+                       {\r
+                               callback( stylesSets[ name ] );\r
+                       });\r
+       };\r
+\r
+       function buildPreview( styleDefinition )\r
+       {\r
+               var html = [];\r
+\r
+               var elementName = styleDefinition.element;\r
+\r
+               // Avoid <bdo> in the preview.\r
+               if ( elementName == 'bdo' )\r
+                       elementName = 'span';\r
+\r
+               html = [ '<', elementName ];\r
+\r
+               // Assign all defined attributes.\r
+               var attribs     = styleDefinition.attributes;\r
+               if ( attribs )\r
+               {\r
+                       for ( var att in attribs )\r
+                       {\r
+                               html.push( ' ', att, '="', attribs[ att ], '"' );\r
+                       }\r
+               }\r
+\r
+               // Assign the style attribute.\r
+               var cssStyle = CKEDITOR.style.getStyleText( styleDefinition );\r
+               if ( cssStyle )\r
+                       html.push( ' style="', cssStyle, '"' );\r
+\r
+               html.push( '>', styleDefinition.name, '</', elementName, '>' );\r
+\r
+               return html.join( '' );\r
+       }\r
+\r
+       function sortStyles( styleA, styleB )\r
+       {\r
+               var typeA = styleA.type,\r
+                       typeB = styleB.type;\r
+\r
+               return typeA == typeB ? 0 :\r
+                       typeA == CKEDITOR.STYLE_OBJECT ? -1 :\r
+                       typeB == CKEDITOR.STYLE_OBJECT ? 1 :\r
+                       typeB == CKEDITOR.STYLE_BLOCK ? 1 :\r
+                       -1;\r
+       }\r
+})();\r
+\r
+/**\r
+ * The "styles definition set" to load into the styles combo. The styles may\r
+ * be defined in the page containing the editor, or can be loaded on demand\r
+ * from an external file when opening the styles combo for the fist time. In\r
+ * the second case, if this setting contains only a name, the styles definition\r
+ * file will be loaded from the "styles" folder inside the stylescombo plugin\r
+ * folder. Otherwise, this setting has the "name:url" syntax, making it\r
+ * possible to set the URL from which loading the styles file.\r
+ * @type string\r
+ * @default 'default'\r
+ * @example\r
+ * // Load from the stylescombo styles folder (mystyles.js file).\r
+ * config.stylesCombo_stylesSet = 'mystyles';\r
+ * @example\r
+ * // Load from a relative URL.\r
+ * config.stylesCombo_stylesSet = 'mystyles:/editorstyles/styles.js';\r
+ * @example\r
+ * // Load from a full URL.\r
+ * config.stylesCombo_stylesSet = 'mystyles:http://www.example.com/editorstyles/styles.js';\r
+ */\r
+CKEDITOR.config.stylesCombo_stylesSet = 'default';\r
diff --git a/_source/plugins/stylescombo/styles/default.js b/_source/plugins/stylescombo/styles/default.js
new file mode 100644 (file)
index 0000000..6c58c3b
--- /dev/null
@@ -0,0 +1,85 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.addStylesSet( 'default',\r
+[\r
+       /* Block Styles */\r
+\r
+       // These styles are already available in the "Format" combo, so they are\r
+       // not needed here by default. You may enable them to avoid placing the\r
+       // "Format" combo in the toolbar, maintaining the same features.\r
+       /*\r
+       { name : 'Paragraph'            , element : 'p' },\r
+       { name : 'Heading 1'            , element : 'h1' },\r
+       { name : 'Heading 2'            , element : 'h2' },\r
+       { name : 'Heading 3'            , element : 'h3' },\r
+       { name : 'Heading 4'            , element : 'h4' },\r
+       { name : 'Heading 5'            , element : 'h5' },\r
+       { name : 'Heading 6'            , element : 'h6' },\r
+       { name : 'Preformatted Text', element : 'pre' },\r
+       { name : 'Address'                      , element : 'address' },\r
+       */\r
+\r
+       { name : 'Blue Title'           , element : 'h3', styles : { 'color' : 'Blue' } },\r
+       { name : 'Red Title'            , element : 'h3', styles : { 'color' : 'Red' } },\r
+\r
+       /* Inline Styles */\r
+\r
+       // These are core styles available as toolbar buttons. You may opt enabling\r
+       // some of them in the Styles combo, removing them from the toolbar.\r
+       /*\r
+       { name : 'Strong'                       , element : 'strong', overrides : 'b' },\r
+       { name : 'Emphasis'                     , element : 'em'        , overrides : 'i' },\r
+       { name : 'Underline'            , element : 'u' },\r
+       { name : 'Strikethrough'        , element : 'strike' },\r
+       { name : 'Subscript'            , element : 'sub' },\r
+       { name : 'Superscript'          , element : 'sup' },\r
+       */\r
+\r
+       { name : 'Marker: Yellow'       , element : 'span', styles : { 'background-color' : 'Yellow' } },\r
+       { name : 'Marker: Green'        , element : 'span', styles : { 'background-color' : 'Lime' } },\r
+\r
+       { name : 'Big'                          , element : 'big' },\r
+       { name : 'Small'                        , element : 'small' },\r
+       { name : 'Typewriter'           , element : 'tt' },\r
+\r
+       { name : 'Computer Code'        , element : 'code' },\r
+       { name : 'Keyboard Phrase'      , element : 'kbd' },\r
+       { name : 'Sample Text'          , element : 'samp' },\r
+       { name : 'Variable'                     , element : 'var' },\r
+\r
+       { name : 'Deleted Text'         , element : 'del' },\r
+       { name : 'Inserted Text'        , element : 'ins' },\r
+\r
+       { name : 'Cited Work'           , element : 'cite' },\r
+       { name : 'Inline Quotation'     , element : 'q' },\r
+\r
+       { name : 'Language: RTL'        , element : 'span', attributes : { 'dir' : 'rtl' } },\r
+       { name : 'Language: LTR'        , element : 'span', attributes : { 'dir' : 'ltr' } },\r
+\r
+       /* Object Styles */\r
+\r
+       {\r
+               name : 'Image on Left',\r
+               element : 'img',\r
+               attributes :\r
+               {\r
+                       'style' : 'padding: 5px; margin-right: 5px',\r
+                       'border' : '2',\r
+                       'align' : 'left'\r
+               }\r
+       },\r
+\r
+       {\r
+               name : 'Image on Right',\r
+               element : 'img',\r
+               attributes :\r
+               {\r
+                       'style' : 'padding: 5px; margin-left: 5px',\r
+                       'border' : '2',\r
+                       'align' : 'right'\r
+               }\r
+       }\r
+]);\r
diff --git a/_source/plugins/tab/plugin.js b/_source/plugins/tab/plugin.js
new file mode 100644 (file)
index 0000000..55c210a
--- /dev/null
@@ -0,0 +1,266 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       var blurCommand =\r
+               {\r
+                       exec : function( editor )\r
+                       {\r
+                               editor.container.focusNext( true );\r
+                       }\r
+               };\r
+\r
+       var blurBackCommand =\r
+               {\r
+                       exec : function( editor )\r
+                       {\r
+                               editor.container.focusPrevious( true );\r
+                       }\r
+               };\r
+\r
+       CKEDITOR.plugins.add( 'tab',\r
+       {\r
+               requires : [ 'keystrokes' ],\r
+\r
+               init : function( editor )\r
+               {\r
+                       // Register the keystrokes.\r
+                       var keystrokes = editor.keystrokeHandler.keystrokes;\r
+                       keystrokes[ 9 /* TAB */ ] = 'tab';\r
+                       keystrokes[ CKEDITOR.SHIFT + 9 /* TAB */ ] = 'shiftTab';\r
+\r
+                       var tabSpaces = editor.config.tabSpaces,\r
+                               tabText = '';\r
+\r
+                       while ( tabSpaces-- )\r
+                               tabText += '\xa0';\r
+\r
+                       // Register the "tab" and "shiftTab" commands.\r
+                       editor.addCommand( 'tab',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               // Fire the "tab" event, making it possible to\r
+                                               // customize the TAB key behavior on specific cases.\r
+                                               if ( !editor.fire( 'tab' ) )\r
+                                               {\r
+                                                       if ( tabText.length > 0 )\r
+                                                               editor.insertHtml( tabText );\r
+                                                       else\r
+                                                       {\r
+                                                               // All browsers jump to the next field on TAB,\r
+                                                               // except Safari, so we have to do that manually\r
+                                                               // here.\r
+                                                               /// https://bugs.webkit.org/show_bug.cgi?id=20597\r
+                                                               return editor.execCommand( 'blur' );\r
+                                                       }\r
+                                               }\r
+\r
+                                               return true;\r
+                                       }\r
+                               });\r
+\r
+                       editor.addCommand( 'shiftTab',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               // Fire the "tab" event, making it possible to\r
+                                               // customize the TAB key behavior on specific cases.\r
+                                               if ( !editor.fire( 'shiftTab' ) )\r
+                                                       return editor.execCommand( 'blurBack' );\r
+\r
+                                               return true;\r
+                                       }\r
+                               });\r
+\r
+                       editor.addCommand( 'blur', blurCommand );\r
+                       editor.addCommand( 'blurBack', blurBackCommand );\r
+               }\r
+       });\r
+})();\r
+\r
+/**\r
+ * Moves the UI focus to the element following this element in the tabindex\r
+ * order.\r
+ * @example\r
+ * var element = CKEDITOR.document.getById( 'example' );\r
+ * element.focusNext();\r
+ */\r
+CKEDITOR.dom.element.prototype.focusNext = function( ignoreChildren )\r
+{\r
+       var $ = this.$,\r
+               curTabIndex = this.getTabIndex(),\r
+               passedCurrent, enteredCurrent,\r
+               elected, electedTabIndex,\r
+               element, elementTabIndex;\r
+\r
+       if ( curTabIndex <= 0 )\r
+       {\r
+               // If this element has tabindex <= 0 then we must simply look for any\r
+               // element following it containing tabindex=0.\r
+\r
+               element = this.getNextSourceNode( ignoreChildren, CKEDITOR.NODE_ELEMENT );\r
+\r
+               while( element )\r
+               {\r
+                       if ( element.isVisible() && element.getTabIndex() === 0 )\r
+                       {\r
+                               elected = element;\r
+                               break;\r
+                       }\r
+\r
+                       element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT );\r
+               }\r
+       }\r
+       else\r
+       {\r
+               // If this element has tabindex > 0 then we must look for:\r
+               //              1. An element following this element with the same tabindex.\r
+               //              2. The first element in source other with the lowest tabindex\r
+               //                 that is higher than this element tabindex.\r
+               //              3. The first element with tabindex=0.\r
+\r
+               element = this.getDocument().getBody().getFirst();\r
+\r
+               while( ( element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) )\r
+               {\r
+                       if ( !passedCurrent )\r
+                       {\r
+                               if ( !enteredCurrent && element.equals( this ) )\r
+                               {\r
+                                       enteredCurrent = true;\r
+\r
+                                       // Ignore this element, if required.\r
+                                       if ( ignoreChildren )\r
+                                       {\r
+                                               if ( !( element = element.getNextSourceNode( true, CKEDITOR.NODE_ELEMENT ) ) )\r
+                                                       break;\r
+                                               passedCurrent = 1;\r
+                                       }\r
+                               }\r
+                               else if ( enteredCurrent && !this.contains( element ) )\r
+                                       passedCurrent = 1;\r
+                       }\r
+\r
+                       if ( !element.isVisible() || ( elementTabIndex = element.getTabIndex() ) < 0 )\r
+                               continue;\r
+\r
+                       if ( passedCurrent && elementTabIndex == curTabIndex )\r
+                       {\r
+                               elected = element;\r
+                               break;\r
+                       }\r
+\r
+                       if ( elementTabIndex > curTabIndex && ( !elected || !electedTabIndex || elementTabIndex < electedTabIndex ) )\r
+                       {\r
+                               elected = element;\r
+                               electedTabIndex = elementTabIndex;\r
+                       }\r
+                       else if ( !elected && elementTabIndex === 0 )\r
+                       {\r
+                               elected = element;\r
+                               electedTabIndex = elementTabIndex;\r
+                       }\r
+               }\r
+       }\r
+\r
+       if ( elected )\r
+               elected.focus();\r
+};\r
+\r
+/**\r
+ * Moves the UI focus to the element before this element in the tabindex order.\r
+ * @example\r
+ * var element = CKEDITOR.document.getById( 'example' );\r
+ * element.focusPrevious();\r
+ */\r
+CKEDITOR.dom.element.prototype.focusPrevious = function( ignoreChildren )\r
+{\r
+       var $ = this.$,\r
+               curTabIndex = this.getTabIndex(),\r
+               passedCurrent, enteredCurrent,\r
+               elected,\r
+               electedTabIndex = 0,\r
+               elementTabIndex;\r
+\r
+       var element = this.getDocument().getBody().getLast();\r
+\r
+       while( ( element = element.getPreviousSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) )\r
+       {\r
+               if ( !passedCurrent )\r
+               {\r
+                       if ( !enteredCurrent && element.equals( this ) )\r
+                       {\r
+                               enteredCurrent = true;\r
+\r
+                               // Ignore this element, if required.\r
+                               if ( ignoreChildren )\r
+                               {\r
+                                       if ( !( element = element.getPreviousSourceNode( true, CKEDITOR.NODE_ELEMENT ) ) )\r
+                                               break;\r
+                                       passedCurrent = 1;\r
+                               }\r
+                       }\r
+                       else if ( enteredCurrent && !this.contains( element ) )\r
+                               passedCurrent = 1;\r
+               }\r
+\r
+               if ( !element.isVisible() || ( elementTabIndex = element.getTabIndex() ) < 0 )\r
+                       continue;\r
+\r
+               if ( curTabIndex <= 0 )\r
+               {\r
+                       // If this element has tabindex <= 0 then we must look for:\r
+                       //              1. An element before this one containing tabindex=0.\r
+                       //              2. The last element with the highest tabindex.\r
+\r
+                       if ( passedCurrent && elementTabIndex === 0 )\r
+                       {\r
+                               elected = element;\r
+                               break;\r
+                       }\r
+\r
+                       if ( elementTabIndex > electedTabIndex )\r
+                       {\r
+                               elected = element;\r
+                               electedTabIndex = elementTabIndex;\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       // If this element has tabindex > 0 we must look for:\r
+                       //              1. An element preceeding this one, with the same tabindex.\r
+                       //              2. The last element in source other with the highest tabindex\r
+                       //                 that is lower than this element tabindex.\r
+\r
+                       if ( passedCurrent && elementTabIndex == curTabIndex )\r
+                       {\r
+                               elected = element;\r
+                               break;\r
+                       }\r
+\r
+                       if ( elementTabIndex < curTabIndex && ( !elected || elementTabIndex > electedTabIndex ) )\r
+                       {\r
+                               elected = element;\r
+                               electedTabIndex = elementTabIndex;\r
+                       }\r
+               }\r
+       }\r
+\r
+       if ( elected )\r
+               elected.focus();\r
+};\r
+\r
+/**\r
+ * Intructs the editor to add a number of spaces (&amp;nbsp;) to the text when\r
+ * hitting the TAB key. If set to zero, the TAB key will be used to move the\r
+ * cursor focus to the next element in the page, out of the editor focus.\r
+ * @type Number\r
+ * @default 0\r
+ * @example\r
+ * config.tabSpaces = 4;\r
+ */\r
+CKEDITOR.config.tabSpaces = 0 ;\r
diff --git a/_source/plugins/table/dialogs/table.js b/_source/plugins/table/dialogs/table.js
new file mode 100644 (file)
index 0000000..2c02aa2
--- /dev/null
@@ -0,0 +1,550 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       var widthPattern = /^(\d+(?:\.\d+)?)(px|%)$/,\r
+               heightPattern = /^(\d+(?:\.\d+)?)px$/;\r
+\r
+       var commitValue = function( data )\r
+       {\r
+               var id = this.id;\r
+               if ( !data.info )\r
+                       data.info = {};\r
+               data.info[id] = this.getValue();\r
+       };\r
+\r
+       function tableDialog( editor, command )\r
+       {\r
+               var makeElement = function( name ){ return new CKEDITOR.dom.element( name, editor.document ); };\r
+\r
+               return {\r
+                       title : editor.lang.table.title,\r
+                       minWidth : 310,\r
+                       minHeight : CKEDITOR.env.ie ? 310 : 280,\r
+                       onShow : function()\r
+                       {\r
+                               // Detect if there's a selected table.\r
+                               var selection = editor.getSelection(),\r
+                                       ranges = selection.getRanges(),\r
+                                       selectedTable = null;\r
+\r
+                               var rowsInput = this.getContentElement( 'info', 'txtRows' ),\r
+                                       colsInput = this.getContentElement( 'info', 'txtCols' ),\r
+                                       widthInput = this.getContentElement( 'info', 'txtWidth' );\r
+                               if ( command == 'tableProperties' )\r
+                               {\r
+                                       if ( ( selectedTable = editor.getSelection().getSelectedElement() ) )\r
+                                       {\r
+                                               if ( selectedTable.getName() != 'table' )\r
+                                                       selectedTable = null;\r
+                                       }\r
+                                       else if ( ranges.length > 0 )\r
+                                       {\r
+                                               var rangeRoot = ranges[0].getCommonAncestor( true );\r
+                                               selectedTable = rangeRoot.getAscendant( 'table', true );\r
+                                       }\r
+\r
+                                       // Save a reference to the selected table, and push a new set of default values.\r
+                                       this._.selectedElement = selectedTable;\r
+                               }\r
+\r
+                               // Enable, disable and select the row, cols, width fields.\r
+                               if ( selectedTable )\r
+                               {\r
+                                       this.setupContent( selectedTable );\r
+                                       rowsInput && rowsInput.disable();\r
+                                       colsInput && colsInput.disable();\r
+                                       widthInput && widthInput.select();\r
+                               }\r
+                               else\r
+                               {\r
+                                       rowsInput && rowsInput.enable();\r
+                                       colsInput && colsInput.enable();\r
+                                       rowsInput && rowsInput.select();\r
+                               }\r
+                       },\r
+                       onOk : function()\r
+                       {\r
+                               var table = this._.selectedElement || makeElement( 'table' ),\r
+                                       me = this,\r
+                                       data = {};\r
+\r
+                               this.commitContent( data, table );\r
+\r
+                               if ( data.info )\r
+                               {\r
+                                       var info = data.info;\r
+\r
+                                       // Generate the rows and cols.\r
+                                       if ( !this._.selectedElement )\r
+                                       {\r
+                                               var tbody = table.append( makeElement( 'tbody' ) ),\r
+                                                       rows = parseInt( info.txtRows, 10 ) || 0,\r
+                                                       cols = parseInt( info.txtCols, 10 ) || 0;\r
+\r
+                                               for ( var i = 0 ; i < rows ; i++ )\r
+                                               {\r
+                                                       var row = tbody.append( makeElement( 'tr' ) );\r
+                                                       for ( var j = 0 ; j < cols ; j++ )\r
+                                                       {\r
+                                                               var cell = row.append( makeElement( 'td' ) );\r
+                                                               if ( !CKEDITOR.env.ie )\r
+                                                                       cell.append( makeElement( 'br' ) );\r
+                                                       }\r
+                                               }\r
+                                       }\r
+\r
+                                       // Modify the table headers. Depends on havint rows and cols generated\r
+                                       // correctly so it can't be done in commit functions.\r
+\r
+                                       // Should we make a <thead>?\r
+                                       var headers = info.selHeaders;\r
+                                       if ( !table.$.tHead && ( headers == 'row' || headers == 'both' ) )\r
+                                       {\r
+                                               var thead = new CKEDITOR.dom.element( table.$.createTHead() );\r
+                                               tbody = table.getElementsByTag( 'tbody' ).getItem( 0 );\r
+                                               var theRow = tbody.getElementsByTag( 'tr' ).getItem( 0 );\r
+\r
+                                               // Change TD to TH:\r
+                                               for ( i = 0 ; i < theRow.getChildCount() ; i++ )\r
+                                               {\r
+                                                       var th = theRow.getChild( i );\r
+                                                       if ( th.type == CKEDITOR.NODE_ELEMENT )\r
+                                                       {\r
+                                                               th.renameNode( 'th' );\r
+                                                               if ( !i )\r
+                                                                       th.setAttribute( 'scope', 'col' );\r
+                                                       }\r
+                                               }\r
+                                               thead.append( theRow.remove() );\r
+                                       }\r
+\r
+                                       if ( table.$.tHead !== null && !( headers == 'row' || headers == 'both' ) )\r
+                                       {\r
+                                               // Move the row out of the THead and put it in the TBody:\r
+                                               thead = new CKEDITOR.dom.element( table.$.tHead );\r
+                                               tbody = table.getElementsByTag( 'tbody' ).getItem( 0 );\r
+\r
+                                               var previousFirstRow = tbody.getFirst();\r
+                                               while ( thead.getChildCount() > 0 )\r
+                                               {\r
+                                                       theRow = thead.getFirst();\r
+                                                       for ( i = 0; i < theRow.getChildCount() ; i++ )\r
+                                                       {\r
+                                                               var newCell = theRow.getChild( i );\r
+                                                               if ( newCell.type == CKEDITOR.NODE_ELEMENT )\r
+                                                               {\r
+                                                                       newCell.renameNode( 'td' );\r
+                                                                       newCell.removeAttribute( 'scope' );\r
+                                                               }\r
+                                                       }\r
+                                                       theRow.insertBefore( previousFirstRow );\r
+                                               }\r
+                                               thead.remove();\r
+                                       }\r
+\r
+                                       // Should we make all first cells in a row TH?\r
+                                       if ( !this.hasColumnHeaders && ( headers == 'col' || headers == 'both' ) )\r
+                                       {\r
+                                               for( row = 0 ; row < table.$.rows.length ; row++ )\r
+                                               {\r
+                                                       newCell = new CKEDITOR.dom.element( table.$.rows[ row ].cells[ 0 ] );\r
+                                                       newCell.renameNode( 'th' );\r
+                                                       newCell.setAttribute( 'scope', 'col' );\r
+                                               }\r
+                                       }\r
+\r
+                                       // Should we make all first TH-cells in a row make TD? If 'yes' we do it the other way round :-)\r
+                                       if ( ( this.hasColumnHeaders ) && !( headers == 'col' || headers == 'both' ) )\r
+                                       {\r
+                                               for( i = 0 ; i < table.$.rows.length ; i++ )\r
+                                               {\r
+                                                       row = new CKEDITOR.dom.element( table.$.rows[i] );\r
+                                                       if ( row.getParent().getName() == 'tbody' )\r
+                                                       {\r
+                                                               newCell = new CKEDITOR.dom.element( row.$.cells[0] );\r
+                                                               newCell.renameNode( 'td');\r
+                                                               newCell.removeAttribute( 'scope' );\r
+                                                       }\r
+                                               }\r
+                                       }\r
+\r
+                                       // Set the width and height.\r
+                                       var styles = [];\r
+                                       if ( info.txtHeight )\r
+                                               styles.push( 'height:' + info.txtHeight + 'px' );\r
+                                       if ( info.txtWidth )\r
+                                       {\r
+                                               var type = info.cmbWidthType || 'pixels';\r
+                                               styles.push( 'width:' + info.txtWidth + ( type == 'pixels' ? 'px' : '%' ) );\r
+                                       }\r
+                                       styles = styles.join( ';' );\r
+                                       if ( styles )\r
+                                               table.$.style.cssText = styles;\r
+                                       else\r
+                                               table.removeAttribute( 'style' );\r
+                               }\r
+\r
+                               // Insert the table element if we're creating one.\r
+                               if ( !this._.selectedElement )\r
+                                       editor.insertElement( table );\r
+\r
+                               return true;\r
+                       },\r
+                       contents : [\r
+                               {\r
+                                       id : 'info',\r
+                                       label : editor.lang.table.title,\r
+                                       elements :\r
+                                       [\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ null, null ],\r
+                                                       styles : [ 'vertical-align:top' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'vbox',\r
+                                                                       padding : 0,\r
+                                                                       children :\r
+                                                                       [\r
+                                                                               {\r
+                                                                                       type : 'text',\r
+                                                                                       id : 'txtRows',\r
+                                                                                       'default' : 3,\r
+                                                                                       label : editor.lang.table.rows,\r
+                                                                                       style : 'width:5em',\r
+                                                                                       validate : function()\r
+                                                                                       {\r
+                                                                                               var pass = true,\r
+                                                                                                       value = this.getValue();\r
+                                                                                               pass = pass && CKEDITOR.dialog.validate.integer()( value )\r
+                                                                                                       && value > 0;\r
+                                                                                               if ( !pass )\r
+                                                                                               {\r
+                                                                                                       alert( editor.lang.table.invalidRows );\r
+                                                                                                       this.select();\r
+                                                                                               }\r
+                                                                                               return pass;\r
+                                                                                       },\r
+                                                                                       setup : function( selectedElement )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedElement.$.rows.length );\r
+                                                                                       },\r
+                                                                                       commit : commitValue\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'text',\r
+                                                                                       id : 'txtCols',\r
+                                                                                       'default' : 2,\r
+                                                                                       label : editor.lang.table.columns,\r
+                                                                                       style : 'width:5em',\r
+                                                                                       validate : function()\r
+                                                                                       {\r
+                                                                                               var pass = true,\r
+                                                                                                       value = this.getValue();\r
+                                                                                               pass = pass && CKEDITOR.dialog.validate.integer()( value )\r
+                                                                                                       && value > 0;\r
+                                                                                               if ( !pass )\r
+                                                                                               {\r
+                                                                                                       alert( editor.lang.table.invalidCols );\r
+                                                                                                       this.select();\r
+                                                                                               }\r
+                                                                                               return pass;\r
+                                                                                       },\r
+                                                                                       setup : function( selectedTable )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedTable.$.rows[0].cells.length);\r
+                                                                                       },\r
+                                                                                       commit : commitValue\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'html',\r
+                                                                                       html : '&nbsp;'\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'select',\r
+                                                                                       id : 'selHeaders',\r
+                                                                                       'default' : '',\r
+                                                                                       label : editor.lang.table.headers,\r
+                                                                                       items :\r
+                                                                                       [\r
+                                                                                               [ editor.lang.table.headersNone, '' ],\r
+                                                                                               [ editor.lang.table.headersRow, 'row' ],\r
+                                                                                               [ editor.lang.table.headersColumn, 'col' ],\r
+                                                                                               [ editor.lang.table.headersBoth, 'both' ]\r
+                                                                                       ],\r
+                                                                                       setup : function( selectedTable )\r
+                                                                                       {\r
+                                                                                               // Fill in the headers field.\r
+                                                                                               var dialog = this.getDialog();\r
+                                                                                               dialog.hasColumnHeaders = true;\r
+\r
+                                                                                               // Check if all the first cells in every row are TH\r
+                                                                                               for ( var row = 0 ; row < selectedTable.$.rows.length ; row++ )\r
+                                                                                               {\r
+                                                                                                       // If just one cell isn't a TH then it isn't a header column\r
+                                                                                                       if ( selectedTable.$.rows[row].cells[0].nodeName.toLowerCase() != 'th' )\r
+                                                                                                       {\r
+                                                                                                               dialog.hasColumnHeaders = false;\r
+                                                                                                               break;\r
+                                                                                                       }\r
+                                                                                               }\r
+\r
+                                                                                               // Check if the table contains <thead>.\r
+                                                                                               if ( ( selectedTable.$.tHead !== null) )\r
+                                                                                                       this.setValue( dialog.hasColumnHeaders ? 'both' : 'row' );\r
+                                                                                               else\r
+                                                                                                       this.setValue( dialog.hasColumnHeaders ? 'col' : '' );\r
+                                                                                       },\r
+                                                                                       commit : commitValue\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'text',\r
+                                                                                       id : 'txtBorder',\r
+                                                                                       'default' : 1,\r
+                                                                                       label : editor.lang.table.border,\r
+                                                                                       style : 'width:3em',\r
+                                                                                       validate : CKEDITOR.dialog.validate['number']( editor.lang.table.invalidBorder ),\r
+                                                                                       setup : function( selectedTable )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedTable.getAttribute( 'border' ) || '' );\r
+                                                                                       },\r
+                                                                                       commit : function( data, selectedTable )\r
+                                                                                       {\r
+                                                                                               if ( this.getValue() )\r
+                                                                                                       selectedTable.setAttribute( 'border', this.getValue() );\r
+                                                                                               else\r
+                                                                                                       selectedTable.removeAttribute( 'border' );\r
+                                                                                       }\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       id : 'cmbAlign',\r
+                                                                                       type : 'select',\r
+                                                                                       'default' : '',\r
+                                                                                       label : editor.lang.table.align,\r
+                                                                                       items :\r
+                                                                                       [\r
+                                                                                               [ editor.lang.table.alignNotSet , ''],\r
+                                                                                               [ editor.lang.table.alignLeft , 'left'],\r
+                                                                                               [ editor.lang.table.alignCenter , 'center'],\r
+                                                                                               [ editor.lang.table.alignRight , 'right']\r
+                                                                                       ],\r
+                                                                                       setup : function( selectedTable )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedTable.getAttribute( 'align' ) || '' );\r
+                                                                                       },\r
+                                                                                       commit : function( data, selectedTable )\r
+                                                                                       {\r
+                                                                                               if ( this.getValue() )\r
+                                                                                                       selectedTable.setAttribute( 'align', this.getValue() );\r
+                                                                                               else\r
+                                                                                                       selectedTable.removeAttribute( 'align' );\r
+                                                                                       }\r
+                                                                               }\r
+                                                                       ]\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'vbox',\r
+                                                                       padding : 0,\r
+                                                                       children :\r
+                                                                       [\r
+                                                                               {\r
+                                                                                       type : 'hbox',\r
+                                                                                       widths : [ '5em' ],\r
+                                                                                       children :\r
+                                                                                       [\r
+                                                                                               {\r
+                                                                                                       type : 'text',\r
+                                                                                                       id : 'txtWidth',\r
+                                                                                                       style : 'width:5em',\r
+                                                                                                       label : editor.lang.table.width,\r
+                                                                                                       'default' : 200,\r
+                                                                                                       validate : CKEDITOR.dialog.validate['number']( editor.lang.table.invalidWidth ),\r
+                                                                                                       setup : function( selectedTable )\r
+                                                                                                       {\r
+                                                                                                               var widthMatch = widthPattern.exec( selectedTable.$.style.width );\r
+                                                                                                               if ( widthMatch )\r
+                                                                                                                       this.setValue( widthMatch[1] );\r
+                                                                                                       },\r
+                                                                                                       commit : commitValue\r
+                                                                                               },\r
+                                                                                               {\r
+                                                                                                       id : 'cmbWidthType',\r
+                                                                                                       type : 'select',\r
+                                                                                                       label : '&nbsp;',\r
+                                                                                                       'default' : 'pixels',\r
+                                                                                                       items :\r
+                                                                                                       [\r
+                                                                                                               [ editor.lang.table.widthPx , 'pixels'],\r
+                                                                                                               [ editor.lang.table.widthPc , 'percents']\r
+                                                                                                       ],\r
+                                                                                                       setup : function( selectedTable )\r
+                                                                                                       {\r
+                                                                                                               var widthMatch = widthPattern.exec( selectedTable.$.style.width );\r
+                                                                                                               if ( widthMatch )\r
+                                                                                                                       this.setValue( widthMatch[2] == 'px' ? 'pixels' : 'percents' );\r
+                                                                                                       },\r
+                                                                                                       commit : commitValue\r
+                                                                                               }\r
+                                                                                       ]\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'hbox',\r
+                                                                                       widths : [ '5em' ],\r
+                                                                                       children :\r
+                                                                                       [\r
+                                                                                               {\r
+                                                                                                       type : 'text',\r
+                                                                                                       id : 'txtHeight',\r
+                                                                                                       style : 'width:5em',\r
+                                                                                                       label : editor.lang.table.height,\r
+                                                                                                       'default' : '',\r
+                                                                                                       validate : CKEDITOR.dialog.validate['number']( editor.lang.table.invalidHeight ),\r
+                                                                                                       setup : function( selectedTable )\r
+                                                                                                       {\r
+                                                                                                               var heightMatch = heightPattern.exec( selectedTable.$.style.height );\r
+                                                                                                               if ( heightMatch )\r
+                                                                                                                       this.setValue( heightMatch[1] );\r
+                                                                                                       },\r
+                                                                                                       commit : commitValue\r
+                                                                                               },\r
+                                                                                               {\r
+                                                                                                       type : 'html',\r
+                                                                                                       html : '<br />' + editor.lang.table.widthPx\r
+                                                                                               }\r
+                                                                                       ]\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'html',\r
+                                                                                       html : '&nbsp;'\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'text',\r
+                                                                                       id : 'txtCellSpace',\r
+                                                                                       style : 'width:3em',\r
+                                                                                       label : editor.lang.table.cellSpace,\r
+                                                                                       'default' : 1,\r
+                                                                                       validate : CKEDITOR.dialog.validate['number']( editor.lang.table.invalidCellSpacing ),\r
+                                                                                       setup : function( selectedTable )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedTable.getAttribute( 'cellSpacing' ) || '' );\r
+                                                                                       },\r
+                                                                                       commit : function( data, selectedTable )\r
+                                                                                       {\r
+                                                                                               if ( this.getValue() )\r
+                                                                                                       selectedTable.setAttribute( 'cellSpacing', this.getValue() );\r
+                                                                                               else\r
+                                                                                                       selectedTable.removeAttribute( 'cellSpacing' );\r
+                                                                                       }\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'text',\r
+                                                                                       id : 'txtCellPad',\r
+                                                                                       style : 'width:3em',\r
+                                                                                       label : editor.lang.table.cellPad,\r
+                                                                                       'default' : 1,\r
+                                                                                       validate : CKEDITOR.dialog.validate['number']( editor.lang.table.invalidCellPadding ),\r
+                                                                                       setup : function( selectedTable )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedTable.getAttribute( 'cellPadding' ) || '' );\r
+                                                                                       },\r
+                                                                                       commit : function( data, selectedTable )\r
+                                                                                       {\r
+                                                                                               if ( this.getValue() )\r
+                                                                                                       selectedTable.setAttribute( 'cellPadding', this.getValue() );\r
+                                                                                               else\r
+                                                                                                       selectedTable.removeAttribute( 'cellPadding' );\r
+                                                                                       }\r
+                                                                               }\r
+                                                                       ]\r
+                                                               }\r
+                                                       ]\r
+                                               },\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       align : 'right',\r
+                                                       html : ''\r
+                                               },\r
+                                               {\r
+                                                       type : 'vbox',\r
+                                                       padding : 0,\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'txtCaption',\r
+                                                                       label : editor.lang.table.caption,\r
+                                                                       setup : function( selectedTable )\r
+                                                                       {\r
+                                                                               var nodeList = selectedTable.getElementsByTag( 'caption' );\r
+                                                                               if ( nodeList.count() > 0 )\r
+                                                                               {\r
+                                                                                       var caption = nodeList.getItem( 0 );\r
+                                                                                       caption = ( caption.getChild( 0 ) && caption.getChild( 0 ).getText() ) || '';\r
+                                                                                       caption = CKEDITOR.tools.trim( caption );\r
+                                                                                       this.setValue( caption );\r
+                                                                               }\r
+                                                                       },\r
+                                                                       commit : function( data, table )\r
+                                                                       {\r
+                                                                               var caption = this.getValue(),\r
+                                                                                       captionElement = table.getElementsByTag( 'caption' );\r
+                                                                               if ( caption )\r
+                                                                               {\r
+                                                                                       if ( captionElement.count() > 0 )\r
+                                                                                       {\r
+                                                                                               captionElement = captionElement.getItem( 0 );\r
+                                                                                               captionElement.setHtml( '' );\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                       {\r
+                                                                                               captionElement = new CKEDITOR.dom.element( 'caption', editor.document );\r
+                                                                                               if ( table.getChildCount() )\r
+                                                                                                       captionElement.insertBefore( table.getFirst() );\r
+                                                                                               else\r
+                                                                                                       captionElement.appendTo( table );\r
+                                                                                       }\r
+                                                                                       captionElement.append( new CKEDITOR.dom.text( caption, editor.document ) );\r
+                                                                               }\r
+                                                                               else if ( captionElement.count() > 0 )\r
+                                                                               {\r
+                                                                                       for ( var i = captionElement.count() - 1 ; i >= 0 ; i-- )\r
+                                                                                               captionElement.getItem( i ).remove();\r
+                                                                               }\r
+                                                                       }\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'text',\r
+                                                                       id : 'txtSummary',\r
+                                                                       label : editor.lang.table.summary,\r
+                                                                       setup : function( selectedTable )\r
+                                                                       {\r
+                                                                               this.setValue( selectedTable.getAttribute( 'summary' ) || '' );\r
+                                                                       },\r
+                                                                       commit : function( data, selectedTable )\r
+                                                                       {\r
+                                                                               if ( this.getValue() )\r
+                                                                                       selectedTable.setAttribute( 'summary', this.getValue() );\r
+                                                                       }\r
+                                                               }\r
+                                                       ]\r
+                                               }\r
+                                       ]\r
+                               }\r
+                       ]\r
+               };\r
+       }\r
+\r
+       CKEDITOR.dialog.add( 'table', function( editor )\r
+               {\r
+                       return tableDialog( editor, 'table' );\r
+               } );\r
+       CKEDITOR.dialog.add( 'tableProperties', function( editor )\r
+               {\r
+                       return tableDialog( editor, 'tableProperties' );\r
+               } );\r
+})();\r
diff --git a/_source/plugins/table/plugin.js b/_source/plugins/table/plugin.js
new file mode 100644 (file)
index 0000000..7aab3cc
--- /dev/null
@@ -0,0 +1,70 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'table',\r
+{\r
+       init : function( editor )\r
+       {\r
+               var table = CKEDITOR.plugins.table,\r
+                       lang = editor.lang.table;\r
+\r
+               editor.addCommand( 'table', new CKEDITOR.dialogCommand( 'table' ) );\r
+               editor.addCommand( 'tableProperties', new CKEDITOR.dialogCommand( 'tableProperties' ) );\r
+\r
+               editor.ui.addButton( 'Table',\r
+                       {\r
+                               label : lang.toolbar,\r
+                               command : 'table'\r
+                       });\r
+\r
+               CKEDITOR.dialog.add( 'table', this.path + 'dialogs/table.js' );\r
+               CKEDITOR.dialog.add( 'tableProperties', this.path + 'dialogs/table.js' );\r
+\r
+               // If the "menu" plugin is loaded, register the menu items.\r
+               if ( editor.addMenuItems )\r
+               {\r
+                       editor.addMenuItems(\r
+                               {\r
+                                       table :\r
+                                       {\r
+                                               label : lang.menu,\r
+                                               command : 'tableProperties',\r
+                                               group : 'table',\r
+                                               order : 5\r
+                                       },\r
+\r
+                                       tabledelete :\r
+                                       {\r
+                                               label : lang.deleteTable,\r
+                                               command : 'tableDelete',\r
+                                               group : 'table',\r
+                                               order : 1\r
+                                       }\r
+                               } );\r
+               }\r
+\r
+               // If the "contextmenu" plugin is loaded, register the listeners.\r
+               if ( editor.contextMenu )\r
+               {\r
+                       editor.contextMenu.addListener( function( element, selection )\r
+                               {\r
+                                       if ( !element )\r
+                                               return null;\r
+\r
+                                       var isTable     = element.is( 'table' ) || element.hasAscendant( 'table' );\r
+\r
+                                       if ( isTable )\r
+                                       {\r
+                                               return {\r
+                                                       tabledelete : CKEDITOR.TRISTATE_OFF,\r
+                                                       table : CKEDITOR.TRISTATE_OFF\r
+                                               };\r
+                                       }\r
+\r
+                                       return null;\r
+                               } );\r
+               }\r
+       }\r
+} );\r
diff --git a/_source/plugins/tabletools/dialogs/tableCell.js b/_source/plugins/tabletools/dialogs/tableCell.js
new file mode 100644 (file)
index 0000000..ad03aa4
--- /dev/null
@@ -0,0 +1,328 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'cellProperties', function( editor )\r
+       {\r
+               var langTable = editor.lang.table;\r
+               var langCell = langTable.cell;\r
+               var langCommon = editor.lang.common;\r
+               var validate = CKEDITOR.dialog.validate;\r
+               var widthPattern = /^(\d+(?:\.\d+)?)(px|%)$/,\r
+                       heightPattern = /^(\d+(?:\.\d+)?)px$/;\r
+               var bind = CKEDITOR.tools.bind;\r
+\r
+               function spacer()\r
+               {\r
+                       return { type : 'html', html : '&nbsp;' };\r
+               }\r
+\r
+               return {\r
+                       title : langCell.title,\r
+                       minWidth : 480,\r
+                       minHeight : 140,\r
+                       contents : [\r
+                               {\r
+                                       id : 'info',\r
+                                       label : langCell.title,\r
+                                       accessKey : 'I',\r
+                                       elements :\r
+                                       [\r
+                                               {\r
+                                                       type : 'hbox',\r
+                                                       widths : [ '45%', '10%', '45%' ],\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       type : 'vbox',\r
+                                                                       padding : 0,\r
+                                                                       children :\r
+                                                                       [\r
+                                                                               {\r
+                                                                                       type : 'hbox',\r
+                                                                                       widths : [ '70%', '30%' ],\r
+                                                                                       children :\r
+                                                                                       [\r
+                                                                                               {\r
+                                                                                                       type : 'text',\r
+                                                                                                       id : 'width',\r
+                                                                                                       label : langTable.width,\r
+                                                                                                       widths : [ '71%', '29%' ],\r
+                                                                                                       labelLayout : 'horizontal',\r
+                                                                                                       validate : validate[ 'number' ]( langCell.invalidWidth ),\r
+                                                                                                       setup : function( selectedCell )\r
+                                                                                                       {\r
+                                                                                                               var widthMatch = widthPattern.exec( selectedCell.$.style.width );\r
+                                                                                                               if ( widthMatch )\r
+                                                                                                                       this.setValue( widthMatch[1] );\r
+                                                                                                       },\r
+                                                                                                       commit : function( selectedCell )\r
+                                                                                                       {\r
+                                                                                                               var unit = this.getDialog().getValueOf( 'info', 'widthType' );\r
+                                                                                                               if ( this.getValue() !== '' )\r
+                                                                                                                       selectedCell.$.style.width = this.getValue() + unit;\r
+                                                                                                               else\r
+                                                                                                                       selectedCell.$.style.width = '';\r
+                                                                                                       },\r
+                                                                                                       'default' : ''\r
+                                                                                               },\r
+                                                                                               {\r
+                                                                                                       type : 'select',\r
+                                                                                                       id : 'widthType',\r
+                                                                                                       labelLayout : 'horizontal',\r
+                                                                                                       widths : [ '0%', '100%' ],\r
+                                                                                                       label : '',\r
+                                                                                                       'default' : 'px',\r
+                                                                                                       items :\r
+                                                                                                       [\r
+                                                                                                               [ langTable.widthPx, 'px' ],\r
+                                                                                                               [ langTable.widthPc, '%' ]\r
+                                                                                                       ],\r
+                                                                                                       setup : function( selectedCell )\r
+                                                                                                       {\r
+                                                                                                               var widthMatch = widthPattern.exec( selectedCell.$.style.width );\r
+                                                                                                               if ( widthMatch )\r
+                                                                                                                       this.setValue( widthMatch[2] );\r
+                                                                                                       }\r
+                                                                                               }\r
+                                                                                       ]\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'hbox',\r
+                                                                                       widths : [ '70%', '30%' ],\r
+                                                                                       children :\r
+                                                                                       [\r
+                                                                                               {\r
+                                                                                                       type : 'text',\r
+                                                                                                       id : 'height',\r
+                                                                                                       label : langTable.height,\r
+                                                                                                       'default' : '',\r
+                                                                                                       widths : [ '71%', '29%' ],\r
+                                                                                                       labelLayout : 'horizontal',\r
+                                                                                                       validate : validate[ 'number' ]( langCell.invalidHeight ),\r
+                                                                                                       setup : function( selectedCell )\r
+                                                                                                       {\r
+                                                                                                               var heightMatch = heightPattern.exec( selectedCell.$.style.height );\r
+                                                                                                               if ( heightMatch )\r
+                                                                                                                       this.setValue( heightMatch[1] );\r
+                                                                                                       },\r
+                                                                                                       commit : function( selectedCell )\r
+                                                                                                       {\r
+                                                                                                               if ( this.getValue() !== '' )\r
+                                                                                                                       selectedCell.$.style.height = this.getValue() + 'px';\r
+                                                                                                               else\r
+                                                                                                                       selectedCell.$.style.height = '';\r
+                                                                                                       }\r
+                                                                                               },\r
+                                                                                               {\r
+                                                                                                       type : 'html',\r
+                                                                                                       html : langTable.widthPx\r
+                                                                                               }\r
+                                                                                       ]\r
+                                                                               },\r
+                                                                               spacer(),\r
+                                                                               {\r
+                                                                                       type : 'select',\r
+                                                                                       id : 'wordWrap',\r
+                                                                                       labelLayout : 'horizontal',\r
+                                                                                       label : langCell.wordWrap,\r
+                                                                                       widths : [ '50%', '50%' ],\r
+                                                                                       'default' : 'yes',\r
+                                                                                       items :\r
+                                                                                       [\r
+                                                                                               [ langCell.yes, 'yes' ],\r
+                                                                                               [ langCell.no, 'no' ]\r
+                                                                                       ],\r
+                                                                                       commit : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               if ( this.getValue() == 'no' )\r
+                                                                                                       selectedCell.setAttribute( 'noWrap', 'nowrap' );\r
+                                                                                               else\r
+                                                                                                       selectedCell.removeAttribute( 'noWrap' );\r
+                                                                                       }\r
+                                                                               },\r
+                                                                               spacer(),\r
+                                                                               {\r
+                                                                                       type : 'select',\r
+                                                                                       id : 'hAlign',\r
+                                                                                       labelLayout : 'horizontal',\r
+                                                                                       label : langCell.hAlign,\r
+                                                                                       widths : [ '50%', '50%' ],\r
+                                                                                       'default' : '',\r
+                                                                                       items :\r
+                                                                                       [\r
+                                                                                               [ langCommon.notSet, '' ],\r
+                                                                                               [ langTable.alignLeft, 'left' ],\r
+                                                                                               [ langTable.alignCenter, 'center' ],\r
+                                                                                               [ langTable.alignRight, 'right' ]\r
+                                                                                       ],\r
+                                                                                       setup : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedCell.getAttribute( 'align' ) || '' );\r
+                                                                                       },\r
+                                                                                       commit : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               if ( this.getValue() )\r
+                                                                                                       selectedCell.setAttribute( 'align', this.getValue() );\r
+                                                                                               else\r
+                                                                                                       selectedCell.removeAttribute( 'align' );\r
+                                                                                       }\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'select',\r
+                                                                                       id : 'vAlign',\r
+                                                                                       labelLayout : 'horizontal',\r
+                                                                                       label : langCell.vAlign,\r
+                                                                                       widths : [ '50%', '50%' ],\r
+                                                                                       'default' : '',\r
+                                                                                       items :\r
+                                                                                       [\r
+                                                                                               [ langCommon.notSet, '' ],\r
+                                                                                               [ langCell.alignTop, 'top' ],\r
+                                                                                               [ langCell.alignMiddle, 'middle' ],\r
+                                                                                               [ langCell.alignBottom, 'bottom' ],\r
+                                                                                               [ langCell.alignBaseline, 'baseline' ]\r
+                                                                                       ],\r
+                                                                                       setup : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedCell.getAttribute( 'vAlign' ) || '' );\r
+                                                                                       },\r
+                                                                                       commit : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               if ( this.getValue() )\r
+                                                                                                       selectedCell.setAttribute( 'vAlign', this.getValue() );\r
+                                                                                               else\r
+                                                                                                       selectedCell.removeAttribute( 'vAlign' );\r
+                                                                                       }\r
+                                                                               }\r
+                                                                       ]\r
+                                                               },\r
+                                                               spacer(),\r
+                                                               {\r
+                                                                       type : 'vbox',\r
+                                                                       padding : 0,\r
+                                                                       children :\r
+                                                                       [\r
+                                                                               {\r
+                                                                                       type : 'select',\r
+                                                                                       id : 'cellType',\r
+                                                                                       label : langCell.cellType,\r
+                                                                                       labelLayout : 'horizontal',\r
+                                                                                       widths : [ '50%', '50%' ],\r
+                                                                                       'default' : 'td',\r
+                                                                                       items :\r
+                                                                                       [\r
+                                                                                               [ langCell.data, 'td' ],\r
+                                                                                               [ langCell.header, 'th' ]\r
+                                                                                       ],\r
+                                                                                       setup : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedCell.getName() );\r
+                                                                                       },\r
+                                                                                       commit : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               selectedCell.renameNode( this.getValue() );\r
+                                                                                       }\r
+                                                                               },\r
+                                                                               spacer(),\r
+                                                                               {\r
+                                                                                       type : 'text',\r
+                                                                                       id : 'rowSpan',\r
+                                                                                       label : langCell.rowSpan,\r
+                                                                                       labelLayout : 'horizontal',\r
+                                                                                       widths : [ '50%', '50%' ],\r
+                                                                                       'default' : '',\r
+                                                                                       validate : validate.integer( langCell.invalidRowSpan ),\r
+                                                                                       setup : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedCell.getAttribute( 'rowSpan' ) || '' );\r
+                                                                                       },\r
+                                                                                       commit : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               if ( this.getValue() )\r
+                                                                                                       selectedCell.setAttribute( 'rowSpan', this.getValue() );\r
+                                                                                               else\r
+                                                                                                       selectedCell.removeAttribute( 'rowSpan' );\r
+                                                                                       }\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'text',\r
+                                                                                       id : 'colSpan',\r
+                                                                                       label : langCell.colSpan,\r
+                                                                                       labelLayout : 'horizontal',\r
+                                                                                       widths : [ '50%', '50%' ],\r
+                                                                                       'default' : '',\r
+                                                                                       validate : validate.integer( langCell.invalidColSpan ),\r
+                                                                                       setup : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedCell.getAttribute( 'colSpan' ) || '' );\r
+                                                                                       },\r
+                                                                                       commit : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               if ( this.getValue() )\r
+                                                                                                       selectedCell.setAttribute( 'colSpan', this.getValue() );\r
+                                                                                               else\r
+                                                                                                       selectedCell.removeAttribute( 'colSpan' );\r
+                                                                                       }\r
+                                                                               },\r
+                                                                               spacer(),\r
+                                                                               {\r
+                                                                                       type : 'text',\r
+                                                                                       id : 'bgColor',\r
+                                                                                       label : langCell.bgColor,\r
+                                                                                       labelLayout : 'horizontal',\r
+                                                                                       widths : [ '50%', '50%' ],\r
+                                                                                       'default' : '',\r
+                                                                                       setup : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedCell.getAttribute( 'bgColor' ) || '' );\r
+                                                                                       },\r
+                                                                                       commit : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               if ( this.getValue() )\r
+                                                                                                       selectedCell.setAttribute( 'bgColor', this.getValue() );\r
+                                                                                               else\r
+                                                                                                       selectedCell.removeAttribute( 'bgColor' );\r
+                                                                                       }\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       type : 'text',\r
+                                                                                       id : 'borderColor',\r
+                                                                                       label : langCell.borderColor,\r
+                                                                                       labelLayout : 'horizontal',\r
+                                                                                       widths : [ '50%', '50%' ],\r
+                                                                                       'default' : '',\r
+                                                                                       setup : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               this.setValue( selectedCell.getAttribute( 'borderColor' ) || '' );\r
+                                                                                       },\r
+                                                                                       commit : function( selectedCell )\r
+                                                                                       {\r
+                                                                                               if ( this.getValue() )\r
+                                                                                                       selectedCell.setAttribute( 'borderColor', this.getValue() );\r
+                                                                                               else\r
+                                                                                                       selectedCell.removeAttribute( 'borderColor' );\r
+                                                                                       }\r
+                                                                               }\r
+                                                                       ]\r
+                                                               }\r
+                                                       ]\r
+                                               }\r
+                                       ]\r
+                               }\r
+                       ],\r
+                       onShow : function()\r
+                       {\r
+                               this.cells = CKEDITOR.plugins.tabletools.getSelectedCells(\r
+                                       this._.editor.getSelection() );\r
+                               this.setupContent( this.cells[ 0 ] );\r
+                       },\r
+                       onOk : function()\r
+                       {\r
+                               var cells = this.cells;\r
+                               for ( var i = 0 ; i < cells.length ; i++ )\r
+                                       this.commitContent( cells[ i ] );\r
+                       }\r
+               };\r
+       } );\r
diff --git a/_source/plugins/tabletools/plugin.js b/_source/plugins/tabletools/plugin.js
new file mode 100644 (file)
index 0000000..d68954a
--- /dev/null
@@ -0,0 +1,701 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       function removeRawAttribute( $node, attr )\r
+       {\r
+               if ( CKEDITOR.env.ie )\r
+                       $node.removeAttribute( attr );\r
+               else\r
+                       delete $node[ attr ];\r
+       }\r
+\r
+       var cellNodeRegex = /^(?:td|th)$/;\r
+\r
+       function getSelectedCells( selection )\r
+       {\r
+               // Walker will try to split text nodes, which will make the current selection\r
+               // invalid. So save bookmarks before doing anything.\r
+               var bookmarks = selection.createBookmarks();\r
+\r
+               var ranges = selection.getRanges();\r
+               var retval = [];\r
+               var database = {};\r
+\r
+               function moveOutOfCellGuard( node )\r
+               {\r
+                       // Apply to the first cell only.\r
+                       if ( retval.length > 0 )\r
+                               return;\r
+\r
+                       // If we are exiting from the first </td>, then the td should definitely be\r
+                       // included.\r
+                       if ( node.type == CKEDITOR.NODE_ELEMENT && cellNodeRegex.test( node.getName() )\r
+                                       && !node.getCustomData( 'selected_cell' ) )\r
+                       {\r
+                               CKEDITOR.dom.element.setMarker( database, node, 'selected_cell', true );\r
+                               retval.push( node );\r
+                       }\r
+               }\r
+\r
+               for ( var i = 0 ; i < ranges.length ; i++ )\r
+               {\r
+                       var range = ranges[ i ];\r
+\r
+                       if ( range.collapsed )\r
+                       {\r
+                               // Walker does not handle collapsed ranges yet - fall back to old API.\r
+                               var startNode = range.getCommonAncestor();\r
+                               var nearestCell = startNode.getAscendant( 'td', true ) || startNode.getAscendant( 'th', true );\r
+                               if ( nearestCell )\r
+                                       retval.push( nearestCell );\r
+                       }\r
+                       else\r
+                       {\r
+                               var walker = new CKEDITOR.dom.walker( range );\r
+                               var node;\r
+                               walker.guard = moveOutOfCellGuard;\r
+\r
+                               while ( ( node = walker.next() ) )\r
+                               {\r
+                                       // If may be possible for us to have a range like this:\r
+                                       // <td>^1</td><td>^2</td>\r
+                                       // The 2nd td shouldn't be included.\r
+                                       //\r
+                                       // So we have to take care to include a td we've entered only when we've\r
+                                       // walked into its children.\r
+\r
+                                       var parent = node.getParent();\r
+                                       if ( parent && cellNodeRegex.test( parent.getName() ) && !parent.getCustomData( 'selected_cell' ) )\r
+                                       {\r
+                                               CKEDITOR.dom.element.setMarker( database, parent, 'selected_cell', true );\r
+                                               retval.push( parent );\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               CKEDITOR.dom.element.clearAllMarkers( database );\r
+\r
+               // Restore selection position.\r
+               selection.selectBookmarks( bookmarks );\r
+\r
+               return retval;\r
+       }\r
+\r
+       function createTableMap( $refCell )\r
+       {\r
+               var refCell = new CKEDITOR.dom.element( $refCell );\r
+               var $table = ( refCell.getName() == 'table' ? $refCell : refCell.getAscendant( 'table' ) ).$;\r
+               var $rows = $table.rows;\r
+\r
+               // Row and column counters.\r
+               var r = -1;\r
+               var map = [];\r
+               for ( var i = 0 ; i < $rows.length ; i++ )\r
+               {\r
+                       r++;\r
+                       if ( !map[ r ] )\r
+                               map[ r ] = [];\r
+\r
+                       var c = -1;\r
+\r
+                       for ( var j = 0 ; j < $rows[ i ].cells.length ; j++ )\r
+                       {\r
+                               var $cell = $rows[ i ].cells[ j ];\r
+\r
+                               c++;\r
+                               while ( map[ r ][ c ] )\r
+                                       c++;\r
+\r
+                               var colSpan = isNaN( $cell.colSpan ) ? 1 : $cell.colSpan;\r
+                               var rowSpan = isNaN( $cell.rowSpan ) ? 1 : $cell.rowSpan;\r
+\r
+                               for ( var rs = 0 ; rs < rowSpan ; rs++ )\r
+                               {\r
+                                       if ( !map[ r + rs ] )\r
+                                               map[ r + rs ] = [];\r
+\r
+                                       for ( var cs = 0 ; cs < colSpan ; cs++ )\r
+                                               map [ r + rs ][ c + cs ] = $rows[ i ].cells[ j ];\r
+                               }\r
+\r
+                               c += colSpan - 1;\r
+                       }\r
+               }\r
+\r
+               return map;\r
+       }\r
+\r
+       function installTableMap( tableMap, $table )\r
+       {\r
+               /*\r
+                * IE BUG: rowSpan is always 1 in IE if the cell isn't attached to a row. So\r
+                * store is separately in another attribute. (#1917)\r
+                */\r
+               var rowSpanAttr = CKEDITOR.env.ie ? '_cke_rowspan' : 'rowSpan';\r
+\r
+               /*\r
+                * Disconnect all the cells in tableMap from their parents, set all colSpan\r
+                * and rowSpan attributes to 1.\r
+                */\r
+               for ( var i = 0 ; i < tableMap.length ; i++ )\r
+               {\r
+                       for ( var j = 0 ; j < tableMap[ i ].length ; j++ )\r
+                       {\r
+                               var $cell = tableMap[ i ][ j ];\r
+                               if ( $cell.parentNode )\r
+                                       $cell.parentNode.removeChild( $cell );\r
+                               $cell.colSpan = $cell[ rowSpanAttr ] = 1;\r
+                       }\r
+               }\r
+\r
+               // Scan by rows and set colSpan.\r
+               var maxCol = 0;\r
+               for ( i = 0 ; i < tableMap.length ; i++ )\r
+               {\r
+                       for ( j = 0 ; j < tableMap[ i ].length ; j++ )\r
+                       {\r
+                               $cell = tableMap[ i ][ j ];\r
+                               if ( !$cell )\r
+                                       continue;\r
+                               if ( j > maxCol )\r
+                                       maxCol = j;\r
+                               if ( $cell[ '_cke_colScanned' ] )\r
+                                       continue;\r
+                               if ( tableMap[ i ][ j - 1 ] == $cell )\r
+                                       $cell.colSpan++;\r
+                               if ( tableMap[ i ][ j + 1 ] != $cell )\r
+                                       $cell[ '_cke_colScanned' ] = 1;\r
+                       }\r
+               }\r
+\r
+               // Scan by columns and set rowSpan.\r
+               for ( i = 0 ; i <= maxCol ; i++ )\r
+               {\r
+                       for ( j = 0 ; j < tableMap.length ; j++ )\r
+                       {\r
+                               if ( !tableMap[ j ] )\r
+                                       continue;\r
+                               $cell = tableMap[ j ][ i ];\r
+                               if ( !$cell || $cell[ '_cke_rowScanned' ] )\r
+                                       continue;\r
+                               if ( tableMap[ j - 1 ] && tableMap[ j - 1 ][ i ] == $cell )\r
+                                       $cell[ rowSpanAttr ]++;\r
+                               if ( !tableMap[ j + 1 ] || tableMap[ j + 1 ][ i ] != $cell  )\r
+                                       $cell[ '_cke_rowScanned' ] = 1;\r
+                       }\r
+               }\r
+\r
+               // Clear all temporary flags.\r
+               for ( i = 0 ; i < tableMap.length ; i++ )\r
+               {\r
+                       for ( j = 0 ; j < tableMap[ i ].length ; j++ )\r
+                       {\r
+                               $cell = tableMap[ i ][ j ];\r
+                               removeRawAttribute( $cell, '_cke_colScanned' );\r
+                               removeRawAttribute( $cell, '_cke_rowScanned' );\r
+                       }\r
+               }\r
+\r
+               // Insert physical rows and columns to table.\r
+               for ( i = 0 ; i < tableMap.length ; i++ )\r
+               {\r
+                       var $row = $table.ownerDocument.createElement( 'tr' );\r
+                       for ( j = 0 ; j < tableMap[ i ].length ; )\r
+                       {\r
+                               $cell = tableMap[ i ][ j ];\r
+                               if ( tableMap[ i - 1 ] && tableMap[ i - 1 ][ j ] == $cell )\r
+                               {\r
+                                       j += $cell.colSpan;\r
+                                       continue;\r
+                               }\r
+                               $row.appendChild( $cell );\r
+                               if ( rowSpanAttr != 'rowSpan' )\r
+                               {\r
+                                       $cell.rowSpan = $cell[ rowSpanAttr ];\r
+                                       $cell.removeAttribute( rowSpanAttr );\r
+                               }\r
+                               j += $cell.colSpan;\r
+                               if ( $cell.colSpan == 1 )\r
+                                       $cell.removeAttribute( 'colSpan' );\r
+                               if ( $cell.rowSpan == 1 )\r
+                                       $cell.removeAttribute( 'rowSpan' );\r
+                       }\r
+\r
+                       if ( CKEDITOR.env.ie )\r
+                               $table.rows[ i ].replaceNode( $row );\r
+                       else\r
+                       {\r
+                               var dest = new CKEDITOR.dom.element( $table.rows[ i ] );\r
+                               var src = new CKEDITOR.dom.element( $row );\r
+                               dest.setHtml( '' );\r
+                               src.moveChildren( dest );\r
+                       }\r
+               }\r
+       }\r
+\r
+       function clearRow( $tr )\r
+       {\r
+               // Get the array of row's cells.\r
+               var $cells = $tr.cells;\r
+\r
+               // Empty all cells.\r
+               for ( var i = 0 ; i < $cells.length ; i++ )\r
+               {\r
+                       $cells[ i ].innerHTML = '';\r
+\r
+                       if ( !CKEDITOR.env.ie )\r
+                               ( new CKEDITOR.dom.element( $cells[ i ] ) ).appendBogus();\r
+               }\r
+       }\r
+\r
+       function insertRow( selection, insertBefore )\r
+       {\r
+               // Get the row where the selection is placed in.\r
+               var row = selection.getStartElement().getAscendant( 'tr' );\r
+               if ( !row )\r
+                       return;\r
+\r
+               // Create a clone of the row.\r
+               var newRow = row.clone( true );\r
+\r
+               // Insert the new row before of it.\r
+               newRow.insertBefore( row );\r
+\r
+               // Clean one of the rows to produce the illusion of inserting an empty row\r
+               // before or after.\r
+               clearRow( insertBefore ? newRow.$ : row.$ );\r
+       }\r
+\r
+       function deleteRows( selectionOrRow )\r
+       {\r
+               if ( selectionOrRow instanceof CKEDITOR.dom.selection )\r
+               {\r
+                       var cells = getSelectedCells( selectionOrRow );\r
+                       var rowsToDelete = [];\r
+\r
+                       // Queue up the rows - it's possible and likely that we have duplicates.\r
+                       for ( var i = 0 ; i < cells.length ; i++ )\r
+                       {\r
+                               var row = cells[ i ].getParent();\r
+                               rowsToDelete[ row.$.rowIndex ] = row;\r
+                       }\r
+\r
+                       for ( i = rowsToDelete.length ; i >= 0 ; i-- )\r
+                       {\r
+                               if ( rowsToDelete[ i ] )\r
+                                       deleteRows( rowsToDelete[ i ] );\r
+                       }\r
+               }\r
+               else if ( selectionOrRow instanceof CKEDITOR.dom.element )\r
+               {\r
+                       var table = selectionOrRow.getAscendant( 'table' );\r
+\r
+                       if ( table.$.rows.length == 1 )\r
+                               table.remove();\r
+                       else\r
+                               selectionOrRow.remove();\r
+               }\r
+       }\r
+\r
+       function insertColumn( selection, insertBefore )\r
+       {\r
+               // Get the cell where the selection is placed in.\r
+               var startElement = selection.getStartElement();\r
+               var cell = startElement.getAscendant( 'td', true ) || startElement.getAscendant( 'th', true );\r
+\r
+               if ( !cell )\r
+                       return;\r
+\r
+               // Get the cell's table.\r
+               var table = cell.getAscendant( 'table' );\r
+               var cellIndex = cell.$.cellIndex;\r
+\r
+               // Loop through all rows available in the table.\r
+               for ( var i = 0 ; i < table.$.rows.length ; i++ )\r
+               {\r
+                       var $row = table.$.rows[ i ];\r
+\r
+                       // If the row doesn't have enough cells, ignore it.\r
+                       if ( $row.cells.length < ( cellIndex + 1 ) )\r
+                               continue;\r
+\r
+                       cell = new CKEDITOR.dom.element( $row.cells[ cellIndex ].cloneNode( false ) );\r
+\r
+                       if ( !CKEDITOR.env.ie )\r
+                               cell.appendBogus();\r
+\r
+                       // Get back the currently selected cell.\r
+                       var baseCell = new CKEDITOR.dom.element( $row.cells[ cellIndex ] );\r
+                       if ( insertBefore )\r
+                               cell.insertBefore( baseCell );\r
+                       else\r
+                               cell.insertAfter( baseCell );\r
+               }\r
+       }\r
+\r
+       function deleteColumns( selectionOrCell )\r
+       {\r
+               if ( selectionOrCell instanceof CKEDITOR.dom.selection )\r
+               {\r
+                       var colsToDelete = getSelectedCells( selectionOrCell );\r
+                       for ( var i = colsToDelete.length ; i >= 0 ; i-- )\r
+                       {\r
+                               if ( colsToDelete[ i ] )\r
+                                       deleteColumns( colsToDelete[ i ] );\r
+                       }\r
+               }\r
+               else if ( selectionOrCell instanceof CKEDITOR.dom.element )\r
+               {\r
+                       // Get the cell's table.\r
+                       var table = selectionOrCell.getAscendant( 'table' );\r
+\r
+                       // Get the cell index.\r
+                       var cellIndex = selectionOrCell.$.cellIndex;\r
+\r
+                       /*\r
+                        * Loop through all rows from down to up, coz it's possible that some rows\r
+                        * will be deleted.\r
+                        */\r
+                       for ( i = table.$.rows.length - 1 ; i >= 0 ; i-- )\r
+                       {\r
+                               // Get the row.\r
+                               var row = new CKEDITOR.dom.element( table.$.rows[ i ] );\r
+\r
+                               // If the cell to be removed is the first one and the row has just one cell.\r
+                               if ( !cellIndex && row.$.cells.length == 1 )\r
+                               {\r
+                                       deleteRows( row );\r
+                                       continue;\r
+                               }\r
+\r
+                               // Else, just delete the cell.\r
+                               if ( row.$.cells[ cellIndex ] )\r
+                                       row.$.removeChild( row.$.cells[ cellIndex ] );\r
+                       }\r
+               }\r
+       }\r
+\r
+       function insertCell( selection, insertBefore )\r
+       {\r
+               var startElement = selection.getStartElement();\r
+               var cell = startElement.getAscendant( 'td', true ) || startElement.getAscendant( 'th', true );\r
+\r
+               if ( !cell )\r
+                       return;\r
+\r
+               // Create the new cell element to be added.\r
+               var newCell = cell.clone();\r
+               if ( !CKEDITOR.env.ie )\r
+                       newCell.appendBogus();\r
+\r
+               if ( insertBefore )\r
+                       newCell.insertBefore( cell );\r
+               else\r
+                       newCell.insertAfter( cell );\r
+       }\r
+\r
+       function deleteCells( selectionOrCell )\r
+       {\r
+               if ( selectionOrCell instanceof CKEDITOR.dom.selection )\r
+               {\r
+                       var cellsToDelete = getSelectedCells( selectionOrCell );\r
+                       for ( var i = cellsToDelete.length - 1 ; i >= 0 ; i-- )\r
+                               deleteCells( cellsToDelete[ i ] );\r
+               }\r
+               else if ( selectionOrCell instanceof CKEDITOR.dom.element )\r
+               {\r
+                       if ( selectionOrCell.getParent().getChildCount() == 1 )\r
+                               selectionOrCell.getParent().remove();\r
+                       else\r
+                               selectionOrCell.remove();\r
+               }\r
+       }\r
+\r
+       // Context menu on table caption incorrect (#3834)\r
+       var contextMenuTags = { thead : 1, tbody : 1, tfoot : 1, td : 1, tr : 1, th : 1 };\r
+\r
+       CKEDITOR.plugins.tabletools =\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       var lang = editor.lang.table;\r
+\r
+                       editor.addCommand( 'cellProperties', new CKEDITOR.dialogCommand( 'cellProperties' ) );\r
+                       CKEDITOR.dialog.add( 'cellProperties', this.path + 'dialogs/tableCell.js' );\r
+\r
+                       editor.addCommand( 'tableDelete',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               var selection = editor.getSelection();\r
+                                               var startElement = selection && selection.getStartElement();\r
+                                               var table = startElement && startElement.getAscendant( 'table', true );\r
+\r
+                                               if ( !table )\r
+                                                       return;\r
+\r
+                                               // Maintain the selection point at where the table was deleted.\r
+                                               selection.selectElement( table );\r
+                                               var range = selection.getRanges()[0];\r
+                                               range.collapse();\r
+                                               selection.selectRanges( [ range ] );\r
+\r
+                                               // If the table's parent has only one child, remove it as well.\r
+                                               if ( table.getParent().getChildCount() == 1 )\r
+                                                       table.getParent().remove();\r
+                                               else\r
+                                                       table.remove();\r
+                                       }\r
+                               } );\r
+\r
+                       editor.addCommand( 'rowDelete',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               var selection = editor.getSelection();\r
+                                               deleteRows( selection );\r
+                                       }\r
+                               } );\r
+\r
+                       editor.addCommand( 'rowInsertBefore',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               var selection = editor.getSelection();\r
+                                               insertRow( selection, true );\r
+                                       }\r
+                               } );\r
+\r
+                       editor.addCommand( 'rowInsertAfter',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               var selection = editor.getSelection();\r
+                                               insertRow( selection );\r
+                                       }\r
+                               } );\r
+\r
+                       editor.addCommand( 'columnDelete',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               var selection = editor.getSelection();\r
+                                               deleteColumns( selection );\r
+                                       }\r
+                               } );\r
+\r
+                       editor.addCommand( 'columnInsertBefore',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               var selection = editor.getSelection();\r
+                                               insertColumn( selection, true );\r
+                                       }\r
+                               } );\r
+\r
+                       editor.addCommand( 'columnInsertAfter',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               var selection = editor.getSelection();\r
+                                               insertColumn( selection );\r
+                                       }\r
+                               } );\r
+\r
+                       editor.addCommand( 'cellDelete',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               var selection = editor.getSelection();\r
+                                               deleteCells( selection );\r
+                                       }\r
+                               } );\r
+\r
+                       editor.addCommand( 'cellInsertBefore',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               var selection = editor.getSelection();\r
+                                               insertCell( selection, true );\r
+                                       }\r
+                               } );\r
+\r
+                       editor.addCommand( 'cellInsertAfter',\r
+                               {\r
+                                       exec : function( editor )\r
+                                       {\r
+                                               var selection = editor.getSelection();\r
+                                               insertCell( selection );\r
+                                       }\r
+                               } );\r
+\r
+                       // If the "menu" plugin is loaded, register the menu items.\r
+                       if ( editor.addMenuItems )\r
+                       {\r
+                               editor.addMenuItems(\r
+                                       {\r
+                                               tablecell :\r
+                                               {\r
+                                                       label : lang.cell.menu,\r
+                                                       group : 'tablecell',\r
+                                                       order : 1,\r
+                                                       getItems : function()\r
+                                                       {\r
+                                                               var cells = getSelectedCells( editor.getSelection() );\r
+                                                               return {\r
+                                                                       tablecell_insertBefore : CKEDITOR.TRISTATE_OFF,\r
+                                                                       tablecell_insertAfter : CKEDITOR.TRISTATE_OFF,\r
+                                                                       tablecell_delete : CKEDITOR.TRISTATE_OFF,\r
+                                                                       tablecell_properties : cells.length > 0 ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED\r
+                                                               };\r
+                                                       }\r
+                                               },\r
+\r
+                                               tablecell_insertBefore :\r
+                                               {\r
+                                                       label : lang.cell.insertBefore,\r
+                                                       group : 'tablecell',\r
+                                                       command : 'cellInsertBefore',\r
+                                                       order : 5\r
+                                               },\r
+\r
+                                               tablecell_insertAfter :\r
+                                               {\r
+                                                       label : lang.cell.insertAfter,\r
+                                                       group : 'tablecell',\r
+                                                       command : 'cellInsertAfter',\r
+                                                       order : 10\r
+                                               },\r
+\r
+                                               tablecell_delete :\r
+                                               {\r
+                                                       label : lang.cell.deleteCell,\r
+                                                       group : 'tablecell',\r
+                                                       command : 'cellDelete',\r
+                                                       order : 15\r
+                                               },\r
+\r
+                                               tablecell_properties :\r
+                                               {\r
+                                                       label : lang.cell.title,\r
+                                                       group : 'tablecellproperties',\r
+                                                       command : 'cellProperties',\r
+                                                       order : 20\r
+                                               },\r
+\r
+                                               tablerow :\r
+                                               {\r
+                                                       label : lang.row.menu,\r
+                                                       group : 'tablerow',\r
+                                                       order : 1,\r
+                                                       getItems : function()\r
+                                                       {\r
+                                                               return {\r
+                                                                       tablerow_insertBefore : CKEDITOR.TRISTATE_OFF,\r
+                                                                       tablerow_insertAfter : CKEDITOR.TRISTATE_OFF,\r
+                                                                       tablerow_delete : CKEDITOR.TRISTATE_OFF\r
+                                                               };\r
+                                                       }\r
+                                               },\r
+\r
+                                               tablerow_insertBefore :\r
+                                               {\r
+                                                       label : lang.row.insertBefore,\r
+                                                       group : 'tablerow',\r
+                                                       command : 'rowInsertBefore',\r
+                                                       order : 5\r
+                                               },\r
+\r
+                                               tablerow_insertAfter :\r
+                                               {\r
+                                                       label : lang.row.insertAfter,\r
+                                                       group : 'tablerow',\r
+                                                       command : 'rowInsertAfter',\r
+                                                       order : 10\r
+                                               },\r
+\r
+                                               tablerow_delete :\r
+                                               {\r
+                                                       label : lang.row.deleteRow,\r
+                                                       group : 'tablerow',\r
+                                                       command : 'rowDelete',\r
+                                                       order : 15\r
+                                               },\r
+\r
+                                               tablecolumn :\r
+                                               {\r
+                                                       label : lang.column.menu,\r
+                                                       group : 'tablecolumn',\r
+                                                       order : 1,\r
+                                                       getItems : function()\r
+                                                       {\r
+                                                               return {\r
+                                                                       tablecolumn_insertBefore : CKEDITOR.TRISTATE_OFF,\r
+                                                                       tablecolumn_insertAfter : CKEDITOR.TRISTATE_OFF,\r
+                                                                       tablecolumn_delete : CKEDITOR.TRISTATE_OFF\r
+                                                               };\r
+                                                       }\r
+                                               },\r
+\r
+                                               tablecolumn_insertBefore :\r
+                                               {\r
+                                                       label : lang.column.insertBefore,\r
+                                                       group : 'tablecolumn',\r
+                                                       command : 'columnInsertBefore',\r
+                                                       order : 5\r
+                                               },\r
+\r
+                                               tablecolumn_insertAfter :\r
+                                               {\r
+                                                       label : lang.column.insertAfter,\r
+                                                       group : 'tablecolumn',\r
+                                                       command : 'columnInsertAfter',\r
+                                                       order : 10\r
+                                               },\r
+\r
+                                               tablecolumn_delete :\r
+                                               {\r
+                                                       label : lang.column.deleteColumn,\r
+                                                       group : 'tablecolumn',\r
+                                                       command : 'columnDelete',\r
+                                                       order : 15\r
+                                               }\r
+                                       });\r
+                       }\r
+\r
+                       // If the "contextmenu" plugin is laoded, register the listeners.\r
+                       if ( editor.contextMenu )\r
+                       {\r
+                               editor.contextMenu.addListener( function( element, selection )\r
+                                       {\r
+                                               if ( !element )\r
+                                                       return null;\r
+\r
+                                               while ( element )\r
+                                               {\r
+                                                       if ( element.getName() in contextMenuTags )\r
+                                                       {\r
+                                                               return {\r
+                                                                       tablecell : CKEDITOR.TRISTATE_OFF,\r
+                                                                       tablerow : CKEDITOR.TRISTATE_OFF,\r
+                                                                       tablecolumn : CKEDITOR.TRISTATE_OFF\r
+                                                               };\r
+                                                       }\r
+                                                       element = element.getParent();\r
+                                               }\r
+\r
+                                               return null;\r
+                                       } );\r
+                       }\r
+               },\r
+\r
+               getSelectedCells : getSelectedCells\r
+\r
+       };\r
+       CKEDITOR.plugins.add( 'tabletools', CKEDITOR.plugins.tabletools );\r
+})();\r
diff --git a/_source/plugins/templates/dialogs/templates.js b/_source/plugins/templates/dialogs/templates.js
new file mode 100644 (file)
index 0000000..752e7be
--- /dev/null
@@ -0,0 +1,170 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       var doc = CKEDITOR.document;\r
+\r
+       var listId = 'cke' + CKEDITOR.tools.getNextNumber();\r
+\r
+       // Constructs the HTML view of the specified templates data.\r
+       function renderTemplatesList( editor, templatesDefinitions )\r
+       {\r
+               var listDiv = doc.getById( listId );\r
+\r
+               // clear loading wait text.\r
+               listDiv.setHtml( '' );\r
+\r
+               for ( var i = 0 ; i < templatesDefinitions.length ; i++ )\r
+               {\r
+                       var definition = CKEDITOR.getTemplates( templatesDefinitions[ i ] ),\r
+                               imagesPath = definition.imagesPath,\r
+                               templates = definition.templates;\r
+\r
+                       for ( var j = 0 ; j < templates.length ; j++ )\r
+                       {\r
+                               var template = templates[ j ];\r
+                               listDiv.append( createTemplateItem( editor, template, imagesPath ) );\r
+                       }\r
+               }\r
+       }\r
+\r
+       function createTemplateItem( editor, template, imagesPath )\r
+       {\r
+               var div = doc.createElement( 'div' );\r
+               div.setAttribute( 'class', 'cke_tpl_item' );\r
+\r
+               // Build the inner HTML of our new item DIV.\r
+               var html = '<table style="width:350px;" class="cke_tpl_preview"><tr>';\r
+\r
+               if( template.image && imagesPath )\r
+                       html += '<td class="cke_tpl_preview_img"><img src="' + CKEDITOR.getUrl( imagesPath + template.image ) + '"></td>';\r
+\r
+               html += '<td style="white-space:normal;"><span class="cke_tpl_title">' + template.title + '</span><br/>';\r
+\r
+               if( template.description )\r
+                       html += '<span>' + template.description + '</span>';\r
+\r
+               html += '</td></tr></table>';\r
+\r
+               div.setHtml( html );\r
+\r
+               div.on( 'mouseover', function()\r
+                       {\r
+                               div.addClass( 'cke_tpl_hover' );\r
+                       });\r
+\r
+               div.on( 'mouseout', function()\r
+                       {\r
+                               div.removeClass( 'cke_tpl_hover' );\r
+                       });\r
+\r
+               div.on( 'click', function()\r
+                       {\r
+                               insertTemplate( editor, template.html );\r
+                       });\r
+\r
+               return div;\r
+       }\r
+\r
+       /**\r
+        * Insert the specified template content\r
+        * to document.\r
+        * @param {Number} index\r
+        */\r
+       function insertTemplate( editor, html )\r
+       {\r
+               var dialog = CKEDITOR.dialog.getCurrent(),\r
+                       isInsert = dialog.getValueOf( 'selectTpl', 'chkInsertOpt' );\r
+\r
+               if( isInsert )\r
+               {\r
+                       editor.setData( html );\r
+               }\r
+               else\r
+               {\r
+                       editor.insertHtml( html );\r
+               }\r
+\r
+               dialog.hide();\r
+       }\r
+\r
+       CKEDITOR.dialog.add( 'templates', function( editor )\r
+               {\r
+                       // Load skin at first.\r
+                       CKEDITOR.skins.load( editor, 'templates' );\r
+\r
+                       /**\r
+                        * Load templates once.\r
+                        */\r
+                       var isLoaded = false;\r
+\r
+                       return {\r
+                               title :editor.lang.templates.title,\r
+\r
+                               minWidth : CKEDITOR.env.ie ? 440 : 400,\r
+                               minHeight : 340,\r
+\r
+                               contents :\r
+                               [\r
+                                       {\r
+                                               id :'selectTpl',\r
+                                               label : editor.lang.templates.title,\r
+                                               elements :\r
+                                               [\r
+                                                       {\r
+                                                               type : 'vbox',\r
+                                                               padding : 5,\r
+                                                               children :\r
+                                                               [\r
+                                                                       {\r
+                                                                               type : 'html',\r
+                                                                               html :\r
+                                                                                       '<span>'  +\r
+                                                                                               editor.lang.templates.selectPromptMsg +\r
+                                                                                       '</span>'\r
+                                                                       },\r
+                                                                       {\r
+                                                                               type : 'html',\r
+                                                                               html :\r
+                                                                                       '<div id="' + listId + '" class="cke_tpl_list">' +\r
+                                                                                               '<div class="cke_tpl_loading"><span></span></div>' +\r
+                                                                                       '</div>'\r
+                                                                       },\r
+                                                                       {\r
+                                                                               id : 'chkInsertOpt',\r
+                                                                               type : 'checkbox',\r
+                                                                               label : editor.lang.templates.insertOption,\r
+                                                                               'default' : editor.config.templates_replaceContent\r
+                                                                       }\r
+                                                               ]\r
+                                                       }\r
+                                               ]\r
+                                       }\r
+                               ],\r
+\r
+                               buttons : [ CKEDITOR.dialog.cancelButton ],\r
+\r
+                               onShow : function()\r
+                               {\r
+                                       CKEDITOR.loadTemplates( editor.config.templates_files, function()\r
+                                               {\r
+                                                       var templates = editor.config.templates.split( ',' );\r
+\r
+                                                       if ( templates.length )\r
+                                                               renderTemplatesList( editor, templates );\r
+                                                       else\r
+                                                       {\r
+                                                               var listCtEl = doc.getById( listId );\r
+                                                               listCtEl.setHtml(\r
+                                                                       '<div class="cke_tpl_empty">' +\r
+                                                                               '<span>' + editor.lang.templates.emptyListMsg + '</span>' +\r
+                                                                       '</div>' );\r
+                                                       }\r
+                                               });\r
+                               }\r
+                       };\r
+               });\r
+})();\r
diff --git a/_source/plugins/templates/plugin.js b/_source/plugins/templates/plugin.js
new file mode 100644 (file)
index 0000000..dc88870
--- /dev/null
@@ -0,0 +1,99 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+       CKEDITOR.plugins.add( 'templates',\r
+               {\r
+                       requires : [ 'dialog' ],\r
+\r
+                       init : function( editor )\r
+                       {\r
+                               CKEDITOR.dialog.add( 'templates', CKEDITOR.getUrl( this.path + 'dialogs/templates.js' ) );\r
+\r
+                               editor.addCommand( 'templates', new CKEDITOR.dialogCommand( 'templates' ) );\r
+\r
+                               editor.ui.addButton( 'Templates',\r
+                                       {\r
+                                               label : editor.lang.templates.button,\r
+                                               command : 'templates'\r
+                                       });\r
+                       }\r
+               });\r
+\r
+       var templates = {},\r
+               loadedTemplatesFiles = {};\r
+\r
+       CKEDITOR.addTemplates = function( name, definition )\r
+       {\r
+               templates[ name ] = definition;\r
+       };\r
+\r
+       CKEDITOR.getTemplates = function( name )\r
+       {\r
+               return templates[ name ];\r
+       };\r
+\r
+       CKEDITOR.loadTemplates = function( templateFiles, callback )\r
+       {\r
+               // Holds the templates files to be loaded.\r
+               var toLoad = [];\r
+\r
+               // Look for pending template files to get loaded.\r
+               for ( var i = 0 ; i < templateFiles.length ; i++ )\r
+               {\r
+                       if ( !loadedTemplatesFiles[ templateFiles[ i ] ] )\r
+                       {\r
+                               toLoad.push( templateFiles[ i ] );\r
+                               loadedTemplatesFiles[ templateFiles[ i ] ] = 1;\r
+                       }\r
+               }\r
+\r
+               if ( toLoad.length > 0 )\r
+                       CKEDITOR.scriptLoader.load( toLoad, callback );\r
+               else\r
+                       setTimeout( callback, 0 );\r
+       };\r
+})();\r
+\r
+\r
+\r
+/**\r
+ * The templates definition set to use. It accepts a list of names separated by\r
+ * comma. It must match definitions loaded with the templates_files setting.\r
+ * @type String\r
+ * @default 'default'\r
+ * @example\r
+ * config.templates = 'my_templates';\r
+ */\r
+CKEDITOR.config.templates = 'default';\r
+\r
+/**\r
+ * The list of templates definition files to load.\r
+ * @type (String) Array\r
+ * @default [ 'plugins/templates/templates/default.js' ]\r
+ * @example\r
+ * config.templates_files =\r
+ *     [\r
+ *         '/editor_templates/site_default.js',\r
+ *         'http://www.example.com/user_templates.js\r
+ *     ];\r
+ *\r
+ */\r
+CKEDITOR.config.templates_files =\r
+       [\r
+               CKEDITOR.getUrl(\r
+                       'plugins/templates/templates/default.js' )\r
+       ];\r
+\r
+/**\r
+ * Whether the "Replace actual contents" checkbox is checked by default in the\r
+ * Templates dialog.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.templates_replaceContent = false;\r
+ */\r
+CKEDITOR.config.templates_replaceContent = true;\r
diff --git a/_source/plugins/templates/templates/default.js b/_source/plugins/templates/templates/default.js
new file mode 100644 (file)
index 0000000..704cafa
--- /dev/null
@@ -0,0 +1,94 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+// Register a templates definition set named "default".\r
+CKEDITOR.addTemplates( 'default',\r
+{\r
+       // The name of sub folder which hold the shortcut preview images of the\r
+       // templates.\r
+       imagesPath : CKEDITOR.getUrl( CKEDITOR.plugins.getPath( 'templates' ) + 'templates/images/' ),\r
+\r
+       // The templates definitions.\r
+       templates :\r
+               [\r
+                       {\r
+                               title: 'Image and Title',\r
+                               image: 'template1.gif',\r
+                               description: 'One main image with a title and text that surround the image.',\r
+                               html:\r
+                                       '<h3>' +\r
+                                               '<img style="margin-right: 10px" height="100" alt="" width="100" align="left"/>' +\r
+                                               'Type the title here'+\r
+                                       '</h3>' +\r
+                                       '<p>' +\r
+                                               'Type the text here' +\r
+                                       '</p>'\r
+                       },\r
+                       {\r
+                               title: 'Strange Template',\r
+                               image: 'template2.gif',\r
+                               description: 'A template that defines two colums, each one with a title, and some text.',\r
+                               html:\r
+                                       '<table cellspacing="0" cellpadding="0" width="100%" border="0">' +\r
+                                               '<tr>' +\r
+                                                       '<td width="50%">' +\r
+                                                               '<h3>Title 1</h3>' +\r
+                                                       '</td>' +\r
+                                                       '<td></td>' +\r
+                                                       '<td width="50%">' +\r
+                                                               '<h3>Title 2</h3>' +\r
+                                                       '</td>' +\r
+                                               '</tr>' +\r
+                                               '<tr>' +\r
+                                                       '<td>' +\r
+                                                               'Text 1' +\r
+                                                       '</td>' +\r
+                                                       '<td></td>' +\r
+                                                       '<td>' +\r
+                                                               'Text 2' +\r
+                                                       '</td>' +\r
+                                               '</tr>' +\r
+                                       '</table>' +\r
+                                       '<p>' +\r
+                                               'More text goes here.' +\r
+                                       '</p>'\r
+                       },\r
+                       {\r
+                               title: 'Text and Table',\r
+                               image: 'template3.gif',\r
+                               description: 'A title with some text and a table.',\r
+                               html:\r
+                                       '<div style="width: 80%">' +\r
+                                               '<h3>' +\r
+                                                       'Title goes here' +\r
+                                               '</h3>' +\r
+                                               '<table style="float: right" cellspacing="0" cellpadding="0" width="150" border="1">' +\r
+                                                       '<caption style="border:solid 1px black">' +\r
+                                                               '<strong>Table title</strong>' +\r
+                                                       '</caption>' +\r
+                                                       '</tr>' +\r
+                                                       '<tr>' +\r
+                                                               '<td>&nbsp;</td>' +\r
+                                                               '<td>&nbsp;</td>' +\r
+                                                               '<td>&nbsp;</td>' +\r
+                                                       '</tr>' +\r
+                                                       '<tr>' +\r
+                                                               '<td>&nbsp;</td>' +\r
+                                                               '<td>&nbsp;</td>' +\r
+                                                               '<td>&nbsp;</td>' +\r
+                                                       '</tr>' +\r
+                                                       '<tr>' +\r
+                                                               '<td>&nbsp;</td>' +\r
+                                                               '<td>&nbsp;</td>' +\r
+                                                               '<td>&nbsp;</td>' +\r
+                                                       '</tr>' +\r
+                                               '</table>' +\r
+                                               '<p>' +\r
+                                                       'Type the text here' +\r
+                                               '</p>' +\r
+                                       '</div>'\r
+                       }\r
+               ]\r
+});\r
diff --git a/_source/plugins/templates/templates/images/template1.gif b/_source/plugins/templates/templates/images/template1.gif
new file mode 100644 (file)
index 0000000..efdabbe
Binary files /dev/null and b/_source/plugins/templates/templates/images/template1.gif differ
diff --git a/_source/plugins/templates/templates/images/template2.gif b/_source/plugins/templates/templates/images/template2.gif
new file mode 100644 (file)
index 0000000..d1cebb3
Binary files /dev/null and b/_source/plugins/templates/templates/images/template2.gif differ
diff --git a/_source/plugins/templates/templates/images/template3.gif b/_source/plugins/templates/templates/images/template3.gif
new file mode 100644 (file)
index 0000000..db41cb4
Binary files /dev/null and b/_source/plugins/templates/templates/images/template3.gif differ
diff --git a/_source/plugins/toolbar/plugin.js b/_source/plugins/toolbar/plugin.js
new file mode 100644 (file)
index 0000000..58e7a28
--- /dev/null
@@ -0,0 +1,412 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview The "toolbar" plugin. Renders the default toolbar interface in\r
+ * the editor.\r
+ */\r
+\r
+(function()\r
+{\r
+       var toolbox = function()\r
+       {\r
+               this.toolbars = [];\r
+               this.focusCommandExecuted = false;\r
+       };\r
+\r
+       toolbox.prototype.focus = function()\r
+       {\r
+               for ( var t = 0, toolbar ; toolbar = this.toolbars[ t++ ] ; )\r
+               {\r
+                       for ( var i = 0, item ; item = toolbar.items[ i++ ] ; )\r
+                       {\r
+                               if ( item.focus )\r
+                               {\r
+                                       item.focus();\r
+                                       return;\r
+                               }\r
+                       }\r
+               }\r
+       };\r
+\r
+       var commands =\r
+       {\r
+               toolbarFocus :\r
+               {\r
+                       modes : { wysiwyg : 1, source : 1 },\r
+\r
+                       exec : function( editor )\r
+                       {\r
+                               if ( editor.toolbox )\r
+                               {\r
+                                       editor.toolbox.focusCommandExecuted = true;\r
+\r
+                                       // Make the first button focus accessible. (#3417)\r
+                                       if ( CKEDITOR.env.ie )\r
+                                               setTimeout( function(){ editor.toolbox.focus(); }, 100 );\r
+                                       else\r
+                                               editor.toolbox.focus();\r
+                               }\r
+                       }\r
+               }\r
+       };\r
+\r
+       CKEDITOR.plugins.add( 'toolbar',\r
+       {\r
+               init : function( editor )\r
+               {\r
+                       var itemKeystroke = function( item, keystroke )\r
+                       {\r
+                               switch ( keystroke )\r
+                               {\r
+                                       case 39 :                                       // RIGHT-ARROW\r
+                                       case 9 :                                        // TAB\r
+                                               // Look for the next item in the toolbar.\r
+                                               while ( ( item = item.next || ( item.toolbar.next && item.toolbar.next.items[ 0 ] ) ) && !item.focus )\r
+                                               { /*jsl:pass*/ }\r
+\r
+                                               // If available, just focus it, otherwise focus the\r
+                                               // first one.\r
+                                               if ( item )\r
+                                                       item.focus();\r
+                                               else\r
+                                                       editor.toolbox.focus();\r
+\r
+                                               return false;\r
+\r
+                                       case 37 :                                       // LEFT-ARROW\r
+                                       case CKEDITOR.SHIFT + 9 :       // SHIFT + TAB\r
+                                               // Look for the previous item in the toolbar.\r
+                                               while ( ( item = item.previous || ( item.toolbar.previous && item.toolbar.previous.items[ item.toolbar.previous.items.length - 1 ] ) ) && !item.focus )\r
+                                               { /*jsl:pass*/ }\r
+\r
+                                               // If available, just focus it, otherwise focus the\r
+                                               // last one.\r
+                                               if ( item )\r
+                                                       item.focus();\r
+                                               else\r
+                                               {\r
+                                                       var lastToolbarItems = editor.toolbox.toolbars[ editor.toolbox.toolbars.length - 1 ].items;\r
+                                                       lastToolbarItems[ lastToolbarItems.length - 1 ].focus();\r
+                                               }\r
+\r
+                                               return false;\r
+\r
+                                       case 27 :                                       // ESC\r
+                                               editor.focus();\r
+                                               return false;\r
+\r
+                                       case 13 :                                       // ENTER\r
+                                       case 32 :                                       // SPACE\r
+                                               item.execute();\r
+                                               return false;\r
+                               }\r
+                               return true;\r
+                       };\r
+\r
+                       editor.on( 'themeSpace', function( event )\r
+                               {\r
+                                       if ( event.data.space == editor.config.toolbarLocation )\r
+                                       {\r
+                                               editor.toolbox = new toolbox();\r
+\r
+                                               var output = [ '<div class="cke_toolbox"' ],\r
+                                                       expanded =  editor.config.toolbarStartupExpanded,\r
+                                                       groupStarted;\r
+\r
+                                               output.push( expanded ? '>' : ' style="display:none">' );\r
+\r
+                                               var toolbars = editor.toolbox.toolbars,\r
+                                                       toolbar =\r
+                                                                       ( editor.config.toolbar instanceof Array ) ?\r
+                                                                               editor.config.toolbar\r
+                                                                       :\r
+                                                                               editor.config[ 'toolbar_' + editor.config.toolbar ];\r
+\r
+                                               for ( var r = 0 ; r < toolbar.length ; r++ )\r
+                                               {\r
+                                                       var row = toolbar[ r ];\r
+\r
+                                                       // It's better to check if the row object is really\r
+                                                       // available because it's a common mistake to leave\r
+                                                       // an extra comma in the toolbar definition\r
+                                                       // settings, which leads on the editor not loading\r
+                                                       // at all in IE. (#3983)\r
+                                                       if ( !row )\r
+                                                               continue;\r
+\r
+                                                       var toolbarId = 'cke_' + CKEDITOR.tools.getNextNumber(),\r
+                                                               toolbarObj = { id : toolbarId, items : [] };\r
+\r
+                                                       if ( groupStarted )\r
+                                                       {\r
+                                                               output.push( '</div>' );\r
+                                                               groupStarted = 0;\r
+                                                       }\r
+\r
+                                                       if ( row === '/' )\r
+                                                       {\r
+                                                               output.push( '<div class="cke_break"></div>' );\r
+                                                               continue;\r
+                                                       }\r
+\r
+                                                       output.push( '<span id="', toolbarId, '" class="cke_toolbar"><span class="cke_toolbar_start"></span>' );\r
+\r
+                                                       // Add the toolbar to the "editor.toolbox.toolbars"\r
+                                                       // array.\r
+                                                       var index = toolbars.push( toolbarObj ) - 1;\r
+\r
+                                                       // Create the next/previous reference.\r
+                                                       if ( index > 0 )\r
+                                                       {\r
+                                                               toolbarObj.previous = toolbars[ index - 1 ];\r
+                                                               toolbarObj.previous.next = toolbarObj;\r
+                                                       }\r
+\r
+                                                       // Create all items defined for this toolbar.\r
+                                                       for ( var i = 0 ; i < row.length ; i++ )\r
+                                                       {\r
+                                                               var item,\r
+                                                                       itemName = row[ i ];\r
+\r
+                                                               if ( itemName == '-' )\r
+                                                                       item = CKEDITOR.ui.separator;\r
+                                                               else\r
+                                                                       item = editor.ui.create( itemName );\r
+\r
+                                                               if ( item )\r
+                                                               {\r
+                                                                       if ( item.canGroup )\r
+                                                                       {\r
+                                                                               if ( !groupStarted )\r
+                                                                               {\r
+                                                                                       output.push( '<span class="cke_toolgroup">' );\r
+                                                                                       groupStarted = 1;\r
+                                                                               }\r
+                                                                       }\r
+                                                                       else if ( groupStarted )\r
+                                                                       {\r
+                                                                               output.push( '</span>' );\r
+                                                                               groupStarted = 0;\r
+                                                                       }\r
+\r
+                                                                       var itemObj = item.render( editor, output );\r
+                                                                       index = toolbarObj.items.push( itemObj ) - 1;\r
+\r
+                                                                       if ( index > 0 )\r
+                                                                       {\r
+                                                                               itemObj.previous = toolbarObj.items[ index - 1 ];\r
+                                                                               itemObj.previous.next = itemObj;\r
+                                                                       }\r
+\r
+                                                                       itemObj.toolbar = toolbarObj;\r
+                                                                       itemObj.onkey = itemKeystroke;\r
+\r
+                                                                       /*\r
+                                                                        * Fix for #3052:\r
+                                                                        * Prevent JAWS from focusing the toolbar after document load.\r
+                                                                        */\r
+                                                                       itemObj.onfocus = function()\r
+                                                                       {\r
+                                                                               if ( !editor.toolbox.focusCommandExecuted )\r
+                                                                                       editor.focus();\r
+                                                                       };\r
+                                                               }\r
+                                                       }\r
+\r
+                                                       if ( groupStarted )\r
+                                                       {\r
+                                                               output.push( '</span>' );\r
+                                                               groupStarted = 0;\r
+                                                       }\r
+\r
+                                                       output.push( '<span class="cke_toolbar_end"></span></span>' );\r
+                                               }\r
+\r
+                                               output.push( '</div>' );\r
+\r
+                                               if ( editor.config.toolbarCanCollapse )\r
+                                               {\r
+                                                       var collapserFn = CKEDITOR.tools.addFunction(\r
+                                                               function()\r
+                                                               {\r
+                                                                       editor.execCommand( 'toolbarCollapse' );\r
+                                                               } );\r
+\r
+                                                       var collapserId = 'cke_' + CKEDITOR.tools.getNextNumber();\r
+\r
+                                                       editor.addCommand( 'toolbarCollapse',\r
+                                                               {\r
+                                                                       exec : function( editor )\r
+                                                                       {\r
+                                                                               var collapser = CKEDITOR.document.getById( collapserId );\r
+                                                                               var toolbox = collapser.getPrevious();\r
+                                                                               var contents = editor.getThemeSpace( 'contents' );\r
+                                                                               var toolboxContainer = toolbox.getParent();\r
+                                                                               var contentHeight = parseInt( contents.$.style.height, 10 );\r
+                                                                               var previousHeight = toolboxContainer.$.offsetHeight;\r
+\r
+                                                                               if ( toolbox.isVisible() )\r
+                                                                               {\r
+                                                                                       toolbox.hide();\r
+                                                                                       collapser.addClass( 'cke_toolbox_collapser_min' );\r
+                                                                               }\r
+                                                                               else\r
+                                                                               {\r
+                                                                                       toolbox.show();\r
+                                                                                       collapser.removeClass( 'cke_toolbox_collapser_min' );\r
+                                                                               }\r
+\r
+                                                                               var dy = toolboxContainer.$.offsetHeight - previousHeight;\r
+                                                                               contents.setStyle( 'height', ( contentHeight - dy ) + 'px' );\r
+                                                                       },\r
+\r
+                                                                       modes : { wysiwyg : 1, source : 1 }\r
+                                                               } );\r
+\r
+                                                       output.push( '<a id="' + collapserId + '" class="cke_toolbox_collapser' );\r
+\r
+                                                       if ( !expanded )\r
+                                                               output.push( ' cke_toolbox_collapser_min' );\r
+\r
+                                                       output.push( '" onclick="CKEDITOR.tools.callFunction(' + collapserFn + ')"></a>' );\r
+                                               }\r
+\r
+                                               event.data.html += output.join( '' );\r
+                                       }\r
+                               });\r
+\r
+                       editor.addCommand( 'toolbarFocus', commands.toolbarFocus );\r
+               }\r
+       });\r
+})();\r
+\r
+/**\r
+ * The UI element that renders a toolbar separator.\r
+ * @type Object\r
+ * @example\r
+ */\r
+CKEDITOR.ui.separator =\r
+{\r
+       render : function( editor, output )\r
+       {\r
+               output.push( '<span class="cke_separator"></span>' );\r
+               return {};\r
+       }\r
+};\r
+\r
+/**\r
+ * The "theme space" to which rendering the toolbar. For the default theme,\r
+ * the recommended options are "top" and "bottom".\r
+ * @type String\r
+ * @default 'top'\r
+ * @see CKEDITOR.config.theme\r
+ * @example\r
+ * config.toolbarLocation = 'bottom';\r
+ */\r
+CKEDITOR.config.toolbarLocation = 'top';\r
+\r
+/**\r
+ * The toolbar definition. It is an array of toolbars (strips),\r
+ * each one being also an array, containing a list of UI items.\r
+ * Note that this setting is composed by "toolbar_" added by the toolbar name,\r
+ * which in this case is called "Basic". This second part of the setting name\r
+ * can be anything. You must use this name in the\r
+ * {@link CKEDITOR.config.toolbar} setting, so you instruct the editor which\r
+ * toolbar_(name) setting to you.\r
+ * @type Array\r
+ * @example\r
+ * // Defines a toolbar with only one strip containing the "Source" button, a\r
+ * // separator and the "Bold" and "Italic" buttons.\r
+ * <b>config.toolbar_Basic =\r
+ * [\r
+ *     [ 'Source', '-', 'Bold', 'Italic' ]\r
+ * ]</b>;\r
+ * config.toolbar = 'Basic';\r
+ */\r
+CKEDITOR.config.toolbar_Basic =\r
+[\r
+       ['Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink','-','About']\r
+];\r
+\r
+/**\r
+ * This is the default toolbar definition used by the editor. It contains all\r
+ * editor features.\r
+ * @type Array\r
+ * @default (see example)\r
+ * @example\r
+ * // This is actually the default value.\r
+ * config.toolbar_Full =\r
+ * [\r
+ *     ['Source','-','Save','NewPage','Preview','-','Templates'],\r
+ *     ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],\r
+ *     ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],\r
+ *     ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'],\r
+ *     '/',\r
+ *     ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],\r
+ *     ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],\r
+ *     ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],\r
+ *     ['Link','Unlink','Anchor'],\r
+ *     ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],\r
+ *     '/',\r
+ *     ['Styles','Format','Font','FontSize'],\r
+ *     ['TextColor','BGColor'],\r
+ *     ['Maximize', 'ShowBlocks','-','About']\r
+ * ];\r
+ */\r
+CKEDITOR.config.toolbar_Full =\r
+[\r
+       ['Source','-','Save','NewPage','Preview','-','Templates'],\r
+       ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],\r
+       ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],\r
+       ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'],\r
+       '/',\r
+       ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],\r
+       ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],\r
+       ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],\r
+       ['Link','Unlink','Anchor'],\r
+       ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],\r
+       '/',\r
+       ['Styles','Format','Font','FontSize'],\r
+       ['TextColor','BGColor'],\r
+       ['Maximize', 'ShowBlocks','-','About']\r
+];\r
+\r
+/**\r
+ * The toolbox (alias toolbar) definition. It is a toolbar name or an array of\r
+ * toolbars (strips), each one being also an array, containing a list of UI items.\r
+ * @type Array|String\r
+ * @default 'Full'\r
+ * @example\r
+ * // Defines a toolbar with only one strip containing the "Source" button, a\r
+ * // separator and the "Bold" and "Italic" buttons.\r
+ * config.toolbar =\r
+ * [\r
+ *     [ 'Source', '-', 'Bold', 'Italic' ]\r
+ * ];\r
+ * @example\r
+ * // Load toolbar_Name where Name = Basic.\r
+ * config.toolbar = 'Basic';\r
+ */\r
+CKEDITOR.config.toolbar = 'Full';\r
+\r
+/**\r
+ * Whether the toolbar can be collapsed by the user. If disabled, the collapser\r
+ * button will not be displayed.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.toolbarCanCollapse = false;\r
+ */\r
+CKEDITOR.config.toolbarCanCollapse = true;\r
+\r
+/**\r
+ * Whether the toolbar must start expanded when the editor is loaded.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.toolbarStartupExpanded = false;\r
+ */\r
+CKEDITOR.config.toolbarStartupExpanded = true;\r
diff --git a/_source/plugins/uicolor/dialogs/uicolor.js b/_source/plugins/uicolor/dialogs/uicolor.js
new file mode 100644 (file)
index 0000000..76d8031
--- /dev/null
@@ -0,0 +1,203 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'uicolor', function( editor )\r
+{\r
+       var dialog, picker, pickerContents,\r
+               // Actual UI color value.\r
+               uiColor = editor.getUiColor();\r
+\r
+       function setNewPickerColor( color )\r
+       {\r
+               // Convert HEX representation to RGB, stripping # char.\r
+               if ( /^#/.test( color ) )\r
+                       color = window.YAHOO.util.Color.hex2rgb( color.substr( 1 ) );\r
+               picker.setValue( color, true );\r
+               // Refresh picker UI.\r
+               picker.refresh( 'cke_uicolor_picker' );\r
+       }\r
+\r
+       function setNewUiColor( color, force )\r
+       {\r
+               if ( force || dialog._.contents.tab1.livePeview.getValue() )\r
+                       editor.setUiColor( color );\r
+               // Write new config string into textbox.\r
+               dialog._.contents.tab1.configBox.setValue(\r
+                       'config.uiColor = "#' + picker.get( "hex" ) + '"'\r
+               );\r
+       }\r
+\r
+       pickerContents =\r
+       {\r
+               id : 'yuiColorPicker',\r
+               type : 'html',\r
+               html : "<div id='cke_uicolor_picker' style='width: 360px; height: 200px; position: relative;'></div>",\r
+               onLoad : function( event )\r
+               {\r
+                       var url = CKEDITOR.getUrl(\r
+                                       'plugins/uicolor/yui/'\r
+                               );\r
+\r
+                       // Create new color picker widget.\r
+                       picker = new window.YAHOO.widget.ColorPicker( "cke_uicolor_picker",\r
+                               {\r
+                                       showhsvcontrols : true,\r
+                                       showhexcontrols : true,\r
+                                       images :\r
+                                       {\r
+                                               PICKER_THUMB : url + "assets/picker_thumb.png",\r
+                                               HUE_THUMB : url + "assets/hue_thumb.png"\r
+                                       }\r
+                               });\r
+\r
+                       // Set actual UI color to the picker.\r
+                       if ( uiColor )\r
+                               setNewPickerColor( uiColor );\r
+\r
+                       // Subscribe to the rgbChange event.\r
+                       picker.on( "rgbChange", function()\r
+                               {\r
+                                       // Reset predefined box.\r
+                                       dialog._.contents.tab1.predefined.setValue( '' );\r
+                                       setNewUiColor( '#' + picker.get( 'hex' ) );\r
+                               });\r
+\r
+                       // Fix input class names.\r
+                       var inputs = new CKEDITOR.dom.nodeList( picker.getElementsByTagName( 'input' ) );\r
+                       for ( var i = 0; i < inputs.count() ; i++ )\r
+                               inputs.getItem( i ).addClass( 'cke_dialog_ui_input_text' );\r
+               }\r
+       };\r
+\r
+       var skipPreviewChange = true;\r
+\r
+       return {\r
+               title : editor.lang.uicolor.title,\r
+               minWidth : 360,\r
+               minHeight : 320,\r
+               onLoad : function()\r
+               {\r
+                       dialog = this;\r
+                       this.setupContent();\r
+\r
+                       // #3808\r
+                       if ( CKEDITOR.env.ie7Compat )\r
+                               dialog.parts.contents.setStyle( 'overflow', 'hidden' );\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'tab1',\r
+                               label : '',\r
+                               title : '',\r
+                               expand : true,\r
+                               padding : 0,\r
+                               elements : [\r
+                                               pickerContents,\r
+                                               {\r
+                                                       id : 'tab1',\r
+                                                       type : 'vbox',\r
+                                                       children :\r
+                                                       [\r
+                                                               {\r
+                                                                       id : 'livePeview',\r
+                                                                       type : 'checkbox',\r
+                                                                       label : editor.lang.uicolor.preview,\r
+                                                                       'default' : 1,\r
+                                                                       onLoad : function()\r
+                                                                       {\r
+                                                                               skipPreviewChange = true;\r
+                                                                       },\r
+                                                                       onChange : function()\r
+                                                                       {\r
+                                                                               if ( skipPreviewChange )\r
+                                                                                       return;\r
+                                                                               var on = this.getValue(),\r
+                                                                                       color = on ? '#' + picker.get( 'hex' ) : uiColor;\r
+                                                                               setNewUiColor( color, true );\r
+                                                                       }\r
+                                                               },\r
+                                                               {\r
+                                                                       type : 'hbox',\r
+                                                                       children :\r
+                                                                       [\r
+                                                                               {\r
+                                                                                       id : 'predefined',\r
+                                                                                       type : 'select',\r
+                                                                                       'default' : '',\r
+                                                                                       label : editor.lang.uicolor.predefined,\r
+                                                                                       items :\r
+                                                                                       [\r
+                                                                                               [ '' ],\r
+                                                                                               [ 'Light blue', '#9AB8F3' ],\r
+                                                                                               [ 'Sand', '#D2B48C' ],\r
+                                                                                               [ 'Metallic', '#949AAA' ],\r
+                                                                                               [ 'Purple', '#C2A3C7' ],\r
+                                                                                               [ 'Olive', '#A2C980' ],\r
+                                                                                               [ 'Happy green', '#9BD446' ],\r
+                                                                                               [ 'Jezebel Blue', '#14B8C4' ],\r
+                                                                                               [ 'Burn', '#FF893A' ],\r
+                                                                                               [ 'Easy red', '#FF6969' ],\r
+                                                                                               [ 'Pisces 3', '#48B4F2' ],\r
+                                                                                               [ 'Aquarius 5', '#487ED4' ],\r
+                                                                                               [ 'Absinthe', '#A8CF76' ],\r
+                                                                                               [ 'Scrambled Egg', '#C7A622' ],\r
+                                                                                               [ 'Hello monday', '#8E8D80' ],\r
+                                                                                               [ 'Lovely sunshine', '#F1E8B1' ],\r
+                                                                                               [ 'Recycled air', '#B3C593' ],\r
+                                                                                               [ 'Down', '#BCBCA4' ],\r
+                                                                                               [ 'Mark Twain', '#CFE91D' ],\r
+                                                                                               [ 'Specks of dust', '#D1B596' ],\r
+                                                                                               [ 'Lollipop', '#F6CE23' ]\r
+                                                                                       ],\r
+                                                                                       onChange : function()\r
+                                                                                       {\r
+                                                                                               var color = this.getValue();\r
+                                                                                               if ( color )\r
+                                                                                               {\r
+                                                                                                       setNewPickerColor( color );\r
+                                                                                                       setNewUiColor( color );\r
+                                                                                                       // Refresh predefined preview box.\r
+                                                                                                       CKEDITOR.document.getById( 'predefinedPreview' ).setStyle( 'background', color );\r
+                                                                                               }\r
+                                                                                               else\r
+                                                                                                       CKEDITOR.document.getById( 'predefinedPreview' ).setStyle( 'background', '' );\r
+                                                                                       },\r
+                                                                                       onShow : function()\r
+                                                                                       {\r
+                                                                                               var color = editor.getUiColor();\r
+                                                                                               if ( color )\r
+                                                                                                       this.setValue( color );\r
+                                                                                       }\r
+                                                                               },\r
+                                                                               {\r
+                                                                                       id : 'predefinedPreview',\r
+                                                                                       type : 'html',\r
+                                                                                       html : '<div id="cke_uicolor_preview" style="border: 1px solid black; padding: 3px; width: 30px;">' +\r
+                                                                                                       '<div id="predefinedPreview" style="width: 30px; height: 30px;">&nbsp;</div>' +\r
+                                                                                               '</div>'\r
+                                                                               }\r
+                                                                       ]\r
+                                                               },\r
+                                                               {\r
+                                                                       id : 'configBox',\r
+                                                                       type : 'text',\r
+                                                                       label : editor.lang.uicolor.config,\r
+                                                                       onShow : function()\r
+                                                                       {\r
+                                                                               var color = editor.getUiColor();\r
+                                                                               if ( color )\r
+                                                                                       this.setValue(\r
+                                                                                               'config.uiColor = "' + color + '"'\r
+                                                                                       );\r
+                                                                       }\r
+                                                               }\r
+                                                       ]\r
+                                               }\r
+                                       ]\r
+                       }\r
+               ],\r
+               buttons : [ CKEDITOR.dialog.okButton ]\r
+       };\r
+} );\r
diff --git a/_source/plugins/uicolor/lang/en.js b/_source/plugins/uicolor/lang/en.js
new file mode 100644 (file)
index 0000000..13cb0f9
--- /dev/null
@@ -0,0 +1,15 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.setLang( 'uicolor', 'en',\r
+{\r
+       uicolor :\r
+       {\r
+               title : 'UI Color Picker',\r
+               preview : 'Live preview',\r
+               config : 'Paste this string into your config.js file',\r
+               predefined : 'Predefined color sets'\r
+       }\r
+});\r
diff --git a/_source/plugins/uicolor/plugin.js b/_source/plugins/uicolor/plugin.js
new file mode 100644 (file)
index 0000000..2b7dc00
--- /dev/null
@@ -0,0 +1,35 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'uicolor',\r
+{\r
+       requires : [ 'dialog' ],\r
+       lang : [ 'en' ],\r
+\r
+       init : function( editor )\r
+       {\r
+               if ( CKEDITOR.env.ie6Compat )\r
+                       return;\r
+\r
+               editor.addCommand( 'uicolor', new CKEDITOR.dialogCommand( 'uicolor' ) );\r
+               editor.ui.addButton( 'UIColor',\r
+                       {\r
+                               label : editor.lang.uicolor.title,\r
+                               command : 'uicolor',\r
+                               icon : this.path + 'uicolor.gif'\r
+                       });\r
+               CKEDITOR.dialog.add( 'uicolor', this.path + 'dialogs/uicolor.js' );\r
+\r
+               // Load YUI js files.\r
+               CKEDITOR.scriptLoader.load( CKEDITOR.getUrl(\r
+                       'plugins/uicolor/yui/yui.js'\r
+               ));\r
+\r
+               // Load YUI css files.\r
+               editor.element.getDocument().appendStyleSheet( CKEDITOR.getUrl(\r
+                               'plugins/uicolor/yui/assets/yui.css'\r
+               ));\r
+       }\r
+} );\r
diff --git a/_source/plugins/uicolor/uicolor.gif b/_source/plugins/uicolor/uicolor.gif
new file mode 100644 (file)
index 0000000..ec33de6
Binary files /dev/null and b/_source/plugins/uicolor/uicolor.gif differ
diff --git a/_source/plugins/uicolor/yui/assets/hue_bg.png b/_source/plugins/uicolor/yui/assets/hue_bg.png
new file mode 100644 (file)
index 0000000..d9bcdeb
Binary files /dev/null and b/_source/plugins/uicolor/yui/assets/hue_bg.png differ
diff --git a/_source/plugins/uicolor/yui/assets/hue_thumb.png b/_source/plugins/uicolor/yui/assets/hue_thumb.png
new file mode 100644 (file)
index 0000000..14d5db4
Binary files /dev/null and b/_source/plugins/uicolor/yui/assets/hue_thumb.png differ
diff --git a/_source/plugins/uicolor/yui/assets/picker_mask.png b/_source/plugins/uicolor/yui/assets/picker_mask.png
new file mode 100644 (file)
index 0000000..f8d9193
Binary files /dev/null and b/_source/plugins/uicolor/yui/assets/picker_mask.png differ
diff --git a/_source/plugins/uicolor/yui/assets/picker_thumb.png b/_source/plugins/uicolor/yui/assets/picker_thumb.png
new file mode 100644 (file)
index 0000000..78445a2
Binary files /dev/null and b/_source/plugins/uicolor/yui/assets/picker_thumb.png differ
diff --git a/_source/plugins/uicolor/yui/assets/yui.css b/_source/plugins/uicolor/yui/assets/yui.css
new file mode 100644 (file)
index 0000000..f0f59b0
--- /dev/null
@@ -0,0 +1,15 @@
+/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+.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;}\r
+\r
+/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+#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;}\r
diff --git a/_source/plugins/uicolor/yui/yui.js b/_source/plugins/uicolor/yui/yui.js
new file mode 100644 (file)
index 0000000..714d141
--- /dev/null
@@ -0,0 +1,71 @@
+/*jsl:ignoreall*/\r
+/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+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});\r
+},_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);\r
+}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];\r
+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);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;\r
+/* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */\r
+if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);\r
+}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].overrideContext);}}}return I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);if(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){G.fire(L,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1796"});YAHOO.register("yahoo-dom-event", YAHOO, {version: "2.7.0", build: "1796"});\r
+/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement("div");C.id="yui-ddm-shim";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display="none";C.style.backgroundColor="red";C.style.position="absolute";C.style.zIndex="99999";B.setStyle(C,"opacity","0");this._shim=C;A.on(C,"mouseup",this.handleMouseUp,this,true);A.on(C,"mousemove",this.handleMouseMove,this,true);A.on(window,"scroll",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+"px";C.style.width=B.getDocumentWidth()+"px";C.style.top="0";C.style.left="0";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D="0";if(this._debugShim){D=".5";}B.setStyle(C,"opacity",D);this._sizeShim();C.style.display="block";}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.ids[F][C];if(!this.isTypeOfDD(G)){continue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(C){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},regHandle:function(D,C){if(!this.handleIds[D]){this.handleIds[D]={};}this.handleIds[D][C]=C;},isDragDrop:function(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;E<C;++E){if(D[E].id==F.id){return true;}}return false;},isTypeOfDD:function(C){return(C&&C.__ygDragDrop);},isHandle:function(D,C){return(this.handleIds[D]&&this.handleIds[D][C]);},getDDById:function(D){for(var C in this.ids){if(this.ids[C][D]){return this.ids[C][D];}}return null;},handleMouseDown:function(E,D){this.currentTarget=YAHOO.util.Event.getTarget(E);this.dragCurrent=D;var C=D.getEl();this.startX=YAHOO.util.Event.getPageX(E);this.startY=YAHOO.util.Event.getPageY(E);this.deltaX=this.startX-C.offsetLeft;this.deltaY=this.startY-C.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var F=YAHOO.util.DDM;F.startDrag(F.startX,F.startY);F.fromTimeout=true;},this.clickTimeThresh);},startDrag:function(C,E){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=this.useShim;this.useShim=true;}this._activateShim();clearTimeout(this.clickTimeout);var D=this.dragCurrent;if(D&&D.events.b4StartDrag){D.b4StartDrag(C,E);D.fireEvent("b4StartDragEvent",{x:C,y:E});}if(D&&D.events.startDrag){D.startDrag(C,E);D.fireEvent("startDragEvent",{x:C,y:E});}this.dragThreshMet=true;},handleMouseUp:function(C){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(C);}this.fromTimeout=false;this.fireEvents(C,true);}else{}this.stopDrag(C);this.stopEvent(C);}},stopEvent:function(C){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(C);}if(this.preventDefault){YAHOO.util.Event.preventDefault(C);}},stopDrag:function(E,D){var C=this.dragCurrent;if(C&&!D){if(this.dragThreshMet){if(C.events.b4EndDrag){C.b4EndDrag(E);C.fireEvent("b4EndDragEvent",{e:E});}if(C.events.endDrag){C.endDrag(E);C.fireEvent("endDragEvent",{e:E});}}if(C.events.mouseUp){C.onMouseUp(E);C.fireEvent("mouseUpEvent",{e:E});}}if(this._shimActive){this._deactivateShim();if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false;}}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(F){var C=this.dragCurrent;if(C){if(YAHOO.util.Event.isIE&&!F.button){this.stopEvent(F);return this.handleMouseUp(F);}else{if(F.clientX<0||F.clientY<0){}}if(!this.dragThreshMet){var E=Math.abs(this.startX-YAHOO.util.Event.getPageX(F));var D=Math.abs(this.startY-YAHOO.util.Event.getPageY(F));if(E>this.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent("b4DragEvent",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent("dragEvent",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(V,L){var a=this.dragCurrent;if(!a||a.isLocked()||a.dragOnly){return;}var N=YAHOO.util.Event.getPageX(V),M=YAHOO.util.Event.getPageY(V),P=new YAHOO.util.Point(N,M),K=a.getTargetCoord(P.x,P.y),F=a.getDragEl(),E=["out","over","drop","enter"],U=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},Q=[],c={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var S in this.dragOvers){var d=this.dragOvers[S];if(!this.isTypeOfDD(d)){continue;\r
+}if(!this.isOverTarget(P,d,this.mode,U)){c.outEvts.push(d);}I[S]=true;delete this.dragOvers[S];}for(var R in a.groups){if("string"!=typeof R){continue;}for(S in this.ids[R]){var G=this.ids[R][S];if(!this.isTypeOfDD(G)){continue;}if(G.isTarget&&!G.isLocked()&&G!=a){if(this.isOverTarget(P,G,this.mode,U)){D[R]=true;if(L){c.dropEvts.push(G);}else{if(!I[G.id]){c.enterEvts.push(G);}else{c.overEvts.push(G);}this.dragOvers[G.id]=G;}}}}}this.interactionInfo={out:c.outEvts,enter:c.enterEvts,over:c.overEvts,drop:c.dropEvts,point:P,draggedRegion:U,sourceRegion:this.locationCache[a.id],validDrop:L};for(var C in D){Q.push(C);}if(L&&!c.dropEvts.length){this.interactionInfo.validDrop=false;if(a.events.invalidDrop){a.onInvalidDrop(V);a.fireEvent("invalidDropEvent",{e:V});}}for(S=0;S<E.length;S++){var Y=null;if(c[E[S]+"Evts"]){Y=c[E[S]+"Evts"];}if(Y&&Y.length){var H=E[S].charAt(0).toUpperCase()+E[S].substr(1),X="onDrag"+H,J="b4Drag"+H,O="drag"+H+"Event",W="drag"+H;if(this.mode){if(a.events[J]){a[J](V,Y,Q);a.fireEvent(J+"Event",{event:V,info:Y,group:Q});}if(a.events[W]){a[X](V,Y,Q);a.fireEvent(O,{event:V,info:Y,group:Q});}}else{for(var Z=0,T=Y.length;Z<T;++Z){if(a.events[J]){a[J](V,Y[Z].id,Q[0]);a.fireEvent(J+"Event",{event:V,info:Y[Z].id,group:Q[0]});}if(a.events[W]){a[X](V,Y[Z].id,Q[0]);a.fireEvent(O,{event:V,info:Y[Z].id,group:Q[0]});}}}}}},getBestMatch:function(E){var G=null;var D=E.length;if(D==1){G=E[0];}else{for(var F=0;F<D;++F){var C=E[F];if(this.mode==this.INTERSECT&&C.cursorIsOver){G=C;break;}else{if(!G||!G.overlap||(C.overlap&&G.overlap.getArea()<C.overlap.getArea())){G=C;}}}}return G;},refreshCache:function(D){var F=D||this.ids;for(var C in F){if("string"!=typeof C){continue;}for(var E in this.ids[C]){var G=this.ids[C][E];if(this.isTypeOfDD(G)){var H=this.getLocation(G);if(H){this.locationCache[G.id]=H;}else{delete this.locationCache[G.id];}}}}},verifyEl:function(D){try{if(D){var C=D.offsetParent;if(C){return true;}}}catch(E){}return false;},getLocation:function(H){if(!this.isTypeOfDD(H)){return null;}var F=H.getEl(),K,E,D,M,L,N,C,J,G;try{K=YAHOO.util.Dom.getXY(F);}catch(I){}if(!K){return null;}E=K[0];D=E+F.offsetWidth;M=K[1];L=M+F.offsetHeight;N=M-H.padding[0];C=D+H.padding[1];J=L+H.padding[2];G=E-H.padding[3];return new YAHOO.util.Region(N,C,J,G);},isOverTarget:function(K,C,E,F){var G=this.locationCache[C.id];if(!G||!this.useCache){G=this.getLocation(C);this.locationCache[C.id]=G;}if(!G){return false;}C.cursorIsOver=G.contains(K);var J=this.dragCurrent;if(!J||(!E&&!J.constrainX&&!J.constrainY)){return C.cursorIsOver;}C.overlap=null;if(!F){var H=J.getTargetCoord(K.x,K.y);var D=J.getDragEl();F=new YAHOO.util.Region(H.y,H.x+D.offsetWidth,H.y+D.offsetHeight,H.x);}var I=F.intersect(G);if(I){C.overlap=I;return(E)?true:C.cursorIsOver;}else{return false;}},_onUnload:function(D,C){this.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}this._execOnAll("unreg",[]);this.ids={};},elementCache:{},getElWrapper:function(D){var C=this.elementCache[D];if(!C||!C.el){C=this.elementCache[D]=new this.ElementWrapper(YAHOO.util.Dom.get(D));}return C;},getElement:function(C){return YAHOO.util.Dom.get(C);},getCss:function(D){var C=YAHOO.util.Dom.get(D);return(C)?C.style:null;},ElementWrapper:function(C){this.el=C||null;this.id=this.el&&C.id;this.css=this.el&&C.style;},getPosX:function(C){return YAHOO.util.Dom.getX(C);},getPosY:function(C){return YAHOO.util.Dom.getY(C);},swapNode:function(E,C){if(E.swapNode){E.swapNode(C);}else{var F=C.parentNode;var D=C.nextSibling;if(D==E){F.insertBefore(E,C);}else{if(C==E.nextSibling){F.insertBefore(C,E);}else{E.parentNode.replaceChild(C,E);F.insertBefore(E,D);}}}},getScroll:function(){var E,C,F=document.documentElement,D=document.body;if(F&&(F.scrollTop||F.scrollLeft)){E=F.scrollTop;C=F.scrollLeft;}else{if(D){E=D.scrollTop;C=D.scrollLeft;}else{}}return{top:E,left:C};},getStyle:function(D,C){return YAHOO.util.Dom.getStyle(D,C);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:function(){return this.getScroll().left;},moveToEl:function(C,E){var D=YAHOO.util.Dom.getXY(E);YAHOO.util.Dom.setXY(C,D);},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight();},getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth();},numericSort:function(D,C){return(D-C);},_timeoutCount:0,_addListeners:function(){var C=YAHOO.util.DDM;if(YAHOO.util.Event&&document){C._onLoad();}else{if(C._timeoutCount>2000){}else{setTimeout(C._addListeners,10);if(document&&document.body){C._timeoutCount+=1;}}}},handleWasClicked:function(C,E){if(this.isHandle(E,C.id)){return true;}else{var D=C.parentNode;while(D){if(this.isHandle(E,D.id)){return true;}else{D=D.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments);},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,useShim:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.get(this.id);\r
+}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+"Event");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this.config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display=="none")){}else{}return;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];this.startPageY=C[1];},addToGroup:function(C){this.groups[C]=true;this.DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return;}if(this.isLocked()){return;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent("b4MouseDownEvent",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){H=this.fireEvent("mouseDownEvent",J);}if((C===false)||(E===false)||(F===false)||(H===false)){return;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHandleClass:function(C){this.invalidHandleClasses.push(C);},removeInvalidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D);\r
+}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setDelta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScrollLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(B+D-J-this.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame();}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return;}var F=this.getDragEl(),E=YAHOO.util.Dom;if(!F){F=document.createElement("div");F.id=this.dragElId;var D=F.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");F.appendChild(C);A.insertBefore(F,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resizeFrame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getDragEl();var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YAHOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.7.0",build:"1796"});/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+(function(){var B=YAHOO.util.Dom.getXY,A=YAHOO.util.Event,D=Array.prototype.slice;function C(G,E,F,H){C.ANIM_AVAIL=(!YAHOO.lang.isUndefined(YAHOO.util.Anim));if(G){this.init(G,E,true);this.initSlider(H);this.initThumb(F);}}YAHOO.lang.augmentObject(C,{getHorizSlider:function(F,G,I,H,E){return new C(F,F,new YAHOO.widget.SliderThumb(G,F,I,H,0,0,E),"horiz");},getVertSlider:function(G,H,E,I,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,0,0,E,I,F),"vert");},getSliderRegion:function(G,H,J,I,E,K,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,J,I,E,K,F),"region");},SOURCE_UI_EVENT:1,SOURCE_SET_VALUE:2,SOURCE_KEY_EVENT:3,ANIM_AVAIL:false},true);YAHOO.extend(C,YAHOO.util.DragDrop,{_mouseDown:false,dragOnly:true,initSlider:function(E){this.type=E;this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);this.isTarget=false;this.animate=C.ANIM_AVAIL;this.backgroundEnabled=true;this.tickPause=40;this.enableKeys=true;this.keyIncrement=20;this.moveComplete=true;this.animationDuration=0.2;this.SOURCE_UI_EVENT=1;this.SOURCE_SET_VALUE=2;this.valueChangeSource=0;this._silent=false;this.lastOffset=[0,0];},initThumb:function(F){var E=this;this.thumb=F;F.cacheBetweenDrags=true;if(F._isHoriz&&F.xTicks&&F.xTicks.length){this.tickPause=Math.round(360/F.xTicks.length);}else{if(F.yTicks&&F.yTicks.length){this.tickPause=Math.round(360/F.yTicks.length);}}F.onAvailable=function(){return E.setStartSliderState();};F.onMouseDown=function(){E._mouseDown=true;return E.focus();};F.startDrag=function(){E._slideStart();};F.onDrag=function(){E.fireEvents(true);};F.onMouseUp=function(){E.thumbMouseUp();};},onAvailable:function(){this._bindKeyEvents();},_bindKeyEvents:function(){A.on(this.id,"keydown",this.handleKeyDown,this,true);A.on(this.id,"keypress",this.handleKeyPress,this,true);},handleKeyPress:function(F){if(this.enableKeys){var E=A.getCharCode(F);switch(E){case 37:case 38:case 39:case 40:case 36:case 35:A.preventDefault(F);break;default:}}},handleKeyDown:function(J){if(this.enableKeys){var G=A.getCharCode(J),F=this.thumb,H=this.getXValue(),E=this.getYValue(),I=true;switch(G){case 37:H-=this.keyIncrement;break;case 38:E-=this.keyIncrement;break;case 39:H+=this.keyIncrement;break;case 40:E+=this.keyIncrement;break;case 36:H=F.leftConstraint;E=F.topConstraint;break;case 35:H=F.rightConstraint;E=F.bottomConstraint;break;default:I=false;}if(I){if(F._isRegion){this._setRegionValue(C.SOURCE_KEY_EVENT,H,E,true);}else{this._setValue(C.SOURCE_KEY_EVENT,(F._isHoriz?H:E),true);}A.stopEvent(J);}}},setStartSliderState:function(){this.setThumbCenterPoint();this.baselinePos=B(this.getEl());this.thumb.startOffset=this.thumb.getOffsetFromParent(this.baselinePos);if(this.thumb._isRegion){if(this.deferredSetRegionValue){this._setRegionValue.apply(this,this.deferredSetRegionValue);this.deferredSetRegionValue=null;}else{this.setRegionValue(0,0,true,true,true);}}else{if(this.deferredSetValue){this._setValue.apply(this,this.deferredSetValue);this.deferredSetValue=null;}else{this.setValue(0,true,true,true);}}},setThumbCenterPoint:function(){var E=this.thumb.getEl();if(E){this.thumbCenterPoint={x:parseInt(E.offsetWidth/2,10),y:parseInt(E.offsetHeight/2,10)};}},lock:function(){this.thumb.lock();this.locked=true;},unlock:function(){this.thumb.unlock();this.locked=false;},thumbMouseUp:function(){this._mouseDown=false;if(!this.isLocked()&&!this.moveComplete){this.endMove();}},onMouseUp:function(){this._mouseDown=false;if(this.backgroundEnabled&&!this.isLocked()&&!this.moveComplete){this.endMove();}},getThumb:function(){return this.thumb;},focus:function(){this.valueChangeSource=C.SOURCE_UI_EVENT;var E=this.getEl();if(E.focus){try{E.focus();}catch(F){}}this.verifyOffset();return !this.isLocked();},onChange:function(E,F){},onSlideStart:function(){},onSlideEnd:function(){},getValue:function(){return this.thumb.getValue();},getXValue:function(){return this.thumb.getXValue();},getYValue:function(){return this.thumb.getYValue();},setValue:function(){var E=D.call(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setValue.apply(this,E);},_setValue:function(I,L,G,H,E){var F=this.thumb,K,J;if(!F.available){this.deferredSetValue=arguments;return false;}if(this.isLocked()&&!H){return false;}if(isNaN(L)){return false;}if(F._isRegion){return false;}this._silent=E;this.valueChangeSource=I||C.SOURCE_SET_VALUE;F.lastOffset=[L,L];this.verifyOffset(true);this._slideStart();if(F._isHoriz){K=F.initPageX+L+this.thumbCenterPoint.x;this.moveThumb(K,F.initPageY,G);}else{J=F.initPageY+L+this.thumbCenterPoint.y;this.moveThumb(F.initPageX,J,G);}return true;},setRegionValue:function(){var E=D.call(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setRegionValue.apply(this,E);},_setRegionValue:function(F,J,H,I,G,K){var L=this.thumb,E,M;if(!L.available){this.deferredSetRegionValue=arguments;return false;}if(this.isLocked()&&!G){return false;}if(isNaN(J)){return false;}if(!L._isRegion){return false;}this._silent=K;this.valueChangeSource=F||C.SOURCE_SET_VALUE;L.lastOffset=[J,H];this.verifyOffset(true);this._slideStart();E=L.initPageX+J+this.thumbCenterPoint.x;M=L.initPageY+H+this.thumbCenterPoint.y;this.moveThumb(E,M,I);return true;},verifyOffset:function(F){var G=B(this.getEl()),E=this.thumb;if(!this.thumbCenterPoint||!this.thumbCenterPoint.x){this.setThumbCenterPoint();}if(G){if(G[0]!=this.baselinePos[0]||G[1]!=this.baselinePos[1]){this.setInitPosition();this.baselinePos=G;E.initPageX=this.initPageX+E.startOffset[0];E.initPageY=this.initPageY+E.startOffset[1];E.deltaSetXY=null;this.resetThumbConstraints();return false;}}return true;},moveThumb:function(K,J,I,G){var L=this.thumb,M=this,F,E,H;if(!L.available){return;}L.setDelta(this.thumbCenterPoint.x,this.thumbCenterPoint.y);E=L.getTargetCoord(K,J);F=[Math.round(E.x),Math.round(E.y)];if(this.animate&&L._graduated&&!I){this.lock();this.curCoord=B(this.thumb.getEl());this.curCoord=[Math.round(this.curCoord[0]),Math.round(this.curCoord[1])];setTimeout(function(){M.moveOneTick(F);\r
+},this.tickPause);}else{if(this.animate&&C.ANIM_AVAIL&&!I){this.lock();H=new YAHOO.util.Motion(L.id,{points:{to:F}},this.animationDuration,YAHOO.util.Easing.easeOut);H.onComplete.subscribe(function(){M.unlock();if(!M._mouseDown){M.endMove();}});H.animate();}else{L.setDragElPos(K,J);if(!G&&!this._mouseDown){this.endMove();}}}},_slideStart:function(){if(!this._sliding){if(!this._silent){this.onSlideStart();this.fireEvent("slideStart");}this._sliding=true;}},_slideEnd:function(){if(this._sliding&&this.moveComplete){var E=this._silent;this._sliding=false;this._silent=false;this.moveComplete=false;if(!E){this.onSlideEnd();this.fireEvent("slideEnd");}}},moveOneTick:function(F){var H=this.thumb,G=this,I=null,E,J;if(H._isRegion){I=this._getNextX(this.curCoord,F);E=(I!==null)?I[0]:this.curCoord[0];I=this._getNextY(this.curCoord,F);J=(I!==null)?I[1]:this.curCoord[1];I=E!==this.curCoord[0]||J!==this.curCoord[1]?[E,J]:null;}else{if(H._isHoriz){I=this._getNextX(this.curCoord,F);}else{I=this._getNextY(this.curCoord,F);}}if(I){this.curCoord=I;this.thumb.alignElWithMouse(H.getEl(),I[0]+this.thumbCenterPoint.x,I[1]+this.thumbCenterPoint.y);if(!(I[0]==F[0]&&I[1]==F[1])){setTimeout(function(){G.moveOneTick(F);},this.tickPause);}else{this.unlock();if(!this._mouseDown){this.endMove();}}}else{this.unlock();if(!this._mouseDown){this.endMove();}}},_getNextX:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[0]>F[0]){J=H.tickSize-this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]-J,E[1]);I=[G.x,G.y];}else{if(E[0]<F[0]){J=H.tickSize+this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]+J,E[1]);I=[G.x,G.y];}else{}}return I;},_getNextY:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[1]>F[1]){J=H.tickSize-this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]-J);I=[G.x,G.y];}else{if(E[1]<F[1]){J=H.tickSize+this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]+J);I=[G.x,G.y];}else{}}return I;},b4MouseDown:function(E){if(!this.backgroundEnabled){return false;}this.thumb.autoOffset();this.resetThumbConstraints();},onMouseDown:function(F){if(!this.backgroundEnabled||this.isLocked()){return false;}this._mouseDown=true;var E=A.getPageX(F),G=A.getPageY(F);this.focus();this._slideStart();this.moveThumb(E,G);},onDrag:function(F){if(this.backgroundEnabled&&!this.isLocked()){var E=A.getPageX(F),G=A.getPageY(F);this.moveThumb(E,G,true,true);this.fireEvents();}},endMove:function(){this.unlock();this.fireEvents();this.moveComplete=true;this._slideEnd();},resetThumbConstraints:function(){var E=this.thumb;E.setXConstraint(E.leftConstraint,E.rightConstraint,E.xTickSize);E.setYConstraint(E.topConstraint,E.bottomConstraint,E.xTickSize);},fireEvents:function(G){var F=this.thumb,I,H,E;if(!G){F.cachePosition();}if(!this.isLocked()){if(F._isRegion){I=F.getXValue();H=F.getYValue();if(I!=this.previousX||H!=this.previousY){if(!this._silent){this.onChange(I,H);this.fireEvent("change",{x:I,y:H});}}this.previousX=I;this.previousY=H;}else{E=F.getValue();if(E!=this.previousVal){if(!this._silent){this.onChange(E);this.fireEvent("change",E);}}this.previousVal=E;}}},toString:function(){return("Slider ("+this.type+") "+this.id);}});YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);YAHOO.widget.Slider=C;})();YAHOO.widget.SliderThumb=function(G,B,E,D,A,F,C){if(G){YAHOO.widget.SliderThumb.superclass.constructor.call(this,G,B);this.parentElId=B;}this.isTarget=false;this.tickSize=C;this.maintainOffset=true;this.initSlider(E,D,A,F,C);this.scroll=false;};YAHOO.extend(YAHOO.widget.SliderThumb,YAHOO.util.DD,{startOffset:null,dragOnly:true,_isHoriz:false,_prevVal:0,_graduated:false,getOffsetFromParent0:function(C){var A=YAHOO.util.Dom.getXY(this.getEl()),B=C||YAHOO.util.Dom.getXY(this.parentElId);return[(A[0]-B[0]),(A[1]-B[1])];},getOffsetFromParent:function(H){var A=this.getEl(),E,I,F,B,K,D,C,J,G;if(!this.deltaOffset){I=YAHOO.util.Dom.getXY(A);F=H||YAHOO.util.Dom.getXY(this.parentElId);E=[(I[0]-F[0]),(I[1]-F[1])];B=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);K=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);D=B-E[0];C=K-E[1];if(isNaN(D)||isNaN(C)){}else{this.deltaOffset=[D,C];}}else{J=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);G=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);E=[J+this.deltaOffset[0],G+this.deltaOffset[1]];}return E;},initSlider:function(D,C,A,E,B){this.initLeft=D;this.initRight=C;this.initUp=A;this.initDown=E;this.setXConstraint(D,C,B);this.setYConstraint(A,E,B);if(B&&B>1){this._graduated=true;}this._isHoriz=(D||C);this._isVert=(A||E);this._isRegion=(this._isHoriz&&this._isVert);},clearTicks:function(){YAHOO.widget.SliderThumb.superclass.clearTicks.call(this);this.tickSize=0;this._graduated=false;},getValue:function(){return(this._isHoriz)?this.getXValue():this.getYValue();},getXValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[0])){this.lastOffset=A;return(A[0]-this.startOffset[0]);}else{return(this.lastOffset[0]-this.startOffset[0]);}},getYValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[1])){this.lastOffset=A;return(A[1]-this.startOffset[1]);}else{return(this.lastOffset[1]-this.startOffset[1]);}},toString:function(){return"SliderThumb "+this.id;},onChange:function(A,B){}});(function(){var A=YAHOO.util.Event,B=YAHOO.widget;function C(I,F,H,D){var G=this,J={min:false,max:false},E,K;this.minSlider=I;this.maxSlider=F;this.activeSlider=I;this.isHoriz=I.thumb._isHoriz;E=this.minSlider.thumb.onMouseDown;K=this.maxSlider.thumb.onMouseDown;this.minSlider.thumb.onMouseDown=function(){G.activeSlider=G.minSlider;E.apply(this,arguments);};this.maxSlider.thumb.onMouseDown=function(){G.activeSlider=G.maxSlider;K.apply(this,arguments);};this.minSlider.thumb.onAvailable=function(){I.setStartSliderState();J.min=true;if(J.max){G.fireEvent("ready",G);}};this.maxSlider.thumb.onAvailable=function(){F.setStartSliderState();J.max=true;if(J.min){G.fireEvent("ready",G);}};I.onMouseDown=F.onMouseDown=function(L){return this.backgroundEnabled&&G._handleMouseDown(L);\r
+};I.onDrag=F.onDrag=function(L){G._handleDrag(L);};I.onMouseUp=F.onMouseUp=function(L){G._handleMouseUp(L);};I._bindKeyEvents=function(){G._bindKeyEvents(this);};F._bindKeyEvents=function(){};I.subscribe("change",this._handleMinChange,I,this);I.subscribe("slideStart",this._handleSlideStart,I,this);I.subscribe("slideEnd",this._handleSlideEnd,I,this);F.subscribe("change",this._handleMaxChange,F,this);F.subscribe("slideStart",this._handleSlideStart,F,this);F.subscribe("slideEnd",this._handleSlideEnd,F,this);this.createEvent("ready",this);this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);D=YAHOO.lang.isArray(D)?D:[0,H];D[0]=Math.min(Math.max(parseInt(D[0],10)|0,0),H);D[1]=Math.max(Math.min(parseInt(D[1],10)|0,H),0);if(D[0]>D[1]){D.splice(0,2,D[1],D[0]);}this.minVal=D[0];this.maxVal=D[1];this.minSlider.setValue(this.minVal,true,true,true);this.maxSlider.setValue(this.maxVal,true,true,true);}C.prototype={minVal:-1,maxVal:-1,minRange:0,_handleSlideStart:function(E,D){this.fireEvent("slideStart",D);},_handleSlideEnd:function(E,D){this.fireEvent("slideEnd",D);},_handleDrag:function(D){B.Slider.prototype.onDrag.call(this.activeSlider,D);},_handleMinChange:function(){this.activeSlider=this.minSlider;this.updateValue();},_handleMaxChange:function(){this.activeSlider=this.maxSlider;this.updateValue();},_bindKeyEvents:function(D){A.on(D.id,"keydown",this._handleKeyDown,this,true);A.on(D.id,"keypress",this._handleKeyPress,this,true);},_handleKeyDown:function(D){this.activeSlider.handleKeyDown.apply(this.activeSlider,arguments);},_handleKeyPress:function(D){this.activeSlider.handleKeyPress.apply(this.activeSlider,arguments);},setValues:function(H,K,I,E,J){var F=this.minSlider,M=this.maxSlider,D=F.thumb,L=M.thumb,N=this,G={min:false,max:false};if(D._isHoriz){D.setXConstraint(D.leftConstraint,L.rightConstraint,D.tickSize);L.setXConstraint(D.leftConstraint,L.rightConstraint,L.tickSize);}else{D.setYConstraint(D.topConstraint,L.bottomConstraint,D.tickSize);L.setYConstraint(D.topConstraint,L.bottomConstraint,L.tickSize);}this._oneTimeCallback(F,"slideEnd",function(){G.min=true;if(G.max){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});this._oneTimeCallback(M,"slideEnd",function(){G.max=true;if(G.min){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});F.setValue(H,I,E,false);M.setValue(K,I,E,false);},setMinValue:function(F,H,I,E){var G=this.minSlider,D=this;this.activeSlider=G;D=this;this._oneTimeCallback(G,"slideEnd",function(){D.updateValue(E);setTimeout(function(){D._cleanEvent(G,"slideEnd");},0);});G.setValue(F,H,I);},setMaxValue:function(D,H,I,F){var G=this.maxSlider,E=this;this.activeSlider=G;this._oneTimeCallback(G,"slideEnd",function(){E.updateValue(F);setTimeout(function(){E._cleanEvent(G,"slideEnd");},0);});G.setValue(D,H,I);},updateValue:function(J){var E=this.minSlider.getValue(),K=this.maxSlider.getValue(),F=false,D,M,H,I,L,G;if(E!=this.minVal||K!=this.maxVal){F=true;D=this.minSlider.thumb;M=this.maxSlider.thumb;H=this.isHoriz?"x":"y";G=this.minSlider.thumbCenterPoint[H]+this.maxSlider.thumbCenterPoint[H];I=Math.max(K-G-this.minRange,0);L=Math.min(-E-G-this.minRange,0);if(this.isHoriz){I=Math.min(I,M.rightConstraint);D.setXConstraint(D.leftConstraint,I,D.tickSize);M.setXConstraint(L,M.rightConstraint,M.tickSize);}else{I=Math.min(I,M.bottomConstraint);D.setYConstraint(D.leftConstraint,I,D.tickSize);M.setYConstraint(L,M.bottomConstraint,M.tickSize);}}this.minVal=E;this.maxVal=K;if(F&&!J){this.fireEvent("change",this);}},selectActiveSlider:function(H){var E=this.minSlider,D=this.maxSlider,J=E.isLocked()||!E.backgroundEnabled,G=D.isLocked()||!E.backgroundEnabled,F=YAHOO.util.Event,I;if(J||G){this.activeSlider=J?D:E;}else{if(this.isHoriz){I=F.getPageX(H)-E.thumb.initPageX-E.thumbCenterPoint.x;}else{I=F.getPageY(H)-E.thumb.initPageY-E.thumbCenterPoint.y;}this.activeSlider=I*2>D.getValue()+E.getValue()?D:E;}},_handleMouseDown:function(D){if(!D._handled){D._handled=true;this.selectActiveSlider(D);return B.Slider.prototype.onMouseDown.call(this.activeSlider,D);}else{return false;}},_handleMouseUp:function(D){B.Slider.prototype.onMouseUp.apply(this.activeSlider,arguments);},_oneTimeCallback:function(F,D,E){F.subscribe(D,function(){F.unsubscribe(D,arguments.callee);E.apply({},[].slice.apply(arguments));});},_cleanEvent:function(K,E){var J,I,D,G,H,F;if(K.__yui_events&&K.events[E]){for(I=K.__yui_events.length;I>=0;--I){if(K.__yui_events[I].type===E){J=K.__yui_events[I];break;}}if(J){H=J.subscribers;F=[];G=0;for(I=0,D=H.length;I<D;++I){if(H[I]){F[G++]=H[I];}}J.subscribers=F;}}}};YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);B.Slider.getHorizDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,G,0,0,F),E=new B.SliderThumb(K,H,0,G,0,0,F);return new C(new B.Slider(H,H,I,"horiz"),new B.Slider(H,H,E,"horiz"),G,D);};B.Slider.getVertDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,0,0,G,F),E=new B.SliderThumb(K,H,0,0,0,G,F);return new B.DualSlider(new B.Slider(H,H,I,"vert"),new B.Slider(H,H,E,"vert"),G,D);};YAHOO.widget.DualSlider=C;})();YAHOO.register("slider",YAHOO.widget.Slider,{version:"2.7.0",build:"1796"});/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+YAHOO.util.Attribute=function(B,A){if(A){this.owner=A;this.configure(B,true);}};YAHOO.util.Attribute.prototype={name:undefined,value:null,owner:null,readOnly:false,writeOnce:false,_initialConfig:null,_written:false,method:null,setter:null,getter:null,validator:null,getValue:function(){var A=this.value;if(this.getter){A=this.getter.call(this.owner,this.name);}return A;},setValue:function(F,B){var E,A=this.owner,C=this.name;var D={type:C,prevValue:this.getValue(),newValue:F};if(this.readOnly||(this.writeOnce&&this._written)){return false;}if(this.validator&&!this.validator.call(A,F)){return false;}if(!B){E=A.fireBeforeChangeEvent(D);if(E===false){return false;}}if(this.setter){F=this.setter.call(A,F,this.name);if(F===undefined){}}if(this.method){this.method.call(A,F,this.name);}this.value=F;this._written=true;D.type=C;if(!B){this.owner.fireChangeEvent(D);}return true;},configure:function(B,C){B=B||{};if(C){this._written=false;}this._initialConfig=this._initialConfig||{};for(var A in B){if(B.hasOwnProperty(A)){this[A]=B[A];if(C){this._initialConfig[A]=B[A];}}}},resetValue:function(){return this.setValue(this._initialConfig.value);},resetConfig:function(){this.configure(this._initialConfig,true);},refresh:function(A){this.setValue(this.value,A);}};(function(){var A=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(C){this._configs=this._configs||{};var B=this._configs[C];if(!B||!this._configs.hasOwnProperty(C)){return null;}return B.getValue();},set:function(D,E,B){this._configs=this._configs||{};var C=this._configs[D];if(!C){return false;}return C.setValue(E,B);},getAttributeKeys:function(){this._configs=this._configs;var C=[],B;for(B in this._configs){if(A.hasOwnProperty(this._configs,B)&&!A.isUndefined(this._configs[B])){C[C.length]=B;}}return C;},setAttributes:function(D,B){for(var C in D){if(A.hasOwnProperty(D,C)){this.set(C,D[C],B);}}},resetValue:function(C,B){this._configs=this._configs||{};if(this._configs[C]){this.set(C,this._configs[C]._initialConfig.value,B);return true;}return false;},refresh:function(E,C){this._configs=this._configs||{};var F=this._configs;E=((A.isString(E))?[E]:E)||this.getAttributeKeys();for(var D=0,B=E.length;D<B;++D){if(F.hasOwnProperty(E[D])){this._configs[E[D]].refresh(C);}}},register:function(B,C){this.setAttributeConfig(B,C);},getAttributeConfig:function(C){this._configs=this._configs||{};var B=this._configs[C]||{};var D={};for(C in B){if(A.hasOwnProperty(B,C)){D[C]=B[C];}}return D;},setAttributeConfig:function(B,C,D){this._configs=this._configs||{};C=C||{};if(!this._configs[B]){C.name=B;this._configs[B]=this.createAttribute(C);}else{this._configs[B].configure(C,D);}},configureAttribute:function(B,C,D){this.setAttributeConfig(B,C,D);},resetAttributeConfig:function(B){this._configs=this._configs||{};this._configs[B].resetConfig();},subscribe:function(B,C){this._events=this._events||{};if(!(B in this._events)){this._events[B]=this.createEvent(B);}YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){this.subscribe.apply(this,arguments);},addListener:function(){this.subscribe.apply(this,arguments);},fireBeforeChangeEvent:function(C){var B="before";B+=C.type.charAt(0).toUpperCase()+C.type.substr(1)+"Change";C.type=B;return this.fireEvent(C.type,C);},fireChangeEvent:function(B){B.type+="Change";return this.fireEvent(B.type,B);},createAttribute:function(B){return new YAHOO.util.Attribute(B,this);}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);})();(function(){var B=YAHOO.util.Dom,C=YAHOO.util.AttributeProvider;var A=function(D,E){this.init.apply(this,arguments);};A.DOM_EVENTS={"click":true,"dblclick":true,"keydown":true,"keypress":true,"keyup":true,"mousedown":true,"mousemove":true,"mouseout":true,"mouseover":true,"mouseup":true,"focus":true,"blur":true,"submit":true,"change":true};A.prototype={DOM_EVENTS:null,DEFAULT_HTML_SETTER:function(F,D){var E=this.get("element");if(E){E[D]=F;}},DEFAULT_HTML_GETTER:function(D){var E=this.get("element"),F;if(E){F=E[D];}return F;},appendChild:function(D){D=D.get?D.get("element"):D;return this.get("element").appendChild(D);},getElementsByTagName:function(D){return this.get("element").getElementsByTagName(D);},hasChildNodes:function(){return this.get("element").hasChildNodes();},insertBefore:function(D,E){D=D.get?D.get("element"):D;E=(E&&E.get)?E.get("element"):E;return this.get("element").insertBefore(D,E);},removeChild:function(D){D=D.get?D.get("element"):D;return this.get("element").removeChild(D);},replaceChild:function(D,E){D=D.get?D.get("element"):D;E=E.get?E.get("element"):E;return this.get("element").replaceChild(D,E);},initAttributes:function(D){},addListener:function(H,G,I,F){var E=this.get("element")||this.get("id");F=F||this;var D=this;if(!this._events[H]){if(E&&this.DOM_EVENTS[H]){YAHOO.util.Event.addListener(E,H,function(J){if(J.srcElement&&!J.target){J.target=J.srcElement;}D.fireEvent(H,J);},I,F);}this.createEvent(H,this);}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){return this.addListener.apply(this,arguments);},subscribe:function(){return this.addListener.apply(this,arguments);},removeListener:function(E,D){return this.unsubscribe.apply(this,arguments);},addClass:function(D){B.addClass(this.get("element"),D);},getElementsByClassName:function(E,D){return B.getElementsByClassName(E,D,this.get("element"));},hasClass:function(D){return B.hasClass(this.get("element"),D);},removeClass:function(D){return B.removeClass(this.get("element"),D);},replaceClass:function(E,D){return B.replaceClass(this.get("element"),E,D);},setStyle:function(E,D){return B.setStyle(this.get("element"),E,D);},getStyle:function(D){return B.getStyle(this.get("element"),D);},fireQueue:function(){var E=this._queue;for(var F=0,D=E.length;F<D;++F){this[E[F][0]].apply(this,E[F][1]);}},appendTo:function(E,F){E=(E.get)?E.get("element"):B.get(E);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:E});\r
+F=(F&&F.get)?F.get("element"):B.get(F);var D=this.get("element");if(!D){return false;}if(!E){return false;}if(D.parent!=E){if(F){E.insertBefore(D,F);}else{E.appendChild(D);}}this.fireEvent("appendTo",{type:"appendTo",target:E});return D;},get:function(D){var F=this._configs||{},E=F.element;if(E&&!F[D]&&!YAHOO.lang.isUndefined(E.value[D])){this._setHTMLAttrConfig(D);}return C.prototype.get.call(this,D);},setAttributes:function(J,G){var E={},H=this._configOrder;for(var I=0,D=H.length;I<D;++I){if(J[H[I]]!==undefined){E[H[I]]=true;this.set(H[I],J[H[I]],G);}}for(var F in J){if(J.hasOwnProperty(F)&&!E[F]){this.set(F,J[F],G);}}},set:function(E,G,D){var F=this.get("element");if(!F){this._queue[this._queue.length]=["set",arguments];if(this._configs[E]){this._configs[E].value=G;}return;}if(!this._configs[E]&&!YAHOO.lang.isUndefined(F[E])){this._setHTMLAttrConfig(E);}return C.prototype.set.apply(this,arguments);},setAttributeConfig:function(D,E,F){this._configOrder.push(D);C.prototype.setAttributeConfig.apply(this,arguments);},createEvent:function(E,D){this._events[E]=true;return C.prototype.createEvent.apply(this,arguments);},init:function(E,D){this._initElement(E,D);},destroy:function(){var D=this.get("element");YAHOO.util.Event.purgeElement(D,true);this.unsubscribeAll();if(D&&D.parentNode){D.parentNode.removeChild(D);}this._queue=[];this._events={};this._configs={};this._configOrder=[];},_initElement:function(F,E){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];E=E||{};E.element=E.element||F||null;var H=false;var D=A.DOM_EVENTS;this.DOM_EVENTS=this.DOM_EVENTS||{};for(var G in D){if(D.hasOwnProperty(G)){this.DOM_EVENTS[G]=D[G];}}if(typeof E.element==="string"){this._setHTMLAttrConfig("id",{value:E.element});}if(B.get(E.element)){H=true;this._initHTMLElement(E);this._initContent(E);}YAHOO.util.Event.onAvailable(E.element,function(){if(!H){this._initHTMLElement(E);}this.fireEvent("available",{type:"available",target:B.get(E.element)});},this,true);YAHOO.util.Event.onContentReady(E.element,function(){if(!H){this._initContent(E);}this.fireEvent("contentReady",{type:"contentReady",target:B.get(E.element)});},this,true);},_initHTMLElement:function(D){this.setAttributeConfig("element",{value:B.get(D.element),readOnly:true});},_initContent:function(D){this.initAttributes(D);this.setAttributes(D,true);this.fireQueue();},_setHTMLAttrConfig:function(D,F){var E=this.get("element");F=F||{};F.name=D;F.setter=F.setter||this.DEFAULT_HTML_SETTER;F.getter=F.getter||this.DEFAULT_HTML_GETTER;F.value=F.value||E[D];this._configs[D]=new YAHOO.util.Attribute(F,this);}};YAHOO.augment(A,C);YAHOO.util.Element=A;})();YAHOO.register("element",YAHOO.util.Element,{version:"2.7.0",build:"1796"});/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+YAHOO.util.Color=function(){var A="0",B=YAHOO.lang.isArray,C=YAHOO.lang.isNumber;return{real2dec:function(D){return Math.min(255,Math.round(D*256));},hsv2rgb:function(H,O,M){if(B(H)){return this.hsv2rgb.call(this,H[0],H[1],H[2]);}var D,I,L,G=Math.floor((H/60)%6),J=(H/60)-G,F=M*(1-O),E=M*(1-J*O),N=M*(1-(1-J)*O),K;switch(G){case 0:D=M;I=N;L=F;break;case 1:D=E;I=M;L=F;break;case 2:D=F;I=M;L=N;break;case 3:D=F;I=E;L=M;break;case 4:D=N;I=F;L=M;break;case 5:D=M;I=F;L=E;break;}K=this.real2dec;return[K(D),K(I),K(L)];},rgb2hsv:function(D,H,I){if(B(D)){return this.rgb2hsv.apply(this,D);}D/=255;H/=255;I/=255;var G,L,E=Math.min(Math.min(D,H),I),J=Math.max(Math.max(D,H),I),K=J-E,F;switch(J){case E:G=0;break;case D:G=60*(H-I)/K;if(H<I){G+=360;}break;case H:G=(60*(I-D)/K)+120;break;case I:G=(60*(D-H)/K)+240;break;}L=(J===0)?0:1-(E/J);F=[Math.round(G),L,J];return F;},rgb2hex:function(F,E,D){if(B(F)){return this.rgb2hex.apply(this,F);}var G=this.dec2hex;return G(F)+G(E)+G(D);},dec2hex:function(D){D=parseInt(D,10)|0;D=(D>255||D<0)?0:D;return(A+D.toString(16)).slice(-2).toUpperCase();},hex2dec:function(D){return parseInt(D,16);},hex2rgb:function(D){var E=this.hex2dec;return[E(D.slice(0,2)),E(D.slice(2,4)),E(D.slice(4,6))];},websafe:function(F,E,D){if(B(F)){return this.websafe.apply(this,F);}var G=function(H){if(C(H)){H=Math.min(Math.max(0,H),255);var I,J;for(I=0;I<256;I=I+51){J=I+51;if(H>=I&&H<=J){return(H-I>25)?J:I;}}}return H;};return[G(F),G(E),G(D)];}};}();(function(){var J=0,F=YAHOO.util,C=YAHOO.lang,D=YAHOO.widget.Slider,B=F.Color,E=F.Dom,I=F.Event,A=C.substitute,H="yui-picker";function G(L,K){J=J+1;K=K||{};if(arguments.length===1&&!YAHOO.lang.isString(L)&&!L.nodeName){K=L;L=K.element||null;}if(!L&&!K.element){L=this._createHostElement(K);}G.superclass.constructor.call(this,L,K);this.initPicker();}YAHOO.extend(G,YAHOO.util.Element,{ID:{R:H+"-r",R_HEX:H+"-rhex",G:H+"-g",G_HEX:H+"-ghex",B:H+"-b",B_HEX:H+"-bhex",H:H+"-h",S:H+"-s",V:H+"-v",PICKER_BG:H+"-bg",PICKER_THUMB:H+"-thumb",HUE_BG:H+"-hue-bg",HUE_THUMB:H+"-hue-thumb",HEX:H+"-hex",SWATCH:H+"-swatch",WEBSAFE_SWATCH:H+"-websafe-swatch",CONTROLS:H+"-controls",RGB_CONTROLS:H+"-rgb-controls",HSV_CONTROLS:H+"-hsv-controls",HEX_CONTROLS:H+"-hex-controls",HEX_SUMMARY:H+"-hex-summary",CONTROLS_LABEL:H+"-controls-label"},TXT:{ILLEGAL_HEX:"Illegal hex value entered",SHOW_CONTROLS:"Show color details",HIDE_CONTROLS:"Hide color details",CURRENT_COLOR:"Currently selected color: {rgb}",CLOSEST_WEBSAFE:"Closest websafe color: {rgb}. Click to select.",R:"R",G:"G",B:"B",H:"H",S:"S",V:"V",HEX:"#",DEG:"\u00B0",PERCENT:"%"},IMAGE:{PICKER_THUMB:"../../build/colorpicker/assets/picker_thumb.png",HUE_THUMB:"../../build/colorpicker/assets/hue_thumb.png"},DEFAULT:{PICKER_SIZE:180},OPT:{HUE:"hue",SATURATION:"saturation",VALUE:"value",RED:"red",GREEN:"green",BLUE:"blue",HSV:"hsv",RGB:"rgb",WEBSAFE:"websafe",HEX:"hex",PICKER_SIZE:"pickersize",SHOW_CONTROLS:"showcontrols",SHOW_RGB_CONTROLS:"showrgbcontrols",SHOW_HSV_CONTROLS:"showhsvcontrols",SHOW_HEX_CONTROLS:"showhexcontrols",SHOW_HEX_SUMMARY:"showhexsummary",SHOW_WEBSAFE:"showwebsafe",CONTAINER:"container",IDS:"ids",ELEMENTS:"elements",TXT:"txt",IMAGES:"images",ANIMATE:"animate"},skipAnim:true,_createHostElement:function(){var K=document.createElement("div");if(this.CSS.BASE){K.className=this.CSS.BASE;}return K;},_updateHueSlider:function(){var K=this.get(this.OPT.PICKER_SIZE),L=this.get(this.OPT.HUE);L=K-Math.round(L/360*K);if(L===K){L=0;}this.hueSlider.setValue(L,this.skipAnim);},_updatePickerSlider:function(){var L=this.get(this.OPT.PICKER_SIZE),M=this.get(this.OPT.SATURATION),K=this.get(this.OPT.VALUE);M=Math.round(M*L/100);K=Math.round(L-(K*L/100));this.pickerSlider.setRegionValue(M,K,this.skipAnim);},_updateSliders:function(){this._updateHueSlider();this._updatePickerSlider();},setValue:function(L,K){K=(K)||false;this.set(this.OPT.RGB,L,K);this._updateSliders();},hueSlider:null,pickerSlider:null,_getH:function(){var K=this.get(this.OPT.PICKER_SIZE),L=(K-this.hueSlider.getValue())/K;L=Math.round(L*360);return(L===360)?0:L;},_getS:function(){return this.pickerSlider.getXValue()/this.get(this.OPT.PICKER_SIZE);},_getV:function(){var K=this.get(this.OPT.PICKER_SIZE);return(K-this.pickerSlider.getYValue())/K;},_updateSwatch:function(){var M=this.get(this.OPT.RGB),O=this.get(this.OPT.WEBSAFE),N=this.getElement(this.ID.SWATCH),L=M.join(","),K=this.get(this.OPT.TXT);E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CURRENT_COLOR,{"rgb":"#"+this.get(this.OPT.HEX)});N=this.getElement(this.ID.WEBSAFE_SWATCH);L=O.join(",");E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CLOSEST_WEBSAFE,{"rgb":"#"+B.rgb2hex(O)});},_getValuesFromSliders:function(){this.set(this.OPT.RGB,B.hsv2rgb(this._getH(),this._getS(),this._getV()));},_updateFormFields:function(){this.getElement(this.ID.H).value=this.get(this.OPT.HUE);this.getElement(this.ID.S).value=this.get(this.OPT.SATURATION);this.getElement(this.ID.V).value=this.get(this.OPT.VALUE);this.getElement(this.ID.R).value=this.get(this.OPT.RED);this.getElement(this.ID.R_HEX).innerHTML=B.dec2hex(this.get(this.OPT.RED));this.getElement(this.ID.G).value=this.get(this.OPT.GREEN);this.getElement(this.ID.G_HEX).innerHTML=B.dec2hex(this.get(this.OPT.GREEN));this.getElement(this.ID.B).value=this.get(this.OPT.BLUE);this.getElement(this.ID.B_HEX).innerHTML=B.dec2hex(this.get(this.OPT.BLUE));this.getElement(this.ID.HEX).value=this.get(this.OPT.HEX);},_onHueSliderChange:function(N){var L=this._getH(),K=B.hsv2rgb(L,1,1),M="rgb("+K.join(",")+")";this.set(this.OPT.HUE,L,true);E.setStyle(this.getElement(this.ID.PICKER_BG),"background-color",M);if(this.hueSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders();}this._updateFormFields();this._updateSwatch();},_onPickerSliderChange:function(M){var L=this._getS(),K=this._getV();this.set(this.OPT.SATURATION,Math.round(L*100),true);this.set(this.OPT.VALUE,Math.round(K*100),true);if(this.pickerSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders();\r
+}this._updateFormFields();this._updateSwatch();},_getCommand:function(K){var L=I.getCharCode(K);if(L===38){return 3;}else{if(L===13){return 6;}else{if(L===40){return 4;}else{if(L>=48&&L<=57){return 1;}else{if(L>=97&&L<=102){return 2;}else{if(L>=65&&L<=70){return 2;}else{if("8, 9, 13, 27, 37, 39".indexOf(L)>-1||K.ctrlKey||K.metaKey){return 5;}else{return 0;}}}}}}}},_useFieldValue:function(L,K,N){var M=K.value;if(N!==this.OPT.HEX){M=parseInt(M,10);}if(M!==this.get(N)){this.set(N,M);}},_rgbFieldKeypress:function(M,K,O){var N=this._getCommand(M),L=(M.shiftKey)?10:1;switch(N){case 6:this._useFieldValue.apply(this,arguments);break;case 3:this.set(O,Math.min(this.get(O)+L,255));this._updateFormFields();break;case 4:this.set(O,Math.max(this.get(O)-L,0));this._updateFormFields();break;default:}},_hexFieldKeypress:function(L,K,N){var M=this._getCommand(L);if(M===6){this._useFieldValue.apply(this,arguments);}},_hexOnly:function(L,K){var M=this._getCommand(L);switch(M){case 6:case 5:case 1:break;case 2:if(K!==true){break;}default:I.stopEvent(L);return false;}},_numbersOnly:function(K){return this._hexOnly(K,true);},getElement:function(K){return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[K]];},_createElements:function(){var N,M,P,O,L,K=this.get(this.OPT.IDS),Q=this.get(this.OPT.TXT),S=this.get(this.OPT.IMAGES),R=function(U,V){var W=document.createElement(U);if(V){C.augmentObject(W,V,true);}return W;},T=function(U,V){var W=C.merge({autocomplete:"off",value:"0",size:3,maxlength:3},V);W.name=W.id;return new R(U,W);};L=this.get("element");N=new R("div",{id:K[this.ID.PICKER_BG],className:"yui-picker-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.PICKER_THUMB],className:"yui-picker-thumb"});P=new R("img",{src:S.PICKER_THUMB});M.appendChild(P);N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HUE_BG],className:"yui-picker-hue-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.HUE_THUMB],className:"yui-picker-hue-thumb"});P=new R("img",{src:S.HUE_THUMB});M.appendChild(P);N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.CONTROLS],className:"yui-picker-controls"});L.appendChild(N);L=N;N=new R("div",{className:"hd"});M=new R("a",{id:K[this.ID.CONTROLS_LABEL],href:"#"});N.appendChild(M);L.appendChild(N);N=new R("div",{className:"bd"});L.appendChild(N);L=N;N=new R("ul",{id:K[this.ID.RGB_CONTROLS],className:"yui-picker-rgb-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.R+" "));O=new T("input",{id:K[this.ID.R],className:"yui-picker-r"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.G+" "));O=new T("input",{id:K[this.ID.G],className:"yui-picker-g"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.B+" "));O=new T("input",{id:K[this.ID.B],className:"yui-picker-b"});M.appendChild(O);N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HSV_CONTROLS],className:"yui-picker-hsv-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.H+" "));O=new T("input",{id:K[this.ID.H],className:"yui-picker-h"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.DEG));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.S+" "));O=new T("input",{id:K[this.ID.S],className:"yui-picker-s"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.V+" "));O=new T("input",{id:K[this.ID.V],className:"yui-picker-v"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HEX_SUMMARY],className:"yui-picker-hex_summary"});M=new R("li",{id:K[this.ID.R_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.G_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.B_HEX]});N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HEX_CONTROLS],className:"yui-picker-hex-controls"});N.appendChild(document.createTextNode(Q.HEX+" "));M=new T("input",{id:K[this.ID.HEX],className:"yui-picker-hex",size:6,maxlength:6});N.appendChild(M);L.appendChild(N);L=this.get("element");N=new R("div",{id:K[this.ID.SWATCH],className:"yui-picker-swatch"});L.appendChild(N);N=new R("div",{id:K[this.ID.WEBSAFE_SWATCH],className:"yui-picker-websafe-swatch"});L.appendChild(N);},_attachRGBHSV:function(L,K){I.on(this.getElement(L),"keydown",function(N,M){M._rgbFieldKeypress(N,this,K);},this);I.on(this.getElement(L),"keypress",this._numbersOnly,this,true);I.on(this.getElement(L),"blur",function(N,M){M._useFieldValue(N,this,K);},this);},_updateRGB:function(){var K=[this.get(this.OPT.RED),this.get(this.OPT.GREEN),this.get(this.OPT.BLUE)];this.set(this.OPT.RGB,K);this._updateSliders();},_initElements:function(){var O=this.OPT,N=this.get(O.IDS),L=this.get(O.ELEMENTS),K,M,P;for(K in this.ID){if(C.hasOwnProperty(this.ID,K)){N[this.ID[K]]=N[K];}}M=E.get(N[this.ID.PICKER_BG]);if(!M){this._createElements();}else{}for(K in N){if(C.hasOwnProperty(N,K)){M=E.get(N[K]);P=E.generateId(M);N[K]=P;N[N[K]]=P;L[P]=M;}}},initPicker:function(){this._initSliders();this._bindUI();this.syncUI(true);},_initSliders:function(){var K=this.ID,L=this.get(this.OPT.PICKER_SIZE);this.hueSlider=D.getVertSlider(this.getElement(K.HUE_BG),this.getElement(K.HUE_THUMB),0,L);this.pickerSlider=D.getSliderRegion(this.getElement(K.PICKER_BG),this.getElement(K.PICKER_THUMB),0,L,0,L);this.set(this.OPT.ANIMATE,this.get(this.OPT.ANIMATE));},_bindUI:function(){var K=this.ID,L=this.OPT;this.hueSlider.subscribe("change",this._onHueSliderChange,this,true);this.pickerSlider.subscribe("change",this._onPickerSliderChange,this,true);I.on(this.getElement(K.WEBSAFE_SWATCH),"click",function(M){this.setValue(this.get(L.WEBSAFE));},this,true);I.on(this.getElement(K.CONTROLS_LABEL),"click",function(M){this.set(L.SHOW_CONTROLS,!this.get(L.SHOW_CONTROLS));I.preventDefault(M);},this,true);this._attachRGBHSV(K.R,L.RED);this._attachRGBHSV(K.G,L.GREEN);this._attachRGBHSV(K.B,L.BLUE);this._attachRGBHSV(K.H,L.HUE);\r
+this._attachRGBHSV(K.S,L.SATURATION);this._attachRGBHSV(K.V,L.VALUE);I.on(this.getElement(K.HEX),"keydown",function(N,M){M._hexFieldKeypress(N,this,L.HEX);},this);I.on(this.getElement(this.ID.HEX),"keypress",this._hexOnly,this,true);I.on(this.getElement(this.ID.HEX),"blur",function(N,M){M._useFieldValue(N,this,L.HEX);},this);},syncUI:function(K){this.skipAnim=K;this._updateRGB();this.skipAnim=false;},_updateRGBFromHSV:function(){var L=[this.get(this.OPT.HUE),this.get(this.OPT.SATURATION)/100,this.get(this.OPT.VALUE)/100],K=B.hsv2rgb(L);this.set(this.OPT.RGB,K);this._updateSliders();},_updateHex:function(){var N=this.get(this.OPT.HEX),K=N.length,O,M,L;if(K===3){O=N.split("");for(M=0;M<K;M=M+1){O[M]=O[M]+O[M];}N=O.join("");}if(N.length!==6){return false;}L=B.hex2rgb(N);this.setValue(L);},_hideShowEl:function(M,K){var L=(C.isString(M)?this.getElement(M):M);E.setStyle(L,"display",(K)?"":"none");},initAttributes:function(K){K=K||{};G.superclass.initAttributes.call(this,K);this.setAttributeConfig(this.OPT.PICKER_SIZE,{value:K.size||this.DEFAULT.PICKER_SIZE});this.setAttributeConfig(this.OPT.HUE,{value:K.hue||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.SATURATION,{value:K.saturation||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.VALUE,{value:C.isNumber(K.value)?K.value:100,validator:C.isNumber});this.setAttributeConfig(this.OPT.RED,{value:C.isNumber(K.red)?K.red:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.GREEN,{value:C.isNumber(K.green)?K.green:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.BLUE,{value:C.isNumber(K.blue)?K.blue:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.HEX,{value:K.hex||"FFFFFF",validator:C.isString});this.setAttributeConfig(this.OPT.RGB,{value:K.rgb||[255,255,255],method:function(O){this.set(this.OPT.RED,O[0],true);this.set(this.OPT.GREEN,O[1],true);this.set(this.OPT.BLUE,O[2],true);var Q=B.websafe(O),P=B.rgb2hex(O),N=B.rgb2hsv(O);this.set(this.OPT.WEBSAFE,Q,true);this.set(this.OPT.HEX,P,true);if(N[1]){this.set(this.OPT.HUE,N[0],true);}this.set(this.OPT.SATURATION,Math.round(N[1]*100),true);this.set(this.OPT.VALUE,Math.round(N[2]*100),true);},readonly:true});this.setAttributeConfig(this.OPT.CONTAINER,{value:null,method:function(N){if(N){N.showEvent.subscribe(function(){this.pickerSlider.focus();},this,true);}}});this.setAttributeConfig(this.OPT.WEBSAFE,{value:K.websafe||[255,255,255]});var M=K.ids||C.merge({},this.ID),L;if(!K.ids&&J>1){for(L in M){if(C.hasOwnProperty(M,L)){M[L]=M[L]+J;}}}this.setAttributeConfig(this.OPT.IDS,{value:M,writeonce:true});this.setAttributeConfig(this.OPT.TXT,{value:K.txt||this.TXT,writeonce:true});this.setAttributeConfig(this.OPT.IMAGES,{value:K.images||this.IMAGE,writeonce:true});this.setAttributeConfig(this.OPT.ELEMENTS,{value:{},readonly:true});this.setAttributeConfig(this.OPT.SHOW_CONTROLS,{value:C.isBoolean(K.showcontrols)?K.showcontrols:true,method:function(N){var O=E.getElementsByClassName("bd","div",this.getElement(this.ID.CONTROLS))[0];this._hideShowEl(O,N);this.getElement(this.ID.CONTROLS_LABEL).innerHTML=(N)?this.get(this.OPT.TXT).HIDE_CONTROLS:this.get(this.OPT.TXT).SHOW_CONTROLS;}});this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS,{value:C.isBoolean(K.showrgbcontrols)?K.showrgbcontrols:true,method:function(N){this._hideShowEl(this.ID.RGB_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS,{value:C.isBoolean(K.showhsvcontrols)?K.showhsvcontrols:false,method:function(N){this._hideShowEl(this.ID.HSV_CONTROLS,N);if(N&&this.get(this.OPT.SHOW_HEX_SUMMARY)){this.set(this.OPT.SHOW_HEX_SUMMARY,false);}}});this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS,{value:C.isBoolean(K.showhexcontrols)?K.showhexcontrols:false,method:function(N){this._hideShowEl(this.ID.HEX_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_WEBSAFE,{value:C.isBoolean(K.showwebsafe)?K.showwebsafe:true,method:function(N){this._hideShowEl(this.ID.WEBSAFE_SWATCH,N);}});this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY,{value:C.isBoolean(K.showhexsummary)?K.showhexsummary:true,method:function(N){this._hideShowEl(this.ID.HEX_SUMMARY,N);if(N&&this.get(this.OPT.SHOW_HSV_CONTROLS)){this.set(this.OPT.SHOW_HSV_CONTROLS,false);}}});this.setAttributeConfig(this.OPT.ANIMATE,{value:C.isBoolean(K.animate)?K.animate:true,method:function(N){if(this.pickerSlider){this.pickerSlider.animate=N;this.hueSlider.animate=N;}}});this.on(this.OPT.HUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.SATURATION+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.VALUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.RED+"Change",this._updateRGB,this,true);this.on(this.OPT.GREEN+"Change",this._updateRGB,this,true);this.on(this.OPT.BLUE+"Change",this._updateRGB,this,true);this.on(this.OPT.HEX+"Change",this._updateHex,this,true);this._initElements();}});YAHOO.widget.ColorPicker=G;})();YAHOO.register("colorpicker",YAHOO.widget.ColorPicker,{version:"2.7.0",build:"1796"});\r
+\r
+/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,F,E){var D=this.getEl();if(this.patterns.noNegatives.test(C)){F=(F>0)?F:0;}if("style" in D){B.Dom.setStyle(D,C,F+E);}else{if(C in D){D[C]=F;}}},getAttribute:function(C){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="auto"&&!this.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if("style" in E){if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0).toUpperCase()+D[0].substr(1)];}else{G=0;}}else{if(C in E){G=E[C];}}return G;},getDefaultUnit:function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fps;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(){return E;};this.isAnimated=function(){return D;};this.getStartTime=function(){return F;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.setRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=function(){var O={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};O.toString=function(){return("duration: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N.toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F==-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]==H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)];\r
+}return null;};B.getAttribute=function(E){var G=this.getEl();if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return !H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.runtimeAttributes[F].end=G;}};C.ColorAnim=A;})();\r
+/*\r
+TERMS OF USE - EASING EQUATIONS\r
+Open source under the BSD License.\r
+Copyright 2001 Robert Penner All rights reserved.\r
+\r
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\r
+ * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.\r
+\r
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+*/\r
+YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.5625*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,C){if(B<C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0] instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]);\r
+}else{E.Dom.setXY(H,E.Dom.getXY(H));}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[this.method(this.currentFrame,H[0],F[0]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.7.0",build:"1799"});\r
diff --git a/_source/plugins/undo/plugin.js b/_source/plugins/undo/plugin.js
new file mode 100644 (file)
index 0000000..e013a9d
--- /dev/null
@@ -0,0 +1,490 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview Undo/Redo system for saving shapshot for document modification\r
+ *             and other recordable changes.\r
+ */\r
+\r
+(function()\r
+{\r
+       CKEDITOR.plugins.add( 'undo',\r
+       {\r
+               requires : [ 'selection', 'wysiwygarea' ],\r
+\r
+               init : function( editor )\r
+               {\r
+                       var undoManager = new UndoManager( editor );\r
+\r
+                       var undoCommand = editor.addCommand( 'undo',\r
+                               {\r
+                                       exec : function()\r
+                                       {\r
+                                               if ( undoManager.undo() )\r
+                                               {\r
+                                                       editor.selectionChange();\r
+                                                       this.fire( 'afterUndo' );\r
+                                               }\r
+                                       },\r
+                                       state : CKEDITOR.TRISTATE_DISABLED,\r
+                                       canUndo : false\r
+                               });\r
+\r
+                       var redoCommand = editor.addCommand( 'redo',\r
+                               {\r
+                                       exec : function()\r
+                                       {\r
+                                               if ( undoManager.redo() )\r
+                                               {\r
+                                                       editor.selectionChange();\r
+                                                       this.fire( 'afterRedo' );\r
+                                               }\r
+                                       },\r
+                                       state : CKEDITOR.TRISTATE_DISABLED,\r
+                                       canUndo : false\r
+                               });\r
+\r
+                       undoManager.onChange = function()\r
+                       {\r
+                               undoCommand.setState( undoManager.undoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );\r
+                               redoCommand.setState( undoManager.redoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );\r
+                       };\r
+\r
+                       function recordCommand( event )\r
+                       {\r
+                               // If the command hasn't been marked to not support undo.\r
+                               if ( undoManager.enabled && event.data.command.canUndo !== false )\r
+                                       undoManager.save();\r
+                       }\r
+\r
+                       // We'll save snapshots before and after executing a command.\r
+                       editor.on( 'beforeCommandExec', recordCommand );\r
+                       editor.on( 'afterCommandExec', recordCommand );\r
+\r
+                       // Save snapshots before doing custom changes.\r
+                       editor.on( 'saveSnapshot', function()\r
+                               {\r
+                                       undoManager.save();\r
+                               });\r
+\r
+                       // Registering keydown on every document recreation.(#3844)\r
+                       editor.on( 'contentDom', function()\r
+                               {\r
+                                       editor.document.on( 'keydown', function( event )\r
+                                               {\r
+                                                       // Do not capture CTRL hotkeys.\r
+                                                       if ( !event.data.$.ctrlKey && !event.data.$.metaKey )\r
+                                                               undoManager.type( event );\r
+                                               });\r
+                               });\r
+\r
+                       // Always save an undo snapshot - the previous mode might have\r
+                       // changed editor contents.\r
+                       editor.on( 'beforeModeUnload', function()\r
+                               {\r
+                                       editor.mode == 'wysiwyg' && undoManager.save( true );\r
+                               });\r
+\r
+                       // Make the undo manager available only in wysiwyg mode.\r
+                       editor.on( 'mode', function()\r
+                               {\r
+                                       undoManager.enabled = editor.mode == 'wysiwyg';\r
+                                       undoManager.onChange();\r
+                               });\r
+\r
+                       editor.ui.addButton( 'Undo',\r
+                               {\r
+                                       label : editor.lang.undo,\r
+                                       command : 'undo'\r
+                               });\r
+\r
+                       editor.ui.addButton( 'Redo',\r
+                               {\r
+                                       label : editor.lang.redo,\r
+                                       command : 'redo'\r
+                               });\r
+\r
+                       editor.resetUndo = function()\r
+                       {\r
+                               // Reset the undo stack.\r
+                               undoManager.reset();\r
+\r
+                               // Create the first image.\r
+                               editor.fire( 'saveSnapshot' );\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Gets a snapshot image which represent the current document status.\r
+       function Image( editor )\r
+       {\r
+               var selection = editor.getSelection();\r
+\r
+               this.contents   = editor.getSnapshot();\r
+               this.bookmarks  = selection && selection.createBookmarks2( true );\r
+\r
+               // In IE, we need to remove the expando attributes.\r
+               if ( CKEDITOR.env.ie )\r
+                       this.contents = this.contents.replace( /\s+_cke_expando=".*?"/g, '' );\r
+       }\r
+\r
+       Image.prototype =\r
+       {\r
+               equals : function( otherImage, contentOnly )\r
+               {\r
+                       if ( this.contents != otherImage.contents )\r
+                               return false;\r
+\r
+                       if ( contentOnly )\r
+                               return true;\r
+\r
+                       var bookmarksA = this.bookmarks,\r
+                               bookmarksB = otherImage.bookmarks;\r
+\r
+                       if ( bookmarksA || bookmarksB )\r
+                       {\r
+                               if ( !bookmarksA || !bookmarksB || bookmarksA.length != bookmarksB.length )\r
+                                       return false;\r
+\r
+                               for ( var i = 0 ; i < bookmarksA.length ; i++ )\r
+                               {\r
+                                       var bookmarkA = bookmarksA[ i ],\r
+                                               bookmarkB = bookmarksB[ i ];\r
+\r
+                                       if (\r
+                                               bookmarkA.startOffset != bookmarkB.startOffset ||\r
+                                               bookmarkA.endOffset != bookmarkB.endOffset ||\r
+                                               !CKEDITOR.tools.arrayCompare( bookmarkA.start, bookmarkB.start ) ||\r
+                                               !CKEDITOR.tools.arrayCompare( bookmarkA.end, bookmarkB.end ) )\r
+                                       {\r
+                                               return false;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       return true;\r
+               }\r
+       };\r
+\r
+       /**\r
+        * @constructor Main logic for Redo/Undo feature.\r
+        */\r
+       function UndoManager( editor )\r
+       {\r
+               this.editor = editor;\r
+\r
+               // Reset the undo stack.\r
+               this.reset();\r
+       }\r
+\r
+       UndoManager.prototype =\r
+       {\r
+               /**\r
+                * Process undo system regard keystrikes.\r
+                * @param {CKEDITOR.dom.event} event\r
+                */\r
+               type : function( event )\r
+               {\r
+                       var keystroke = event && event.data.getKeystroke(),\r
+\r
+                               // Backspace, Delete\r
+                               modifierCodes = { 8:1, 46:1 },\r
+                               // Keystrokes which will modify the contents.\r
+                               isModifier = keystroke in modifierCodes,\r
+                               wasModifier = this.lastKeystroke in modifierCodes,\r
+                               lastWasSameModifier = isModifier && keystroke == this.lastKeystroke,\r
+\r
+                               // Arrows: L, T, R, B\r
+                               resetTypingCodes = { 37:1, 38:1, 39:1, 40:1 },\r
+                               // Keystrokes which navigation through contents.\r
+                               isReset = keystroke in resetTypingCodes,\r
+                               wasReset = this.lastKeystroke in resetTypingCodes,\r
+\r
+                               // Keystrokes which just introduce new contents.\r
+                               isContent = ( !isModifier && !isReset ),\r
+\r
+                               // Create undo snap for every different modifier key.\r
+                               modifierSnapshot = ( isModifier && !lastWasSameModifier ),\r
+                               // Create undo snap on the following cases:\r
+                               // 1. Just start to type.\r
+                               // 2. Typing some content after a modifier.\r
+                               // 3. Typing some content after make a visible selection.\r
+                               startedTyping = !this.typing\r
+                                       || ( isContent && ( wasModifier || wasReset ) );\r
+\r
+                       if ( startedTyping || modifierSnapshot )\r
+                       {\r
+                               var beforeTypeImage = new Image( this.editor );\r
+\r
+                               // Use setTimeout, so we give the necessary time to the\r
+                               // browser to insert the character into the DOM.\r
+                               CKEDITOR.tools.setTimeout( function()\r
+                                       {\r
+                                               var currentSnapshot = this.editor.getSnapshot();\r
+\r
+                                               // In IE, we need to remove the expando attributes.\r
+                                               if ( CKEDITOR.env.ie )\r
+                                                       currentSnapshot = currentSnapshot.replace( /\s+_cke_expando=".*?"/g, '' );\r
+\r
+                                               if ( beforeTypeImage.contents != currentSnapshot )\r
+                                               {\r
+                                                       // This's a special save, with specified snapshot\r
+                                                       // and without auto 'fireChange'.\r
+                                                       if ( !this.save( false, beforeTypeImage, false ) )\r
+                                                               // Drop future snapshots.\r
+                                                               this.snapshots.splice( this.index + 1, this.snapshots.length - this.index - 1 );\r
+\r
+                                                       this.hasUndo = true;\r
+                                                       this.hasRedo = false;\r
+\r
+                                                       this.typesCount = 1;\r
+                                                       this.modifiersCount = 1;\r
+\r
+                                                       this.onChange();\r
+                                               }\r
+                                       },\r
+                                       0, this\r
+                               );\r
+                       }\r
+\r
+                       this.lastKeystroke = keystroke;\r
+                       // Create undo snap after typed too much (over 25 times).\r
+                       if ( isModifier )\r
+                       {\r
+                               this.typesCount = 0;\r
+                               this.modifiersCount++;\r
+\r
+                               if ( this.modifiersCount > 25 )\r
+                               {\r
+                                       this.save();\r
+                                       this.modifiersCount = 1;\r
+                               }\r
+                       }\r
+                       else if ( !isReset )\r
+                       {\r
+                               this.modifiersCount = 0;\r
+                               this.typesCount++;\r
+\r
+                               if ( this.typesCount > 25 )\r
+                               {\r
+                                       this.save();\r
+                                       this.typesCount = 1;\r
+                               }\r
+                       }\r
+\r
+                       this.typing = true;\r
+               },\r
+\r
+               reset : function()      // Reset the undo stack.\r
+               {\r
+                       /**\r
+                        * Remember last pressed key.\r
+                        */\r
+                       this.lastKeystroke = 0;\r
+\r
+                       /**\r
+                        * Stack for all the undo and redo snapshots, they're always created/removed\r
+                        * in consistency.\r
+                        */\r
+                       this.snapshots = [];\r
+\r
+                       /**\r
+                        * Current snapshot history index.\r
+                        */\r
+                       this.index = -1;\r
+\r
+                       this.limit = this.editor.config.undoStackSize;\r
+\r
+                       this.currentImage = null;\r
+\r
+                       this.hasUndo = false;\r
+                       this.hasRedo = false;\r
+\r
+                       this.resetType();\r
+               },\r
+\r
+               /**\r
+                * Reset all states about typing.\r
+                * @see  UndoManager.type\r
+                */\r
+               resetType : function()\r
+               {\r
+                       this.typing = false;\r
+                       delete this.lastKeystroke;\r
+                       this.typesCount = 0;\r
+                       this.modifiersCount = 0;\r
+               },\r
+               fireChange : function()\r
+               {\r
+                       this.hasUndo = !!this.getNextImage( true );\r
+                       this.hasRedo = !!this.getNextImage( false );\r
+                       // Reset typing\r
+                       this.resetType();\r
+                       this.onChange();\r
+               },\r
+\r
+               /**\r
+                * Save a snapshot of document image for later retrieve.\r
+                */\r
+               save : function( onContentOnly, image, autoFireChange )\r
+               {\r
+                       var snapshots = this.snapshots;\r
+\r
+                       // Get a content image.\r
+                       if ( !image )\r
+                               image = new Image( this.editor );\r
+\r
+                       // Check if this is a duplicate. In such case, do nothing.\r
+                       if ( this.currentImage && image.equals( this.currentImage, onContentOnly ) )\r
+                               return false;\r
+\r
+                       // Drop future snapshots.\r
+                       snapshots.splice( this.index + 1, snapshots.length - this.index - 1 );\r
+\r
+                       // If we have reached the limit, remove the oldest one.\r
+                       if ( snapshots.length == this.limit )\r
+                               snapshots.shift();\r
+\r
+                       // Add the new image, updating the current index.\r
+                       this.index = snapshots.push( image ) - 1;\r
+\r
+                       this.currentImage = image;\r
+\r
+                       if ( autoFireChange !== false )\r
+                               this.fireChange();\r
+                       return true;\r
+               },\r
+\r
+               restoreImage : function( image )\r
+               {\r
+                       this.editor.loadSnapshot( image.contents );\r
+\r
+                       if ( image.bookmarks )\r
+                               this.editor.getSelection().selectBookmarks( image.bookmarks );\r
+                       else if ( CKEDITOR.env.ie )\r
+                       {\r
+                               // IE BUG: If I don't set the selection to *somewhere* after setting\r
+                               // document contents, then IE would create an empty paragraph at the bottom\r
+                               // the next time the document is modified.\r
+                               var $range = this.editor.document.getBody().$.createTextRange();\r
+                               $range.collapse( true );\r
+                               $range.select();\r
+                       }\r
+\r
+                       this.index = image.index;\r
+\r
+                       this.currentImage = image;\r
+\r
+                       this.fireChange();\r
+               },\r
+\r
+               // Get the closest available image.\r
+               getNextImage : function( isUndo )\r
+               {\r
+                       var snapshots = this.snapshots,\r
+                               currentImage = this.currentImage,\r
+                               image, i;\r
+\r
+                       if ( currentImage )\r
+                       {\r
+                               if ( isUndo )\r
+                               {\r
+                                       for ( i = this.index - 1 ; i >= 0 ; i-- )\r
+                                       {\r
+                                               image = snapshots[ i ];\r
+                                               if ( !currentImage.equals( image, true ) )\r
+                                               {\r
+                                                       image.index = i;\r
+                                                       return image;\r
+                                               }\r
+                                       }\r
+                               }\r
+                               else\r
+                               {\r
+                                       for ( i = this.index + 1 ; i < snapshots.length ; i++ )\r
+                                       {\r
+                                               image = snapshots[ i ];\r
+                                               if ( !currentImage.equals( image, true ) )\r
+                                               {\r
+                                                       image.index = i;\r
+                                                       return image;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       return null;\r
+               },\r
+\r
+               /**\r
+                * Check the current redo state.\r
+                * @return {Boolean} Whether the document has previous state to\r
+                *              retrieve.\r
+                */\r
+               redoable : function()\r
+               {\r
+                       return this.enabled && this.hasRedo;\r
+               },\r
+\r
+               /**\r
+                * Check the current undo state.\r
+                * @return {Boolean} Whether the document has future state to restore.\r
+                */\r
+               undoable : function()\r
+               {\r
+                       return this.enabled && this.hasUndo;\r
+               },\r
+\r
+               /**\r
+                * Perform undo on current index.\r
+                */\r
+               undo : function()\r
+               {\r
+                       if ( this.undoable() )\r
+                       {\r
+                               this.save( true );\r
+\r
+                               var image = this.getNextImage( true );\r
+                               if ( image )\r
+                                       return this.restoreImage( image ), true;\r
+                       }\r
+\r
+                       return false;\r
+               },\r
+\r
+               /**\r
+                * Perform redo on current index.\r
+                */\r
+               redo : function()\r
+               {\r
+                       if ( this.redoable() )\r
+                       {\r
+                               // Try to save. If no changes have been made, the redo stack\r
+                               // will not change, so it will still be redoable.\r
+                               this.save( true );\r
+\r
+                               // If instead we had changes, we can't redo anymore.\r
+                               if ( this.redoable() )\r
+                               {\r
+                                       var image = this.getNextImage( false );\r
+                                       if ( image )\r
+                                               return this.restoreImage( image ), true;\r
+                               }\r
+                       }\r
+\r
+                       return false;\r
+               }\r
+       };\r
+})();\r
+\r
+/**\r
+ * The number of undo steps to be saved. The higher this setting value the more\r
+ * memory is used for it.\r
+ * @type Number\r
+ * @default 20\r
+ * @example\r
+ * config.undoStackSize = 50;\r
+ */\r
+CKEDITOR.config.undoStackSize = 20;\r
diff --git a/_source/plugins/wsc/dialogs/ciframe.html b/_source/plugins/wsc/dialogs/ciframe.html
new file mode 100644 (file)
index 0000000..8e163fe
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html>\r
+<head>\r
+       <title></title>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+       <script type="text/javascript">\r
+\r
+function gup( name )\r
+{\r
+       name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ;\r
+       var regexS = '[\\?&]' + name + '=([^&#]*)' ;\r
+       var regex = new RegExp( regexS ) ;\r
+       var results = regex.exec( window.location.href ) ;\r
+\r
+       if( results )\r
+               return results[ 1 ] ;\r
+       else\r
+               return '' ;\r
+}\r
+\r
+var interval;\r
+\r
+function sendData2Master()\r
+{\r
+       var destination = window.parent.parent ;\r
+       try\r
+       {\r
+               if ( destination.XDTMaster )\r
+               {\r
+                       var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ;\r
+                       window.clearInterval( interval ) ;\r
+               }\r
+       }\r
+       catch (e) {}\r
+}\r
+\r
+function onLoad()\r
+{\r
+       interval = window.setInterval( sendData2Master, 100 );\r
+}\r
+\r
+</script>\r
+</head>\r
+<body onload="onLoad()"><p></p></body>\r
+</html>\r
diff --git a/_source/plugins/wsc/dialogs/tmpFrameset.html b/_source/plugins/wsc/dialogs/tmpFrameset.html
new file mode 100644 (file)
index 0000000..d8bd188
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html>\r
+<head>\r
+       <title></title>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+       <script type="text/javascript">\r
+\r
+function doLoadScript( url )\r
+{\r
+       if ( !url )\r
+               return false ;\r
+\r
+       var s = document.createElement( "script" ) ;\r
+       s.type = "text/javascript" ;\r
+       s.src = url ;\r
+       document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ;\r
+\r
+       return true ;\r
+}\r
+\r
+var opener;\r
+function tryLoad()\r
+{\r
+       opener = window.parent;\r
+\r
+       // get access to global parameters\r
+       var oParams = window.opener.oldFramesetPageParams;\r
+\r
+       // make frameset rows string prepare\r
+       var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ;\r
+       document.getElementById( 'itFrameset' ).rows = sFramesetRows ;\r
+\r
+       // dynamic including init frames and crossdomain transport code\r
+       // from config sproxy_js_frameset url\r
+       var addScriptUrl = oParams.sproxy_js_frameset ;\r
+       doLoadScript( addScriptUrl ) ;\r
+}\r
+\r
+       </script>\r
+</head>\r
+\r
+<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0">\r
+    <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame>\r
+    <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame>\r
+    <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame>\r
+    <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame>\r
+</frameset>\r
+</html>\r
diff --git a/_source/plugins/wsc/dialogs/wsc.css b/_source/plugins/wsc/dialogs/wsc.css
new file mode 100644 (file)
index 0000000..74c41e6
--- /dev/null
@@ -0,0 +1,83 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+html, body\r
+{\r
+       background-color: transparent;\r
+       margin: 0px;\r
+       padding: 0px;\r
+}\r
+\r
+body\r
+{\r
+       padding: 10px;\r
+}\r
+\r
+body, td, input, select, textarea\r
+{\r
+       font-size: 11px;\r
+       font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;\r
+}\r
+\r
+.midtext\r
+{\r
+       padding:0px;\r
+       margin:10px;\r
+}\r
+\r
+.midtext p\r
+{\r
+       padding:0px;\r
+       margin:10px;\r
+}\r
+\r
+.Button\r
+{\r
+       border: #737357 1px solid;\r
+       color: #3b3b1f;\r
+       background-color: #c7c78f;\r
+}\r
+\r
+.PopupTabArea\r
+{\r
+       color: #737357;\r
+       background-color: #e3e3c7;\r
+}\r
+\r
+.PopupTitleBorder\r
+{\r
+       border-bottom: #d5d59d 1px solid;\r
+}\r
+.PopupTabEmptyArea\r
+{\r
+       padding-left: 10px;\r
+       border-bottom: #d5d59d 1px solid;\r
+}\r
+\r
+.PopupTab, .PopupTabSelected\r
+{\r
+       border-right: #d5d59d 1px solid;\r
+       border-top: #d5d59d 1px solid;\r
+       border-left: #d5d59d 1px solid;\r
+       padding: 3px 5px 3px 5px;\r
+       color: #737357;\r
+}\r
+\r
+.PopupTab\r
+{\r
+       margin-top: 1px;\r
+       border-bottom: #d5d59d 1px solid;\r
+       cursor: pointer;\r
+       cursor: hand;\r
+}\r
+\r
+.PopupTabSelected\r
+{\r
+       font-weight: bold;\r
+       cursor: default;\r
+       padding-top: 4px;\r
+       border-bottom: #f1f1e3 1px solid;\r
+       background-color: #f1f1e3;\r
+}\r
diff --git a/_source/plugins/wsc/dialogs/wsc.js b/_source/plugins/wsc/dialogs/wsc.js
new file mode 100644 (file)
index 0000000..fbc2f77
--- /dev/null
@@ -0,0 +1,169 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'checkspell', function( editor )\r
+{\r
+       var number = CKEDITOR.tools.getNextNumber(),\r
+               iframeId = 'cke_frame_' + number,\r
+               textareaId = 'cke_data_' + number,\r
+               errorBoxId = 'cke_error_' + number,\r
+               interval,\r
+               protocol = document.location.protocol || 'http:',\r
+               errorMsg = editor.lang.spellCheck.notAvailable;\r
+\r
+       var pasteArea = '<textarea'+\r
+                       ' style="display: none"' +\r
+                       ' id="' + textareaId + '"' +\r
+                       ' rows="10"' +\r
+                       ' cols="40">' +\r
+               ' </textarea><div' +\r
+                       ' id="' + errorBoxId + '"' +\r
+                       ' style="display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;">' +\r
+               '</div><iframe' +\r
+                       ' src=""' +\r
+                       ' style="width:485px;background-color:#f1f1e3;height:380px"' +\r
+                       ' frameborder="0"' +\r
+                       ' name="' + iframeId + '"' +\r
+                       ' id="' + iframeId + '"' +\r
+                       ' allowtransparency="1">' +\r
+               '</iframe>';\r
+\r
+       var wscCoreUrl = editor.config.wsc_customLoaderScript || ( protocol +\r
+                       '//loader.spellchecker.net/sproxy_fck/sproxy.php'\r
+                       + '?plugin=fck2'\r
+                       + '&customerid=' + editor.config.wsc_customerId\r
+                       + '&cmd=script&doc=wsc&schema=22'\r
+               );\r
+\r
+       if ( editor.config.wsc_customLoaderScript )\r
+               errorMsg += '<p style="color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px">' +\r
+                       editor.lang.spellCheck.errorLoading.replace( /%s/g, editor.config.wsc_customLoaderScript ) + '</p>';\r
+\r
+       function burnSpelling( dialog, errorMsg )\r
+       {\r
+               var i = 0;\r
+               return function ()\r
+               {\r
+                       if ( typeof( window.doSpell ) == 'function' )\r
+                       {\r
+                               //Call from window.setInteval expected at once.\r
+                               if ( typeof( interval ) != 'undefined' )\r
+                                       window.clearInterval( interval );\r
+\r
+                               initAndSpell( dialog );\r
+                       }\r
+                       else if ( i++ == 180 )                                                          // Timeout: 180 * 250ms = 45s.\r
+                               window._cancelOnError( errorMsg );\r
+               };\r
+       }\r
+\r
+       window._cancelOnError = function( m )\r
+       {\r
+               if ( typeof( window.WSC_Error ) == 'undefined' )\r
+               {\r
+                       CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'none' );\r
+                       var errorBox = CKEDITOR.document.getById( errorBoxId );\r
+                       errorBox.setStyle( 'display', 'block' );\r
+                       errorBox.setHtml( m || editor.lang.spellCheck.notAvailable );\r
+               }\r
+       };\r
+\r
+       function initAndSpell( dialog )\r
+       {\r
+               var LangComparer = new window._SP_FCK_LangCompare(),                                                    // Language abbr standarts comparer.\r
+                       pluginPath = CKEDITOR.getUrl( editor.plugins.wsc.path + 'dialogs/' ),                   // Service paths corecting/preparing.\r
+                       framesetPath = pluginPath + 'tmpFrameset.html';\r
+\r
+               // global var is used in FCK specific core\r
+               // change on equal var used in fckplugin.js\r
+               window.gFCKPluginName = 'wsc';\r
+\r
+               LangComparer.setDefaulLangCode( editor.config.defaultLanguage );\r
+\r
+               window.doSpell({\r
+                       ctrl : textareaId,\r
+                       lang : LangComparer.getSPLangCode( editor.langCode ),\r
+                       winType : iframeId,             // If not defined app will run on winpopup.\r
+\r
+                       // Callback binding section.\r
+                       onCancel : function()\r
+                       {\r
+                               dialog.hide();\r
+                       },\r
+                       onFinish : function( dT )\r
+                       {\r
+                               editor.focus();\r
+                               dialog.getParentEditor().setData( dT.value );\r
+                               dialog.hide();\r
+                       },\r
+\r
+                       // Some manipulations with client static pages.\r
+                       staticFrame : framesetPath,\r
+                       framesetPath : framesetPath,\r
+                       iframePath : pluginPath + 'ciframe.html',\r
+\r
+                       // Styles defining.\r
+                       schemaURI : pluginPath + 'wsc.css'\r
+               });\r
+\r
+               // Hide user message console (if application was loaded more then after timeout).\r
+               CKEDITOR.document.getById( errorBoxId ).setStyle( 'display', 'none' );\r
+               CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'block' );\r
+       }\r
+\r
+       return {\r
+               title : editor.lang.spellCheck.title,\r
+               minWidth : 485,\r
+               minHeight : 380,\r
+               buttons : [ CKEDITOR.dialog.cancelButton ],\r
+               onShow : function()\r
+               {\r
+                       var contentArea = this.getContentElement( 'general', 'content' ).getElement();\r
+                       contentArea.setHtml( pasteArea );\r
+\r
+                       if ( typeof( window.doSpell ) != 'function' )\r
+                       {\r
+                               // Load script.\r
+                               CKEDITOR.document.getHead().append(\r
+                                       CKEDITOR.document.createElement( 'script',\r
+                                               {\r
+                                                       attributes :\r
+                                                               {\r
+                                                                       type : 'text/javascript',\r
+                                                                       src : wscCoreUrl\r
+                                                               }\r
+                                               })\r
+                               );\r
+                       }\r
+\r
+                       var sData = editor.getData();                                                                                   // Get the data to be checked.\r
+                       CKEDITOR.document.getById( textareaId ).setValue( sData );\r
+\r
+                       interval = window.setInterval( burnSpelling( this, errorMsg ), 250 );\r
+               },\r
+               onHide : function()\r
+               {\r
+                       window.ooo = undefined;\r
+                       window.int_framsetLoaded = undefined;\r
+                       window.framesetLoaded = undefined;\r
+                       window.is_window_opened = false;\r
+               },\r
+               contents : [\r
+                       {\r
+                               id : 'general',\r
+                               label : editor.lang.spellCheck.title,\r
+                               padding : 0,\r
+                               elements : [\r
+                                       {\r
+                                               type : 'html',\r
+                                               id : 'content',\r
+                                               style : 'width:485;height:380px',\r
+                                               html : '<div></div>'\r
+                                       }\r
+                               ]\r
+                       }\r
+               ]\r
+       };\r
+});\r
diff --git a/_source/plugins/wsc/plugin.js b/_source/plugins/wsc/plugin.js
new file mode 100644 (file)
index 0000000..3ccc14b
--- /dev/null
@@ -0,0 +1,32 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @file Spell checker\r
+ */\r
+\r
+// Register a plugin named "wsc".\r
+CKEDITOR.plugins.add( 'wsc',\r
+{\r
+       init : function( editor )\r
+       {\r
+               var commandName = 'checkspell';\r
+\r
+               var command = editor.addCommand( commandName, new CKEDITOR.dialogCommand( commandName ) );\r
+\r
+               // SpellChecker doesn't work in Opera and with custom domain\r
+               command.modes = { wysiwyg : ( !CKEDITOR.env.opera && document.domain == window.location.hostname ) };\r
+\r
+               editor.ui.addButton( 'SpellChecker',\r
+                       {\r
+                               label : editor.lang.spellCheck.toolbar,\r
+                               command : commandName\r
+                       });\r
+               CKEDITOR.dialog.add( commandName, this.path + 'dialogs/wsc.js' );\r
+       }\r
+});\r
+\r
+CKEDITOR.config.wsc_customerId                 = CKEDITOR.config.wsc_customerId || '1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk' ;\r
+CKEDITOR.config.wsc_customLoaderScript = CKEDITOR.config.wsc_customLoaderScript || null;\r
diff --git a/_source/plugins/wysiwygarea/plugin.js b/_source/plugins/wysiwygarea/plugin.js
new file mode 100644 (file)
index 0000000..225f2f3
--- /dev/null
@@ -0,0 +1,636 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * @fileOverview The "wysiwygarea" plugin. It registers the "wysiwyg" editing\r
+ *             mode, which handles the main editing area space.\r
+ */\r
+\r
+(function()\r
+{\r
+       /**\r
+        * List of elements in which has no way to move editing focus outside.\r
+        */\r
+       var nonExitableElementNames = { table:1,pre:1 };\r
+       // Matching an empty paragraph at the end of document.\r
+       var emptyParagraphRegexp = /\s*<(p|div|address|h\d|center)[^>]*>\s*(?:<br[^>]*>|&nbsp;|&#160;)\s*(:?<\/\1>)?\s*$/gi;\r
+\r
+       function onInsertHtml( evt )\r
+       {\r
+               if ( this.mode == 'wysiwyg' )\r
+               {\r
+                       this.focus();\r
+\r
+                       var selection = this.getSelection(),\r
+                               data = evt.data;\r
+\r
+                       if ( this.dataProcessor )\r
+                               data = this.dataProcessor.toHtml( data );\r
+\r
+                       if ( CKEDITOR.env.ie )\r
+                       {\r
+                               var selIsLocked = selection.isLocked;\r
+\r
+                               if ( selIsLocked )\r
+                                       selection.unlock();\r
+\r
+                               var $sel = selection.getNative();\r
+                               if ( $sel.type == 'Control' )\r
+                                       $sel.clear();\r
+                               $sel.createRange().pasteHTML( data );\r
+\r
+                               if ( selIsLocked )\r
+                                       this.getSelection().lock();\r
+                       }\r
+                       else\r
+                               this.document.$.execCommand( 'inserthtml', false, data );\r
+               }\r
+       }\r
+\r
+       function onInsertElement( evt )\r
+       {\r
+               if ( this.mode == 'wysiwyg' )\r
+               {\r
+                       this.focus();\r
+                       this.fire( 'saveSnapshot' );\r
+\r
+                       var element = evt.data,\r
+                               elementName = element.getName(),\r
+                               isBlock = CKEDITOR.dtd.$block[ elementName ];\r
+\r
+                       var selection = this.getSelection(),\r
+                               ranges = selection.getRanges();\r
+\r
+                       var selIsLocked = selection.isLocked;\r
+\r
+                       if ( selIsLocked )\r
+                               selection.unlock();\r
+\r
+                       var range, clone, lastElement, bookmark;\r
+\r
+                       for ( var i = ranges.length - 1 ; i >= 0 ; i-- )\r
+                       {\r
+                               range = ranges[ i ];\r
+\r
+                               // Remove the original contents.\r
+                               range.deleteContents();\r
+\r
+                               clone = !i && element || element.clone( true );\r
+\r
+                               // If we're inserting a block at dtd-violated position, split\r
+                               // the parent blocks until we reach blockLimit.\r
+                               var parent, dtd;\r
+                               if ( this.config.enterMode != CKEDITOR.ENTER_BR && isBlock )\r
+                               {\r
+                                       while( ( parent = range.getCommonAncestor( false, true ) )\r
+                                                       && ( dtd = CKEDITOR.dtd[ parent.getName() ] )\r
+                                                       && !( dtd && dtd [ elementName ] ) )\r
+                                       {\r
+                                               range.splitBlock();\r
+                                       }\r
+                               }\r
+\r
+                               // Insert the new node.\r
+                               range.insertNode( clone );\r
+\r
+                               // Save the last element reference so we can make the\r
+                               // selection later.\r
+                               if ( !lastElement )\r
+                                       lastElement = clone;\r
+                       }\r
+\r
+                       range.moveToPosition( lastElement, CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       var next = lastElement.getNextSourceNode( true );\r
+                       if ( next && next.type == CKEDITOR.NODE_ELEMENT )\r
+                               range.moveToElementEditStart( next );\r
+\r
+                       selection.selectRanges( [ range ] );\r
+\r
+                       if ( selIsLocked )\r
+                               this.getSelection().lock();\r
+\r
+                       // Save snaps after the whole execution completed.\r
+                       // This's a workaround for make DOM modification's happened after\r
+                       // 'insertElement' to be included either, e.g. Form-based dialogs' 'commitContents'\r
+                       // call.\r
+                       CKEDITOR.tools.setTimeout( function(){\r
+                               this.fire( 'saveSnapshot' );\r
+                       }, 0, this );\r
+               }\r
+       }\r
+\r
+       /**\r
+        *  Auto-fixing block-less content by wrapping paragraph (#3190), prevent\r
+        *  non-exitable-block by padding extra br.(#3189)\r
+        */\r
+       function onSelectionChangeFixBody( evt )\r
+       {\r
+               var editor = evt.editor,\r
+                       path = evt.data.path,\r
+                       blockLimit = path.blockLimit,\r
+                       selection = evt.data.selection,\r
+                       range = selection.getRanges()[0],\r
+                       body = editor.document.getBody(),\r
+                       enterMode = editor.config.enterMode;\r
+\r
+               // When enterMode set to block, we'll establing new paragraph only if we're\r
+               // selecting inline contents right under body. (#3657)\r
+               if ( enterMode != CKEDITOR.ENTER_BR\r
+                    && range.collapsed\r
+                        && blockLimit.getName() == 'body'\r
+                        && !path.block )\r
+               {\r
+                       var bms = selection.createBookmarks(),\r
+                               fixedBlock = range.fixBlock( true,\r
+                                       editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p'  );\r
+\r
+                       // For IE, we'll be removing any bogus br ( introduce by fixing body )\r
+                       // right now to prevent it introducing visual line break.\r
+                       if ( CKEDITOR.env.ie )\r
+                       {\r
+                               var brNodeList = fixedBlock.getElementsByTag( 'br' ), brNode;\r
+                               for ( var i = 0 ; i < brNodeList.count() ; i++ )\r
+                               {\r
+                                       if( ( brNode = brNodeList.getItem( i ) ) && brNode.hasAttribute( '_cke_bogus' ) )\r
+                                               brNode.remove();\r
+                               }\r
+                       }\r
+\r
+                       selection.selectBookmarks( bms );\r
+\r
+                       // If the fixed block is blank and is already followed by a exitable\r
+                       // block, we should drop it and move to the exist block(#3684).\r
+                       var children = fixedBlock.getChildren(),\r
+                               count = children.count(),\r
+                               firstChild,\r
+                               whitespaceGuard = CKEDITOR.dom.walker.whitespaces( true ),\r
+                               previousElement = fixedBlock.getPrevious( whitespaceGuard ),\r
+                               nextElement = fixedBlock.getNext( whitespaceGuard ),\r
+                               enterBlock;\r
+                       if ( previousElement && previousElement.getName\r
+                                && !( previousElement.getName() in nonExitableElementNames ) )\r
+                               enterBlock = previousElement;\r
+                       else if ( nextElement && nextElement.getName\r
+                                         && !( nextElement.getName() in nonExitableElementNames ) )\r
+                               enterBlock = nextElement;\r
+\r
+                       // Not all blocks are editable, e.g. <hr />, further checking it.(#3994)\r
+                       if( ( !count\r
+                                 || ( firstChild = children.getItem( 0 ) ) && firstChild.is && firstChild.is( 'br' ) )\r
+                               && enterBlock\r
+                               && range.moveToElementEditStart( enterBlock ) )\r
+                       {\r
+                               fixedBlock.remove();\r
+                               range.select();\r
+                       }\r
+               }\r
+\r
+               // Inserting the padding-br before body if it's preceded by an\r
+               // unexitable block.\r
+               var lastNode = body.getLast( CKEDITOR.dom.walker.whitespaces( true ) );\r
+               if ( lastNode && lastNode.getName && ( lastNode.getName() in nonExitableElementNames ) )\r
+               {\r
+                       var paddingBlock = editor.document.createElement(\r
+                                       ( CKEDITOR.env.ie && enterMode != CKEDITOR.ENTER_BR ) ?\r
+                                               '<br _cke_bogus="true" />' : 'br' );\r
+                       body.append( paddingBlock );\r
+               }\r
+       }\r
+\r
+       CKEDITOR.plugins.add( 'wysiwygarea',\r
+       {\r
+               requires : [ 'editingblock' ],\r
+\r
+               init : function( editor )\r
+               {\r
+                       var fixForBody = ( editor.config.enterMode != CKEDITOR.ENTER_BR )\r
+                               ? editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p' : false;\r
+\r
+                       editor.on( 'editingBlockReady', function()\r
+                               {\r
+                                       var mainElement,\r
+                                               fieldset,\r
+                                               iframe,\r
+                                               isLoadingData,\r
+                                               isPendingFocus,\r
+                                               frameLoaded,\r
+                                               fireMode;\r
+\r
+                                       // Support for custom document.domain in IE.\r
+                                       var isCustomDomain = CKEDITOR.env.isCustomDomain();\r
+\r
+                                       // Creates the iframe that holds the editable document.\r
+                                       var createIFrame = function()\r
+                                       {\r
+                                               if ( iframe )\r
+                                                       iframe.remove();\r
+                                               if ( fieldset )\r
+                                                       fieldset.remove();\r
+\r
+                                               frameLoaded = 0;\r
+                                               // The document domain must be set within the src\r
+                                               // attribute;\r
+                                               // Defer the script execution until iframe\r
+                                               // has been added to main window, this is needed for some\r
+                                               // browsers which will begin to load the frame content\r
+                                               // prior to it's presentation in DOM.(#3894)\r
+                                               var src = 'void( '\r
+                                                               + ( CKEDITOR.env.gecko ? 'setTimeout' : '' ) + '( function(){' +\r
+                                                               'document.open();' +\r
+                                                               ( CKEDITOR.env.ie && isCustomDomain ? 'document.domain="' + document.domain + '";' : '' ) +\r
+                                                               'document.write( window.parent[ "_cke_htmlToLoad_' + editor.name + '" ] );' +\r
+                                                               'document.close();' +\r
+                                                               'window.parent[ "_cke_htmlToLoad_' + editor.name + '" ] = null;' +\r
+                                                               '}'\r
+                                                               + ( CKEDITOR.env.gecko ? ', 0 )' : ')()' )\r
+                                                               + ' )';\r
+\r
+                                               // Loading via src attribute does not work in Opera.\r
+                                               if ( CKEDITOR.env.opera )\r
+                                                       src = 'void(0);';\r
+\r
+                                               iframe = CKEDITOR.dom.element.createFromHtml( '<iframe' +\r
+                                                               ' style="width:100%;height:100%"' +\r
+                                                               ' frameBorder="0"' +\r
+                                                               ' tabIndex="-1"' +\r
+                                                               ' allowTransparency="true"' +\r
+                                                               ' src="javascript:' + encodeURIComponent( src ) + '"' +\r
+                                                               '></iframe>' );\r
+\r
+                                               var accTitle = editor.lang.editorTitle.replace( '%1', editor.name );\r
+\r
+                                               if ( CKEDITOR.env.gecko )\r
+                                               {\r
+                                                       // Double checking the iframe will be loaded properly(#4058).\r
+                                                       iframe.on( 'load', function( ev )\r
+                                                       {\r
+                                                               ev.removeListener();\r
+                                                               contentDomReady( iframe.$.contentWindow );\r
+                                                       } );\r
+\r
+                                                       // Accessibility attributes for Firefox.\r
+                                                       mainElement.setAttributes(\r
+                                                               {\r
+                                                                       role : 'region',\r
+                                                                       title : accTitle\r
+                                                               } );\r
+                                                       iframe.setAttributes(\r
+                                                               {\r
+                                                                       role : 'region',\r
+                                                                       title : ' '\r
+                                                               } );\r
+                                               }\r
+                                               else if ( CKEDITOR.env.webkit )\r
+                                               {\r
+                                                       iframe.setAttribute( 'title', accTitle );       // Safari 4\r
+                                                       iframe.setAttribute( 'name', accTitle );        // Safari 3\r
+                                               }\r
+                                               else if ( CKEDITOR.env.ie )\r
+                                               {\r
+                                                       // Accessibility label for IE.\r
+                                                       fieldset = CKEDITOR.dom.element.createFromHtml(\r
+                                                               '<fieldset style="height:100%' +\r
+                                                               ( CKEDITOR.env.ie && CKEDITOR.env.quirks ? ';position:relative' : '' ) +\r
+                                                               '">' +\r
+                                                                       '<legend style="display:block;width:0;height:0;overflow:hidden;' +\r
+                                                                       ( CKEDITOR.env.ie && CKEDITOR.env.quirks ? 'position:absolute' : '' ) +\r
+                                                                       '">' +\r
+                                                                               CKEDITOR.tools.htmlEncode( accTitle ) +\r
+                                                                       '</legend>' +\r
+                                                               '</fieldset>'\r
+                                                               , CKEDITOR.document );\r
+                                                       iframe.appendTo( fieldset );\r
+                                                       fieldset.appendTo( mainElement );\r
+                                               }\r
+\r
+                                               if ( !CKEDITOR.env.ie )\r
+                                                       mainElement.append( iframe );\r
+                                       };\r
+\r
+                                       // The script that is appended to the data being loaded. It\r
+                                       // enables editing, and makes some\r
+                                       var activationScript =\r
+                                               '<script id="cke_actscrpt" type="text/javascript">' +\r
+                                                       'window.onload = function()' +\r
+                                                       '{' +\r
+                                                               // Call the temporary function for the editing\r
+                                                               // boostrap.\r
+                                                               'window.parent.CKEDITOR._["contentDomReady' + editor.name + '"]( window );' +\r
+                                                       '}' +\r
+                                               '</script>';\r
+\r
+                                       // Editing area bootstrap code.\r
+                                       var contentDomReady = function( domWindow )\r
+                                       {\r
+                                               if ( frameLoaded )\r
+                                                       return;\r
+\r
+                                               frameLoaded = 1;\r
+\r
+                                               var domDocument = domWindow.document,\r
+                                                       body = domDocument.body;\r
+\r
+                                               // Remove this script from the DOM.\r
+                                               var script = domDocument.getElementById( "cke_actscrpt" );\r
+                                               script.parentNode.removeChild( script );\r
+\r
+                                               delete CKEDITOR._[ 'contentDomReady' + editor.name ];\r
+\r
+                                               body.spellcheck = !editor.config.disableNativeSpellChecker;\r
+\r
+                                               if ( CKEDITOR.env.ie )\r
+                                               {\r
+                                                       // Don't display the focus border.\r
+                                                       body.hideFocus = true;\r
+\r
+                                                       // Disable and re-enable the body to avoid IE from\r
+                                                       // taking the editing focus at startup. (#141 / #523)\r
+                                                       body.disabled = true;\r
+                                                       body.contentEditable = true;\r
+                                                       body.removeAttribute( 'disabled' );\r
+                                               }\r
+                                               else\r
+                                                       domDocument.designMode = 'on';\r
+\r
+                                               // IE, Opera and Safari may not support it and throw\r
+                                               // errors.\r
+                                               try { domDocument.execCommand( 'enableObjectResizing', false, !editor.config.disableObjectResizing ) ; } catch(e) {}\r
+                                               try { domDocument.execCommand( 'enableInlineTableEditing', false, !editor.config.disableNativeTableHandles ) ; } catch(e) {}\r
+\r
+                                               domWindow       = editor.window         = new CKEDITOR.dom.window( domWindow );\r
+                                               domDocument     = editor.document       = new CKEDITOR.dom.document( domDocument );\r
+\r
+                                               // Gecko need a key event to 'wake up' the editing\r
+                                               // ability when document is empty.(#3864)\r
+                                               var firstNode = domDocument.getBody().getFirst();\r
+                                               if ( CKEDITOR.env.gecko\r
+                                                       && firstNode && firstNode.is\r
+                                                       && firstNode.is( 'br' ) && firstNode.hasAttribute( '_moz_editor_bogus_node' ) )\r
+                                               {\r
+                                                       var keyEventSimulate = domDocument.$.createEvent( "KeyEvents" );\r
+                                                       keyEventSimulate.initKeyEvent( 'keypress', true, true, domWindow.$, false,\r
+                                                               false, false, false, 0, 32 );\r
+                                                       domDocument.$.dispatchEvent( keyEventSimulate );\r
+                                                       var bogusText = domDocument.getBody().getFirst() ;\r
+                                                       // Compensate the line maintaining <br> if enterMode is not block.\r
+                                                       if ( editor.config.enterMode == CKEDITOR.ENTER_BR )\r
+                                                               domDocument.createElement( 'br', { attributes: { '_moz_dirty' : "" } } )\r
+                                                                       .replace( bogusText );\r
+                                                       else\r
+                                                               bogusText.remove();\r
+                                               }\r
+\r
+                                               // Gecko/Webkit need some help when selecting control type elements. (#3448)\r
+                                               if ( !( CKEDITOR.env.ie || CKEDITOR.env.opera) )\r
+                                               {\r
+                                                       domDocument.on( 'mousedown', function( ev )\r
+                                                       {\r
+                                                               var control = ev.data.getTarget();\r
+                                                               if ( control.is( 'img', 'hr', 'input', 'textarea', 'select' ) )\r
+                                                                       editor.getSelection().selectElement( control );\r
+                                                       } );\r
+                                               }\r
+\r
+                                               // Webkit: avoid from editing form control elements content.\r
+                                               if ( CKEDITOR.env.webkit )\r
+                                               {\r
+                                                       // Prevent from tick checkbox/radiobox/select\r
+                                                       domDocument.on( 'click', function( ev )\r
+                                                       {\r
+                                                               if ( ev.data.getTarget().is( 'input', 'select' ) )\r
+                                                                       ev.data.preventDefault();\r
+                                                       } );\r
+\r
+                                                       // Prevent from editig textfield/textarea value.\r
+                                                       domDocument.on( 'mouseup', function( ev )\r
+                                                       {\r
+                                                               if ( ev.data.getTarget().is( 'input', 'textarea' ) )\r
+                                                                       ev.data.preventDefault();\r
+                                                       } );\r
+                                               }\r
+\r
+                                               var focusTarget = ( CKEDITOR.env.ie || CKEDITOR.env.safari ) ?\r
+                                                               domWindow : domDocument;\r
+\r
+                                               focusTarget.on( 'blur', function()\r
+                                                       {\r
+                                                               editor.focusManager.blur();\r
+                                                       });\r
+\r
+                                               focusTarget.on( 'focus', function()\r
+                                                       {\r
+                                                               editor.focusManager.focus();\r
+                                                       });\r
+\r
+                                               var keystrokeHandler = editor.keystrokeHandler;\r
+                                               if ( keystrokeHandler )\r
+                                                       keystrokeHandler.attach( domDocument );\r
+\r
+                                               // Adds the document body as a context menu target.\r
+                                               if ( editor.contextMenu )\r
+                                                       editor.contextMenu.addTarget( domDocument );\r
+\r
+                                               setTimeout( function()\r
+                                                       {\r
+                                                               editor.fire( 'contentDom' );\r
+\r
+                                                               if ( fireMode )\r
+                                                               {\r
+                                                                       editor.mode = 'wysiwyg';\r
+                                                                       editor.fire( 'mode' );\r
+                                                                       fireMode = false;\r
+                                                               }\r
+\r
+                                                               isLoadingData = false;\r
+\r
+                                                               if ( isPendingFocus )\r
+                                                               {\r
+                                                                       editor.focus();\r
+                                                                       isPendingFocus = false;\r
+                                                               }\r
+\r
+                                                               /*\r
+                                                                * IE BUG: IE might have rendered the iframe with invisible contents.\r
+                                                                * (#3623). Push some inconsequential CSS style changes to force IE to\r
+                                                                * refresh it.\r
+                                                                *\r
+                                                                * Also, for some unknown reasons, short timeouts (e.g. 100ms) do not\r
+                                                                * fix the problem. :(\r
+                                                                */\r
+                                                               if ( CKEDITOR.env.ie )\r
+                                                               {\r
+                                                                       setTimeout( function()\r
+                                                                               {\r
+                                                                                       if ( editor.document )\r
+                                                                                       {\r
+                                                                                               var $body = editor.document.$.body;\r
+                                                                                               $body.runtimeStyle.marginBottom = '0px';\r
+                                                                                               $body.runtimeStyle.marginBottom = '';\r
+                                                                                       }\r
+                                                                               }, 1000 );\r
+                                                               }\r
+                                                       },\r
+                                                       0 );\r
+                                       };\r
+\r
+                                       editor.addMode( 'wysiwyg',\r
+                                               {\r
+                                                       load : function( holderElement, data, isSnapshot )\r
+                                                       {\r
+                                                               mainElement = holderElement;\r
+\r
+                                                               if ( CKEDITOR.env.ie && CKEDITOR.env.quirks )\r
+                                                                       holderElement.setStyle( 'position', 'relative' );\r
+\r
+                                                               // The editor data "may be dirty" after this\r
+                                                               // point.\r
+                                                               editor.mayBeDirty = true;\r
+\r
+                                                               fireMode = true;\r
+\r
+                                                               if ( isSnapshot )\r
+                                                                       this.loadSnapshotData( data );\r
+                                                               else\r
+                                                                       this.loadData( data );\r
+                                                       },\r
+\r
+                                                       loadData : function( data )\r
+                                                       {\r
+                                                               isLoadingData = true;\r
+\r
+                                                               // Get the HTML version of the data.\r
+                                                               if ( editor.dataProcessor )\r
+                                                               {\r
+                                                                       data = editor.dataProcessor.toHtml( data, fixForBody );\r
+                                                               }\r
+\r
+                                                               data =\r
+                                                                       editor.config.docType +\r
+                                                                       '<html dir="' + editor.config.contentsLangDirection + '">' +\r
+                                                                       '<head>' +\r
+                                                                               '<link href="' + editor.config.contentsCss + '" type="text/css" rel="stylesheet" _fcktemp="true"/>' +\r
+                                                                               '<style type="text/css" _fcktemp="true">' +\r
+                                                                                       editor._.styles.join( '\n' ) +\r
+                                                                               '</style>'+\r
+                                                                       '</head>' +\r
+                                                                       '<body>' +\r
+                                                                               data +\r
+                                                                       '</body>' +\r
+                                                                       '</html>' +\r
+                                                                       activationScript;\r
+\r
+                                                               window[ '_cke_htmlToLoad_' + editor.name ] = data;\r
+                                                               CKEDITOR._[ 'contentDomReady' + editor.name ] = contentDomReady;\r
+                                                               createIFrame();\r
+\r
+                                                               // Opera must use the old method for loading contents.\r
+                                                               if ( CKEDITOR.env.opera )\r
+                                                               {\r
+                                                                       var doc = iframe.$.contentWindow.document;\r
+                                                                       doc.open();\r
+                                                                       doc.write( data );\r
+                                                                       doc.close();\r
+                                                               }\r
+                                                       },\r
+\r
+                                                       getData : function()\r
+                                                       {\r
+                                                               var data = iframe.getFrameDocument().getBody().getHtml();\r
+\r
+                                                               if ( editor.dataProcessor )\r
+                                                                       data = editor.dataProcessor.toDataFormat( data, fixForBody );\r
+\r
+                                                               // Strip the last blank paragraph within document.\r
+                                                               if ( editor.config.ignoreEmptyParagraph )\r
+                                                                       data = data.replace( emptyParagraphRegexp, '' );\r
+\r
+                                                               return data;\r
+                                                       },\r
+\r
+                                                       getSnapshotData : function()\r
+                                                       {\r
+                                                               return iframe.getFrameDocument().getBody().getHtml();\r
+                                                       },\r
+\r
+                                                       loadSnapshotData : function( data )\r
+                                                       {\r
+                                                               iframe.getFrameDocument().getBody().setHtml( data );\r
+                                                       },\r
+\r
+                                                       unload : function( holderElement )\r
+                                                       {\r
+                                                               editor.window = editor.document = iframe = mainElement = isPendingFocus = null;\r
+\r
+                                                               editor.fire( 'contentDomUnload' );\r
+                                                       },\r
+\r
+                                                       focus : function()\r
+                                                       {\r
+                                                               if ( isLoadingData )\r
+                                                                       isPendingFocus = true;\r
+                                                               else if ( editor.window )\r
+                                                               {\r
+                                                                       editor.window.focus();\r
+                                                                       editor.selectionChange();\r
+                                                               }\r
+                                                       }\r
+                                               });\r
+\r
+                                       editor.on( 'insertHtml', onInsertHtml, null, null, 20 );\r
+                                       editor.on( 'insertElement', onInsertElement, null, null, 20 );\r
+                                       // Auto fixing on some document structure weakness to enhance usabilities. (#3190 and #3189)\r
+                                       editor.on( 'selectionChange', onSelectionChangeFixBody, null, null, 1 );\r
+                               });\r
+               }\r
+       });\r
+})();\r
+\r
+/**\r
+ * Disables the ability of resize objects (image and tables) in the editing\r
+ * area.\r
+ * @type Boolean\r
+ * @default false\r
+ * @example\r
+ * config.disableObjectResizing = true;\r
+ */\r
+CKEDITOR.config.disableObjectResizing = false;\r
+\r
+/**\r
+ * Disables the "table tools" offered natively by the browser (currently\r
+ * Firefox only) to make quick table editing operations, like adding or\r
+ * deleting rows and columns.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.disableNativeTableHandles = false;\r
+ */\r
+CKEDITOR.config.disableNativeTableHandles = true;\r
+\r
+/**\r
+ * Disables the built-in spell checker while typing natively available in the\r
+ * browser (currently Firefox and Safari only).<br /><br />\r
+ *\r
+ * Even if word suggestions will not appear in the CKEditor context menu, this\r
+ * feature is useful to help quickly identifying misspelled words.<br /><br />\r
+ *\r
+ * This setting is currently compatible with Firefox only due to limitations in\r
+ * other browsers.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.disableNativeSpellChecker = false;\r
+ */\r
+CKEDITOR.config.disableNativeSpellChecker = true;\r
+\r
+/**\r
+ * Whether the editor must output an empty value ("") if it's contents is made\r
+ * by an empty paragraph only.\r
+ * @type Boolean\r
+ * @default true\r
+ * @example\r
+ * config.ignoreEmptyParagraph = false;\r
+ */\r
+CKEDITOR.config.ignoreEmptyParagraph = true;\r
diff --git a/_source/skins/kama/dialog.css b/_source/skins/kama/dialog.css
new file mode 100644 (file)
index 0000000..cd689e0
--- /dev/null
@@ -0,0 +1,742 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/* Restore the dialog visibility */\r
+body .cke_dialog\r
+{\r
+       visibility: visible;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_body\r
+{\r
+       z-index: 1;\r
+       border: solid 1px #ddd;\r
+       padding: 5px;\r
+       background-color: #fff;\r
+       -moz-border-radius: 5px;\r
+       -webkit-border-radius: 5px;\r
+       border-radius: 5px;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_tl,\r
+.cke_skin_kama .cke_dialog_tr,\r
+.cke_skin_kama .cke_dialog_tc,\r
+.cke_skin_kama .cke_dialog_bl,\r
+.cke_skin_kama .cke_dialog_br,\r
+.cke_skin_kama .cke_dialog_bc,\r
+.cke_skin_kama .cke_dialog_ml,\r
+.cke_skin_kama .cke_dialog_mr\r
+{\r
+       display:none;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_title\r
+{\r
+       font-weight: bold;\r
+       font-size: 14px;\r
+       padding: 3px 3px 8px;\r
+       cursor: move;\r
+       position: relative;\r
+       border-bottom: 1px solid #eee;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks .cke_dialog_title,\r
+.cke_skin_kama .cke_browser_ie6 .cke_dialog_title,\r
+.cke_skin_kama .cke_browser_ie7 .cke_dialog_title\r
+{\r
+       margin-bottom: 22px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks.cke_single_page .cke_dialog_title,\r
+.cke_skin_kama .cke_browser_ie6.cke_single_page .cke_dialog_title,\r
+.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_title\r
+{\r
+       margin-bottom: 10px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_title\r
+{\r
+       position: static !important;\r
+       unicode-bidi: bidi-override;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_contents\r
+{\r
+       background-color: #ebebeb;\r
+       border: solid 1px #fff;\r
+       border-bottom: none;\r
+       overflow: auto;\r
+       padding: 17px 10px 5px 10px;\r
+       -moz-border-radius-topleft: 5px;\r
+       -moz-border-radius-topright: 5px;\r
+       -webkit-border-top-left-radius: 5px;\r
+       -webkit-border-top-right-radius: 5px;\r
+       border-top-left-radius: 5px;\r
+       border-top-right-radius: 5px;\r
+       margin-top: 22px;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_footer\r
+{\r
+       text-align: right;\r
+       background-color: #ebebeb;\r
+       border: solid 1px #fff;\r
+       border-bottom: none;\r
+       -moz-border-radius-bottomleft: 5px;\r
+       -moz-border-radius-bottomright: 5px;\r
+       -webkit-border-bottom-left-radius: 5px;\r
+       -webkit-border-bottom-right-radius: 5px;\r
+       border-bottom-left-radius: 5px;\r
+       border-bottom-right-radius: 5px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_dialog_footer\r
+{\r
+       text-align: left;\r
+}\r
+\r
+/* tabs */\r
+\r
+.cke_skin_kama .cke_dialog_tabs\r
+{\r
+       height: 23px;\r
+       display: inline-block;\r
+       _display: block;\r
+       margin-left:10px;\r
+       margin-right:10px;\r
+       margin-top: 11px;\r
+       position: absolute;\r
+       z-index: 2;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks .cke_dialog_tabs,\r
+.cke_skin_kama .cke_browser_ie6 .cke_dialog_tabs,\r
+.cke_skin_kama .cke_browser_ie7 .cke_dialog_tabs\r
+{\r
+       top: 33px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_dialog_tabs\r
+{\r
+       right: 10px;\r
+}\r
+\r
+.cke_skin_kama a.cke_dialog_tab,\r
+.cke_skin_kama a:link.cke_dialog_tab,\r
+.cke_skin_kama a:active.cke_dialog_tab,\r
+.cke_skin_kama a:hover.cke_dialog_tab,\r
+.cke_skin_kama a:visited.cke_dialog_tab\r
+{\r
+       background-image: url(images/sprites.png);\r
+       background-repeat: repeat-x;\r
+       background-position: 0 -1323px;\r
+\r
+       background-color: #ebebeb;\r
+       height: 14px;\r
+       padding: 4px 8px;\r
+       display: inline-block;\r
+       cursor: pointer;\r
+\r
+}\r
+\r
+/* Gecko 1.8 layout workaround. */\r
+.cke_skin_kama .cke_browser_gecko18 a.cke_dialog_tab,\r
+.cke_skin_kama .cke_browser_gecko18 a:link.cke_dialog_tab,\r
+.cke_skin_kama .cke_browser_gecko18 a:active.cke_dialog_tab,\r
+.cke_skin_kama .cke_browser_gecko18 a:hover.cke_dialog_tab,\r
+.cke_skin_kama .cke_browser_gecko18 a:visited.cke_dialog_tab\r
+{\r
+       display: inline;\r
+       position: relative;\r
+       top: 6px;\r
+}\r
+\r
+.cke_skin_kama a:hover.cke_dialog_tab\r
+{\r
+       background-color: #f1f1e3;\r
+}\r
+\r
+.cke_skin_kama a.cke_dialog_tab_selected,\r
+.cke_skin_kama a:link.cke_dialog_tab_selected,\r
+.cke_skin_kama a:active.cke_dialog_tab_selected,\r
+.cke_skin_kama a:hover.cke_dialog_tab_selected,\r
+.cke_skin_kama a:visited.cke_dialog_tab_selected\r
+{\r
+       background-position: 0 -1279px;\r
+       cursor: default;\r
+}\r
+\r
+/* single_page */\r
+\r
+.cke_skin_kama .cke_single_page .cke_dialog_tabs\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_kama .cke_single_page .cke_dialog_contents\r
+{\r
+       padding-top: 5px;\r
+       margin-top: 10px;\r
+}\r
+\r
+/* IE7 + IE quirks */\r
+.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_contents\r
+{\r
+       margin-top: -10px;\r
+       position: relative;\r
+       margin-bottom: -22px;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_ui_vbox table,\r
+.cke_skin_kama .cke_dialog_ui_hbox table\r
+{\r
+       margin: auto;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_ui_vbox_child\r
+{\r
+       padding: 5px 0px;\r
+}\r
+\r
+.cke_skin_kama input.cke_dialog_ui_input_text,\r
+.cke_skin_kama input.cke_dialog_ui_input_password\r
+{\r
+       background-color: white;\r
+       border: none;\r
+       padding: 0px;\r
+       width: 100%;\r
+       height: 14px;\r
+}\r
+\r
+.cke_skin_kama div.cke_dialog_ui_input_text,\r
+.cke_skin_kama div.cke_dialog_ui_input_password\r
+{\r
+       background-color: white;\r
+       border: 1px solid #a0a0a0;\r
+       padding: 1px 0px;\r
+}\r
+\r
+.cke_skin_kama textarea.cke_dialog_ui_input_textarea\r
+{\r
+       background-color: white;\r
+       border: none;\r
+       padding: 0px;\r
+       width: 100%;\r
+       /*\r
+        * IE6 BUG: Scrollbars in textareas can overflow even if the outer DIV is set to overflow:hidden.\r
+        * So leave 1% width for the scrollbar. In most situations the 1% isn't noticeable by users.\r
+        */\r
+       _width: 99%;\r
+       overflow: auto;\r
+       resize: none;\r
+}\r
+\r
+.cke_skin_kama div.cke_dialog_ui_input_textarea\r
+{\r
+       background-color: white;\r
+       border: 1px solid #a0a0a0;\r
+       padding: 1px 0px;\r
+}\r
+\r
+.cke_skin_kama div.cke_disabled .cke_dialog_ui_labeled_content *\r
+{\r
+       background-color : #a0a0a0;\r
+       cursor : default;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_ui_hbox\r
+{\r
+       width: 100%;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_ui_hbox_first,\r
+.cke_skin_kama .cke_dialog_ui_hbox_child,\r
+.cke_skin_kama .cke_dialog_ui_hbox_last\r
+{\r
+       vertical-align: top;\r
+}\r
+\r
+.cke_skin_kama .cke_ltr .cke_dialog_ui_hbox_first,\r
+.cke_skin_kama .cke_ltr .cke_dialog_ui_hbox_child\r
+{\r
+       padding-right: 10px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_dialog_ui_hbox_first,\r
+.cke_skin_kama .cke_rtl .cke_dialog_ui_hbox_child\r
+{\r
+       padding-left: 10px;\r
+}\r
+\r
+/* button */\r
+\r
+.cke_skin_kama a.cke_dialog_ui_button\r
+{\r
+       border-collapse: separate;\r
+       cursor: default;\r
+\r
+       -moz-border-radius: 5px;\r
+       -webkit-border-radius: 5px;\r
+       border-radius: 5px;\r
+       background: transparent url(images/sprites.png) repeat-x scroll 0 -1069px;\r
+       _background: none;\r
+       padding: 5px 0;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button\r
+{\r
+       padding: 0;\r
+}\r
+\r
+/* IE6 buttons. */\r
+.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button span\r
+{\r
+       width: 70px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,\r
+.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span\r
+{\r
+       width: 100px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,\r
+.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,\r
+.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button span\r
+{\r
+       padding: 5px 15px;\r
+       text-align: center;\r
+       color: #3b3b1f;\r
+       background: #53D9F0 none;\r
+       display: inline-block;\r
+       cursor: default;\r
+}\r
+/* END IE6 buttons. */\r
+\r
+.cke_skin_kama .cke_browser_webkit a.cke_dialog_ui_button span.cke_dialog_ui_button\r
+{\r
+       margin: 0;\r
+}\r
+.cke_skin_kama .cke_browser_webkit a.cke_dialog_ui_button\r
+{\r
+       float: right;\r
+       padding-top: 3px;\r
+       padding-bottom: 2px;\r
+       margin: 2px 0;\r
+}\r
+\r
+.cke_skin_kama a.cke_dialog_ui_button_ok span,\r
+.cke_skin_kama a.cke_dialog_ui_button_cancel span\r
+{\r
+       padding-right: 20px;\r
+       padding-left: 20px;\r
+}\r
+\r
+.cke_skin_kama a.cke_dialog_ui_button_ok\r
+{\r
+       background-position: 0 -1143px;\r
+}\r
+\r
+.cke_skin_kama a.cke_dialog_ui_button_ok span\r
+{\r
+       background: transparent url(images/sprites.png) no-repeat scroll right -1219px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl a.cke_dialog_ui_button_ok span\r
+{\r
+       background-position: left -1219px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_ok span,\r
+.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_ok span\r
+{\r
+       background-color: #B8E834;\r
+       margin-right: 0;\r
+}\r
+\r
+.cke_skin_kama a.cke_dialog_ui_button_cancel\r
+{\r
+       background-position: 0 -1104px;\r
+}\r
+\r
+.cke_skin_kama a.cke_dialog_ui_button_cancel span\r
+{\r
+       background: transparent url(images/sprites.png) no-repeat scroll right -1245px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl a.cke_dialog_ui_button_cancel span\r
+{\r
+       background-position: left -1245px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_cancel span,\r
+.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_cancel span\r
+{\r
+       background-color: #F65D20;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_cancel span,\r
+.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_cancel span,\r
+.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_ok span,\r
+.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_ok span\r
+{\r
+       background-image: none;\r
+}\r
+\r
+.cke_skin_kama span.cke_dialog_ui_button\r
+{\r
+       padding: 2px 10px;\r
+       text-align: center;\r
+       color: #222;\r
+       display: inline-block;\r
+       cursor: default;\r
+}\r
+\r
+/* Gecko 1.8 does not support display: inline-block */\r
+.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button\r
+{\r
+       display: block;\r
+}\r
+\r
+.cke_skin_kama a.cke_dialog_ui_button span.cke_disabled\r
+{\r
+       border: #898980 1px solid;\r
+       color: #5e5e55;\r
+       background-color: #c5c5b3;\r
+}\r
+\r
+.cke_skin_kama a:hover.cke_dialog_ui_button,\r
+.cke_skin_kama a:focus.cke_dialog_ui_button,\r
+.cke_skin_kama a:active.cke_dialog_ui_button\r
+{\r
+       background-position: 0 -1179px;\r
+}\r
+\r
+/* Skip hover effect on IE6 */\r
+.cke_skin_kama .cke_browser_iequirks a:hover.cke_dialog_ui_button span,\r
+.cke_skin_kama .cke_browser_iequirks a:focus.cke_dialog_ui_button span,\r
+.cke_skin_kama .cke_browser_iequirks a:active.cke_dialog_ui_button span,\r
+.cke_skin_kama .cke_browser_ie6 a:hover.cke_dialog_ui_button span,\r
+.cke_skin_kama .cke_browser_ie6 a:focus.cke_dialog_ui_button span,\r
+.cke_skin_kama .cke_browser_ie6 a:active.cke_dialog_ui_button span\r
+{\r
+       background-image: none;\r
+       background: #F7A922;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_footer_buttons\r
+{\r
+       display: inline-table;\r
+       margin-right: 12px;\r
+       margin-left: 12px;\r
+       width: auto;\r
+       position: relative;\r
+}\r
+\r
+/* Gecko 1.8 does not support for display: inline-table */\r
+.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons\r
+{\r
+       display: inline;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_footer_buttons span.cke_dialog_ui_button\r
+{\r
+       margin: 7px 0;\r
+       width: 60px;\r
+       text-align: center;\r
+}\r
+\r
+/* Firefox2 buttons */\r
+.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons a.cke_dialog_ui_button\r
+{\r
+       display: block;\r
+       padding: 0;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button\r
+{\r
+       padding-bottom: 5px;\r
+       padding-top: 6px;\r
+       margin-bottom: 0;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons .cke_dialog_ui_button_ok .cke_dialog_ui_button\r
+{\r
+       background-position: right -1214px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons .cke_dialog_ui_button_cancel .cke_dialog_ui_button\r
+{\r
+       background-position: right -1242px;\r
+}\r
+/* END Firefox2 buttons */\r
+\r
+.cke_skin_kama strong\r
+{\r
+       font-weight: bold;\r
+}\r
+\r
+/* close_button */\r
+\r
+.cke_skin_kama .cke_dialog_close_button\r
+{\r
+       background-image: url(images/sprites.png);\r
+       background-repeat: no-repeat;\r
+       background-position: 0 -1022px;\r
+       position: absolute;\r
+       cursor: pointer;\r
+       text-align: center;\r
+       height: 20px;\r
+       width: 20px;\r
+       top: 5px;\r
+\r
+       /* IE 6 */\r
+       _background-image: url(images/sprites_ie6.png);\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_close_button span\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_close_button:hover\r
+{\r
+       background-position: 0 -1045px;\r
+}\r
+\r
+.cke_skin_kama .cke_ltr .cke_dialog_close_button\r
+{\r
+       right: 10px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_ie8.cke_rtl .cke_dialog_close_button\r
+{\r
+       left: 8px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_dialog_close_button\r
+{\r
+       left: 10px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_ie7.cke_rtl .cke_dialog_close_button\r
+{\r
+       left: 16px;\r
+       top: 0;\r
+}\r
+\r
+/*.cke_skin_kama .cke_browser_ie6.cke_rtl .cke_dialog_close_button\r
+{\r
+       left: 16px;\r
+}*/\r
+\r
+/* IE7 + IE quirks */\r
+.cke_skin_kama .cke_browser_ie7.cke_rtl .cke_dialog_close_button\r
+{\r
+       position: absolute;\r
+       left: 10px;\r
+       top: 5px;\r
+}\r
+\r
+/* IE7 + IE quirks */\r
+.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_footer\r
+{\r
+       margin-top: 22px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_ie6 .cke_dialog_close_button,\r
+.cke_skin_kama .cke_browser_iequirks .cke_dialog_close_button\r
+{\r
+       top: 7px;\r
+}\r
+\r
+/* IE7 + IE quirks */\r
+.cke_skin_kama .cke_browser_ie7.cke_ltr .cke_dialog_close_button\r
+{\r
+       margin-top: 0;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog_ui_input_select\r
+{\r
+       border: 1px solid #a0a0a0;\r
+       background-color: white;\r
+}\r
+\r
+.cke_skin_kama iframe.cke_dialog_ui_input_file\r
+{\r
+       width: 100%;\r
+       height: 25px;\r
+}\r
+\r
+/*\r
+ * Some utility CSS classes for dialog authors.\r
+ */\r
+.cke_skin_kama .cke_dialog .cke_dark_background\r
+{\r
+       background-color: #eaead1;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog .cke_hand\r
+{\r
+       cursor: pointer;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog .cke_centered\r
+{\r
+       text-align: center;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog a.cke_btn_reset\r
+{\r
+       float: right;\r
+       background-position: 0 -32px;\r
+       background-image: url(images/mini.gif);\r
+       width: 16px;\r
+       height: 16px;\r
+       background-repeat: no-repeat;\r
+       border: 1px none;\r
+       font-size: 1px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_reset\r
+{\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog a.cke_btn_locked,\r
+.cke_skin_kama .cke_dialog a.cke_btn_unlocked\r
+{\r
+       float: left;\r
+       background-position: 0 0;\r
+       background-image: url(images/mini.gif);\r
+       width: 16px;\r
+       height: 16px;\r
+       background-repeat: no-repeat;\r
+       border: none 1px;\r
+       font-size: 1px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_locked,\r
+.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_unlocked\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog a.cke_btn_unlocked\r
+{\r
+       background-position: 0 -16px;\r
+       background-image: url(images/mini.gif);\r
+}\r
+\r
+.cke_skin_kama .cke_dialog .cke_btn_over\r
+{\r
+       border: outset 1px;\r
+       cursor: pointer;\r
+       cursor: hand;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog  #ImagePreviewBox\r
+{\r
+       white-space : normal;\r
+       border : 2px ridge black;\r
+       overflow : scroll;\r
+       height : 160px;\r
+       width : 230px;\r
+       padding : 2px;\r
+       background-color : white;\r
+}\r
+.cke_skin_kama .cke_dialog  #ImagePreviewLoader\r
+{\r
+       position: absolute;\r
+       white-space : normal;\r
+       overflow : hidden;\r
+       height : 160px;\r
+       width : 230px;\r
+       margin : 2px;\r
+       padding : 2px;\r
+       opacity : 0.9;\r
+       filter : alpha(opacity=90);\r
+\r
+       background-color : #e4e4e4;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog  #FlashPreviewBox\r
+{\r
+       white-space : normal;\r
+       border : 2px ridge black;\r
+       overflow : auto;\r
+       height : 160px;\r
+       width : 390px;\r
+       padding : 2px;\r
+       background-color : white;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog .cke_dark_background\r
+{\r
+       text-align : center;\r
+       background-color: #eaead1;\r
+       font-size : 14px;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog .cke_light_background\r
+{\r
+       text-align : center;\r
+       background-color: #ffffbe;\r
+}\r
+\r
+.cke_skin_kama .cke_dialog .cke_hand\r
+{\r
+       cursor: pointer;\r
+       cursor: hand;\r
+}\r
+\r
+.cke_skin_kama .cke_disabled\r
+{\r
+       color: #a0a0a0;\r
+}\r
+\r
+/* High Contrast Mode */\r
+\r
+.cke_skin_kama .cke_hc .cke_dialog_title,\r
+.cke_skin_kama .cke_hc .cke_dialog_tabs,\r
+.cke_skin_kama .cke_hc .cke_dialog_contents,\r
+.cke_skin_kama .cke_hc .cke_dialog_footer\r
+{\r
+       border-left: 1px solid;\r
+       border-right: 1px solid;\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_dialog_title\r
+{\r
+       border-top: 1px solid;\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_dialog_footer\r
+{\r
+       border-bottom: 1px solid;\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_dialog_close_button span\r
+{\r
+       display: inline;\r
+       cursor: pointer;\r
+       cursor: hand;\r
+       font-weight: bold;\r
+       position: relative;\r
+       top: 3px;\r
+}\r
+\r
+.cke_skin_kama a.cke_smile img\r
+{\r
+       /* IE6 does not support transparent borders */\r
+       border: 2px solid #eaead1;\r
+}\r
+\r
+.cke_skin_kama a.cke_smile:focus img,\r
+.cke_skin_kama a.cke_smile:active img,\r
+.cke_skin_kama a.cke_smile:hover img\r
+{\r
+       border-color: #C7C78F;\r
+}\r
diff --git a/_source/skins/kama/editor.css b/_source/skins/kama/editor.css
new file mode 100644 (file)
index 0000000..0771a85
--- /dev/null
@@ -0,0 +1,21 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+@import url("reset.css");\r
+@import url("mainui.css");\r
+@import url("panel.css");\r
+@import url("toolbar.css");\r
+@import url("menu.css");\r
+@import url("richcombo.css");\r
+@import url("elementspath.css");\r
+@import url("icons.css");\r
+@import url("presets.css");\r
+\r
+/* Restore the container visibility */\r
+html .cke_skin_kama,\r
+html.cke_skin_kama_container\r
+{\r
+       visibility: visible;\r
+}\r
diff --git a/_source/skins/kama/elementspath.css b/_source/skins/kama/elementspath.css
new file mode 100644 (file)
index 0000000..e3300d4
--- /dev/null
@@ -0,0 +1,68 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+@media print\r
+{\r
+       .cke_path\r
+       {\r
+               display: none;\r
+       }\r
+}\r
+\r
+.cke_skin_kama .cke_path\r
+{\r
+       padding: 0 5px;\r
+       display: inline-block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_path\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_kama .cke_path a,\r
+.cke_skin_kama .cke_path .cke_empty\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+       padding-top: 1px;\r
+       padding-bottom: 1px;\r
+       padding-left: 4px;\r
+       padding-right: 4px;\r
+       margin-bottom : 3px;\r
+       color: #60676a;\r
+}\r
+\r
+.cke_skin_kama .cke_path .cke_empty\r
+{\r
+       visibility: hidden;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_path a,\r
+.cke_skin_kama .cke_rtl .cke_path cke_empty\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_kama .cke_path a:hover,\r
+.cke_skin_kama .cke_path a:focus,\r
+.cke_skin_kama .cke_path a:active      /* IE */\r
+{\r
+       background-color: #dff1ff;\r
+       padding-top: 1px;\r
+       padding-bottom: 1px;\r
+       padding-left: 4px;\r
+       padding-right: 4px;\r
+       outline: none;\r
+       color : #000;\r
+}\r
+\r
+/* IE double float-right workaround */\r
+.cke_skin_kama .cke_browser_ie .cke_rtl .cke_path a,\r
+.cke_skin_kama .cke_browser_ie .cke_rtl .cke_path .cke_empty\r
+{\r
+       float: none;\r
+}\r
diff --git a/_source/skins/kama/icons.css b/_source/skins/kama/icons.css
new file mode 100644 (file)
index 0000000..92da46d
--- /dev/null
@@ -0,0 +1,309 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_kama .cke_button_source .cke_icon\r
+{\r
+       background-position: 0 0;\r
+}\r
+\r
+.cke_skin_kama .cke_button_newpage .cke_icon\r
+{\r
+       background-position: 0 -48px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_preview .cke_icon\r
+{\r
+       background-position: 0 -64px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_cut .cke_icon\r
+{\r
+       background-position: 0 -96px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_copy .cke_icon\r
+{\r
+       background-position: 0 -112px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_paste .cke_icon\r
+{\r
+       background-position: 0 -128px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_pastetext .cke_icon\r
+{\r
+       background-position: 0 -144px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_find .cke_icon\r
+{\r
+       background-position: 0 -240px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_replace .cke_icon\r
+{\r
+       background-position: 0 -256px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_selectAll .cke_icon\r
+{\r
+       background-position: 0 -272px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_removeFormat .cke_icon\r
+{\r
+       background-position: 0 -288px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_bold .cke_icon\r
+{\r
+       background-position: 0 -304px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_italic .cke_icon\r
+{\r
+       background-position: 0 -320px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_underline .cke_icon\r
+{\r
+       background-position: 0 -336px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_strike .cke_icon\r
+{\r
+       background-position: 0 -352px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_subscript .cke_icon\r
+{\r
+       background-position: 0 -368px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_superscript .cke_icon\r
+{\r
+       background-position: 0 -384px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_table .cke_icon\r
+{\r
+       background-position: 0 -608px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_horizontalrule .cke_icon\r
+{\r
+       background-position: 0 -624px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_smiley .cke_icon\r
+{\r
+       background-position: 0 -640px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_link .cke_icon\r
+{\r
+       background-position: 0 -528px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_unlink .cke_icon\r
+{\r
+       background-position: 0 -544px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_anchor .cke_icon\r
+{\r
+       background-position: 0 -560px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_image .cke_icon\r
+{\r
+       background-position: 0 -576px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_flash .cke_icon\r
+{\r
+       background-position: 0 -592px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_specialchar .cke_icon\r
+{\r
+       background-position: 0 -656px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_pagebreak .cke_icon\r
+{\r
+       background-position: 0 -672px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_print .cke_icon\r
+{\r
+       background-position: 0 -176px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_checkspell .cke_icon,\r
+.cke_skin_kama .cke_button_scayt .cke_icon\r
+{\r
+       background-position: 0 -192px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_pagebreak .cke_icon\r
+{\r
+       background-position: 0 -672px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_textcolor .cke_icon\r
+{\r
+       background-position: 0 -704px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_bgcolor .cke_icon\r
+{\r
+       background-position: 0 -720px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_form .cke_icon\r
+{\r
+       background-position: 0 -752px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_checkbox .cke_icon\r
+{\r
+       background-position: 0 -768px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_radio .cke_icon\r
+{\r
+       background-position: 0 -784px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_textfield .cke_icon\r
+{\r
+       background-position: 0 -800px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_textarea .cke_icon\r
+{\r
+       background-position: 0 -816px;\r
+}\r
+.cke_skin_kama .cke_button_showblocks .cke_icon\r
+{\r
+       background-position: 0 -1136px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_select .cke_icon\r
+{\r
+       background-position: 0 -832px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_button .cke_icon\r
+{\r
+       background-position: 0 -848px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_imagebutton .cke_icon\r
+{\r
+       background-position: 0 -864px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_hiddenfield .cke_icon\r
+{\r
+       background-position: 0 -880px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_undo .cke_icon\r
+{\r
+       background-position: 0 -208px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_button_undo .cke_icon\r
+{\r
+       background-position: 0 -224px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_redo .cke_icon\r
+{\r
+       background-position: 0 -224px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_button_redo .cke_icon\r
+{\r
+       background-position: 0 -208px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_templates .cke_icon\r
+{\r
+       background-position: 0 -80px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_numberedlist .cke_icon\r
+{\r
+       background-position: 0 -400px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_bulletedlist .cke_icon\r
+{\r
+       background-position: 0 -416px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_outdent .cke_icon\r
+{\r
+       background-position: 0 -432px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_indent .cke_icon\r
+{\r
+       background-position: 0 -448px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_justifyleft .cke_icon\r
+{\r
+       background-position: 0 -464px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_justifycenter .cke_icon\r
+{\r
+       background-position: 0 -480px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_justifyright .cke_icon\r
+{\r
+       background-position: 0 -496px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_justifyblock .cke_icon\r
+{\r
+       background-position: 0 -512px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_blockquote .cke_icon\r
+{\r
+       background-position: 0 -1152px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_flash .cke_icon\r
+{\r
+       background-position: 0 -592px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_pastefromword .cke_icon\r
+{\r
+       background-position: 0 -160px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_save .cke_icon\r
+{\r
+       background-position: 0 -32px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_about .cke_icon\r
+{\r
+       background-position: 0 -736px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_maximize .cke_icon\r
+{\r
+       background-position: 0 -1040px;\r
+}\r
diff --git a/_source/skins/kama/icons.png b/_source/skins/kama/icons.png
new file mode 100644 (file)
index 0000000..394ce89
Binary files /dev/null and b/_source/skins/kama/icons.png differ
diff --git a/_source/skins/kama/images/dialog_sides.gif b/_source/skins/kama/images/dialog_sides.gif
new file mode 100644 (file)
index 0000000..8f91b47
Binary files /dev/null and b/_source/skins/kama/images/dialog_sides.gif differ
diff --git a/_source/skins/kama/images/dialog_sides.png b/_source/skins/kama/images/dialog_sides.png
new file mode 100644 (file)
index 0000000..1042a61
Binary files /dev/null and b/_source/skins/kama/images/dialog_sides.png differ
diff --git a/_source/skins/kama/images/dialog_sides_rtl.png b/_source/skins/kama/images/dialog_sides_rtl.png
new file mode 100644 (file)
index 0000000..d7f7b49
Binary files /dev/null and b/_source/skins/kama/images/dialog_sides_rtl.png differ
diff --git a/_source/skins/kama/images/mini.gif b/_source/skins/kama/images/mini.gif
new file mode 100644 (file)
index 0000000..54d9107
Binary files /dev/null and b/_source/skins/kama/images/mini.gif differ
diff --git a/_source/skins/kama/images/noimage.png b/_source/skins/kama/images/noimage.png
new file mode 100644 (file)
index 0000000..1598113
Binary files /dev/null and b/_source/skins/kama/images/noimage.png differ
diff --git a/_source/skins/kama/images/sprites.png b/_source/skins/kama/images/sprites.png
new file mode 100644 (file)
index 0000000..0cb4e1c
Binary files /dev/null and b/_source/skins/kama/images/sprites.png differ
diff --git a/_source/skins/kama/images/sprites_ie6.png b/_source/skins/kama/images/sprites_ie6.png
new file mode 100644 (file)
index 0000000..5bb305c
Binary files /dev/null and b/_source/skins/kama/images/sprites_ie6.png differ
diff --git a/_source/skins/kama/images/toolbar_start.gif b/_source/skins/kama/images/toolbar_start.gif
new file mode 100644 (file)
index 0000000..1774246
Binary files /dev/null and b/_source/skins/kama/images/toolbar_start.gif differ
diff --git a/_source/skins/kama/mainui.css b/_source/skins/kama/mainui.css
new file mode 100644 (file)
index 0000000..ab662c4
--- /dev/null
@@ -0,0 +1,139 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_kama\r
+{\r
+       display: block;\r
+       _display: inline-block;\r
+}\r
+\r
+/* Main editor only settings. */\r
+span.cke_skin_kama\r
+{\r
+       -moz-border-radius: 5px;\r
+       -webkit-border-radius: 5px;\r
+       border-radius: 5px;\r
+       border: 1px solid #D3D3D3;\r
+       padding: 5px;\r
+}\r
+\r
+.cke_skin_kama .cke_wrapper\r
+{\r
+       -moz-border-radius: 5px;\r
+       -webkit-border-radius: 5px;\r
+       border-radius: 5px;\r
+       background-color: #d3d3d3;\r
+       background-image: url(images/sprites.png);\r
+       background-repeat: repeat-x;\r
+       background-position: 0 -1950px;\r
+       display: block;\r
+\r
+       /*background-color: Red;*/\r
+}\r
+\r
+.cke_skin_kama .cke_browser_ie6 .cke_wrapper,\r
+.cke_skin_kama .cke_browser_iequirks .cke_wrapper\r
+{\r
+       background-image: none;\r
+}\r
+\r
+.cke_skin_kama .cke_editor\r
+{\r
+/*\r
+       border: solid 1px #dcdcdc;\r
+*/\r
+       display: inline-table;\r
+       width: 100%;\r
+}\r
+\r
+.cke_skin_kama .ltr .cke_browser_ie iframe\r
+{\r
+       margin-right: -10px;\r
+}\r
+\r
+.cke_skin_kama .rtl .cke_browser_ie iframe\r
+{\r
+       margin-left: -10px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_opera .cke_editor.cke_skin_kama .cke_resizer\r
+{\r
+       display: table;\r
+}\r
+\r
+.cke_skin_kama .cke_contents\r
+{\r
+       margin: 5px;\r
+       padding: 0 5px 5px;\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_contents\r
+{\r
+       border: 1px solid black;\r
+}\r
+\r
+.cke_skin_kama .cke_contents iframe\r
+{\r
+       background-color: #fff;\r
+}\r
+\r
+.cke_skin_kama .cke_focus\r
+{\r
+       outline: auto 5px -webkit-focus-ring-color;\r
+}\r
+\r
+.cke_skin_kama textarea.cke_source\r
+{\r
+       font-family: 'Courier New' , Monospace;\r
+       font-size: small;\r
+       background-color: #fff;\r
+       white-space: pre;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks textarea.cke_source\r
+{\r
+       /* For IE6+Quirks only */\r
+       _white-space: normal;\r
+}\r
+\r
+.cke_skin_kama .cke_resizer\r
+{\r
+       width: 12px;\r
+       height: 12px;\r
+       margin-top: 9px;\r
+       display: block;\r
+       float: right;\r
+       /* resizer.gif*/\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 0 -1428px;\r
+       background-repeat: no-repeat;\r
+       cursor: se-resize;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_resizer\r
+{\r
+       cursor: sw-resize;\r
+       /* resizer_rtl.gif*/\r
+       background-position: 0 -1455px;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_maximized .cke_resizer\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_ie6 .cke_contents textarea,\r
+.cke_skin_kama .cke_browser_ie7 .cke_contents textarea\r
+{\r
+       position: absolute;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_ie.cke_browser_quirks .cke_contents iframe\r
+{\r
+       position: absolute;\r
+       top: 0;\r
+}\r
diff --git a/_source/skins/kama/menu.css b/_source/skins/kama/menu.css
new file mode 100644 (file)
index 0000000..9a05b51
--- /dev/null
@@ -0,0 +1,179 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_kama .cke_contextmenu\r
+{\r
+       padding: 2px;\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem a\r
+{\r
+       display:block;\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem span\r
+{\r
+       cursor: default;\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem a:hover,\r
+.cke_skin_kama .cke_menuitem a:focus,\r
+.cke_skin_kama .cke_menuitem a:active\r
+{\r
+       background-color: #D3D3D3;\r
+       display:block;\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:hover,\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:focus,\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:active\r
+{\r
+       background-color: transparent !important;\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem .cke_icon\r
+{\r
+       background-image: url(icons.png);\r
+       background-position: 100px;\r
+       background-repeat:no-repeat;\r
+       background-color: transparent;\r
+       width: 16px;\r
+       height: 16px;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem .cke_disabled .cke_icon\r
+{\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem .cke_icon_wrapper\r
+{\r
+       background-color: #D3D3D3;\r
+       border: solid 4px #D3D3D3;\r
+       width: 16px;\r
+       height: 16px;\r
+       float: left;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+       clear: both;\r
+}\r
+\r
+.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon_wrapper\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,\r
+.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,\r
+.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper\r
+{\r
+       background-color: #9d9d9d;\r
+       border: solid 4px #9d9d9d;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,\r
+.cke_skin_kama .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,\r
+.cke_skin_kama .cke_menuitem a:active.cke_disabled .cke_icon_wrapper\r
+{\r
+       background-color: #D3D3D3;\r
+       border: solid 4px #D3D3D3;\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem .cke_label\r
+{\r
+       display:block;\r
+       padding-right: 3px;\r
+       padding-top: 5px;\r
+       padding-left: 4px;\r
+       height:19px;\r
+       margin-left: 24px;\r
+       background-color: #fff;\r
+       _overflow: hidden;\r
+       _width: 80px;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_rtl .cke_skin_kama .cke_menuitem .cke_label\r
+{\r
+       padding-right: 0;\r
+       margin-left: 0;\r
+       padding-left: 3px;\r
+       margin-right: 28px;\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem a.cke_disabled .cke_label\r
+{\r
+       filter: alpha(opacity=30); /* IE */\r
+       opacity: 0.30; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem a:hover .cke_label,\r
+.cke_skin_kama .cke_menuitem a:focus .cke_label,\r
+.cke_skin_kama .cke_menuitem a:active .cke_label\r
+{\r
+       background-color: #D3D3D3;\r
+}\r
+\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label\r
+{\r
+       background-color: transparent;\r
+}\r
+\r
+.cke_skin_kama .cke_menuseparator\r
+{\r
+       background-color: #D3D3D3;\r
+       height: 2px;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+\r
+       _font-size: 0;\r
+}\r
+\r
+.cke_skin_kama .cke_menuarrow\r
+{\r
+       /* arrowright.gif*/\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 0 -1411px;\r
+       background-repeat: no-repeat;\r
+       height: 5px;\r
+       width: 3px;\r
+       float: right;\r
+       margin-right: 2px;\r
+       margin-top: 3px;\r
+}\r
+\r
+.cke_rtl .cke_skin_kama .cke_menuarrow\r
+{\r
+       float: left;\r
+       margin-right: 0;\r
+       margin-left: 2px;\r
+       /* arrowleft.gif*/\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 0px -1390px;\r
+       background-repeat: no-repeat;\r
+}\r
+\r
+/* #3766 In the context menu, long labels with second level menu get wrapped */\r
+.cke_browser_ie.cke_ltr .cke_skin_kama .cke_menuarrow\r
+{\r
+       position: absolute;\r
+       right: 2px;\r
+}\r
+\r
+.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuarrow\r
+{\r
+       position: absolute;\r
+       left: 2px;\r
+}\r
+/* END #3766 */\r
diff --git a/_source/skins/kama/panel.css b/_source/skins/kama/panel.css
new file mode 100644 (file)
index 0000000..ed88ea6
--- /dev/null
@@ -0,0 +1,203 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_kama .cke_panel\r
+{\r
+       border: 1px solid #8f8f73;\r
+       background-color: #fff;\r
+\r
+       width: 120px;\r
+       height: 100px;\r
+\r
+       overflow: hidden;\r
+\r
+       -moz-border-radius: 3px;\r
+       -webkit-border-radius: 3px;\r
+       border-radius: 3px;\r
+}\r
+\r
+.cke_skin_kama .cke_contextmenu\r
+{\r
+       margin: 0;\r
+}\r
+\r
+/* Ideally we would use "inherit here"... but you know... IE :( */\r
+.cke_skin_kama .cke_panel iframe\r
+{\r
+       width: 100%;\r
+       height: 100%;\r
+}\r
+\r
+/*\r
+ * All the following styles are to be used inside the iframe that holds panel\r
+ * contents. We don't use the cke_skin_default there to avoid the reset to be\r
+ * active.\r
+ * This is not an issue as we'll never have two skins running inside the same\r
+ * panel iframe.\r
+ */\r
+\r
+html.cke_skin_kama_container\r
+{\r
+       overflow: auto;\r
+       overflow-x: hidden;\r
+}\r
+\r
+body.cke_panel_frame\r
+{\r
+       overflow: auto;\r
+       overflow-x: hidden;\r
+}\r
+\r
+ul.cke_panel_list\r
+{\r
+       list-style-type: none;\r
+       margin: 3px;\r
+       padding: 0px;\r
+       white-space: nowrap;\r
+}\r
+\r
+li.cke_panel_listItem\r
+{\r
+       margin: 0px;\r
+}\r
+\r
+.cke_panel_listItem a\r
+{\r
+       padding: 2px;\r
+       display: block;\r
+       border: 1px solid #fff;\r
+       color: inherit;\r
+       text-decoration: none;\r
+       overflow: hidden;\r
+       text-overflow: ellipsis;\r
+}\r
+\r
+/* IE6 */\r
+* html .cke_panel_listItem a\r
+{\r
+       width : 100%;\r
+\r
+       /* IE is not able to inherit the color, so we must force it to black */\r
+       color: #000;\r
+}\r
+\r
+/* IE7 */\r
+*:first-child+html .cke_panel_listItem a\r
+{\r
+       /* IE is not able to inherit the color, so we must force it to black */\r
+       color: #000;\r
+}\r
+\r
+.cke_panel_listItem.cke_selected a\r
+{\r
+       border: 1px solid #ccc;\r
+       background-color: #e9f5ff;\r
+}\r
+\r
+.cke_panel_listItem a:hover,\r
+.cke_panel_listItem a:focus,\r
+.cke_panel_listItem a:active\r
+{\r
+       border-color: #316ac5;\r
+       background-color: #dff1ff;\r
+}\r
+\r
+.cke_panel_grouptitle\r
+{\r
+       font-size: 11px;\r
+       font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;\r
+       font-weight: bold;\r
+       white-space: nowrap;\r
+       background-color: #dcdcdc;\r
+       color: #000;\r
+       margin:0px;\r
+       padding:3px;\r
+}\r
+\r
+.cke_panel_listItem p,\r
+.cke_panel_listItem h1,\r
+.cke_panel_listItem h2,\r
+.cke_panel_listItem h3,\r
+.cke_panel_listItem h4,\r
+.cke_panel_listItem h5,\r
+.cke_panel_listItem h6,\r
+.cke_panel_listItem pre\r
+{\r
+       margin-top: 3px;\r
+       margin-bottom: 3px;\r
+}\r
+\r
+.cke_skin_kama .cke_button_textcolor_panel,\r
+.cke_skin_kama .cke_button_bgcolor_panel\r
+{\r
+       width: 150px;\r
+       height: 135px;\r
+}\r
+\r
+.cke_colorblock\r
+{\r
+       padding: 3px;\r
+    font-size: 11px;\r
+    font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;\r
+}\r
+\r
+.cke_colorblock,\r
+.cke_colorblock a\r
+{\r
+       text-decoration: none;\r
+       color: #000;\r
+}\r
+\r
+span.cke_colorbox\r
+{\r
+       width: 10px;\r
+       height: 10px;\r
+    border: #808080 1px solid;\r
+       float: left;\r
+}\r
+\r
+.cke_rtl span.cke_colorbox\r
+{\r
+       float: right;\r
+}\r
+\r
+a.cke_colorbox\r
+{\r
+    border: #fff 1px solid;\r
+    padding: 2px;\r
+    float: left;\r
+}\r
+\r
+.cke_rtl a.cke_colorbox\r
+{\r
+    float: right;\r
+}\r
+\r
+a:hover.cke_colorbox,\r
+a:focus.cke_colorbox,\r
+a:active.cke_colorbox\r
+{\r
+    border: #316ac5 1px solid;\r
+    background-color: #dff1ff;\r
+}\r
+\r
+a.cke_colorauto,\r
+a.cke_colormore\r
+{\r
+    border: #fff 1px solid;\r
+    padding: 2px;\r
+    display: block;\r
+}\r
+\r
+a:hover.cke_colorauto,\r
+a:hover.cke_colormore,\r
+a:focus.cke_colorauto,\r
+a:focus.cke_colormore,\r
+a:active.cke_colorauto,\r
+a:active.cke_colormore\r
+{\r
+    border: #316ac5 1px solid;\r
+    background-color: #dff1ff;\r
+}\r
diff --git a/_source/skins/kama/presets.css b/_source/skins/kama/presets.css
new file mode 100644 (file)
index 0000000..d26ca6e
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/* "Source" button label */\r
+.cke_skin_kama .cke_button_source .cke_label\r
+{\r
+       display: inline;\r
+}\r
+\r
+/* "Styles" panel size */\r
+.cke_skin_kama .cke_styles_panel\r
+{\r
+       width: 150px;\r
+       height: 170px;\r
+}\r
+\r
+/* "Format" panel size */\r
+.cke_skin_kama .cke_format_panel\r
+{\r
+       width: 150px;\r
+       height: 170px;\r
+}\r
+\r
+/* "Font" panel size */\r
+.cke_skin_kama .cke_font_panel\r
+{\r
+       width: 150px;\r
+       height: 170px;\r
+}\r
+\r
+/* "Font Size" panel size */\r
+.cke_skin_kama .cke_fontSize_panel\r
+{\r
+       height: 170px;\r
+}\r
+\r
+/* "Font Size" combo width */\r
+.cke_skin_kama .cke_fontSize .cke_text\r
+{\r
+       width: 25px;\r
+}\r
+\r
+/* "Font Size" combo width (IE Quirks) */\r
+.cke_skin_kama .cke_browser_iequirks .cke_fontSize .cke_text\r
+{\r
+       width: 32px;\r
+}\r
diff --git a/_source/skins/kama/reset.css b/_source/skins/kama/reset.css
new file mode 100644 (file)
index 0000000..4667110
--- /dev/null
@@ -0,0 +1,78 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * Reset and Default Values\r
+ */\r
+.cke_skin_kama *,\r
+.cke_skin_kama a:hover,\r
+.cke_skin_kama a:link,\r
+.cke_skin_kama a:visited,\r
+.cke_skin_kama a:active\r
+{\r
+       margin: 0;\r
+       padding: 0;\r
+       border: 0;\r
+       background: transparent;\r
+       text-decoration: none;\r
+       font: normal normal normal 100% Sans-Serif;\r
+       width: auto;\r
+       height: auto;\r
+       border-collapse: collapse;\r
+       text-align: left;\r
+       vertical-align: baseline;\r
+       white-space: nowrap;\r
+       cursor: auto;\r
+       color: #000;\r
+\r
+    font-size: 12px;\r
+    font-family: Arial,Helvetica,Tahoma,Verdana,Sans-Serif;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl *,\r
+.cke_skin_kama .cke_rtl a:hover,\r
+.cke_skin_kama .cke_rtl a:link,\r
+.cke_skin_kama .cke_rtl a:visited,\r
+.cke_skin_kama .cke_rtl a:active,\r
+.cke_rtl .cke_skin_kama *,\r
+.cke_rtl .cke_skin_kama a:hover,\r
+.cke_rtl .cke_skin_kama a:link,\r
+.cke_rtl .cke_skin_kama a:visited,\r
+.cke_rtl .cke_skin_kama a:active\r
+{\r
+       text-align: right;\r
+}\r
+\r
+.cke_skin_kama iframe\r
+{\r
+       vertical-align: inherit;        /** For IE */\r
+}\r
+\r
+.cke_skin_kama textarea\r
+{\r
+       white-space: pre;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko textarea\r
+{\r
+       cursor: text;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko textarea[disabled]\r
+{\r
+       cursor: default;\r
+}\r
+\r
+.cke_skin_kama input[type="text"],\r
+.cke_skin_kama input[type="password"]\r
+{\r
+       cursor: text;\r
+}\r
+\r
+.cke_skin_kama input[type="text"][disabled],\r
+.cke_skin_kama input[type="password"][disabled]\r
+{\r
+       cursor: default;\r
+}\r
diff --git a/_source/skins/kama/richcombo.css b/_source/skins/kama/richcombo.css
new file mode 100644 (file)
index 0000000..f27a76c
--- /dev/null
@@ -0,0 +1,260 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/* Special Combo */\r
+\r
+.cke_skin_kama .cke_rcombo\r
+{\r
+       display: inline;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_rcombo\r
+{\r
+}\r
+\r
+.cke_skin_kama .cke_rcombopanel\r
+{\r
+       border: 1px solid #8F8F73;\r
+       -moz-border-radius-topleft: 0;\r
+       -webkit-border-top-left-radius: 0;\r
+       border-top-left-radius: 0;\r
+       height: auto;\r
+       _height: 100px;\r
+}\r
+\r
+/* IE6 workaround, shouldn't be here */\r
+.cke_skin_kama .cke_browser_iequirks .cke_rcombopanel,\r
+.cke_skin_kama .cke_browser_ie6 .cke_rcombopanel\r
+{\r
+/*     width: 150px;*/\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo a,\r
+.cke_skin_kama .cke_rcombo a:active,\r
+.cke_skin_kama .cke_rcombo a:hover\r
+{\r
+       -moz-border-radius: 5px;\r
+       -webkit-border-radius: 5px;\r
+       border-radius: 5px;\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-repeat: repeat-x;\r
+       background-position: 0 -100px;\r
+       border-bottom:1px solid #DAD9D9;\r
+       border-right:1px solid #DAD9D9;\r
+       float:left;\r
+       padding: 2px;\r
+       height: 21px;\r
+       margin-right: 6px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_rcombo a,\r
+.cke_skin_kama .cke_rtl .cke_rcombo a:active,\r
+.cke_skin_kama .cke_rtl .cke_rcombo a:hover\r
+{\r
+       float:right;\r
+       margin-right: 0;\r
+       margin-left: 6px;\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_rcombo a\r
+{\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1.0; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo .cke_label\r
+{\r
+       display: none;\r
+       line-height: 26px;\r
+       vertical-align: top;\r
+       margin-right: 5px;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+       /* background-color: #f1f1e3;   Because of IE6+ClearType */\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_rcombo .cke_label\r
+{\r
+       margin-right: 0;\r
+       margin-left: 5px;\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo .cke_inline_label\r
+{\r
+       line-height: 21px;\r
+       font-style: italic;\r
+       color: #666666;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_ie .cke_rcombo .cke_text\r
+{\r
+/*     float: left; */\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_rcombo .cke_label\r
+{\r
+       filter: alpha(opacity=100);\r
+       opacity: 1.0;\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo .cke_text\r
+{\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+\r
+       height: 21px;\r
+       line-height: 21px;\r
+       width:60px;\r
+       text-overflow: ellipsis;\r
+       overflow: hidden;\r
+       display: inline-block;\r
+       margin: 0 2px 0 4px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_rcombo .cke_text\r
+{\r
+       margin: 0 4px 0 2px;\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo .cke_openbutton\r
+{\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 0 -68px;\r
+       background-repeat: no-repeat;\r
+       display: inline-block;\r
+       width: 17px;\r
+       height: 19px;\r
+       margin: 1px 2px;\r
+       background-repeat: no-repeat;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks .cke_rcombo .cke_openbutton\r
+{\r
+       margin-bottom: 0;\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo .cke_off a:hover .cke_text,\r
+.cke_skin_kama .cke_rcombo .cke_off a:focus .cke_text,\r
+.cke_skin_kama .cke_rcombo .cke_off a:active .cke_text,\r
+.cke_skin_kama .cke_rcombo .cke_on .cke_text\r
+{\r
+       border-color: #316ac5;\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo .cke_off a:hover .cke_openbutton,\r
+.cke_skin_kama .cke_rcombo .cke_off a:focus .cke_openbutton,\r
+.cke_skin_kama .cke_rcombo .cke_off a:active .cke_openbutton,\r
+.cke_skin_kama .cke_rcombo .cke_on .cke_openbutton\r
+{\r
+       border-color: #316ac5;\r
+       background-color: #dff1ff;\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo .cke_on .cke_text\r
+{\r
+       -moz-border-radius-bottomleft: 0px;\r
+       -webkit-border-bottom-left-radius: 0px;\r
+       border-bottom-left-radius: 0px;\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo .cke_on .cke_openbutton\r
+{\r
+       -moz-border-radius-bottomright: 0px;\r
+       -webkit-border-bottom-right-radius: 0px;\r
+       border-bottom-right-radius: 0px;\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo .cke_disabled .cke_label\r
+{\r
+       filter: alpha(opacity=30); /* IE */\r
+       opacity: 0.3; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_label\r
+{\r
+       filter: alpha(opacity=70);\r
+       opacity: 0.7;\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo .cke_disabled .cke_text,\r
+.cke_skin_kama .cke_rcombo .cke_disabled .cke_openbutton\r
+{\r
+       filter: alpha(opacity=50); /* IE */\r
+       opacity: 0.5; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_text,\r
+.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_openbutton\r
+{\r
+       filter: alpha(opacity=80);\r
+       opacity: 0.8;\r
+}\r
+\r
+.cke_skin_kama .cke_rcombo .cke_disabled .cke_text\r
+{\r
+       color: #fff;\r
+}\r
+\r
+/* RTL */\r
+\r
+.cke_skin_kama .cke_rtl .cke_rcombo span\r
+{\r
+/*     _zoom: 1;*/\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_rcombo .cke_text\r
+{\r
+/*     _float: left;*/\r
+}\r
+\r
+/* Firefox 2 & WebKit Section */\r
+\r
+.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_text,\r
+.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_openbutton,\r
+.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_text,\r
+.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_openbutton\r
+{\r
+       display: block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_text,\r
+.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text\r
+{\r
+/*     float: right;*/\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_label,\r
+.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_label\r
+{\r
+       /*display: block;*/\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_label,\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_text,\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_openbutton,\r
+.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,\r
+.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,\r
+.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_ie7 .cke_rcombo .cke_text\r
+{\r
+       line-height: 18px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_ie6 .cke_rcombo .cke_text,\r
+.cke_skin_kama .cke_browser_iequirks .cke_rcombo .cke_text\r
+{\r
+       height: auto;\r
+       line-height: 17px;\r
+}\r
diff --git a/_source/skins/kama/skin.js b/_source/skins/kama/skin.js
new file mode 100644 (file)
index 0000000..b06443a
--- /dev/null
@@ -0,0 +1,291 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.skins.add( 'kama', (function()\r
+{\r
+       var preload = [];\r
+\r
+       if ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 )\r
+       {\r
+               // For IE6, we need to preload some images, otherwhise they will be\r
+               // downloaded several times (CSS background bug).\r
+               preload.push( 'icons.png', 'images/sprites_ie6.png', 'images/dialog_sides.gif' );\r
+       }\r
+\r
+       return {\r
+               preload         : preload,\r
+               editor          : { css : [ 'editor.css' ] },\r
+               dialog          : { css : [ 'dialog.css' ] },\r
+               templates       : { css : [ 'templates.css' ] },\r
+               margins         : [ 0, 0, 0, 0 ],\r
+               init : function( editor )\r
+               {\r
+                       if ( editor.config.width && !isNaN( editor.config.width ) )\r
+                               editor.config.width -= 12;\r
+\r
+                       var menuHead;\r
+                       function menuSetUiColor( color )\r
+                       {\r
+                               if ( !menuHead )\r
+                                       return null;\r
+\r
+                               var uiStyle = menuHead.append('style');\r
+\r
+                               var cssSrc = "/* UI Color Support */\\r
+.cke_skin_kama .cke_menuitem .cke_icon_wrapper\\r
+{\\r
+       background-color: $color !important;\\r
+       border-color: $color !important;\\r
+}\\r
+\\r
+.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,\\r
+.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,\\r
+.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper\\r
+{\\r
+       background-color: $color !important;\\r
+       border-color: $color !important;\\r
+}\\r
+\\r
+.cke_skin_kama .cke_menuitem a:hover .cke_label,\\r
+.cke_skin_kama .cke_menuitem a:focus .cke_label,\\r
+.cke_skin_kama .cke_menuitem a:active .cke_label\\r
+{\\r
+       background-color: $color !important;\\r
+}\\r
+\\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,\\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,\\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label\\r
+{\\r
+       background-color: transparent !important;\\r
+}\\r
+\\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_icon_wrapper,\\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_icon_wrapper,\\r
+.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_icon_wrapper\\r
+{\\r
+       background-color: $color !important;\\r
+       border-color: $color !important;\\r
+}\\r
+\\r
+.cke_skin_kama .cke_menuitem a.cke_disabled .cke_icon_wrapper\\r
+{\\r
+       background-color: $color !important;\\r
+       border-color: $color !important;\\r
+}\\r
+\\r
+.cke_skin_kama .cke_menuseparator\\r
+{\\r
+       background-color: $color !important;\\r
+}\\r
+\\r
+.cke_skin_kama .cke_menuitem a:hover,\\r
+.cke_skin_kama .cke_menuitem a:focus,\\r
+.cke_skin_kama .cke_menuitem a:active\\r
+{\\r
+       background-color: $color !important;\\r
+}";\r
+\r
+                               uiStyle.setAttribute( "type", "text/css" );\r
+                               var regex = /\$color/g;\r
+\r
+                               // We have to split CSS declarations for webkit.\r
+                               if ( CKEDITOR.env.webkit )\r
+                               {\r
+                                       cssSrc = cssSrc.split( '}' ).slice( 0, -1 );\r
+                                       for ( var i in cssSrc )\r
+                                                       cssSrc[ i ] = cssSrc[ i ].split( '{' );\r
+                               }\r
+\r
+                               return ( menuSetUiColor =\r
+                                       function( color )\r
+                                       {\r
+                                               if ( CKEDITOR.env.webkit )\r
+                                               {\r
+                                                       for ( var i in cssSrc )\r
+                                                               uiStyle.$.sheet.addRule(\r
+                                                                       cssSrc[ i ][ 0 ], cssSrc[ i ][ 1 ].replace( regex, color )\r
+                                                               );\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       var css = cssSrc.replace( regex, color );\r
+\r
+                                                       if ( CKEDITOR.env.ie )\r
+                                                               uiStyle.$.styleSheet.cssText = css;\r
+                                                       else\r
+                                                               uiStyle.setHtml( css );\r
+                                               }\r
+                                       })( color );\r
+                       }\r
+\r
+                       CKEDITOR.tools.extend( editor,\r
+                       {\r
+                               uiColor: null,\r
+\r
+                               getUiColor : function()\r
+                               {\r
+                                       return this.uiColor;\r
+                               },\r
+\r
+                               setUiColor : function( color )\r
+                               {\r
+                                       var uiStyle = CKEDITOR.document.getHead().append('style'),\r
+                                               cssId = '#cke_' + editor.name.replace('.', '\\.');\r
+\r
+                                       var cssSelectors =\r
+                                               [\r
+                                                       cssId + " .cke_wrapper",\r
+                                                       cssId + "_dialog .cke_dialog_contents",\r
+                                                       cssId + "_dialog a.cke_dialog_tab",\r
+                                                       cssId + "_dialog .cke_dialog_footer"\r
+                                               ].join( ',' );\r
+                                       var cssProperties = "background-color: $color !important;";\r
+\r
+                                       uiStyle.setAttribute("type", "text/css");\r
+\r
+                                       return ( this.setUiColor =\r
+                                               function( color )\r
+                                               {\r
+                                                       var css = cssProperties.replace( '$color', color );\r
+                                                       editor.uiColor = color;\r
+\r
+                                                       if ( CKEDITOR.env.ie )\r
+                                                               uiStyle.$.styleSheet.cssText = cssSelectors + '{' + css + '}';\r
+                                                       else if ( CKEDITOR.env.webkit )\r
+                                                               uiStyle.$.sheet.addRule( cssSelectors, css );\r
+                                                       else\r
+                                                               uiStyle.setHtml( cssSelectors + '{' + css + '}' );\r
+\r
+                                                       menuSetUiColor( color );\r
+                                               })( color );\r
+                               }\r
+                       });\r
+\r
+                       // If the "menu" plugin is loaded, register the listeners.\r
+                       if ( CKEDITOR.menu )\r
+                       {\r
+                               var old = CKEDITOR.menu.prototype.show;\r
+\r
+                               CKEDITOR.menu.prototype.show = function()\r
+                               {\r
+                                       old.apply( this, arguments );\r
+\r
+                                       if ( !menuHead && editor == this.editor )\r
+                                       {\r
+                                               // Save reference.\r
+                                               menuHead = this._.element.getDocument().getHead();\r
+                                               menuSetUiColor( editor.getUiColor() );\r
+                                       }\r
+                               };\r
+                       }\r
+\r
+                       // Apply UI color if specified in config.\r
+                       if ( editor.config.uiColor )\r
+                               editor.setUiColor( editor.config.uiColor );\r
+\r
+                       // Fix editor's width. HPadding and 100% width iframe issue.\r
+//                     if ( CKEDITOR.env.ie && CKEDITOR.env.quirks )\r
+//                     {\r
+//                             editor.on( 'mode', function( event )\r
+//                             {\r
+//                                     var container = editor.getResizable();\r
+//                                     editor.resize( container.$.offsetWidth-10, container.$.offsetHeight );\r
+//                                     event.removeListener();\r
+//                             });\r
+//                     }\r
+\r
+//                     if ( CKEDITOR.env.ie && ( CKEDITOR.env.quirks || CKEDITOR.env.version < 7 ) )\r
+//                     {\r
+//                             editor.on( 'themeLoaded', function( event )\r
+//                             {\r
+//                                     var toolbars = editor.container.getChild( [0, 0, 0, 0, 0, 0, 0] ).getChildren();\r
+//                                     for ( var i = 0 ; i < toolbars.count() ; i++ )\r
+//                                     {\r
+//                                             var toolbar = toolbars.getItem( i );\r
+\r
+//                                             var last = toolbar.getLast();\r
+//                                             if ( !last || !last.getPrevious().hasClass( 'cke_rcombo' ) )\r
+//                                                     continue;\r
+//\r
+//                                             last.addClass( 'cke_toolbar_end_last' );\r
+//                                     }\r
+//                             });\r
+//                     }\r
+               }\r
+       };\r
+})() );\r
+\r
+if ( CKEDITOR.dialog )\r
+{\r
+       CKEDITOR.dialog.on( 'resize', function( evt )\r
+               {\r
+                       var data = evt.data,\r
+                               width = data.width,\r
+                               height = data.height,\r
+                               dialog = data.dialog,\r
+                               contents = dialog.parts.contents,\r
+                               standardsMode = !CKEDITOR.env.quirks;\r
+\r
+                       if ( data.skin != 'kama' )\r
+                               return;\r
+\r
+                       contents.setStyles(\r
+                               ( CKEDITOR.env.ie || ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) ) ?         // IE && FF2\r
+                                       {\r
+                                               width : width + 'px',\r
+                                               height : height + 'px'\r
+                                       }\r
+                               :\r
+                                       {\r
+                                               // To avoid having scrollbars in the dialogs, we're\r
+                                               // (for now) using the "min-xxx" properties, for\r
+                                               // browsers which well support it (#3878).\r
+                                               'min-width' : width + 'px',\r
+                                               'min-height' : height + 'px'\r
+                                       });\r
+\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // Fix the size of the elements which have flexible lengths.\r
+                       setTimeout( function()\r
+                               {\r
+                                       var body = contents.getParent(),\r
+                                               innerDialog = body.getParent();\r
+\r
+                                       // tc\r
+                                       var el = innerDialog.getChild( 2 );\r
+                                       el.setStyle( 'width', ( body.$.offsetWidth ) + 'px' );\r
+\r
+                                       // bc\r
+                                       el = innerDialog.getChild( 7 );\r
+                                       el.setStyle( 'width', ( body.$.offsetWidth - 28 ) + 'px' );\r
+\r
+                                       // ml\r
+                                       el = innerDialog.getChild( 4 );\r
+                                       el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );\r
+\r
+                                       // mr\r
+                                       el = innerDialog.getChild( 5 );\r
+                                       el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );\r
+                               },\r
+                               100 );\r
+               });\r
+}\r
+\r
+/**\r
+ * The base user interface color to be used by the editor. Not all skins are\r
+ * compatible with this setting.\r
+ * @name CKEDITOR.config.uiColor\r
+ * @type String\r
+ * @default '' (empty)\r
+ * @example\r
+ * // Using a color code.\r
+ * config.uiColor = '#AADC6E';\r
+ * @example\r
+ * // Using an HTML color name.\r
+ * config.uiColor = 'Gold';\r
+ */\r
diff --git a/_source/skins/kama/templates.css b/_source/skins/kama/templates.css
new file mode 100644 (file)
index 0000000..95c55dd
--- /dev/null
@@ -0,0 +1,71 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * Styles for the "templates" plugin.\r
+ */\r
+\r
+.cke_skin_kama .cke_tpl_list\r
+{\r
+       border: #dcdcdc 2px solid;\r
+       background-color: #ffffff;\r
+       overflow: auto;\r
+       width: 100%;\r
+       height: 220px;\r
+}\r
+\r
+.cke_skin_kama .cke_tpl_item\r
+{\r
+       margin: 5px;\r
+       padding: 7px;\r
+       border: #eeeeee 1px solid;\r
+       *width: 88%;\r
+}\r
+\r
+.cke_skin_kama .cke_tpl_preview\r
+{\r
+       border-collapse: separate;\r
+       text-indent:0;\r
+       width: 100%;\r
+}\r
+.cke_skin_kama .cke_tpl_preview td\r
+{\r
+       padding: 2px;\r
+       vertical-align: middle;\r
+}\r
+.cke_skin_kama .cke_tpl_preview .cke_tpl_preview_img\r
+{\r
+       width: 100px;\r
+}\r
+.cke_skin_kama .cke_tpl_preview span\r
+{\r
+       white-space: normal;\r
+}\r
+\r
+.cke_skin_kama .cke_tpl_title\r
+{\r
+       font-weight: bold;\r
+}\r
+\r
+.cke_skin_kama .cke_tpl_hover\r
+{\r
+       border: #ff9933 1px solid !important;\r
+       background-color: #fffacd !important;\r
+       cursor: pointer;\r
+       cursor: hand;\r
+}\r
+/*\r
+ * Fix property 'cursor' doesn't inherit on table\r
+ */\r
+.cke_skin_kama .cke_tpl_hover *\r
+{\r
+       cursor: inherit;\r
+}\r
+\r
+.cke_skin_kama .cke_tpl_empty, .cke_tpl_loading\r
+{\r
+       text-align: center;\r
+       padding: 5px;\r
+}\r
diff --git a/_source/skins/kama/toolbar.css b/_source/skins/kama/toolbar.css
new file mode 100644 (file)
index 0000000..1c22ecb
--- /dev/null
@@ -0,0 +1,384 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+@media print\r
+{\r
+       /* For printing, we simply hide the toolbar */\r
+\r
+       .cke_skin_kama .cke_toolbox\r
+       {\r
+               display: none;\r
+       }\r
+}\r
+\r
+.cke_skin_kama .cke_toolbox\r
+{\r
+       clear: both;\r
+       padding: 5px 3px 5px 6px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_toolbox\r
+{\r
+       padding: 5px 6px 5px 3px;\r
+}\r
+\r
+.cke_skin_kama a.cke_toolbox_collapser,\r
+.cke_skin_kama a:hover.cke_toolbox_collapser\r
+{\r
+       /* arrowtop.gif */\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 3px -1366px; /* +3px +4px */\r
+       background-repeat: no-repeat;\r
+       width: 11px;\r
+       height: 11px;\r
+       float: right;\r
+       border: 1px outset #D3D3D3;\r
+       margin: 11px 4px 2px;\r
+       cursor: pointer;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl a.cke_toolbox_collapser,\r
+.cke_skin_kama .cke_rtl a:hover.cke_toolbox_collapser\r
+{\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama a.cke_toolbox_collapser_min,\r
+.cke_skin_kama a:hover.cke_toolbox_collapser_min\r
+{\r
+       /* arrowleft.gif*/\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 4px -1387px; /* +4px +3px */\r
+       background-repeat: no-repeat;\r
+       margin: 2px 4px;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl a.cke_toolbox_collapser_min,\r
+.cke_skin_kama .cke_rtl a:hover.cke_toolbox_collapser_min\r
+{\r
+       /* arrowright.gif*/\r
+       background-position: 4px -1408px; /* +2px +3px */\r
+}\r
+\r
+.cke_skin_kama .cke_toolbar\r
+{\r
+       display: inline;\r
+}\r
+\r
+.cke_skin_kama .cke_separator\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_kama .cke_break\r
+{\r
+       font-size: 0;\r
+       clear: left;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_break\r
+{\r
+       clear: right;\r
+}\r
+\r
+.cke_skin_kama .cke_toolbar_start\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_kama .cke_toolgroup\r
+{\r
+       -moz-border-radius:5px;\r
+       -webkit-border-radius: 5px;\r
+       border-radius: 5px;\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-repeat: repeat-x;\r
+       background-position: 0 -500px;\r
+       float: left;\r
+       margin-right: 6px;\r
+       margin-bottom: 5px;\r
+       padding: 2px;\r
+       display: inline;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_toolgroup\r
+{\r
+       float: right;\r
+       margin-right: 0;\r
+       margin-left: 6px;\r
+}\r
+\r
+.cke_skin_kama .cke_button a,\r
+.cke_skin_kama .cke_button a:hover,\r
+.cke_skin_kama .cke_button a:focus,\r
+.cke_skin_kama .cke_button a:active,\r
+.cke_skin_kama .cke_button a.cke_off\r
+{\r
+       border-radius: 3px;\r
+       outline: none;\r
+       padding: 2px 4px;\r
+       height: 18px;\r
+       display: inline-block;\r
+       cursor: default;\r
+}\r
+\r
+.cke_skin_kama .cke_button a,\r
+.cke_skin_kama .cke_button a.cke_off\r
+{\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+       -moz-border-radius: 3px;\r
+       -webkit-border-radius: 3px;\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_button a,\r
+.cke_skin_kama .cke_hc .cke_button a.cke_off\r
+{\r
+       opacity: 1.0;\r
+       filter: alpha(opacity=100);\r
+       border: 1px solid white;\r
+}\r
+\r
+.cke_skin_kama .cke_button a.cke_on\r
+{\r
+       background-color: #a3d7ff;\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1; /* Safari, Opera and Mozilla */\r
+       padding: 2px 4px;\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_button a.cke_on\r
+{\r
+       padding: 0 2px !important;\r
+       border-width: 3px;\r
+}\r
+\r
+.cke_skin_kama .cke_button a.cke_disabled,\r
+.cke_skin_kama .cke_browser_ie a:hover.cke_button .cke_disabled\r
+{\r
+       filter: alpha(opacity=30); /* IE */\r
+       opacity: 0.3; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_button a.cke_disabled,\r
+.cke_skin_kama .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled\r
+{\r
+       filter: alpha(opacity=60);\r
+       opacity: 0.6;\r
+}\r
+\r
+.cke_skin_kama .cke_button a:hover.cke_on,\r
+.cke_skin_kama .cke_button a:focus.cke_on,\r
+.cke_skin_kama .cke_button a:active.cke_on,    /* IE */\r
+.cke_skin_kama .cke_button a:hover.cke_off,\r
+.cke_skin_kama .cke_button a:focus.cke_off,\r
+.cke_skin_kama .cke_button a:active.cke_off    /* IE */\r
+{\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1; /* Safari, Opera and Mozilla */\r
+       padding: 2px 4px;\r
+}\r
+\r
+.cke_skin_kama .cke_button a:hover.cke_on,\r
+.cke_skin_kama .cke_button a:focus.cke_on,\r
+.cke_skin_kama .cke_button a:active.cke_on     /* IE */\r
+{\r
+       background-color: #86caff;\r
+}\r
+\r
+.cke_skin_kama .cke_button a:hover.cke_off,\r
+.cke_skin_kama .cke_button a:focus.cke_off,\r
+.cke_skin_kama .cke_button a:active.cke_off    /* IE */\r
+{\r
+       background-color: #dff1ff;\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_button a:hover.cke_on,\r
+.cke_skin_kama .cke_hc .cke_button a:focus.cke_on,\r
+.cke_skin_kama .cke_hc .cke_button a:active.cke_on,    /* IE */\r
+.cke_skin_kama .cke_hc .cke_button a:hover.cke_off,\r
+.cke_skin_kama .cke_hc .cke_button a:focus.cke_off,\r
+.cke_skin_kama .cke_hc .cke_button a:active.cke_off    /* IE */\r
+{\r
+       padding: 0 2px !important;\r
+       border-width: 3px;\r
+}\r
+\r
+.cke_skin_kama .cke_button .cke_icon\r
+{\r
+       background-image: url(icons.png);\r
+       background-position: 100px;\r
+       background-repeat: no-repeat;\r
+       margin-top: 1px;\r
+       width: 16px;\r
+       height: 16px;\r
+       display: inline-block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_button .cke_icon\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_kama .cke_button .cke_label\r
+{\r
+       cursor: default;\r
+       display: none;\r
+       padding-left: 3px;\r
+       line-height: 18px;\r
+       vertical-align: middle;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_button .cke_label\r
+{\r
+       padding-left: 0;\r
+       padding-right: 3px;\r
+       float: right;\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_button .cke_label\r
+{\r
+       padding: 0;\r
+       display: inline-block;\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_button .cke_icon\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_kama .cke_accessibility\r
+{\r
+       position: absolute;\r
+       display: block;\r
+       width: 0;\r
+       height: 0;\r
+       overflow: hidden;\r
+}\r
+\r
+.cke_skin_kama .cke_button .cke_buttonarrow\r
+{\r
+       display: inline-block;\r
+       height: 17px;\r
+       width: 8px;\r
+       background-position: 2px -1469px; /* (+2, -5) */\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-repeat: no-repeat;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_rtl .cke_button .cke_buttonarrow\r
+{\r
+       background-position: 0 -1469px; /* (0, -5) */\r
+       float: right;\r
+}\r
+\r
+.cke_skin_kama .cke_hc .cke_button .cke_buttonarrow\r
+{\r
+       display: none;\r
+}\r
+\r
+/*** Firefox 2 ***/\r
+\r
+.cke_skin_kama .cke_browser_gecko .cke_toolbar,\r
+.cke_skin_kama .cke_browser_gecko .cke_button a,\r
+.cke_skin_kama .cke_browser_gecko .cke_button a.cke_off,\r
+.cke_skin_kama .cke_browser_gecko .cke_button .cke_icon,\r
+.cke_skin_kama .cke_browser_gecko .cke_button .cke_buttonarrow,\r
+.cke_skin_kama .cke_browser_gecko .cke_separator,\r
+.cke_skin_kama .cke_browser_gecko .cke_toolbar_start\r
+{\r
+       display: block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko.cke_hc .cke_button .cke_icon\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_toolbar,\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button a,\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl.cke_button a.cke_off,\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_icon,\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_buttonarrow,\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_toolbar_start\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko .cke_button .cke_label,\r
+.cke_skin_kama .cke_browser_gecko .cke_break\r
+{\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_label,\r
+.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_break\r
+{\r
+       float: right;\r
+}\r
+\r
+/*** IE ***/\r
+\r
+/* The biggest problem with IE is the RTL support (and float:right). It's\r
+   totally broken, and quite delicate. IE8 fixed these issues. */\r
+\r
+.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_icon,\r
+.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_label,\r
+.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_buttonarrow\r
+{\r
+       float: none;\r
+}\r
+\r
+/*** WebKit ***/\r
+\r
+/* We have originally used display:inline-block+float for cke_toolbar and it\r
+   worked well in all browsers, except IE+RTL. We had to change it to inline\r
+   and remove the float. This change didn't play well with Safari. */\r
+\r
+.cke_skin_kama .cke_browser_webkit .cke_toolbar\r
+{\r
+       float: left;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_toolbar\r
+{\r
+       float: right;\r
+}\r
+\r
+/*** Mixed Fixes ***/\r
+\r
+.cke_skin_kama .cke_browser_ie8 .cke_button .cke_label,\r
+.cke_skin_kama .cke_browser_opera .cke_button .cke_label,\r
+.cke_skin_kama .cke_browser_webkit .cke_button .cke_label\r
+{\r
+       line-height: 20px;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_opera.cke_browser_quirks .cke_button .cke_label,\r
+.cke_skin_kama .cke_browser_iequirks .cke_button .cke_label\r
+{\r
+       line-height: 17px;\r
+}\r
+\r
+/* IE8 strict button valign correction */\r
+.cke_skin_kama .cke_browser_ie8 .cke_button .cke_label\r
+{\r
+       vertical-align: top;\r
+}\r
+\r
+.cke_skin_kama .cke_browser_iequirks.cke_browser_ie8 .cke_button .cke_label\r
+{\r
+       /* revert previous */\r
+       vertical-align: middle;\r
+}\r
+/* END IE8 strict button valign correction */\r
diff --git a/_source/skins/office2003/dialog.css b/_source/skins/office2003/dialog.css
new file mode 100644 (file)
index 0000000..f9f7f9b
--- /dev/null
@@ -0,0 +1,643 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/* Restore the dialog visibility */\r
+body .cke_dialog\r
+{\r
+       visibility: visible;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_body\r
+{\r
+       margin-left: 16px;\r
+       margin-right: 16px;\r
+       margin-top: 2px;\r
+       margin-bottom: 20px;\r
+       position: relative;\r
+       z-index: 1;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_tl,\r
+.cke_skin_office2003 .cke_dialog_tr,\r
+.cke_skin_office2003 .cke_dialog_tc,\r
+.cke_skin_office2003 .cke_dialog_bl,\r
+.cke_skin_office2003 .cke_dialog_br,\r
+.cke_skin_office2003 .cke_dialog_bc\r
+{\r
+       background-image: url(images/sprites.png);\r
+       background-repeat: no-repeat;\r
+       position: absolute;\r
+\r
+       /* IE6 does not support full color transparent PNG. */\r
+       _background-image: url(images/sprites_ie6.png);\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_tl\r
+{\r
+       background-position: -16px -16px;\r
+       height: 16px;\r
+       width: 16px;\r
+       top: 0;\r
+       left: 0;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_dialog_tl\r
+{\r
+       background-position: -16px -397px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_tr\r
+{\r
+       background-position: -16px -76px;\r
+       height: 16px;\r
+       width: 16px;\r
+       top: 0;\r
+       right: 0;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_dialog_tr\r
+{\r
+       background-position: -16px -457px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_tc\r
+{\r
+       background-position: 0 -136px;\r
+       background-repeat: repeat-x;\r
+       height: 16px;\r
+       top: 0;\r
+       left: 16px;\r
+       right: 16px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_bl\r
+{\r
+       background-position: -16px -196px;\r
+       height: 51px;\r
+       width: 30px;\r
+       bottom: 0;\r
+       left: 0;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_dialog_bl\r
+{\r
+       background-position: -16px -517px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_br\r
+{\r
+       background-position: -16px -263px;\r
+       height: 51px;\r
+       width: 30px;\r
+       bottom: 0;\r
+       right: 0;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_dialog_br\r
+{\r
+       background-position: -16px -584px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_bc\r
+{\r
+       background-position: 0 -330px;\r
+       background-repeat: repeat-x;\r
+       height: 51px;\r
+       bottom: 0;\r
+       left: 30px;\r
+       right: 30px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_ml,\r
+.cke_skin_office2003 .cke_dialog_mr\r
+{\r
+       background-image: url(images/dialog_sides.png);\r
+       background-repeat: repeat-y;\r
+       position: absolute;\r
+       width: 16px;\r
+       top: 16px;\r
+       bottom: 51px;\r
+\r
+       /* IE6 does not support full color transparent PNG. */\r
+       _background-image: url(images/dialog_sides.gif);\r
+\r
+       /* IE quirks gets confused when we have both top and bottom. */\r
+       _top: auto;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_dialog_ml,\r
+.cke_skin_office2003 .cke_rtl .cke_dialog_mr\r
+{\r
+       background-image: url(images/dialog_sides_rtl.png);\r
+\r
+       /* IE6 does not support full color transparent PNG. */\r
+       _background-image: url(images/dialog_sides.gif);\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_ml\r
+{\r
+       background-position: 0 0;\r
+       left: 0;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_mr\r
+{\r
+       background-position: -16px 0;\r
+       right: 0;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_ml,\r
+.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_mr\r
+{\r
+       margin-top: 3px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_title\r
+{\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 0 -678px;\r
+       background-repeat: repeat-x;\r
+       font-weight: bold;\r
+       font-size: 14pt;\r
+       color: #0E3460;\r
+       background-color: #8db1ff;\r
+       padding: 3px 10px 26px 10px;\r
+       cursor: move;\r
+       position: relative;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_title\r
+{\r
+       position: static !important;\r
+       unicode-bidi: bidi-override;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_contents\r
+{\r
+       background-color: #f7f8fd;\r
+       border: #2b66c9 1px solid;\r
+       overflow: auto;\r
+       padding: 5px 10px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_footer\r
+{\r
+       background-color: #8db1ff;\r
+       text-align: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_dialog_footer\r
+{\r
+       text-align: left;\r
+}\r
+\r
+/* tabs */\r
+\r
+.cke_skin_office2003 .cke_dialog_tabs\r
+{\r
+       height: 23px;\r
+       background-color: #8db1ff;\r
+       display: inline-block;\r
+       margin-left:10px;\r
+       margin-right:10px;\r
+       margin-top:-23px;\r
+       position: absolute;\r
+       z-index: 2;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_dialog_tabs\r
+{\r
+       right: 10px;\r
+}\r
+\r
+.cke_skin_office2003 a.cke_dialog_tab,\r
+.cke_skin_office2003 a:link.cke_dialog_tab,\r
+.cke_skin_office2003 a:active.cke_dialog_tab,\r
+.cke_skin_office2003 a:hover.cke_dialog_tab,\r
+.cke_skin_office2003 a:visited.cke_dialog_tab\r
+{\r
+       color: #0E3460;\r
+       border-left: 1px solid #2b66c9;\r
+       border-right: 1px solid #2b66c9;\r
+       border-top: 1px solid #2b66c9;\r
+       height: 14px;\r
+       padding: 4px 5px;\r
+       display: inline-block;\r
+       cursor: pointer;\r
+}\r
+\r
+/* Gecko 1.8 layout workaround. */\r
+.cke_skin_office2003 .cke_browser_gecko18 a.cke_dialog_tab,\r
+.cke_skin_office2003 .cke_browser_gecko18 a:link.cke_dialog_tab,\r
+.cke_skin_office2003 .cke_browser_gecko18 a:active.cke_dialog_tab,\r
+.cke_skin_office2003 .cke_browser_gecko18 a:hover.cke_dialog_tab,\r
+.cke_skin_office2003 .cke_browser_gecko18 a:visited.cke_dialog_tab\r
+{\r
+       display: inline;\r
+       position: relative;\r
+       top: 6px;\r
+}\r
+\r
+.cke_skin_office2003 a:hover.cke_dialog_tab\r
+{\r
+       background-color: #f7f8fd;\r
+}\r
+\r
+.cke_skin_office2003 a.cke_dialog_tab_selected,\r
+.cke_skin_office2003 a:link.cke_dialog_tab_selected,\r
+.cke_skin_office2003 a:active.cke_dialog_tab_selected,\r
+.cke_skin_office2003 a:hover.cke_dialog_tab_selected,\r
+.cke_skin_office2003 a:visited.cke_dialog_tab_selected\r
+{\r
+       border-bottom: 1px solid #f7f8fd;\r
+       background-color: #f7f8fd;\r
+       font-weight: bold;\r
+       cursor: default;\r
+}\r
+\r
+/* single_page */\r
+\r
+.cke_skin_office2003 .cke_single_page .cke_dialog_tabs\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_single_page .cke_dialog_title\r
+{\r
+       padding-bottom: 3px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_ui_vbox table,\r
+.cke_skin_office2003 .cke_dialog_ui_hbox table\r
+{\r
+       margin: auto;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_ui_vbox_child\r
+{\r
+       padding: 5px 0px;\r
+}\r
+\r
+.cke_skin_office2003 input.cke_dialog_ui_input_text,\r
+.cke_skin_office2003 input.cke_dialog_ui_input_password\r
+{\r
+       background-color: white;\r
+       border: none;\r
+       padding: 0px;\r
+       width: 100%;\r
+       height: 14px;\r
+}\r
+\r
+.cke_skin_office2003 div.cke_dialog_ui_input_text,\r
+.cke_skin_office2003 div.cke_dialog_ui_input_password\r
+{\r
+       background-color: white;\r
+       border: 1px solid #a0a0a0;\r
+       padding: 1px 0px;\r
+}\r
+\r
+.cke_skin_office2003 textarea.cke_dialog_ui_input_textarea\r
+{\r
+       background-color: white;\r
+       border: none;\r
+       padding: 0px;\r
+       width: 100%;\r
+       /*\r
+        * IE6 BUG: Scrollbars in textareas can overflow even if the outer DIV is set to overflow:hidden.\r
+        * So leave 1% width for the scrollbar. In most situations the 1% isn't noticeable by users.\r
+        */\r
+       _width: 99%;\r
+       overflow: auto;\r
+       resize: none;\r
+}\r
+\r
+.cke_skin_office2003 div.cke_dialog_ui_input_textarea\r
+{\r
+       background-color: white;\r
+       border: 1px solid #a0a0a0;\r
+       padding: 1px 0px;\r
+}\r
+\r
+.cke_skin_office2003 div.cke_disabled .cke_dialog_ui_labeled_content *\r
+{\r
+       background-color : #a0a0a0;\r
+       cursor : default;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_ui_hbox\r
+{\r
+       width: 100%;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_ui_hbox_first,\r
+.cke_skin_office2003 .cke_dialog_ui_hbox_child,\r
+.cke_skin_office2003 .cke_dialog_ui_hbox_last\r
+{\r
+       vertical-align: top;\r
+}\r
+\r
+.cke_skin_office2003 .cke_ltr .cke_dialog_ui_hbox_first,\r
+.cke_skin_office2003 .cke_ltr .cke_dialog_ui_hbox_child\r
+{\r
+       padding-right: 10px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_dialog_ui_hbox_first,\r
+.cke_skin_office2003 .cke_rtl .cke_dialog_ui_hbox_child\r
+{\r
+       padding-left: 10px;\r
+}\r
+\r
+/* button */\r
+\r
+.cke_skin_office2003 a.cke_dialog_ui_button\r
+{\r
+       border-collapse: separate;\r
+       cursor: default;\r
+}\r
+\r
+.cke_skin_office2003 span.cke_dialog_ui_button\r
+{\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 0 -678px;\r
+       background-repeat: repeat-x;\r
+       border: #0E3460 1px solid;\r
+       padding: 2px 10px;\r
+       text-align: center;\r
+       color: #0E3460;\r
+       background-color: #8db1ff;\r
+       display: inline-block;\r
+       cursor: default;\r
+}\r
+\r
+/* Gecko 1.8 does not support display: inline-block */\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button\r
+{\r
+       display: block;\r
+}\r
+\r
+.cke_skin_office2003 a.cke_dialog_ui_button span.cke_disabled\r
+{\r
+       border: #898980 1px solid;\r
+       color: #5e5e55;\r
+       background-color: #c5c5b3;\r
+}\r
+\r
+.cke_skin_office2003 a:focus span.cke_dialog_ui_button,\r
+.cke_skin_office2003 a:active span.cke_dialog_ui_button\r
+{\r
+       background-color: #8db1ff;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_footer_buttons\r
+{\r
+       display: inline-table;\r
+       margin-right: 12px;\r
+       margin-left: 12px;\r
+       width: auto;\r
+       position: relative;\r
+}\r
+\r
+/* Gecko 1.8 does not support for display: inline-table */\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_dialog_footer_buttons\r
+{\r
+       display: inline;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_footer_buttons span.cke_dialog_ui_button\r
+{\r
+       width: 60px;\r
+       margin: 7px 0;\r
+}\r
+\r
+.cke_skin_office2003 strong\r
+{\r
+       font-weight: bold;\r
+}\r
+\r
+/* close_button */\r
+\r
+.cke_skin_office2003 .cke_dialog_close_button\r
+{\r
+       background-image: url(images/sprites.png);\r
+       background-repeat: no-repeat;\r
+       background-position: -20px -655px;\r
+       position: absolute;\r
+       cursor: pointer;\r
+       text-align: center;\r
+       height: 21px;\r
+       width: 21px;\r
+       top: 4px;\r
+\r
+       /* IE6 does not support full color transparent PNG. */\r
+       _background-image: url(images/sprites_ie6.png);\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_close_button span\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_ltr .cke_dialog_close_button\r
+{\r
+       right: 10px;\r
+       _right: 22px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_dialog_close_button\r
+{\r
+       left: 10px;\r
+       _left: 16px;\r
+       _top: 6px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie6.cke_rtl .cke_dialog_close_button\r
+{\r
+       position: relative;\r
+       float: left;\r
+       margin-top: -55px;\r
+       margin-left: -7px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_iequirks.cke_rtl.cke_single_page .cke_dialog_close_button\r
+{\r
+       margin-top: -32px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_iequirks.cke_ltr .cke_dialog_close_button\r
+{\r
+       margin-top: 0;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog_ui_input_select\r
+{\r
+       border: 1px solid #a0a0a0;\r
+       background-color: white;\r
+}\r
+\r
+.cke_skin_office2003 iframe.cke_dialog_ui_input_file\r
+{\r
+       width: 100%;\r
+       height: 25px;\r
+}\r
+\r
+/*\r
+ * Some utility CSS classes for dialog authors.\r
+ */\r
+.cke_skin_office2003 .cke_dialog .cke_dark_background\r
+{\r
+       background-color: #eaead1;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog .cke_hand\r
+{\r
+       cursor: pointer;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog .cke_centered\r
+{\r
+       text-align: center;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog a.cke_btn_reset\r
+{\r
+       float: right;\r
+       background-position: 0 -32px;\r
+       background-image: url(images/mini.gif);\r
+       width: 16px;\r
+       height: 16px;\r
+       background-repeat: no-repeat;\r
+       border: 1px none;\r
+       font-size: 1px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_reset\r
+{\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog a.cke_btn_locked,\r
+.cke_skin_office2003 .cke_dialog a.cke_btn_unlocked\r
+{\r
+       float: left;\r
+       background-position: 0 0;\r
+       background-image: url(images/mini.gif);\r
+       width: 16px;\r
+       height: 16px;\r
+       background-repeat: no-repeat;\r
+       border: none 1px;\r
+       font-size: 1px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_locked,\r
+.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_unlocked\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog a.cke_btn_unlocked\r
+{\r
+       background-position: 0 -16px;\r
+       background-image: url(images/mini.gif);\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog .cke_btn_over\r
+{\r
+       border: outset 1px;\r
+       cursor: pointer;\r
+       cursor: hand;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog  #ImagePreviewBox\r
+{\r
+       white-space : normal;\r
+       border : 2px ridge black;\r
+       overflow : scroll;\r
+       height : 160px;\r
+       width : 230px;\r
+       padding : 2px;\r
+       background-color : white;\r
+}\r
+.cke_skin_office2003 .cke_dialog  #ImagePreviewLoader\r
+{\r
+       position: absolute;\r
+       white-space : normal;\r
+       overflow : hidden;\r
+       height : 160px;\r
+       width : 230px;\r
+       margin : 2px;\r
+       padding : 2px;\r
+       opacity : 0.9;\r
+       filter : alpha(opacity=90);\r
+\r
+       background-color : #e4e4e4;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog  #FlashPreviewBox\r
+{\r
+       white-space : normal;\r
+       border : 2px ridge black;\r
+       overflow : auto;\r
+       height : 160px;\r
+       width : 390px;\r
+       padding : 2px;\r
+       background-color : white;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog .cke_dark_background\r
+{\r
+       text-align : center;\r
+       background-color: #eaead1;\r
+       font-size : 14px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog .cke_light_background\r
+{\r
+       text-align : center;\r
+       background-color: #ffffbe;\r
+}\r
+\r
+.cke_skin_office2003 .cke_dialog .cke_hand\r
+{\r
+       cursor: pointer;\r
+       cursor: hand;\r
+}\r
+\r
+.cke_skin_office2003 .cke_disabled\r
+{\r
+       color: #a0a0a0;\r
+}\r
+\r
+/* High Contrast Mode */\r
+.cke_skin_office2003 .cke_hc .cke_dialog_title,\r
+.cke_skin_office2003 .cke_hc .cke_dialog_tabs,\r
+.cke_skin_office2003 .cke_hc .cke_dialog_contents,\r
+.cke_skin_office2003 .cke_hc .cke_dialog_footer\r
+{\r
+       border-left: 1px solid;\r
+       border-right: 1px solid;\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_dialog_title\r
+{\r
+       border-top: 1px solid;\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_dialog_footer\r
+{\r
+       border-bottom: 1px solid;\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_dialog_close_button span\r
+{\r
+       display: inline;\r
+       cursor: pointer;\r
+       cursor: hand;\r
+       font-weight: bold;\r
+       position: relative;\r
+       top: 3px;\r
+}\r
diff --git a/_source/skins/office2003/editor.css b/_source/skins/office2003/editor.css
new file mode 100644 (file)
index 0000000..c786a18
--- /dev/null
@@ -0,0 +1,21 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+@import url("reset.css");\r
+@import url("mainui.css");\r
+@import url("panel.css");\r
+@import url("toolbar.css");\r
+@import url("menu.css");\r
+@import url("richcombo.css");\r
+@import url("elementspath.css");\r
+@import url("icons.css");\r
+@import url("presets.css");\r
+\r
+/* Restore the container visibility */\r
+html .cke_skin_office2003,\r
+html.cke_skin_office2003_container\r
+{\r
+       visibility: visible;\r
+}\r
diff --git a/_source/skins/office2003/elementspath.css b/_source/skins/office2003/elementspath.css
new file mode 100644 (file)
index 0000000..4a74af1
--- /dev/null
@@ -0,0 +1,68 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+@media print\r
+{\r
+       .cke_path\r
+       {\r
+               display: none;\r
+       }\r
+}\r
+\r
+.cke_skin_office2003 .cke_path\r
+{\r
+       padding: 3px 3px 0 3px;\r
+       display: inline-block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_path\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_path a,\r
+.cke_skin_office2003 .cke_path .cke_empty\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+       border: solid 1px #f7f8fd;\r
+       background-color: #f7f8fd;\r
+       padding-top: 1px;\r
+       padding-bottom: 1px;\r
+       padding-left: 4px;\r
+       padding-right: 4px;\r
+       margin-bottom : 3px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_path .cke_empty\r
+{\r
+       visibility: hidden;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_path a,\r
+.cke_skin_office2003 .cke_rtl .cke_path cke_empty\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_path a:hover,\r
+.cke_skin_office2003 .cke_path a:focus,\r
+.cke_skin_office2003 .cke_path a:active        /* IE */\r
+{\r
+       border: solid 1px #316ac5;\r
+       background-color: #dff1ff;\r
+       padding-top: 1px;\r
+       padding-bottom: 1px;\r
+       padding-left: 4px;\r
+       padding-right: 4px;\r
+       outline: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_path a,\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_path .cke_empty\r
+{\r
+       float: none;\r
+}\r
diff --git a/_source/skins/office2003/icons.css b/_source/skins/office2003/icons.css
new file mode 100644 (file)
index 0000000..d1f8677
--- /dev/null
@@ -0,0 +1,309 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_office2003 .cke_button_source .cke_icon\r
+{\r
+       background-position: 0 0;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_newpage .cke_icon\r
+{\r
+       background-position: 0 -48px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_preview .cke_icon\r
+{\r
+       background-position: 0 -64px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_cut .cke_icon\r
+{\r
+       background-position: 0 -96px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_copy .cke_icon\r
+{\r
+       background-position: 0 -112px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_paste .cke_icon\r
+{\r
+       background-position: 0 -128px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_pastetext .cke_icon\r
+{\r
+       background-position: 0 -144px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_find .cke_icon\r
+{\r
+       background-position: 0 -240px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_replace .cke_icon\r
+{\r
+       background-position: 0 -256px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_selectAll .cke_icon\r
+{\r
+       background-position: 0 -272px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_removeFormat .cke_icon\r
+{\r
+       background-position: 0 -288px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_bold .cke_icon\r
+{\r
+       background-position: 0 -304px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_italic .cke_icon\r
+{\r
+       background-position: 0 -320px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_underline .cke_icon\r
+{\r
+       background-position: 0 -336px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_strike .cke_icon\r
+{\r
+       background-position: 0 -352px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_subscript .cke_icon\r
+{\r
+       background-position: 0 -368px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_superscript .cke_icon\r
+{\r
+       background-position: 0 -384px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_table .cke_icon\r
+{\r
+       background-position: 0 -608px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_horizontalrule .cke_icon\r
+{\r
+       background-position: 0 -624px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_smiley .cke_icon\r
+{\r
+       background-position: 0 -640px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_link .cke_icon\r
+{\r
+       background-position: 0 -528px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_unlink .cke_icon\r
+{\r
+       background-position: 0 -544px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_anchor .cke_icon\r
+{\r
+       background-position: 0 -560px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_image .cke_icon\r
+{\r
+       background-position: 0 -576px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_flash .cke_icon\r
+{\r
+       background-position: 0 -592px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_specialchar .cke_icon\r
+{\r
+       background-position: 0 -656px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_pagebreak .cke_icon\r
+{\r
+       background-position: 0 -672px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_print .cke_icon\r
+{\r
+       background-position: 0 -176px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_checkspell .cke_icon,\r
+.cke_skin_office2003 .cke_button_scayt .cke_icon\r
+{\r
+       background-position: 0 -192px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_pagebreak .cke_icon\r
+{\r
+       background-position: 0 -672px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_textcolor .cke_icon\r
+{\r
+       background-position: 0 -704px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_bgcolor .cke_icon\r
+{\r
+       background-position: 0 -720px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_form .cke_icon\r
+{\r
+       background-position: 0 -752px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_checkbox .cke_icon\r
+{\r
+       background-position: 0 -768px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_radio .cke_icon\r
+{\r
+       background-position: 0 -784px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_textfield .cke_icon\r
+{\r
+       background-position: 0 -800px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_textarea .cke_icon\r
+{\r
+       background-position: 0 -816px;\r
+}\r
+.cke_skin_office2003 .cke_button_showblocks .cke_icon\r
+{\r
+       background-position: 0 -1136px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_select .cke_icon\r
+{\r
+       background-position: 0 -832px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_button .cke_icon\r
+{\r
+       background-position: 0 -848px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_imagebutton .cke_icon\r
+{\r
+       background-position: 0 -864px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_hiddenfield .cke_icon\r
+{\r
+       background-position: 0 -880px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_undo .cke_icon\r
+{\r
+       background-position: 0 -208px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_button_undo .cke_icon\r
+{\r
+       background-position: 0 -224px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_redo .cke_icon\r
+{\r
+       background-position: 0 -224px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_button_redo .cke_icon\r
+{\r
+       background-position: 0 -208px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_templates .cke_icon\r
+{\r
+       background-position: 0 -80px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_numberedlist .cke_icon\r
+{\r
+       background-position: 0 -400px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_bulletedlist .cke_icon\r
+{\r
+       background-position: 0 -416px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_outdent .cke_icon\r
+{\r
+       background-position: 0 -432px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_indent .cke_icon\r
+{\r
+       background-position: 0 -448px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_justifyleft .cke_icon\r
+{\r
+       background-position: 0 -464px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_justifycenter .cke_icon\r
+{\r
+       background-position: 0 -480px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_justifyright .cke_icon\r
+{\r
+       background-position: 0 -496px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_justifyblock .cke_icon\r
+{\r
+       background-position: 0 -512px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_blockquote .cke_icon\r
+{\r
+       background-position: 0 -1152px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_flash .cke_icon\r
+{\r
+       background-position: 0 -592px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_pastefromword .cke_icon\r
+{\r
+       background-position: 0 -160px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_save .cke_icon\r
+{\r
+       background-position: 0 -32px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_about .cke_icon\r
+{\r
+       background-position: 0 -736px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_maximize .cke_icon\r
+{\r
+       background-position: 0 -1040px;\r
+}\r
diff --git a/_source/skins/office2003/icons.png b/_source/skins/office2003/icons.png
new file mode 100644 (file)
index 0000000..394ce89
Binary files /dev/null and b/_source/skins/office2003/icons.png differ
diff --git a/_source/skins/office2003/images/dialog_sides.gif b/_source/skins/office2003/images/dialog_sides.gif
new file mode 100644 (file)
index 0000000..5840d01
Binary files /dev/null and b/_source/skins/office2003/images/dialog_sides.gif differ
diff --git a/_source/skins/office2003/images/dialog_sides.png b/_source/skins/office2003/images/dialog_sides.png
new file mode 100644 (file)
index 0000000..7da9821
Binary files /dev/null and b/_source/skins/office2003/images/dialog_sides.png differ
diff --git a/_source/skins/office2003/images/dialog_sides_rtl.png b/_source/skins/office2003/images/dialog_sides_rtl.png
new file mode 100644 (file)
index 0000000..24fe13a
Binary files /dev/null and b/_source/skins/office2003/images/dialog_sides_rtl.png differ
diff --git a/_source/skins/office2003/images/mini.gif b/_source/skins/office2003/images/mini.gif
new file mode 100644 (file)
index 0000000..54d9107
Binary files /dev/null and b/_source/skins/office2003/images/mini.gif differ
diff --git a/_source/skins/office2003/images/noimage.png b/_source/skins/office2003/images/noimage.png
new file mode 100644 (file)
index 0000000..1598113
Binary files /dev/null and b/_source/skins/office2003/images/noimage.png differ
diff --git a/_source/skins/office2003/images/sprites.png b/_source/skins/office2003/images/sprites.png
new file mode 100644 (file)
index 0000000..a6d3a72
Binary files /dev/null and b/_source/skins/office2003/images/sprites.png differ
diff --git a/_source/skins/office2003/images/sprites_ie6.png b/_source/skins/office2003/images/sprites_ie6.png
new file mode 100644 (file)
index 0000000..94073b2
Binary files /dev/null and b/_source/skins/office2003/images/sprites_ie6.png differ
diff --git a/_source/skins/office2003/mainui.css b/_source/skins/office2003/mainui.css
new file mode 100644 (file)
index 0000000..b718c1f
--- /dev/null
@@ -0,0 +1,97 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_office2003 .cke_editor\r
+{\r
+/*\r
+       border: solid 1px #dcdcdc;\r
+*/\r
+       display: inline-table;\r
+       width: 100%;\r
+}\r
+\r
+.cke_skin_office2003,\r
+.cke_skin_office2003 .cke_wrapper\r
+{\r
+       display: block;\r
+}\r
+\r
+.cke_skin_office2003 .cke_top, .cke_skin_office2003 .cke_bottom\r
+{\r
+       background-color: #f7f8fd;\r
+}\r
+\r
+.cke_skin_office2003 .cke_top\r
+{\r
+    border-top: solid 1px #fafaf5;\r
+    border-left: solid 1px #fafaf5;\r
+    border-right: solid 1px #696969;\r
+    border-bottom: solid 2px #696969;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_top\r
+{\r
+    border-left: solid 1px #696969;\r
+    border-right: solid 1px #fafaf5;\r
+}\r
+\r
+.cke_skin_office2003 .cke_bottom\r
+{\r
+    border-left: solid 1px #696969;\r
+    border-right: solid 1px #696969;\r
+    border-bottom: solid 1px #696969;\r
+}\r
+\r
+.cke_skin_office2003 .cke_contents\r
+{\r
+       border: solid 1px #696969;\r
+}\r
+\r
+.cke_skin_office2003 .cke_focus\r
+{\r
+       outline: auto 5px -webkit-focus-ring-color;\r
+}\r
+\r
+.cke_skin_office2003 textarea.cke_source\r
+{\r
+       font-family: 'Courier New' , Monospace;\r
+       font-size: small;\r
+       white-space: pre;\r
+       background-color: #fff;\r
+}\r
+\r
+.cke_skin_office2003 .cke_resizer\r
+{\r
+       width: 12px;\r
+       height: 12px;\r
+       margin-top: 16px;\r
+       display: block;\r
+       float: right;\r
+       /* resizer.gif*/\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 0 -1088px;\r
+       background-repeat: no-repeat;\r
+       cursor: se-resize;\r
+}\r
+\r
+.cke_skin_office2003 .cke_maximized .cke_resizer\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_resizer\r
+{\r
+       cursor: sw-resize;\r
+       /* resizer_rtl.gif*/\r
+       background-position: 0 -1115px;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie6 .cke_contents textarea,\r
+.cke_skin_office2003 .cke_browser_ie7 .cke_contents textarea\r
+{\r
+       position: absolute;\r
+}\r
diff --git a/_source/skins/office2003/menu.css b/_source/skins/office2003/menu.css
new file mode 100644 (file)
index 0000000..ab480ac
--- /dev/null
@@ -0,0 +1,175 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_office2003 .cke_contextmenu\r
+{\r
+       padding: 2px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem a\r
+{\r
+       display:block;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem span\r
+{\r
+       cursor: default;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem a:hover,\r
+.cke_skin_office2003 .cke_menuitem a:focus,\r
+.cke_skin_office2003 .cke_menuitem a:active\r
+{\r
+       background-color: #8db1ff;\r
+       display:block;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem a.cke_disabled:hover,\r
+.cke_skin_office2003 .cke_menuitem a.cke_disabled:focus,\r
+.cke_skin_office2003 .cke_menuitem a.cke_disabled:active\r
+{\r
+       background-color: transparent !important;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem .cke_icon\r
+{\r
+       background-image: url(icons.png);\r
+       background-position: 100px;\r
+       background-repeat:no-repeat;\r
+       background-color: transparent;\r
+       width: 16px;\r
+       height: 16px;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon\r
+{\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem .cke_icon_wrapper\r
+{\r
+       background-color: #f7f8fd;\r
+       border: solid 4px #f7f8fd;\r
+       width: 16px;\r
+       height: 16px;\r
+       float: left;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon_wrapper\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem a:hover .cke_icon_wrapper,\r
+.cke_skin_office2003 .cke_menuitem a:focus .cke_icon_wrapper,\r
+.cke_skin_office2003 .cke_menuitem a:active .cke_icon_wrapper\r
+{\r
+       background-color: #9d9d9d;\r
+       border: solid 4px #9d9d9d;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,\r
+.cke_skin_office2003 .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,\r
+.cke_skin_office2003 .cke_menuitem a:active.cke_disabled .cke_icon_wrapper\r
+{\r
+       background-color: #f7f8fd;\r
+       border: solid 4px #f7f8fd;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem .cke_label\r
+{\r
+       display:block;\r
+       padding-right: 3px;\r
+       padding-top: 5px;\r
+       padding-left: 4px;\r
+       height:19px;\r
+       margin-left: 24px;\r
+       background-color: #fff;\r
+       _overflow: hidden;\r
+       _width: 80px;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_label\r
+{\r
+       padding-right: 0;\r
+       margin-left: 0;\r
+       padding-left: 3px;\r
+       margin-right: 28px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem a.cke_disabled .cke_label\r
+{\r
+       filter: alpha(opacity=30); /* IE */\r
+       opacity: 0.30; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem a:hover .cke_label,\r
+.cke_skin_office2003 .cke_menuitem a:focus .cke_label,\r
+.cke_skin_office2003 .cke_menuitem a:active .cke_label\r
+{\r
+       background-color: #8db1ff;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuitem a.cke_disabled:hover .cke_label,\r
+.cke_skin_office2003 .cke_menuitem a.cke_disabled:focus .cke_label,\r
+.cke_skin_office2003 .cke_menuitem a.cke_disabled:active .cke_label\r
+{\r
+       background-color: transparent;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuseparator\r
+{\r
+       background-color: #f7f8fd;\r
+       height: 2px;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+\r
+       _font-size: 0;\r
+}\r
+\r
+.cke_skin_office2003 .cke_menuarrow\r
+{\r
+       /* arrowright.gif*/\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 0 -1071px;\r
+       background-repeat: no-repeat;\r
+       height: 5px;\r
+       width: 3px;\r
+       float: right;\r
+       margin-right: 2px;\r
+       margin-top: 3px;\r
+}\r
+\r
+.cke_rtl .cke_skin_office2003 .cke_menuarrow\r
+{\r
+       float: left;\r
+       margin-right: 0;\r
+       margin-left: 2px;\r
+       /* arrowleft.gif*/\r
+       background-position: 0 -1050px;\r
+}\r
+\r
+/* #3766 In the context menu, long labels with second level menu get wrapped */\r
+.cke_browser_ie.cke_ltr .cke_skin_office2003 .cke_menuarrow\r
+{\r
+       position: absolute;\r
+       right: 2px;\r
+}\r
+\r
+.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuarrow\r
+{\r
+       position: absolute;\r
+       left: 2px;\r
+}\r
+/* END #3766 */\r
diff --git a/_source/skins/office2003/panel.css b/_source/skins/office2003/panel.css
new file mode 100644 (file)
index 0000000..9853e49
--- /dev/null
@@ -0,0 +1,198 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_office2003 .cke_panel\r
+{\r
+    border: 1px solid #8f8f73;\r
+       background-color: #fff;\r
+\r
+       width: 120px;\r
+       height: 100px;\r
+\r
+       overflow:hidden;\r
+\r
+       -moz-border-radius: 3px;\r
+       -webkit-border-radius: 3px;\r
+       border-radius: 3px;\r
+}\r
+\r
+/* Ideally we would use "inherit here"... but you know... IE :( */\r
+.cke_skin_office2003 .cke_panel iframe\r
+{\r
+       width: 100%;\r
+       height: 100%;\r
+}\r
+\r
+/*\r
+ * All the following styles are to be used inside the iframe that holds panel\r
+ * contents. We don't use the cke_skin_default there to avoid the reset to be\r
+ * active.\r
+ * This is not an issue as we'll never have two skins running inside the same\r
+ * panel iframe.\r
+ */\r
+\r
+html.cke_skin_office2003_container\r
+{\r
+       overflow: auto;\r
+       overflow-x: hidden;\r
+}\r
+\r
+body.cke_panel_frame\r
+{\r
+       overflow: auto;\r
+       overflow-x: hidden;\r
+}\r
+\r
+ul.cke_panel_list\r
+{\r
+       list-style-type: none;\r
+       margin: 3px;\r
+       padding: 0px;\r
+    white-space: nowrap;\r
+}\r
+\r
+li.cke_panel_listItem\r
+{\r
+       margin: 0px;\r
+}\r
+\r
+.cke_panel_listItem a\r
+{\r
+       padding: 2px;\r
+       display: block;\r
+       border: 1px solid #fff;\r
+       color: inherit;\r
+       text-decoration: none;\r
+       overflow: hidden;\r
+    text-overflow: ellipsis;\r
+}\r
+\r
+/* IE6 */\r
+* html .cke_panel_listItem a\r
+{\r
+       width : 100%;\r
+\r
+       /* IE is not able to inherit the color, so we must force it to black */\r
+       color: #000;\r
+}\r
+\r
+/* IE7 */\r
+*:first-child+html .cke_panel_listItem a\r
+{\r
+       /* IE is not able to inherit the color, so we must force it to black */\r
+       color: #000;\r
+}\r
+\r
+.cke_panel_listItem.cke_selected a\r
+{\r
+       border: 1px solid #ccc;\r
+       background-color: #e9f5ff;\r
+}\r
+\r
+.cke_panel_listItem a:hover,\r
+.cke_panel_listItem a:focus,\r
+.cke_panel_listItem a:active\r
+{\r
+       border-color: #316ac5;\r
+       background-color: #dff1ff;\r
+}\r
+\r
+.cke_panel_grouptitle\r
+{\r
+    font-size: 11px;\r
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;\r
+       font-weight: bold;\r
+    white-space: nowrap;\r
+       background-color: #dcdcdc;\r
+       color: #000;\r
+       margin:0px;\r
+       padding:3px;\r
+}\r
+\r
+.cke_panel_listItem p,\r
+.cke_panel_listItem h1,\r
+.cke_panel_listItem h2,\r
+.cke_panel_listItem h3,\r
+.cke_panel_listItem h4,\r
+.cke_panel_listItem h5,\r
+.cke_panel_listItem h6,\r
+.cke_panel_listItem pre\r
+{\r
+       margin-top: 3px;\r
+       margin-bottom: 3px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button_textcolor_panel,\r
+.cke_skin_office2003 .cke_button_bgcolor_panel\r
+{\r
+       width: 150px;\r
+       height: 135px;\r
+}\r
+\r
+.cke_colorblock\r
+{\r
+       padding: 3px;\r
+    font-size: 11px;\r
+    font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;\r
+}\r
+\r
+.cke_colorblock,\r
+.cke_colorblock a\r
+{\r
+       text-decoration: none;\r
+       color: #000;\r
+}\r
+\r
+span.cke_colorbox\r
+{\r
+       width: 10px;\r
+       height: 10px;\r
+    border: #808080 1px solid;\r
+       float: left;\r
+}\r
+\r
+.cke_rtl span.cke_colorbox\r
+{\r
+       float: right;\r
+}\r
+\r
+a.cke_colorbox\r
+{\r
+    border: #fff 1px solid;\r
+    padding: 2px;\r
+    float: left;\r
+}\r
+\r
+.cke_rtl a.cke_colorbox\r
+{\r
+    float: right;\r
+}\r
+\r
+a:hover.cke_colorbox,\r
+a:focus.cke_colorbox,\r
+a:active.cke_colorbox\r
+{\r
+    border: #316ac5 1px solid;\r
+    background-color: #dff1ff;\r
+}\r
+\r
+a.cke_colorauto,\r
+a.cke_colormore\r
+{\r
+    border: #fff 1px solid;\r
+    padding: 2px;\r
+    display: block;\r
+}\r
+\r
+a:hover.cke_colorauto,\r
+a:hover.cke_colormore,\r
+a:focus.cke_colorauto,\r
+a:focus.cke_colormore,\r
+a:active.cke_colorauto,\r
+a:active.cke_colormore\r
+{\r
+    border: #316ac5 1px solid;\r
+    background-color: #dff1ff;\r
+}\r
diff --git a/_source/skins/office2003/presets.css b/_source/skins/office2003/presets.css
new file mode 100644 (file)
index 0000000..a960df6
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/* "Source" button label */\r
+.cke_skin_office2003 .cke_button_source .cke_label\r
+{\r
+       display: inline;\r
+}\r
+\r
+/* "Styles" panel size */\r
+.cke_skin_office2003 .cke_styles_panel\r
+{\r
+       width: 150px;\r
+       height: 170px;\r
+}\r
+\r
+/* "Format" panel size */\r
+.cke_skin_office2003 .cke_format_panel\r
+{\r
+       width: 150px;\r
+       height: 170px;\r
+}\r
+\r
+/* "Font" panel size */\r
+.cke_skin_office2003 .cke_font_panel\r
+{\r
+       width: 150px;\r
+       height: 170px;\r
+}\r
+\r
+/* "Font Size" panel size */\r
+.cke_skin_office2003 .cke_fontSize_panel\r
+{\r
+       height: 170px;\r
+}\r
+\r
+/* "Font Size" combo width */\r
+.cke_skin_office2003 .cke_fontSize .cke_text\r
+{\r
+       width: 20px;\r
+}\r
+\r
+/* "Font Size" combo width (IE Quirks) */\r
+.cke_skin_office2003 .cke_browser_iequirks .cke_fontSize .cke_text\r
+{\r
+       width: 32px;\r
+}\r
diff --git a/_source/skins/office2003/reset.css b/_source/skins/office2003/reset.css
new file mode 100644 (file)
index 0000000..2f19e64
--- /dev/null
@@ -0,0 +1,78 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * Reset and Default Values\r
+ */\r
+.cke_skin_office2003 *,\r
+.cke_skin_office2003 a:hover,\r
+.cke_skin_office2003 a:link,\r
+.cke_skin_office2003 a:visited,\r
+.cke_skin_office2003 a:active\r
+{\r
+       margin: 0;\r
+       padding: 0;\r
+       border: 0;\r
+       background: transparent;\r
+       text-decoration: none;\r
+       font: normal normal normal 100% Sans-Serif;\r
+       width: auto;\r
+       height: auto;\r
+       border-collapse: collapse;\r
+       text-align: left;\r
+       vertical-align: baseline;\r
+       white-space: nowrap;\r
+       cursor: auto;\r
+       color: #000;\r
+\r
+    font-size: 11px;\r
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl *,\r
+.cke_skin_office2003 .cke_rtl a:hover,\r
+.cke_skin_office2003 .cke_rtl a:link,\r
+.cke_skin_office2003 .cke_rtl a:visited,\r
+.cke_skin_office2003 .cke_rtl a:active,\r
+.cke_rtl .cke_skin_office2003 *,\r
+.cke_rtl .cke_skin_office2003 a:hover,\r
+.cke_rtl .cke_skin_office2003 a:link,\r
+.cke_rtl .cke_skin_office2003 a:visited,\r
+.cke_rtl .cke_skin_office2003 a:active\r
+{\r
+       text-align: right;\r
+}\r
+\r
+.cke_skin_office2003 iframe\r
+{\r
+       vertical-align: inherit;        /** For IE */\r
+}\r
+\r
+.cke_skin_office2003 textarea\r
+{\r
+       white-space: pre;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_gecko textarea\r
+{\r
+       cursor: text;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_gecko textarea[disabled]\r
+{\r
+       cursor: default;\r
+}\r
+\r
+.cke_skin_office2003 input[type="text"],\r
+.cke_skin_office2003 input[type="password"]\r
+{\r
+       cursor: text;\r
+}\r
+\r
+.cke_skin_office2003 input[type="text"][disabled],\r
+.cke_skin_office2003 input[type="password"][disabled]\r
+{\r
+       cursor: default;\r
+}\r
diff --git a/_source/skins/office2003/richcombo.css b/_source/skins/office2003/richcombo.css
new file mode 100644 (file)
index 0000000..a6e71bd
--- /dev/null
@@ -0,0 +1,279 @@
+/* Special Combo */\r
+\r
+.cke_skin_office2003 .cke_rcombo\r
+{\r
+       display: inline-block;\r
+       margin-left: 2px;\r
+       margin-right: 2px;\r
+       margin-top: 2px;\r
+       vertical-align: top;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_rcombo\r
+{\r
+       #float: none;\r
+       #display: inline;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_rcombo\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_rcombo\r
+{\r
+       #float: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombopanel\r
+{\r
+       border: 1px solid #316ac5;\r
+       -moz-border-radius-topleft: 0;\r
+       -webkit-border-top-left-radius: 0;\r
+       border-top-left-radius: 0;\r
+       /*margin-left: 1px;*/\r
+       /*_margin-left: 0;*/\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo a\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_rcombo a\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_rcombo a\r
+{\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1.0; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_label\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+\r
+       line-height: 24px;\r
+       height: 24px;\r
+\r
+       vertical-align: top;\r
+       padding-left: 4px;\r
+       padding-right: 5px;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+\r
+       _background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       _background-position: 0 -962px;\r
+       _background-repeat: repeat-x;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_label\r
+{\r
+       float: right;\r
+       padding-right: 4px;\r
+       padding-left: 5px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_rcombo .cke_label\r
+{\r
+       filter: alpha(opacity=100);\r
+       opacity: 1.0;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_inline_label\r
+{\r
+       color: #fff;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_text\r
+{\r
+       border: 1px solid #8f8f73;\r
+       background-color: #fff;\r
+       height: 14px;\r
+       width:60px;\r
+       padding-top: 4px;\r
+       padding-bottom: 4px;\r
+       padding-left: 5px;\r
+       padding-right: 5px;\r
+       text-overflow: ellipsis;\r
+       overflow: hidden;\r
+       display: inline-block;\r
+       vertical-align: top;\r
+}\r
+\r
+.cke_skin_office2003 .cke_ltr .cke_rcombo .cke_text\r
+{\r
+       -moz-border-radius-topleft: 3px;\r
+       -webkit-border-top-left-radius: 3px;\r
+       border-top-left-radius: 3px;\r
+       -moz-border-radius-bottomleft: 3px;\r
+       -webkit-border-bottom-left-radius: 3px;\r
+       border-bottom-left-radius: 3px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_text\r
+{\r
+       -moz-border-radius-topright: 3px;\r
+       -webkit-border-top-right-radius: 3px;\r
+       border-top-right-radius: 3px;\r
+       -moz-border-radius-bottomright: 3px;\r
+       -webkit-border-bottom-right-radius: 3px;\r
+       border-bottom-right-radius: 3px;\r
+}\r
+\r
+/* Fix for IE height */\r
+.cke_skin_office2003 .cke_browser_iequirks .cke_rcombo .cke_text\r
+{\r
+       height: 22px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_openbutton\r
+{\r
+       display: inline-block;\r
+\r
+       background-position: 5px -1002px;\r
+       background-image: url(images/sprites.png);\r
+       background-image: url(images/sprites_ie6.png);\r
+       background-repeat: no-repeat;\r
+\r
+       border-top: 1px solid #8f8f73;\r
+       border-bottom: 1px solid #8f8f73;\r
+       width: 14px;\r
+       height: 22px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_ltr .cke_rcombo .cke_openbutton\r
+{\r
+    border-right: 1px solid #8f8f73;\r
+       -moz-border-radius-topright: 3px;\r
+       -webkit-border-top-right-radius: 3px;\r
+       border-top-right-radius: 3px;\r
+       -moz-border-radius-bottomright: 3px;\r
+       -webkit-border-bottom-right-radius: 3px;\r
+       border-bottom-right-radius: 3px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_openbutton\r
+{\r
+    border-left: 1px solid #8f8f73;\r
+       -moz-border-radius-topleft: 3px;\r
+       -webkit-border-top-left-radius: 3px;\r
+       border-top-left-radius: 3px;\r
+       -moz-border-radius-bottomleft: 3px;\r
+       -webkit-border-bottom-left-radius: 3px;\r
+       border-bottom-left-radius: 3px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_off a:hover,\r
+.cke_skin_office2003 .cke_rcombo .cke_off a:focus,\r
+.cke_skin_office2003 .cke_rcombo .cke_off a:active,\r
+.cke_skin_office2003 .cke_rcombo .cke_on a\r
+{\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_off a:hover .cke_text,\r
+.cke_skin_office2003 .cke_rcombo .cke_off a:focus .cke_text,\r
+.cke_skin_office2003 .cke_rcombo .cke_off a:active .cke_text,\r
+.cke_skin_office2003 .cke_rcombo .cke_on .cke_text\r
+{\r
+       border-color: #316ac5;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_off a:hover .cke_openbutton,\r
+.cke_skin_office2003 .cke_rcombo .cke_off a:focus .cke_openbutton,\r
+.cke_skin_office2003 .cke_rcombo .cke_off a:active .cke_openbutton,\r
+.cke_skin_office2003 .cke_rcombo .cke_on .cke_openbutton\r
+{\r
+       border-color: #316ac5;\r
+       background-color: #dff1ff;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_on .cke_text\r
+{\r
+       -moz-border-radius-bottomleft: 0px;\r
+       -webkit-border-bottom-left-radius: 0px;\r
+       border-bottom-left-radius: 0px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_on .cke_openbutton\r
+{\r
+       -moz-border-radius-bottomright: 0px;\r
+       -webkit-border-bottom-right-radius: 0px;\r
+       border-bottom-right-radius: 0px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_label\r
+{\r
+       filter: alpha(opacity=30); /* IE */\r
+       opacity: 0.3; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_label\r
+{\r
+       filter: alpha(opacity=70);\r
+       opacity: 0.7;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_text,\r
+.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_openbutton\r
+{\r
+       filter: alpha(opacity=50); /* IE */\r
+       opacity: 0.5; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_text,\r
+.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton\r
+{\r
+       filter: alpha(opacity=80);\r
+       opacity: 0.8;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_text\r
+{\r
+       color: #fff;\r
+}\r
+\r
+/* Firefox 2 & WebKit Section */\r
+\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_label,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_text,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_openbutton,\r
+.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_label,\r
+.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_text,\r
+.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_openbutton\r
+{\r
+       display: block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_label,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_text,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_openbutton,\r
+.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,\r
+.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,\r
+.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton\r
+{\r
+       float: right;\r
+}\r
+\r
+/*** IE ***/\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo,\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo a,\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo .cke_label\r
+{\r
+       float: none;\r
+}\r
diff --git a/_source/skins/office2003/skin.js b/_source/skins/office2003/skin.js
new file mode 100644 (file)
index 0000000..e869dc8
--- /dev/null
@@ -0,0 +1,77 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.skins.add( 'office2003', (function()\r
+{\r
+       var preload = [];\r
+\r
+       if ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 )\r
+       {\r
+               // For IE6, we need to preload some images, otherwhise they will be\r
+               // downloaded several times (CSS background bug).\r
+               preload.push( 'icons.png', 'images/sprites_ie6.png', 'images/dialog_sides.gif' );\r
+       }\r
+\r
+       return {\r
+               preload         : preload,\r
+               editor          : { css : [ 'editor.css' ] },\r
+               dialog          : { css : [ 'dialog.css' ] },\r
+               templates       : { css : [ 'templates.css' ] },\r
+               margins         : [ 0, 14, 18, 14 ]\r
+       };\r
+})() );\r
+\r
+if ( CKEDITOR.dialog )\r
+{\r
+       CKEDITOR.dialog.on( 'resize', function( evt )\r
+               {\r
+                       var data = evt.data,\r
+                               width = data.width,\r
+                               height = data.height,\r
+                               dialog = data.dialog,\r
+                               standardsMode = !CKEDITOR.env.quirk;\r
+\r
+                       if ( data.skin != 'office2003' )\r
+                               return;\r
+\r
+                       dialog.parts.contents.setStyles(\r
+                               {\r
+                                       width : width + 'px',\r
+                                       height : height + 'px'\r
+                               });\r
+\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // Fix the size of the elements which have flexible lengths.\r
+                       var fixSize = function()\r
+                               {\r
+                                       var content = dialog.parts.contents,\r
+                                               body = content.getParent(),\r
+                                               innerDialog = body.getParent();\r
+\r
+                                       // tc\r
+                                       var el = innerDialog.getChild( 2 );\r
+                                       el.setStyle( 'width', ( body.$.offsetWidth ) + 'px' );\r
+\r
+                                       // bc\r
+                                       el = innerDialog.getChild( 7 );\r
+                                       el.setStyle( 'width', ( body.$.offsetWidth - 28 ) + 'px' );\r
+\r
+                                       // ml\r
+                                       el = innerDialog.getChild( 4 );\r
+                                       el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );\r
+\r
+                                       // mr\r
+                                       el = innerDialog.getChild( 5 );\r
+                                       el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );\r
+                               };\r
+                       setTimeout( fixSize, 100 );\r
+\r
+                       // Ensure size is correct for RTL mode. (#4003)\r
+                       if ( evt.editor.lang.dir == 'rtl' )\r
+                               setTimeout( fixSize, 1000 );\r
+               });\r
+}\r
diff --git a/_source/skins/office2003/templates.css b/_source/skins/office2003/templates.css
new file mode 100644 (file)
index 0000000..7c26dbf
--- /dev/null
@@ -0,0 +1,71 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * Styles for the "templates" plugin.\r
+ */\r
+\r
+.cke_skin_office2003 .cke_tpl_list\r
+{\r
+       border: #dcdcdc 2px solid;\r
+       background-color: #ffffff;\r
+       overflow: auto;\r
+       width: 100%;\r
+       height: 220px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_tpl_item\r
+{\r
+       margin: 5px;\r
+       padding: 7px;\r
+       border: #eeeeee 1px solid;\r
+       *width: 88%;\r
+}\r
+\r
+.cke_skin_office2003 .cke_tpl_preview\r
+{\r
+       border-collapse: separate;\r
+       text-indent:0;\r
+       width: 100%;\r
+}\r
+.cke_skin_office2003 .cke_tpl_preview td\r
+{\r
+       padding: 2px;\r
+       vertical-align: middle;\r
+}\r
+.cke_skin_office2003 .cke_tpl_preview .cke_tpl_preview_img\r
+{\r
+       width: 100px;\r
+}\r
+.cke_skin_office2003 .cke_tpl_preview span\r
+{\r
+       white-space: normal;\r
+}\r
+\r
+.cke_skin_office2003 .cke_tpl_title\r
+{\r
+       font-weight: bold;\r
+}\r
+\r
+.cke_skin_office2003 .cke_tpl_hover\r
+{\r
+       border: #ff9933 1px solid !important;\r
+       background-color: #fffacd !important;\r
+       cursor: pointer;\r
+       cursor: hand;\r
+}\r
+/*\r
+ * Fix property 'cursor' doesn't inherit on table\r
+ */\r
+.cke_skin_office2003 .cke_tpl_hover *\r
+{\r
+       cursor: inherit;\r
+}\r
+\r
+.cke_skin_office2003 .cke_tpl_empty, .cke_tpl_loading\r
+{\r
+       text-align: center;\r
+       padding: 5px;\r
+}\r
diff --git a/_source/skins/office2003/toolbar.css b/_source/skins/office2003/toolbar.css
new file mode 100644 (file)
index 0000000..c92b0fa
--- /dev/null
@@ -0,0 +1,442 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+@media print\r
+{\r
+       .cke_skin_office2003 .cke_toolbox\r
+       {\r
+               display: none;\r
+       }\r
+}\r
+\r
+.cke_skin_office2003 a.cke_toolbox_collapser,\r
+.cke_skin_office2003 a:hover.cke_toolbox_collapser\r
+{\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 3px -1026px; /* +3px +4px */\r
+       background-repeat: no-repeat;\r
+       width: 11px;\r
+       height: 11px;\r
+       float: right;\r
+       border: outset 1px;\r
+       margin: 11px 2px 2px;\r
+       cursor: pointer;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl a.cke_toolbox_collapser,\r
+.cke_skin_office2003 .cke_rtl a:hover.cke_toolbox_collapser\r
+{\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 a.cke_toolbox_collapser_min,\r
+.cke_skin_office2003 a:hover.cke_toolbox_collapser_min\r
+{\r
+       /* arrowleft.gif*/\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 4px -1047px; /* +4px +3px */\r
+       background-repeat: no-repeat;\r
+       margin: 2px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl a.cke_toolbox_collapser_min,\r
+.cke_skin_office2003 .cke_rtl a:hover.cke_toolbox_collapser_min\r
+{\r
+       /* arrowright.gif*/\r
+       background-position: 4px -1068px; /* +2px +3px */\r
+}\r
+\r
+.cke_skin_office2003 .cke_toolbar\r
+{\r
+       background-color: #d6dff7;\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 0 -962px;\r
+       background-repeat: repeat-x;\r
+       display: inline-block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_toolbar\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_toolgroup\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+       height: 28px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_toolgroup\r
+{\r
+       #float: none;\r
+       #display: inline;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_toolgroup\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolgroup\r
+{\r
+       #float: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_separator\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+       border-left: solid 1px #B2CBFF;\r
+       margin: 6px 2px;\r
+       height: 16px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_separator\r
+{\r
+       #float: none;\r
+       #display: inline;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_separator\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_separator\r
+{\r
+       #float: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_break\r
+{\r
+       clear: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_break\r
+{\r
+       clear: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_toolbar_start\r
+{\r
+       display: inline-block;\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-repeat: no-repeat;\r
+       background-position: -27px -765px;\r
+       width: 10px;\r
+       height: 28px;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_toolbar_start\r
+{\r
+       #float: none;\r
+       #display: inline;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_toolbar_start\r
+{\r
+    background-position: -27px -816px;\r
+    float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_start\r
+{\r
+       #float: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_toolbar_end\r
+{\r
+       display: inline-block;\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-repeat: no-repeat;\r
+       background-position: -29px -861px;\r
+       width: 4px;\r
+       height: 28px;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_toolbar_end\r
+{\r
+       #float: none;\r
+       #display: inline;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_toolbar_end\r
+{\r
+    background-position: -29px -907px;\r
+    float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_end\r
+{\r
+       #float: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button a,\r
+.cke_skin_office2003 .cke_button a:hover,\r
+.cke_skin_office2003 .cke_button a:focus,\r
+.cke_skin_office2003 .cke_button a:active,\r
+.cke_skin_office2003 .cke_button a.cke_off\r
+{\r
+       border: solid 1px transparent;\r
+       border-radius: 3px;\r
+       outline: none;\r
+       padding-top: 2px;\r
+       padding-left: 4px;\r
+       padding-right: 4px;\r
+       padding-bottom: 2px;\r
+       margin-top: 2px;\r
+       height: 18px;\r
+       vertical-align: top;\r
+\r
+       _border: none;\r
+       _margin: 3px 1px 1px 1px;\r
+       cursor: default;\r
+       display: inline-block;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button a,\r
+.cke_skin_office2003 .cke_button a.cke_off\r
+{\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+       -moz-border-radius: 3px;\r
+       -webkit-border-radius: 3px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_button a,\r
+.cke_skin_office2003 .cke_hc .cke_button a.cke_off\r
+{\r
+       opacity: 1.0;\r
+       filter: alpha(opacity=100);\r
+}\r
+\r
+.cke_skin_office2003 .cke_button a.cke_on\r
+{\r
+       border: solid 1px #316ac5;\r
+       background-color: #c1d2ee;\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1; /* Safari, Opera and Mozilla */\r
+\r
+       _margin: 2px 0 0 0;\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_button a.cke_on\r
+{\r
+       padding: 0 2px !important;\r
+       border-width: 3px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button a.cke_disabled,\r
+.cke_skin_office2003 .cke_button a:hover.cke_disabled,\r
+.cke_skin_office2003 .cke_button a:focus.cke_disabled,\r
+.cke_skin_office2003 .cke_button a:active.cke_disabled\r
+{\r
+       border: solid 1px transparent;\r
+       filter: alpha(opacity=30); /* IE */\r
+       opacity : 0.3; /* Safari, Opera and Mozilla */\r
+       vertical-align: top;\r
+\r
+       _border: none;\r
+       _margin: 3px 1px 1px 1px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_button a.cke_disabled,\r
+.cke_skin_office2003 .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled\r
+{\r
+       filter: alpha(opacity=60);\r
+       opacity: 0.6;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button a:hover.cke_on,\r
+.cke_skin_office2003 .cke_button a:focus.cke_on,\r
+.cke_skin_office2003 .cke_button a:active.cke_on,      /* IE */\r
+.cke_skin_office2003 .cke_button a:hover.cke_off,\r
+.cke_skin_office2003 .cke_button a:focus.cke_off,\r
+.cke_skin_office2003 .cke_button a:active.cke_off      /* IE */\r
+{\r
+       border: solid 1px #316ac5;\r
+       background-color: #dff1ff;\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1; /* Safari, Opera and Mozilla */\r
+       vertical-align: top;\r
+\r
+       _margin: 2px 0 0 0;\r
+       padding: 2px 4px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_button a:hover.cke_on,\r
+.cke_skin_office2003 .cke_hc .cke_button a:focus.cke_on,\r
+.cke_skin_office2003 .cke_hc .cke_button a:active.cke_on,      /* IE */\r
+.cke_skin_office2003 .cke_hc .cke_button a:hover.cke_off,\r
+.cke_skin_office2003 .cke_hc .cke_button a:focus.cke_off,\r
+.cke_skin_office2003 .cke_hc .cke_button a:active.cke_off      /* IE */\r
+{\r
+       padding: 0 2px !important;\r
+       border-width: 3px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button .cke_icon\r
+{\r
+       background-image: url(icons.png);\r
+       background-position: 100px;\r
+       background-repeat:no-repeat;\r
+       margin-top:1px;\r
+       width: 16px;\r
+       height: 16px;\r
+       display: inline-block;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button .cke_label\r
+{\r
+       display: none;\r
+       padding-left: 3px;\r
+       vertical-align: 3px;\r
+       cursor: default;\r
+\r
+       _background-image: url(images/sprites_ie6.png);\r
+       _background-position: 0 -970px;\r
+       _background-repeat: repeat-x;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button a:hover .cke_label\r
+{\r
+       _background-color: #dff1ff;\r
+       _background-image: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button a.cke_on .cke_label\r
+{\r
+       _background-color: #c1d2ee;\r
+       _background-image: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_button .cke_label\r
+{\r
+       padding: 0;\r
+       display: inline-block;\r
+}\r
+\r
+.cke_skin_office2003 .cke_hc .cke_button .cke_icon\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_accessibility\r
+{\r
+       position: absolute;\r
+       display: block;\r
+       width: 0;\r
+       height: 0;\r
+       overflow: hidden;\r
+}\r
+\r
+.cke_skin_office2003 .cke_button .cke_buttonarrow\r
+{\r
+       display: inline-block;\r
+       height: 18px;\r
+       width: 8px;\r
+       background-position: 2px -1004px;\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-repeat: no-repeat;\r
+}\r
+\r
+.cke_skin_office2003 .cke_rtl .cke_button .cke_buttonarrow\r
+{\r
+       background-position: 0 -1004px;\r
+}\r
+\r
+/*** Firefox 2 ***/\r
+\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_button a,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_button a.cke_off,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_icon,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_buttonarrow,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_separator,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar_start,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar_end\r
+{\r
+       display: block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_hc .cke_button .cke_icon\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button a,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button a.cke_off,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_icon,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_buttonarrow,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_separator,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar_start,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar_end\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_label,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_break\r
+{\r
+       float: left;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl span.cke_inline_label\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_label,\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_break\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_separator\r
+{\r
+       margin-top: 4px;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_label\r
+{\r
+       padding-top: 3px;\r
+}\r
+\r
+/*** IE6 ***/\r
+\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolgroup,\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_separator,\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_start,\r
+.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_end\r
+{\r
+       float: none;\r
+}\r
+\r
+/*** IE8 ***/\r
+\r
+.cke_skin_office2003 .cke_browser_ie8 .cke_toolbar,\r
+.cke_skin_office2003 .cke_browser_ie8 .cke_toolgroup\r
+{\r
+       vertical-align: top;\r
+}\r
+\r
+.cke_skin_office2003 .cke_browser_iequirks.cke_browser_ie8 .cke_toolbar,\r
+.cke_skin_office2003 .cke_browser_iequirks.cke_browser_ie8 .cke_toolgroup\r
+{\r
+       /* revert previous */\r
+       vertical-align: baseline;\r
+}\r
diff --git a/_source/skins/v2/dialog.css b/_source/skins/v2/dialog.css
new file mode 100644 (file)
index 0000000..0585df9
--- /dev/null
@@ -0,0 +1,653 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/* Restore the dialog visibility */\r
+body .cke_dialog\r
+{\r
+       visibility: visible;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_body\r
+{\r
+       margin-left: 16px;\r
+       margin-right: 16px;\r
+       margin-top: 2px;\r
+       margin-bottom: 20px;\r
+       position: relative;\r
+       z-index: 1;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_tl,\r
+.cke_skin_v2 .cke_dialog_tr,\r
+.cke_skin_v2 .cke_dialog_tc,\r
+.cke_skin_v2 .cke_dialog_bl,\r
+.cke_skin_v2 .cke_dialog_br,\r
+.cke_skin_v2 .cke_dialog_bc\r
+{\r
+       background-image: url(images/sprites.png);\r
+       background-repeat: no-repeat;\r
+       position: absolute;\r
+\r
+       /* IE6 does not support full color transparent PNG. */\r
+       _background-image: url(images/sprites_ie6.png);\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_tl\r
+{\r
+       background-position: -16px -16px;\r
+       height: 16px;\r
+       width: 16px;\r
+       top: 0;\r
+       left: 0;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_dialog_tl\r
+{\r
+       background-position: -16px -397px;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_tr\r
+{\r
+       background-position: -16px -76px;\r
+       height: 16px;\r
+       width: 16px;\r
+       top: 0;\r
+       right: 0;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_dialog_tr\r
+{\r
+       background-position: -16px -457px;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_tc\r
+{\r
+       background-position: 0 -136px;\r
+       background-repeat: repeat-x;\r
+       height: 16px;\r
+       top: 0;\r
+       left: 16px;\r
+       right: 16px;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_bl\r
+{\r
+       background-position: -16px -196px;\r
+       height: 51px;\r
+       width: 30px;\r
+       bottom: 0;\r
+       left: 0;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_dialog_bl\r
+{\r
+       background-position: -16px -517px;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_br\r
+{\r
+       background-position: -16px -263px;\r
+       height: 51px;\r
+       width: 30px;\r
+       bottom: 0;\r
+       right: 0;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_dialog_br\r
+{\r
+       background-position: -16px -584px;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_bc\r
+{\r
+       background-position: 0 -330px;\r
+       background-repeat: repeat-x;\r
+       height: 51px;\r
+       bottom: 0;\r
+       left: 30px;\r
+       right: 30px;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_ml,\r
+.cke_skin_v2 .cke_dialog_mr\r
+{\r
+       background-image: url(images/dialog_sides.png);\r
+       background-repeat: repeat-y;\r
+       position: absolute;\r
+       width: 16px;\r
+       top: 16px;\r
+       bottom: 51px;\r
+\r
+       /* IE6 does not support full color transparent PNG. */\r
+       _background-image: url(images/dialog_sides.gif);\r
+\r
+       /* IE quirks gets confused when we have both top and bottom. */\r
+       _top: auto;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_dialog_ml,\r
+.cke_skin_v2 .cke_rtl .cke_dialog_mr\r
+{\r
+       background-image: url(images/dialog_sides_rtl.png);\r
+\r
+       /* IE6 does not support full color transparent PNG. */\r
+       _background-image: url(images/dialog_sides.gif);\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_ml\r
+{\r
+       background-position: 0 0;\r
+       left: 0;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_mr\r
+{\r
+       background-position: -16px 0;\r
+       right: 0;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_iequirks .cke_dialog_ml,\r
+.cke_skin_v2 .cke_browser_iequirks .cke_dialog_mr\r
+{\r
+       margin-top: 3px;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_title\r
+{\r
+       font-weight: bold;\r
+       font-size: 14pt;\r
+       color: #737357;\r
+       background-color: #e3e3c7;\r
+       padding: 3px 10px 26px 10px;\r
+       cursor: move;\r
+       position: relative;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_title\r
+{\r
+       position: static !important;\r
+       unicode-bidi: bidi-override;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_contents\r
+{\r
+       background-color: #f1f1e3;\r
+       border: #d5d59d 1px solid;\r
+       overflow: auto;\r
+       padding: 5px 10px;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_footer\r
+{\r
+       background-color: #e3e3c7;\r
+       text-align: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_dialog_footer\r
+{\r
+       text-align: left;\r
+}\r
+\r
+/* tabs */\r
+\r
+.cke_skin_v2 .cke_dialog_tabs\r
+{\r
+       height: 23px;\r
+       background-color: #e3e3c7;\r
+       display: inline-block;\r
+       margin-left:10px;\r
+       margin-right:10px;\r
+       margin-top:-23px;\r
+       position: absolute;\r
+       z-index: 2;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_dialog_tabs\r
+{\r
+       right: 10px;\r
+}\r
+\r
+.cke_skin_v2 a.cke_dialog_tab,\r
+.cke_skin_v2 a:link.cke_dialog_tab,\r
+.cke_skin_v2 a:active.cke_dialog_tab,\r
+.cke_skin_v2 a:hover.cke_dialog_tab,\r
+.cke_skin_v2 a:visited.cke_dialog_tab\r
+{\r
+       color: #737357;\r
+       border-left: 1px solid #d5d59d;\r
+       border-right: 1px solid #d5d59d;\r
+       border-top: 1px solid #d5d59d;\r
+       height: 14px;\r
+       padding: 4px 5px;\r
+       display: inline-block;\r
+       cursor: pointer;\r
+}\r
+\r
+/* Gecko 1.8 layout workaround. */\r
+.cke_skin_v2 .cke_browser_gecko18 a.cke_dialog_tab,\r
+.cke_skin_v2 .cke_browser_gecko18 a:link.cke_dialog_tab,\r
+.cke_skin_v2 .cke_browser_gecko18 a:active.cke_dialog_tab,\r
+.cke_skin_v2 .cke_browser_gecko18 a:hover.cke_dialog_tab,\r
+.cke_skin_v2 .cke_browser_gecko18 a:visited.cke_dialog_tab\r
+{\r
+       display: inline;\r
+       position: relative;\r
+       top: 6px;\r
+}\r
+\r
+.cke_skin_v2 a:hover.cke_dialog_tab\r
+{\r
+       background-color: #f1f1e3;\r
+}\r
+\r
+.cke_skin_v2 a.cke_dialog_tab_selected,\r
+.cke_skin_v2 a:link.cke_dialog_tab_selected,\r
+.cke_skin_v2 a:active.cke_dialog_tab_selected,\r
+.cke_skin_v2 a:hover.cke_dialog_tab_selected,\r
+.cke_skin_v2 a:visited.cke_dialog_tab_selected\r
+{\r
+       border-bottom: 1px solid #f1f1e3;\r
+       background-color: #f1f1e3;\r
+       font-weight: bold;\r
+       cursor: default;\r
+}\r
+\r
+/* single_page */\r
+\r
+.cke_skin_v2 .cke_single_page .cke_dialog_tabs\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_v2 .cke_single_page .cke_dialog_title\r
+{\r
+       padding-bottom: 3px;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_ui_vbox table,\r
+.cke_skin_v2 .cke_dialog_ui_hbox table\r
+{\r
+       margin: auto;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_ui_vbox_child\r
+{\r
+       padding: 5px 0px;\r
+}\r
+\r
+.cke_skin_v2 input.cke_dialog_ui_input_text,\r
+.cke_skin_v2 input.cke_dialog_ui_input_password\r
+{\r
+       background-color: white;\r
+       border: none;\r
+       padding: 0px;\r
+       width: 100%;\r
+       height: 14px;\r
+}\r
+\r
+.cke_skin_v2 div.cke_dialog_ui_input_text,\r
+.cke_skin_v2 div.cke_dialog_ui_input_password\r
+{\r
+       background-color: white;\r
+       border: 1px solid #a0a0a0;\r
+       padding: 1px 0px;\r
+}\r
+\r
+.cke_skin_v2 textarea.cke_dialog_ui_input_textarea\r
+{\r
+       background-color: white;\r
+       border: none;\r
+       padding: 0px;\r
+       width: 100%;\r
+       /*\r
+        * IE6 BUG: Scrollbars in textareas can overflow even if the outer DIV is set to overflow:hidden.\r
+        * So leave 1% width for the scrollbar. In most situations the 1% isn't noticeable by users.\r
+        */\r
+       _width: 99%;\r
+       overflow: auto;\r
+       resize: none;\r
+}\r
+\r
+.cke_skin_v2 div.cke_dialog_ui_input_textarea\r
+{\r
+       background-color: white;\r
+       border: 1px solid #a0a0a0;\r
+       padding: 1px 0px;\r
+}\r
+\r
+.cke_skin_v2 div.cke_disabled .cke_dialog_ui_labeled_content *\r
+{\r
+       background-color : #a0a0a0;\r
+       cursor : default;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_ui_hbox\r
+{\r
+       width: 100%;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_ui_hbox_first,\r
+.cke_skin_v2 .cke_dialog_ui_hbox_child,\r
+.cke_skin_v2 .cke_dialog_ui_hbox_last\r
+{\r
+       vertical-align: top;\r
+}\r
+\r
+.cke_skin_v2 .cke_ltr .cke_dialog_ui_hbox_first,\r
+.cke_skin_v2 .cke_ltr .cke_dialog_ui_hbox_child\r
+{\r
+       padding-right: 10px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_dialog_ui_hbox_first,\r
+.cke_skin_v2 .cke_rtl .cke_dialog_ui_hbox_child\r
+{\r
+       padding-left: 10px;\r
+}\r
+\r
+/* button */\r
+\r
+.cke_skin_v2 a.cke_dialog_ui_button\r
+{\r
+       border-collapse: separate;\r
+       cursor: default;\r
+}\r
+\r
+.cke_skin_v2 span.cke_dialog_ui_button\r
+{\r
+       border: #737357 1px solid;\r
+       padding: 2px 10px;\r
+       text-align: center;\r
+       color: #3b3b1f;\r
+       background-color: #c7c78f;\r
+       display: inline-block;\r
+       cursor: default;\r
+}\r
+\r
+/* Gecko 1.8 does not support display: inline-block */\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button\r
+{\r
+       display: block;\r
+}\r
+\r
+.cke_skin_v2 a.cke_dialog_ui_button span.cke_disabled\r
+{\r
+       border: #898980 1px solid;\r
+       color: #5e5e55;\r
+       background-color: #c5c5b3;\r
+}\r
+\r
+.cke_skin_v2 a:focus span.cke_dialog_ui_button,\r
+.cke_skin_v2 a:active span.cke_dialog_ui_button\r
+{\r
+       background-color: #e3e3c7;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_footer_buttons\r
+{\r
+       display: inline-table;\r
+       margin-right: 12px;\r
+       margin-left: 12px;\r
+       width: auto;\r
+       position: relative;\r
+}\r
+\r
+/* Gecko 1.8 does not support for display: inline-table */\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_dialog_footer_buttons\r
+{\r
+       display: inline;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_footer_buttons span.cke_dialog_ui_button\r
+{\r
+       width: 60px;\r
+       margin: 7px 0;\r
+}\r
+\r
+.cke_skin_v2 strong\r
+{\r
+       font-weight: bold;\r
+}\r
+\r
+/* close_button */\r
+\r
+.cke_skin_v2 .cke_dialog_close_button\r
+{\r
+       background-image: url(images/sprites.png);\r
+       background-repeat: no-repeat;\r
+       background-position: -16px -651px;\r
+       position: absolute;\r
+       cursor: pointer;\r
+       text-align: center;\r
+       height: 20px;\r
+       width: 20px;\r
+       top: 5px;\r
+\r
+       /* IE6 does not support full color transparent PNG. */\r
+       _background-image: url(images/sprites_ie6.png);\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_close_button span\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_close_button:hover\r
+{\r
+       background-position: -16px -687px;\r
+}\r
+\r
+.cke_skin_v2 .cke_ltr .cke_dialog_close_button\r
+{\r
+       right: 10px;\r
+       _right: 22px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_dialog_close_button\r
+{\r
+       left: 10px;\r
+       _left: 16px;\r
+       _top: 7px;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie6.cke_rtl .cke_dialog_close_button\r
+{\r
+       position: relative;\r
+       float: left;\r
+       margin-top: -55px;\r
+       margin-left: -7px;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_iequirks.cke_rtl.cke_single_page .cke_dialog_close_button\r
+{\r
+       margin-top: -32px;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_iequirks.cke_ltr .cke_dialog_close_button\r
+{\r
+       margin-top: 0;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog_ui_input_select\r
+{\r
+       border: 1px solid #a0a0a0;\r
+       background-color: white;\r
+}\r
+\r
+.cke_skin_v2 iframe.cke_dialog_ui_input_file\r
+{\r
+       width: 100%;\r
+       height: 25px;\r
+}\r
+\r
+/*\r
+ * Some utility CSS classes for dialog authors.\r
+ */\r
+.cke_skin_v2 .cke_dialog .cke_dark_background\r
+{\r
+       background-color: #eaead1;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog .cke_hand\r
+{\r
+       cursor: pointer;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog .cke_centered\r
+{\r
+       text-align: center;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog a.cke_btn_reset\r
+{\r
+       float: right;\r
+       background-position: 0 -32px;\r
+       background-image: url(images/mini.gif);\r
+       width: 16px;\r
+       height: 16px;\r
+       background-repeat: no-repeat;\r
+       border: 1px none;\r
+       font-size: 1px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_reset\r
+{\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog a.cke_btn_locked,\r
+.cke_skin_v2 .cke_dialog a.cke_btn_unlocked\r
+{\r
+       float: left;\r
+       background-position: 0 0;\r
+       background-image: url(images/mini.gif);\r
+       width: 16px;\r
+       height: 16px;\r
+       background-repeat: no-repeat;\r
+       border: none 1px;\r
+       font-size: 1px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_locked,\r
+.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_unlocked\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog a.cke_btn_unlocked\r
+{\r
+       background-position: 0 -16px;\r
+       background-image: url(images/mini.gif);\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog .cke_btn_over\r
+{\r
+       border: outset 1px;\r
+       cursor: pointer;\r
+       cursor: hand;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog  #ImagePreviewBox\r
+{\r
+       white-space : normal;\r
+       border : 2px ridge black;\r
+       overflow : scroll;\r
+       height : 160px;\r
+       width : 230px;\r
+       padding : 2px;\r
+       background-color : white;\r
+}\r
+.cke_skin_v2 .cke_dialog  #ImagePreviewLoader\r
+{\r
+       position: absolute;\r
+       white-space : normal;\r
+       overflow : hidden;\r
+       height : 160px;\r
+       width : 230px;\r
+       margin : 2px;\r
+       padding : 2px;\r
+       opacity : 0.9;\r
+       filter : alpha(opacity=90);\r
+\r
+       background-color : #e4e4e4;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog  #FlashPreviewBox\r
+{\r
+       white-space : normal;\r
+       border : 2px ridge black;\r
+       overflow : auto;\r
+       height : 160px;\r
+       width : 390px;\r
+       padding : 2px;\r
+       background-color : white;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog .cke_dark_background\r
+{\r
+       text-align : center;\r
+       background-color: #eaead1;\r
+       font-size : 14px;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog .cke_light_background\r
+{\r
+       text-align : center;\r
+       background-color: #ffffbe;\r
+}\r
+\r
+.cke_skin_v2 .cke_dialog .cke_hand\r
+{\r
+       cursor: pointer;\r
+       cursor: hand;\r
+}\r
+\r
+.cke_skin_v2 .cke_disabled\r
+{\r
+       color: #a0a0a0;\r
+}\r
+\r
+/* High Contrast Mode */\r
+.cke_skin_v2 .cke_hc .cke_dialog_title,\r
+.cke_skin_v2 .cke_hc .cke_dialog_tabs,\r
+.cke_skin_v2 .cke_hc .cke_dialog_contents,\r
+.cke_skin_v2 .cke_hc .cke_dialog_footer\r
+{\r
+       border-left: 1px solid;\r
+       border-right: 1px solid;\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_dialog_title\r
+{\r
+       border-top: 1px solid;\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_dialog_footer\r
+{\r
+       border-bottom: 1px solid;\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_dialog_close_button span\r
+{\r
+       display: inline;\r
+       cursor: pointer;\r
+       cursor: hand;\r
+       font-weight: bold;\r
+       position: relative;\r
+       top: 3px;\r
+}\r
+\r
+.cke_skin_v2 a.cke_smile img\r
+{\r
+       /* IE6 does not support transparent borders */\r
+       border: 2px solid #eaead1;\r
+}\r
+\r
+.cke_skin_v2 a.cke_smile:focus img,\r
+.cke_skin_v2 a.cke_smile:active img,\r
+.cke_skin_v2 a.cke_smile:hover img\r
+{\r
+       border-color: #C7C78F;\r
+}\r
diff --git a/_source/skins/v2/editor.css b/_source/skins/v2/editor.css
new file mode 100644 (file)
index 0000000..eba41e7
--- /dev/null
@@ -0,0 +1,21 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+@import url("reset.css");\r
+@import url("mainui.css");\r
+@import url("panel.css");\r
+@import url("toolbar.css");\r
+@import url("menu.css");\r
+@import url("richcombo.css");\r
+@import url("elementspath.css");\r
+@import url("icons.css");\r
+@import url("presets.css");\r
+\r
+/* Restore the container visibility */\r
+html .cke_skin_v2,\r
+html.cke_skin_v2_container\r
+{\r
+       visibility: visible;\r
+}\r
diff --git a/_source/skins/v2/elementspath.css b/_source/skins/v2/elementspath.css
new file mode 100644 (file)
index 0000000..4b2a7f4
--- /dev/null
@@ -0,0 +1,68 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+@media print\r
+{\r
+       .cke_path\r
+       {\r
+               display: none;\r
+       }\r
+}\r
+\r
+.cke_skin_v2 .cke_path\r
+{\r
+       padding: 3px 3px 0 3px;\r
+       display: inline-block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_path\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_path a,\r
+.cke_skin_v2 .cke_path .cke_empty\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+       border: solid 1px #efefde;\r
+       background-color: #efefde;\r
+       padding-top: 1px;\r
+       padding-bottom: 1px;\r
+       padding-left: 4px;\r
+       padding-right: 4px;\r
+       margin-bottom : 3px;\r
+}\r
+\r
+.cke_skin_v2 .cke_path .cke_empty\r
+{\r
+       visibility: hidden;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_path a,\r
+.cke_skin_v2 .cke_rtl .cke_path cke_empty\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_path a:hover,\r
+.cke_skin_v2 .cke_path a:focus,\r
+.cke_skin_v2 .cke_path a:active        /* IE */\r
+{\r
+       border: solid 1px #316ac5;\r
+       background-color: #dff1ff;\r
+       padding-top: 1px;\r
+       padding-bottom: 1px;\r
+       padding-left: 4px;\r
+       padding-right: 4px;\r
+       outline: none;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_path a,\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_path .cke_empty\r
+{\r
+       float: none;\r
+}\r
diff --git a/_source/skins/v2/icons.css b/_source/skins/v2/icons.css
new file mode 100644 (file)
index 0000000..10e2e38
--- /dev/null
@@ -0,0 +1,309 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_v2 .cke_button_source .cke_icon\r
+{\r
+       background-position: 0 0;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_newpage .cke_icon\r
+{\r
+       background-position: 0 -48px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_preview .cke_icon\r
+{\r
+       background-position: 0 -64px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_cut .cke_icon\r
+{\r
+       background-position: 0 -96px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_copy .cke_icon\r
+{\r
+       background-position: 0 -112px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_paste .cke_icon\r
+{\r
+       background-position: 0 -128px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_pastetext .cke_icon\r
+{\r
+       background-position: 0 -144px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_find .cke_icon\r
+{\r
+       background-position: 0 -240px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_replace .cke_icon\r
+{\r
+       background-position: 0 -256px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_selectAll .cke_icon\r
+{\r
+       background-position: 0 -272px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_removeFormat .cke_icon\r
+{\r
+       background-position: 0 -288px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_bold .cke_icon\r
+{\r
+       background-position: 0 -304px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_italic .cke_icon\r
+{\r
+       background-position: 0 -320px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_underline .cke_icon\r
+{\r
+       background-position: 0 -336px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_strike .cke_icon\r
+{\r
+       background-position: 0 -352px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_subscript .cke_icon\r
+{\r
+       background-position: 0 -368px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_superscript .cke_icon\r
+{\r
+       background-position: 0 -384px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_table .cke_icon\r
+{\r
+       background-position: 0 -608px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_horizontalrule .cke_icon\r
+{\r
+       background-position: 0 -624px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_smiley .cke_icon\r
+{\r
+       background-position: 0 -640px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_link .cke_icon\r
+{\r
+       background-position: 0 -528px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_unlink .cke_icon\r
+{\r
+       background-position: 0 -544px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_anchor .cke_icon\r
+{\r
+       background-position: 0 -560px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_image .cke_icon\r
+{\r
+       background-position: 0 -576px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_flash .cke_icon\r
+{\r
+       background-position: 0 -592px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_specialchar .cke_icon\r
+{\r
+       background-position: 0 -656px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_pagebreak .cke_icon\r
+{\r
+       background-position: 0 -672px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_print .cke_icon\r
+{\r
+       background-position: 0 -176px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_checkspell .cke_icon,\r
+.cke_skin_v2 .cke_button_scayt .cke_icon\r
+{\r
+       background-position: 0 -192px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_pagebreak .cke_icon\r
+{\r
+       background-position: 0 -672px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_textcolor .cke_icon\r
+{\r
+       background-position: 0 -704px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_bgcolor .cke_icon\r
+{\r
+       background-position: 0 -720px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_form .cke_icon\r
+{\r
+       background-position: 0 -752px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_checkbox .cke_icon\r
+{\r
+       background-position: 0 -768px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_radio .cke_icon\r
+{\r
+       background-position: 0 -784px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_textfield .cke_icon\r
+{\r
+       background-position: 0 -800px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_textarea .cke_icon\r
+{\r
+       background-position: 0 -816px;\r
+}\r
+.cke_skin_v2 .cke_button_showblocks .cke_icon\r
+{\r
+       background-position: 0 -1136px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_select .cke_icon\r
+{\r
+       background-position: 0 -832px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_button .cke_icon\r
+{\r
+       background-position: 0 -848px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_imagebutton .cke_icon\r
+{\r
+       background-position: 0 -864px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_hiddenfield .cke_icon\r
+{\r
+       background-position: 0 -880px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_undo .cke_icon\r
+{\r
+       background-position: 0 -208px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_button_undo .cke_icon\r
+{\r
+       background-position: 0 -224px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_redo .cke_icon\r
+{\r
+       background-position: 0 -224px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_button_redo .cke_icon\r
+{\r
+       background-position: 0 -208px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_templates .cke_icon\r
+{\r
+       background-position: 0 -80px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_numberedlist .cke_icon\r
+{\r
+       background-position: 0 -400px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_bulletedlist .cke_icon\r
+{\r
+       background-position: 0 -416px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_outdent .cke_icon\r
+{\r
+       background-position: 0 -432px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_indent .cke_icon\r
+{\r
+       background-position: 0 -448px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_justifyleft .cke_icon\r
+{\r
+       background-position: 0 -464px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_justifycenter .cke_icon\r
+{\r
+       background-position: 0 -480px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_justifyright .cke_icon\r
+{\r
+       background-position: 0 -496px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_justifyblock .cke_icon\r
+{\r
+       background-position: 0 -512px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_blockquote .cke_icon\r
+{\r
+       background-position: 0 -1152px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_flash .cke_icon\r
+{\r
+       background-position: 0 -592px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_pastefromword .cke_icon\r
+{\r
+       background-position: 0 -160px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_save .cke_icon\r
+{\r
+       background-position: 0 -32px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_about .cke_icon\r
+{\r
+       background-position: 0 -736px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_maximize .cke_icon\r
+{\r
+       background-position: 0 -1040px;\r
+}\r
diff --git a/_source/skins/v2/icons.png b/_source/skins/v2/icons.png
new file mode 100644 (file)
index 0000000..394ce89
Binary files /dev/null and b/_source/skins/v2/icons.png differ
diff --git a/_source/skins/v2/images/dialog_sides.gif b/_source/skins/v2/images/dialog_sides.gif
new file mode 100644 (file)
index 0000000..8f91b47
Binary files /dev/null and b/_source/skins/v2/images/dialog_sides.gif differ
diff --git a/_source/skins/v2/images/dialog_sides.png b/_source/skins/v2/images/dialog_sides.png
new file mode 100644 (file)
index 0000000..1042a61
Binary files /dev/null and b/_source/skins/v2/images/dialog_sides.png differ
diff --git a/_source/skins/v2/images/dialog_sides_rtl.png b/_source/skins/v2/images/dialog_sides_rtl.png
new file mode 100644 (file)
index 0000000..d7f7b49
Binary files /dev/null and b/_source/skins/v2/images/dialog_sides_rtl.png differ
diff --git a/_source/skins/v2/images/mini.gif b/_source/skins/v2/images/mini.gif
new file mode 100644 (file)
index 0000000..54d9107
Binary files /dev/null and b/_source/skins/v2/images/mini.gif differ
diff --git a/_source/skins/v2/images/noimage.png b/_source/skins/v2/images/noimage.png
new file mode 100644 (file)
index 0000000..1598113
Binary files /dev/null and b/_source/skins/v2/images/noimage.png differ
diff --git a/_source/skins/v2/images/sprites.png b/_source/skins/v2/images/sprites.png
new file mode 100644 (file)
index 0000000..982717b
Binary files /dev/null and b/_source/skins/v2/images/sprites.png differ
diff --git a/_source/skins/v2/images/sprites_ie6.png b/_source/skins/v2/images/sprites_ie6.png
new file mode 100644 (file)
index 0000000..4389b65
Binary files /dev/null and b/_source/skins/v2/images/sprites_ie6.png differ
diff --git a/_source/skins/v2/images/toolbar_start.gif b/_source/skins/v2/images/toolbar_start.gif
new file mode 100644 (file)
index 0000000..1774246
Binary files /dev/null and b/_source/skins/v2/images/toolbar_start.gif differ
diff --git a/_source/skins/v2/mainui.css b/_source/skins/v2/mainui.css
new file mode 100644 (file)
index 0000000..219d91f
--- /dev/null
@@ -0,0 +1,112 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_v2 .cke_editor\r
+{\r
+/*\r
+       border: solid 1px #dcdcdc;\r
+*/\r
+       display: inline-table;\r
+       width: 100%;\r
+}\r
+\r
+.cke_skin_v2\r
+{\r
+       display: block;\r
+}\r
+\r
+.cke_skin_v2 .cke_wrapper\r
+{\r
+       display: block;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_opera .cke_editor\r
+{\r
+       display: table;\r
+}\r
+\r
+.cke_skin_v2 .cke_top, .cke_skin_v2 .cke_bottom\r
+{\r
+       background-color: #efefde;\r
+}\r
+\r
+.cke_skin_v2 .cke_top\r
+{\r
+    border-top: solid 1px #fafaf5;\r
+    border-left: solid 1px #fafaf5;\r
+    border-right: solid 1px #696969;\r
+    border-bottom: solid 2px #696969;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_top\r
+{\r
+    border-left: solid 1px #696969;\r
+    border-right: solid 1px #fafaf5;\r
+}\r
+\r
+.cke_skin_v2 .cke_bottom\r
+{\r
+    border-left: solid 1px #696969;\r
+    border-right: solid 1px #696969;\r
+    border-bottom: solid 1px #696969;\r
+}\r
+\r
+.cke_skin_v2 .cke_contents\r
+{\r
+       border: solid 1px #696969;\r
+}\r
+\r
+.cke_skin_v2 .cke_focus\r
+{\r
+       outline: auto 5px -webkit-focus-ring-color;\r
+}\r
+\r
+.cke_skin_v2 textarea.cke_source\r
+{\r
+       font-family: 'Courier New' , Monospace;\r
+       font-size: small;\r
+       background-color: #fff;\r
+       white-space: pre;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_iequirks textarea.cke_source\r
+{\r
+       /* For IE6+Quirks only */\r
+       _white-space: normal;\r
+}\r
+\r
+.cke_skin_v2 .cke_resizer\r
+{\r
+       width: 12px;\r
+       height: 12px;\r
+       margin-top: 16px;\r
+       display: block;\r
+       float: right;\r
+       /* resizer.gif*/\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 0 -801px;\r
+       background-repeat: no-repeat;\r
+       cursor: se-resize;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_resizer\r
+{\r
+       cursor: sw-resize;\r
+       /* resizer_rtl.gif*/\r
+       background-position: 0 -828px;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_maximized .cke_resizer\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie6 .cke_contents textarea,\r
+.cke_skin_v2 .cke_browser_ie7 .cke_contents textarea\r
+{\r
+       position: absolute;\r
+}\r
diff --git a/_source/skins/v2/menu.css b/_source/skins/v2/menu.css
new file mode 100644 (file)
index 0000000..0162f80
--- /dev/null
@@ -0,0 +1,178 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_v2 .cke_contextmenu\r
+{\r
+       padding: 2px;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem a\r
+{\r
+       display:block;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem span\r
+{\r
+       cursor: default;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem a:hover,\r
+.cke_skin_v2 .cke_menuitem a:focus,\r
+.cke_skin_v2 .cke_menuitem a:active\r
+{\r
+       background-color: #8f8f73;\r
+       display:block;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem a.cke_disabled:hover,\r
+.cke_skin_v2 .cke_menuitem a.cke_disabled:focus,\r
+.cke_skin_v2 .cke_menuitem a.cke_disabled:active\r
+{\r
+       background-color: transparent !important;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem .cke_icon\r
+{\r
+       background-image: url(icons.png);\r
+       background-position: 100px;\r
+       background-repeat:no-repeat;\r
+       background-color: transparent;\r
+       width: 16px;\r
+       height: 16px;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon\r
+{\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem .cke_icon_wrapper\r
+{\r
+       background-color: #e3e3c7;\r
+       border: solid 4px #e3e3c7;\r
+       width: 16px;\r
+       height: 16px;\r
+       float: left;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon_wrapper\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem a:hover .cke_icon_wrapper,\r
+.cke_skin_v2 .cke_menuitem a:focus .cke_icon_wrapper,\r
+.cke_skin_v2 .cke_menuitem a:active .cke_icon_wrapper\r
+{\r
+       background-color: #9d9d9d;\r
+       border: solid 4px #9d9d9d;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,\r
+.cke_skin_v2 .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,\r
+.cke_skin_v2 .cke_menuitem a:active.cke_disabled .cke_icon_wrapper\r
+{\r
+       background-color: #e3e3c7;\r
+       border: solid 4px #e3e3c7;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem .cke_label\r
+{\r
+       display:block;\r
+       padding-right: 3px;\r
+       padding-top: 5px;\r
+       padding-left: 4px;\r
+       height:19px;\r
+       margin-left: 24px;\r
+       background-color: #fff;\r
+       _overflow: hidden;\r
+       _width: 80px;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_rtl .cke_skin_v2 .cke_menuitem .cke_label\r
+{\r
+       padding-right: 0;\r
+       margin-left: 0;\r
+       padding-left: 3px;\r
+       margin-right: 28px;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem a.cke_disabled .cke_label\r
+{\r
+       filter: alpha(opacity=30); /* IE */\r
+       opacity: 0.30; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem a:hover .cke_label,\r
+.cke_skin_v2 .cke_menuitem a:focus .cke_label,\r
+.cke_skin_v2 .cke_menuitem a:active .cke_label\r
+{\r
+       background-color: #8f8f73;\r
+       color: white;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuitem a.cke_disabled:hover .cke_label,\r
+.cke_skin_v2 .cke_menuitem a.cke_disabled:focus .cke_label,\r
+.cke_skin_v2 .cke_menuitem a.cke_disabled:active .cke_label\r
+{\r
+       background-color: transparent;\r
+       color: black;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuseparator\r
+{\r
+       background-color: #e3e3c7;\r
+       height: 2px;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+\r
+       _font-size: 0;\r
+}\r
+\r
+.cke_skin_v2 .cke_menuarrow\r
+{\r
+       /* arrowright.gif*/\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 0 -784px;\r
+       background-repeat: no-repeat;\r
+       height: 5px;\r
+       width: 3px;\r
+       float: right;\r
+       margin-right: 2px;\r
+       margin-top: 3px;\r
+}\r
+\r
+/* Never applied */\r
+.cke_rtl .cke_skin_v2 .cke_menuarrow\r
+{\r
+       float: left;\r
+       margin-right: 0;\r
+       margin-left: 2px;\r
+       /* arrowleft.gif*/\r
+       background-position: 0 -763px;\r
+}\r
+\r
+/* #3766 In the context menu, long labels with second level menu get wrapped */\r
+.cke_browser_ie.cke_ltr .cke_skin_v2 .cke_menuarrow\r
+{\r
+       position: absolute;\r
+       right: 2px;\r
+}\r
+\r
+.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuarrow\r
+{\r
+       position: absolute;\r
+       left: 2px;\r
+}\r
+/* END #3766 */\r
diff --git a/_source/skins/v2/panel.css b/_source/skins/v2/panel.css
new file mode 100644 (file)
index 0000000..f539ec9
--- /dev/null
@@ -0,0 +1,198 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_v2 .cke_panel\r
+{\r
+    border: 1px solid #8f8f73;\r
+       background-color: #fff;\r
+\r
+       width: 120px;\r
+       height: 100px;\r
+\r
+       overflow:hidden;\r
+\r
+       -moz-border-radius: 3px;\r
+       -webkit-border-radius: 3px;\r
+       border-radius: 3px;\r
+}\r
+\r
+/* Ideally we would use "inherit here"... but you know... IE :( */\r
+.cke_skin_v2 .cke_panel iframe\r
+{\r
+       width: 100%;\r
+       height: 100%;\r
+}\r
+\r
+/*\r
+ * All the following styles are to be used inside the iframe that holds panel\r
+ * contents. We don't use the cke_skin_default there to avoid the reset to be\r
+ * active.\r
+ * This is not an issue as we'll never have two skins running inside the same\r
+ * panel iframe.\r
+ */\r
+\r
+html.cke_skin_v2_container\r
+{\r
+       overflow: auto;\r
+       overflow-x: hidden;\r
+}\r
+\r
+body.cke_panel_frame\r
+{\r
+       overflow: auto;\r
+       overflow-x: hidden;\r
+}\r
+\r
+ul.cke_panel_list\r
+{\r
+       list-style-type: none;\r
+       margin: 3px;\r
+       padding: 0px;\r
+    white-space: nowrap;\r
+}\r
+\r
+li.cke_panel_listItem\r
+{\r
+       margin: 0px;\r
+}\r
+\r
+.cke_panel_listItem a\r
+{\r
+       padding: 2px;\r
+       display: block;\r
+       border: 1px solid #fff;\r
+       color: inherit;\r
+       text-decoration: none;\r
+       overflow: hidden;\r
+    text-overflow: ellipsis;\r
+}\r
+\r
+/* IE6 */\r
+* html .cke_panel_listItem a\r
+{\r
+       width : 100%;\r
+\r
+       /* IE is not able to inherit the color, so we must force it to black */\r
+       color: #000;\r
+}\r
+\r
+/* IE7 */\r
+*:first-child+html .cke_panel_listItem a\r
+{\r
+       /* IE is not able to inherit the color, so we must force it to black */\r
+       color: #000;\r
+}\r
+\r
+.cke_panel_listItem.cke_selected a\r
+{\r
+       border: 1px solid #ccc;\r
+       background-color: #e9f5ff;\r
+}\r
+\r
+.cke_panel_listItem a:hover,\r
+.cke_panel_listItem a:focus,\r
+.cke_panel_listItem a:active\r
+{\r
+       border-color: #316ac5;\r
+       background-color: #dff1ff;\r
+}\r
+\r
+.cke_panel_grouptitle\r
+{\r
+    font-size: 11px;\r
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;\r
+       font-weight: bold;\r
+    white-space: nowrap;\r
+       background-color: #dcdcdc;\r
+       color: #000;\r
+       margin:0px;\r
+       padding:3px;\r
+}\r
+\r
+.cke_panel_listItem p,\r
+.cke_panel_listItem h1,\r
+.cke_panel_listItem h2,\r
+.cke_panel_listItem h3,\r
+.cke_panel_listItem h4,\r
+.cke_panel_listItem h5,\r
+.cke_panel_listItem h6,\r
+.cke_panel_listItem pre\r
+{\r
+       margin-top: 3px;\r
+       margin-bottom: 3px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button_textcolor_panel,\r
+.cke_skin_v2 .cke_button_bgcolor_panel\r
+{\r
+       width: 150px;\r
+       height: 135px;\r
+}\r
+\r
+.cke_colorblock\r
+{\r
+       padding: 3px;\r
+    font-size: 11px;\r
+    font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;\r
+}\r
+\r
+.cke_colorblock,\r
+.cke_colorblock a\r
+{\r
+       text-decoration: none;\r
+       color: #000;\r
+}\r
+\r
+span.cke_colorbox\r
+{\r
+       width: 10px;\r
+       height: 10px;\r
+    border: #808080 1px solid;\r
+       float: left;\r
+}\r
+\r
+.cke_rtl span.cke_colorbox\r
+{\r
+       float: right;\r
+}\r
+\r
+a.cke_colorbox\r
+{\r
+    border: #fff 1px solid;\r
+    padding: 2px;\r
+    float: left;\r
+}\r
+\r
+.cke_rtl a.cke_colorbox\r
+{\r
+    float: right;\r
+}\r
+\r
+a:hover.cke_colorbox,\r
+a:focus.cke_colorbox,\r
+a:active.cke_colorbox\r
+{\r
+    border: #316ac5 1px solid;\r
+    background-color: #dff1ff;\r
+}\r
+\r
+a.cke_colorauto,\r
+a.cke_colormore\r
+{\r
+    border: #fff 1px solid;\r
+    padding: 2px;\r
+    display: block;\r
+}\r
+\r
+a:hover.cke_colorauto,\r
+a:hover.cke_colormore,\r
+a:focus.cke_colorauto,\r
+a:focus.cke_colormore,\r
+a:active.cke_colorauto,\r
+a:active.cke_colormore\r
+{\r
+    border: #316ac5 1px solid;\r
+    background-color: #dff1ff;\r
+}\r
diff --git a/_source/skins/v2/presets.css b/_source/skins/v2/presets.css
new file mode 100644 (file)
index 0000000..fe477f9
--- /dev/null
@@ -0,0 +1,50 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/* "Source" button label */\r
+.cke_skin_v2 .cke_button_source .cke_label\r
+{\r
+       display: inline;                /* FF2 */\r
+       display: inline-block;\r
+}\r
+\r
+/* "Styles" panel size */\r
+.cke_skin_v2 .cke_styles_panel\r
+{\r
+       width: 150px;\r
+       height: 170px;\r
+}\r
+\r
+/* "Format" panel size */\r
+.cke_skin_v2 .cke_format_panel\r
+{\r
+       width: 150px;\r
+       height: 170px;\r
+}\r
+\r
+/* "Font" panel size */\r
+.cke_skin_v2 .cke_font_panel\r
+{\r
+       width: 150px;\r
+       height: 170px;\r
+}\r
+\r
+/* "Font Size" panel size */\r
+.cke_skin_v2 .cke_fontSize_panel\r
+{\r
+       height: 170px;\r
+}\r
+\r
+/* "Font Size" combo width */\r
+.cke_skin_v2 .cke_fontSize .cke_text\r
+{\r
+       width: 20px;\r
+}\r
+\r
+/* "Font Size" combo width (IE Quirks) */\r
+.cke_skin_v2 .cke_browser_iequirks .cke_fontSize .cke_text\r
+{\r
+       width: 32px;\r
+}\r
diff --git a/_source/skins/v2/reset.css b/_source/skins/v2/reset.css
new file mode 100644 (file)
index 0000000..88f6082
--- /dev/null
@@ -0,0 +1,78 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * Reset and Default Values\r
+ */\r
+.cke_skin_v2 *,\r
+.cke_skin_v2 a:hover,\r
+.cke_skin_v2 a:link,\r
+.cke_skin_v2 a:visited,\r
+.cke_skin_v2 a:active\r
+{\r
+       margin: 0;\r
+       padding: 0;\r
+       border: 0;\r
+       background: transparent;\r
+       text-decoration: none;\r
+       font: normal normal normal 100% Sans-Serif;\r
+       width: auto;\r
+       height: auto;\r
+       border-collapse: collapse;\r
+       text-align: left;\r
+       vertical-align: baseline;\r
+       white-space: nowrap;\r
+       cursor: auto;\r
+       color: #000;\r
+\r
+    font-size: 11px;\r
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl *,\r
+.cke_skin_v2 .cke_rtl a:hover,\r
+.cke_skin_v2 .cke_rtl a:link,\r
+.cke_skin_v2 .cke_rtl a:visited,\r
+.cke_skin_v2 .cke_rtl a:active,\r
+.cke_rtl .cke_skin_v2 *,\r
+.cke_rtl .cke_skin_v2 a:hover,\r
+.cke_rtl .cke_skin_v2 a:link,\r
+.cke_rtl .cke_skin_v2 a:visited,\r
+.cke_rtl .cke_skin_v2 a:active\r
+{\r
+       text-align: right;\r
+}\r
+\r
+.cke_skin_v2 iframe\r
+{\r
+       vertical-align: inherit;        /** For IE */\r
+}\r
+\r
+.cke_skin_v2 textarea\r
+{\r
+       white-space: pre;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_gecko textarea\r
+{\r
+       cursor: text;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_gecko textarea[disabled]\r
+{\r
+       cursor: default;\r
+}\r
+\r
+.cke_skin_v2 input[type="text"],\r
+.cke_skin_v2 input[type="password"]\r
+{\r
+       cursor: text;\r
+}\r
+\r
+.cke_skin_v2 input[type="text"][disabled],\r
+.cke_skin_v2 input[type="password"][disabled]\r
+{\r
+       cursor: default;\r
+}\r
diff --git a/_source/skins/v2/richcombo.css b/_source/skins/v2/richcombo.css
new file mode 100644 (file)
index 0000000..111a92c
--- /dev/null
@@ -0,0 +1,275 @@
+/* Special Combo */\r
+\r
+.cke_skin_v2 .cke_rcombo\r
+{\r
+       display: inline-block;\r
+       margin-left: 2px;\r
+       margin-right: 2px;\r
+       margin-top: 2px;\r
+       vertical-align: top;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_rcombo\r
+{\r
+       #float: none;\r
+       #display: inline;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_rcombo\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_rcombo\r
+{\r
+       #float: none;\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombopanel\r
+{\r
+       border: 1px solid #316ac5;\r
+       -moz-border-radius-topleft: 0;\r
+       -webkit-border-top-left-radius: 0;\r
+       border-top-left-radius: 0;\r
+       /*margin-left: 1px;*/\r
+       /*_margin-left: 0;*/\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo a\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_rcombo a\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_rcombo a\r
+{\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1.0; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_label\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+\r
+       line-height: 24px;\r
+       height: 24px;\r
+\r
+       vertical-align: top;\r
+       padding-left: 4px;\r
+       padding-right: 5px;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+       background-color: #f1f1e3;      /* Because of IE6+ClearType */\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_rcombo .cke_label\r
+{\r
+       float: right;\r
+       padding-right: 4px;\r
+       padding-left: 5px;\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_rcombo .cke_label\r
+{\r
+       filter: alpha(opacity=100);\r
+       opacity: 1.0;\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_inline_label\r
+{\r
+       color: #fff;\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_text\r
+{\r
+       border: 1px solid #8f8f73;\r
+       background-color: #fff;\r
+       height: 14px;\r
+       width:60px;\r
+       padding-top: 4px;\r
+       padding-bottom: 4px;\r
+       padding-left: 5px;\r
+       padding-right: 5px;\r
+       text-overflow: ellipsis;\r
+       overflow: hidden;\r
+       display: inline-block;\r
+       vertical-align: top;\r
+}\r
+\r
+.cke_skin_v2 .cke_ltr .cke_rcombo .cke_text\r
+{\r
+       -moz-border-radius-topleft: 3px;\r
+       -webkit-border-top-left-radius: 3px;\r
+       border-top-left-radius: 3px;\r
+       -moz-border-radius-bottomleft: 3px;\r
+       -webkit-border-bottom-left-radius: 3px;\r
+       border-bottom-left-radius: 3px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_rcombo .cke_text\r
+{\r
+       -moz-border-radius-topright: 3px;\r
+       -webkit-border-top-right-radius: 3px;\r
+       border-top-right-radius: 3px;\r
+       -moz-border-radius-bottomright: 3px;\r
+       -webkit-border-bottom-right-radius: 3px;\r
+       border-bottom-right-radius: 3px;\r
+}\r
+\r
+/* Fix for IE height */\r
+.cke_skin_v2 .cke_browser_iequirks .cke_rcombo .cke_text\r
+{\r
+       height: 22px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_openbutton\r
+{\r
+       display: inline-block;\r
+\r
+       background-position: 5px -715px;\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-repeat: no-repeat;\r
+\r
+       border-top: 1px solid #8f8f73;\r
+       border-bottom: 1px solid #8f8f73;\r
+       width: 14px;\r
+       height: 22px;\r
+}\r
+\r
+.cke_skin_v2 .cke_ltr .cke_rcombo .cke_openbutton\r
+{\r
+    border-right: 1px solid #8f8f73;\r
+       -moz-border-radius-topright: 3px;\r
+       -webkit-border-top-right-radius: 3px;\r
+       border-top-right-radius: 3px;\r
+       -moz-border-radius-bottomright: 3px;\r
+       -webkit-border-bottom-right-radius: 3px;\r
+       border-bottom-right-radius: 3px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_rcombo .cke_openbutton\r
+{\r
+    border-left: 1px solid #8f8f73;\r
+       -moz-border-radius-topleft: 3px;\r
+       -webkit-border-top-left-radius: 3px;\r
+       border-top-left-radius: 3px;\r
+       -moz-border-radius-bottomleft: 3px;\r
+       -webkit-border-bottom-left-radius: 3px;\r
+       border-bottom-left-radius: 3px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_off a:hover,\r
+.cke_skin_v2 .cke_rcombo .cke_off a:focus,\r
+.cke_skin_v2 .cke_rcombo .cke_off a:active,\r
+.cke_skin_v2 .cke_rcombo .cke_on a\r
+{\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_off a:hover .cke_text,\r
+.cke_skin_v2 .cke_rcombo .cke_off a:focus .cke_text,\r
+.cke_skin_v2 .cke_rcombo .cke_off a:active .cke_text,\r
+.cke_skin_v2 .cke_rcombo .cke_on .cke_text\r
+{\r
+       border-color: #316ac5;\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_off a:hover .cke_openbutton,\r
+.cke_skin_v2 .cke_rcombo .cke_off a:focus .cke_openbutton,\r
+.cke_skin_v2 .cke_rcombo .cke_off a:active .cke_openbutton,\r
+.cke_skin_v2 .cke_rcombo .cke_on .cke_openbutton\r
+{\r
+       border-color: #316ac5;\r
+       background-color: #dff1ff;\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_on .cke_text\r
+{\r
+       -moz-border-radius-bottomleft: 0px;\r
+       -webkit-border-bottom-left-radius: 0px;\r
+       border-bottom-left-radius: 0px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_on .cke_openbutton\r
+{\r
+       -moz-border-radius-bottomright: 0px;\r
+       -webkit-border-bottom-right-radius: 0px;\r
+       border-bottom-right-radius: 0px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_disabled .cke_label\r
+{\r
+       filter: alpha(opacity=30); /* IE */\r
+       opacity: 0.3; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_label\r
+{\r
+       filter: alpha(opacity=70);\r
+       opacity: 0.7;\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_disabled .cke_text,\r
+.cke_skin_v2 .cke_rcombo .cke_disabled .cke_openbutton\r
+{\r
+       filter: alpha(opacity=50); /* IE */\r
+       opacity: 0.5; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_text,\r
+.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton\r
+{\r
+       filter: alpha(opacity=80);\r
+       opacity: 0.8;\r
+}\r
+\r
+.cke_skin_v2 .cke_rcombo .cke_disabled .cke_text\r
+{\r
+       color: #fff;\r
+}\r
+\r
+/* Firefox 2 & WebKit Section */\r
+\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_label,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_text,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_openbutton,\r
+.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_label,\r
+.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_text,\r
+.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_openbutton\r
+{\r
+       display: block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_label,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_text,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_openbutton,\r
+.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,\r
+.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,\r
+.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton\r
+{\r
+       float: right;\r
+}\r
+\r
+/*** IE ***/\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo,\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo a,\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo .cke_label\r
+{\r
+       float: none;\r
+}\r
diff --git a/_source/skins/v2/skin.js b/_source/skins/v2/skin.js
new file mode 100644 (file)
index 0000000..058a5c0
--- /dev/null
@@ -0,0 +1,73 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.skins.add( 'v2', (function()\r
+{\r
+       var preload = [];\r
+\r
+       if ( CKEDITOR.env.ie && CKEDITOR.env.version < 7 )\r
+       {\r
+               // For IE6, we need to preload some images, otherwhise they will be\r
+               // downloaded several times (CSS background bug).\r
+               preload.push( 'icons.png', 'images/sprites_ie6.png', 'images/dialog_sides.gif' );\r
+       }\r
+\r
+       return {\r
+               preload         : preload,\r
+               editor          : { css : [ 'editor.css' ] },\r
+               dialog          : { css : [ 'dialog.css' ] },\r
+               templates       : { css : [ 'templates.css' ] },\r
+               margins         : [ 0, 14, 18, 14 ]\r
+       };\r
+})() );\r
+\r
+if ( CKEDITOR.dialog )\r
+{\r
+       CKEDITOR.dialog.on( 'resize', function( evt )\r
+               {\r
+                       var data = evt.data,\r
+                               width = data.width,\r
+                               height = data.height,\r
+                               dialog = data.dialog,\r
+                               standardsMode = !CKEDITOR.env.quirk;\r
+\r
+                       if ( data.skin != 'v2' )\r
+                               return;\r
+\r
+                       dialog.parts.contents.setStyles(\r
+                               {\r
+                                       width : width + 'px',\r
+                                       height : height + 'px'\r
+                               });\r
+\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // Fix the size of the elements which have flexible lengths.\r
+                       setTimeout( function()\r
+                               {\r
+                                       var content = dialog.parts.contents,\r
+                                               body = content.getParent(),\r
+                                               innerDialog = body.getParent();\r
+\r
+                                       // tc\r
+                                       var el = innerDialog.getChild( 2 );\r
+                                       el.setStyle( 'width', ( body.$.offsetWidth ) + 'px' );\r
+\r
+                                       // bc\r
+                                       el = innerDialog.getChild( 7 );\r
+                                       el.setStyle( 'width', ( body.$.offsetWidth - 28 ) + 'px' );\r
+\r
+                                       // ml\r
+                                       el = innerDialog.getChild( 4 );\r
+                                       el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );\r
+\r
+                                       // mr\r
+                                       el = innerDialog.getChild( 5 );\r
+                                       el.setStyle( 'height', ( body.$.offsetHeight - 31 - 14 ) + 'px' );\r
+                               },\r
+                               100 );\r
+               });\r
+}\r
diff --git a/_source/skins/v2/templates.css b/_source/skins/v2/templates.css
new file mode 100644 (file)
index 0000000..77cce42
--- /dev/null
@@ -0,0 +1,71 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/**\r
+ * Styles for the "templates" plugin.\r
+ */\r
+\r
+.cke_skin_v2 .cke_tpl_list\r
+{\r
+       border: #dcdcdc 2px solid;\r
+       background-color: #ffffff;\r
+       overflow: auto;\r
+       width: 100%;\r
+       height: 220px;\r
+}\r
+\r
+.cke_skin_v2 .cke_tpl_item\r
+{\r
+       margin: 5px;\r
+       padding: 7px;\r
+       border: #eeeeee 1px solid;\r
+       *width: 88%;\r
+}\r
+\r
+.cke_skin_v2 .cke_tpl_preview\r
+{\r
+       border-collapse: separate;\r
+       text-indent:0;\r
+       width: 100%;\r
+}\r
+.cke_skin_v2 .cke_tpl_preview td\r
+{\r
+       padding: 2px;\r
+       vertical-align: middle;\r
+}\r
+.cke_skin_v2 .cke_tpl_preview .cke_tpl_preview_img\r
+{\r
+       width: 100px;\r
+}\r
+.cke_skin_v2 .cke_tpl_preview span\r
+{\r
+       white-space: normal;\r
+}\r
+\r
+.cke_skin_v2 .cke_tpl_title\r
+{\r
+       font-weight: bold;\r
+}\r
+\r
+.cke_skin_v2 .cke_tpl_hover\r
+{\r
+       border: #ff9933 1px solid !important;\r
+       background-color: #fffacd !important;\r
+       cursor: pointer;\r
+       cursor: hand;\r
+}\r
+/*\r
+ * Fix property 'cursor' doesn't inherit on table\r
+ */\r
+.cke_skin_v2 .cke_tpl_hover *\r
+{\r
+       cursor: inherit;\r
+}\r
+\r
+.cke_skin_v2 .cke_tpl_empty, .cke_tpl_loading\r
+{\r
+       text-align: center;\r
+       padding: 5px;\r
+}\r
diff --git a/_source/skins/v2/toolbar.css b/_source/skins/v2/toolbar.css
new file mode 100644 (file)
index 0000000..f2d0ff0
--- /dev/null
@@ -0,0 +1,399 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+@media print\r
+{\r
+       .cke_skin_v2 .cke_toolbox\r
+       {\r
+               display: none;\r
+       }\r
+}\r
+\r
+.cke_skin_v2 a.cke_toolbox_collapser,\r
+.cke_skin_v2 a:hover.cke_toolbox_collapser\r
+{\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 3px -739px; /* +3px +4px */\r
+       background-repeat: no-repeat;\r
+       width: 11px;\r
+       height: 11px;\r
+       float: right;\r
+       border: outset 1px;\r
+       margin: 11px 2px 2px;\r
+       cursor: pointer;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser,\r
+.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser\r
+{\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 a.cke_toolbox_collapser_min,\r
+.cke_skin_v2 a:hover.cke_toolbox_collapser_min\r
+{\r
+       /* arrowleft.gif*/\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-position: 4px -760px; /* +4px +3px */\r
+       background-repeat: no-repeat;\r
+       margin: 2px;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser_min,\r
+.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser_min\r
+{\r
+       /* arrowright.gif*/\r
+       background-position: 4px -781px; /* +2px +3px */\r
+}\r
+\r
+.cke_skin_v2 .cke_toolbar\r
+{\r
+       padding-top: 1px;\r
+       padding-bottom: 1px;\r
+       display: inline-block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_toolbar\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_toolgroup\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_toolgroup\r
+{\r
+       #float: none;\r
+       #display: inline;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_toolgroup\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolgroup\r
+{\r
+       #float: none;\r
+}\r
+\r
+.cke_skin_v2 .cke_separator\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+       border-left: solid 1px #999;\r
+       margin: 0 2px;\r
+       height: 16px;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_separator\r
+{\r
+       #float: none;\r
+       #display: inline;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_separator\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_separator\r
+{\r
+       #float: none;\r
+}\r
+\r
+.cke_skin_v2 .cke_break\r
+{\r
+       clear: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_break\r
+{\r
+       clear: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_toolbar_start\r
+{\r
+       display: inline-block;\r
+       background-image: url(images/toolbar_start.gif);\r
+       background-repeat: no-repeat;\r
+       margin: 4px 2px 0 2px;\r
+       width: 3px;\r
+       height: 16px;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_toolbar_start\r
+{\r
+       #float: none;\r
+       #display: inline;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_toolbar_start\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_start\r
+{\r
+       #float: none;\r
+}\r
+\r
+.cke_skin_v2 .cke_toolbar_end\r
+{\r
+       display: inline-block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_toolbar_end\r
+{\r
+       #float: none;\r
+       #display: inline\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_toolbar_end\r
+{\r
+    float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_end\r
+{\r
+       #float: none;\r
+}\r
+\r
+.cke_skin_v2 .cke_button a,\r
+.cke_skin_v2 .cke_button a:hover,\r
+.cke_skin_v2 .cke_button a:focus,\r
+.cke_skin_v2 .cke_button a:active,\r
+.cke_skin_v2 .cke_button a.cke_off\r
+{\r
+       border: solid 1px #efefde;\r
+       display: inline-block;\r
+       border-radius: 3px;\r
+       outline: none;\r
+       padding-top: 2px;\r
+       padding-left: 4px;\r
+       padding-right: 4px;\r
+       padding-bottom: 2px;\r
+       height: 18px;\r
+       cursor: default;\r
+}\r
+\r
+.cke_skin_v2 .cke_button a,\r
+.cke_skin_v2 .cke_button a.cke_off\r
+{\r
+       background-color: #efefde;\r
+       filter: alpha(opacity=70); /* IE */\r
+       opacity: 0.70; /* Safari, Opera and Mozilla */\r
+       -moz-border-radius: 3px;\r
+       -webkit-border-radius: 3px;\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_button a,\r
+.cke_skin_v2 .cke_hc .cke_button a.cke_off\r
+{\r
+       opacity: 1.0;\r
+       filter: alpha(opacity=100);\r
+}\r
+\r
+.cke_skin_v2 .cke_button a.cke_on\r
+{\r
+       border: solid 1px #316ac5;\r
+       background-color: #a3d7ff;\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_button a.cke_on\r
+{\r
+       padding: 0 2px !important;\r
+       border-width: 3px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button a.cke_disabled,\r
+.cke_skin_v2 .cke_browser_ie a:hover.cke_button .cke_disabled\r
+{\r
+       border: solid 1px #efefde;\r
+       background-color: #efefde;\r
+       filter: alpha(opacity=30); /* IE */\r
+       opacity : 0.3; /* Safari, Opera and Mozilla */\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_button a.cke_disabled,\r
+.cke_skin_v2 .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled\r
+{\r
+       filter: alpha(opacity=60);\r
+       opacity: 0.6;\r
+}\r
+\r
+.cke_skin_v2 .cke_button a:hover.cke_on,\r
+.cke_skin_v2 .cke_button a:focus.cke_on,\r
+.cke_skin_v2 .cke_button a:active.cke_on,      /* IE */\r
+.cke_skin_v2 .cke_button a:hover.cke_off,\r
+.cke_skin_v2 .cke_button a:focus.cke_off,\r
+.cke_skin_v2 .cke_button a:active.cke_off      /* IE */\r
+{\r
+       border: solid 1px #316ac5;\r
+       background-color: #dff1ff;\r
+       filter: alpha(opacity=100); /* IE */\r
+       opacity: 1; /* Safari, Opera and Mozilla */\r
+       padding: 2px 4px;\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_button a:hover.cke_on,\r
+.cke_skin_v2 .cke_hc .cke_button a:focus.cke_on,\r
+.cke_skin_v2 .cke_hc .cke_button a:active.cke_on,      /* IE */\r
+.cke_skin_v2 .cke_hc .cke_button a:hover.cke_off,\r
+.cke_skin_v2 .cke_hc .cke_button a:focus.cke_off,\r
+.cke_skin_v2 .cke_hc .cke_button a:active.cke_off      /* IE */\r
+{\r
+       padding: 0 2px !important;\r
+       border-width: 3px;\r
+}\r
+\r
+.cke_skin_v2 .cke_button .cke_icon\r
+{\r
+       background-image: url(icons.png);\r
+       background-position: 100px;\r
+       background-repeat:no-repeat;\r
+       margin-top:1px;\r
+       width: 16px;\r
+       height: 16px;\r
+       display: inline-block;\r
+}\r
+\r
+.cke_skin_v2 .cke_button .cke_label\r
+{\r
+       cursor: default;\r
+       display: none;\r
+       padding-left: 3px;\r
+       vertical-align: 3px;\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_button .cke_label\r
+{\r
+       padding: 0;\r
+       display: inline-block;\r
+}\r
+\r
+.cke_skin_v2 .cke_hc .cke_button .cke_icon\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_v2 .cke_accessibility\r
+{\r
+       position: absolute;\r
+       display: block;\r
+       width: 0;\r
+       height: 0;\r
+       overflow: hidden;\r
+}\r
+\r
+.cke_skin_v2 .cke_button .cke_buttonarrow\r
+{\r
+       display: inline-block;\r
+       height: 17px;\r
+       width: 8px;\r
+       background-position: 2px -717px;\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+       background-repeat: no-repeat;\r
+}\r
+\r
+.cke_skin_v2 .cke_rtl .cke_button .cke_buttonarrow\r
+{\r
+       background-position: 0 -717px;\r
+       background-image: url(images/sprites.png);\r
+       _background-image: url(images/sprites_ie6.png);\r
+}\r
+\r
+/*** Firefox 2 ***/\r
+\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_toolbar,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_button a,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_button a.cke_off,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_icon,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_buttonarrow,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_separator,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_toolbar_start\r
+{\r
+       display: block;\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_hc .cke_button .cke_icon\r
+{\r
+       display: none;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_toolbar,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button a,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button a.cke_off,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_icon,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_buttonarrow,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_separator,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_toolbar_start\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_label,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_break\r
+{\r
+       float: left;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl span.cke_inline_label\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_label,\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_break\r
+{\r
+       float: right;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_separator\r
+{\r
+       margin-top: 4px;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_label\r
+{\r
+       padding-top: 3px;\r
+}\r
+\r
+/*** IE6 ***/\r
+\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolgroup,\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_separator,\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_start,\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_end\r
+{\r
+       float: none;\r
+}\r
+\r
+/*** IE8 ***/\r
+\r
+.cke_skin_v2 .cke_browser_ie8 .cke_toolbar,\r
+.cke_skin_v2 .cke_browser_ie8 .cke_toolgroup\r
+{\r
+       vertical-align: top;\r
+}\r
+\r
+.cke_skin_v2 .cke_browser_iequirks.cke_browser_ie8 .cke_toolbar,\r
+.cke_skin_v2 .cke_browser_iequirks.cke_browser_ie8 .cke_toolgroup\r
+{\r
+       /* revert previous */\r
+       vertical-align: baseline;\r
+}\r
diff --git a/_source/tests/_assets/sample.css b/_source/tests/_assets/sample.css
new file mode 100644 (file)
index 0000000..cb4ceab
--- /dev/null
@@ -0,0 +1,4 @@
+.sample\r
+{\r
+       position: absolute;\r
+}\r
diff --git a/_source/tests/_assets/sample.js b/_source/tests/_assets/sample.js
new file mode 100644 (file)
index 0000000..56f6a62
--- /dev/null
@@ -0,0 +1 @@
+var testVar = 'Test!';\r
diff --git a/_source/tests/_assets/sample.txt b/_source/tests/_assets/sample.txt
new file mode 100644 (file)
index 0000000..c51cb7b
--- /dev/null
@@ -0,0 +1 @@
+Sample Text\r
diff --git a/_source/tests/_assets/sample.xml b/_source/tests/_assets/sample.xml
new file mode 100644 (file)
index 0000000..9b8be88
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" ?>\r
+<list>\r
+       <item id="test1" />\r
+       <item id="test2" />\r
+</list>\r
diff --git a/_source/tests/_assets/sample_xml.txt b/_source/tests/_assets/sample_xml.txt
new file mode 100644 (file)
index 0000000..9b8be88
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" ?>\r
+<list>\r
+       <item id="test1" />\r
+       <item id="test2" />\r
+</list>\r
diff --git a/_source/tests/core/_editor/custom_config_1.js b/_source/tests/core/_editor/custom_config_1.js
new file mode 100644 (file)
index 0000000..12a5225
--- /dev/null
@@ -0,0 +1,10 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.editorConfig = function( config )\r
+{\r
+       config.customConfig = '_editor/custom_config_2.js';\r
+       config.test_custom1 = 'Ok';\r
+};\r
diff --git a/_source/tests/core/_editor/custom_config_2.js b/_source/tests/core/_editor/custom_config_2.js
new file mode 100644 (file)
index 0000000..6996a96
--- /dev/null
@@ -0,0 +1,9 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.editorConfig = function( config )\r
+{\r
+       config.test_custom2 = 'Ok';\r
+};\r
diff --git a/_source/tests/core/ajax.html b/_source/tests/core/ajax.html
new file mode 100644 (file)
index 0000000..cb4a369
--- /dev/null
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.ajax</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../_source/core/loader.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.loader.load( 'core/ajax' );\r
+\r
+       //]]>\r
+       </script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_load_sync : function()\r
+               {\r
+                       var data = CKEDITOR.ajax.load( '../_assets/sample.txt' );\r
+                       assert.areSame( 'Sample Text\r\n', data, 'The loaded data doesn\'t match' );\r
+               },\r
+\r
+               test_load_sync_404 : function()\r
+               {\r
+                       var data = CKEDITOR.ajax.load( '../_assets/404.txt' );\r
+                       assert.isNull( data );\r
+               },\r
+\r
+               test_load_async : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               assert.areSame( 'Sample Text\r\n', data, 'The loaded data doesn\'t match' );\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.ajax.load( '../_assets/sample.txt', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               test_load_async_404 : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               assert.isNull( data );\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.ajax.load( '../_assets/404.txt', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               test_loadXml_sync : function()\r
+               {\r
+                       var data = CKEDITOR.ajax.loadXml( '../_assets/sample.xml' );\r
+                       assert.isInstanceOf( CKEDITOR.xml, data );\r
+                       assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                       assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+               },\r
+\r
+               test_loadXml_sync_404 : function()\r
+               {\r
+                       var data = CKEDITOR.ajax.loadXml( '../_assets/404.xml' );\r
+                       assert.isNull( data );\r
+               },\r
+\r
+               test_loadXml_async : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               assert.isInstanceOf( CKEDITOR.xml, data );\r
+                                               assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                                               assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.ajax.loadXml( '../_assets/sample.xml', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               test_loadXml_async_404 : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               assert.isNull( data );\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.ajax.loadXml( '../_assets/404.xml', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               test_loadXml_sync_txt : function()\r
+               {\r
+                       var data = CKEDITOR.ajax.loadXml( '../_assets/sample_xml.txt' );\r
+                       assert.isInstanceOf( CKEDITOR.xml, data );\r
+                       assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                       assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+               },\r
+\r
+               test_loadXml_async_txt : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               assert.isInstanceOf( CKEDITOR.xml, data );\r
+                                               assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                                               assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.ajax.loadXml( '../_assets/sample_xml.txt', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               test_parseXml : function()\r
+               {\r
+                       var data = new CKEDITOR.xml( '<?xml version="1.0" encoding="utf-8" ?><list><item id="test1" /><item id="test2" /></list>' );\r
+                       assert.isInstanceOf( CKEDITOR.xml, data );\r
+                       assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                       assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+               },\r
+\r
+               test_parseXml_nbsp : function()\r
+               {\r
+                       var data = new CKEDITOR.xml( '<?xml version="1.0" encoding="utf-8" ?><list><item id="test1">&nbsp;</item><item id="test2" /></list>' );\r
+                       assert.isInstanceOf( CKEDITOR.xml, data );\r
+                       assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                       assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/bootstrap.html b/_source/tests/core/bootstrap.html
new file mode 100644 (file)
index 0000000..a0841a6
--- /dev/null
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.bootstrap</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor_basic.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var before_loadFullCore = CKEDITOR.status;\r
+\r
+var isLoaded;\r
+\r
+CKEDITOR.on( 'loaded', function()\r
+       {\r
+               isLoaded = true;\r
+       });\r
+\r
+\r
+CKEDITOR.loadFullCore();\r
+\r
+       //]]>\r
+       </script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_status1 : function()\r
+               {\r
+                       assert.areSame( 'basic_loaded', before_loadFullCore );\r
+               },\r
+\r
+               test_status2 : function()\r
+               {\r
+                       // In IE, CKEDITOR.on( 'loaded' ) will be called immediately if the scripts are cached.\r
+                       if ( isLoaded )\r
+                               return;\r
+\r
+                       var testCase = this;\r
+                       CKEDITOR.on( 'loaded', function()\r
+                               {\r
+                                       testCase.resume( function()\r
+                                               {\r
+                                                       assert.areSame( 'loaded', CKEDITOR.status );\r
+                                               });\r
+                               });\r
+\r
+                       this.wait();\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/ckeditor.html b/_source/tests/core/ckeditor.html
new file mode 100644 (file)
index 0000000..4e9a1ae
--- /dev/null
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+       // Clean up all instances been created on the page.\r
+       function removeAllInstances()\r
+       {\r
+               var allInstances = CKEDITOR.instances;\r
+               for( var i in allInstances )\r
+               {\r
+                       CKEDITOR.remove(  allInstances[ i ] );\r
+               }\r
+       }\r
+\r
+       CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_replaceClass : function()\r
+               {\r
+                       // Asserts the default value.\r
+                       assert.areSame( 'ckeditor', CKEDITOR.replaceClass );\r
+               },\r
+\r
+               test_replaceByClassEnabled : function()\r
+               {\r
+                       // Asserts the default value.\r
+                       assert.isTrue( CKEDITOR.replaceByClassEnabled );\r
+               },\r
+\r
+               test_replaceId : function()\r
+               {\r
+                       CKEDITOR.replace( 'editor1' );\r
+                       assert.isObject( CKEDITOR.instances.editor1, 'editor instance not found' );\r
+                       assert.areSame( 'editor1', CKEDITOR.instances.editor1.name, 'instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor1' ), CKEDITOR.instances.editor1.element.$, 'instance element doesn\'t match' );\r
+               },\r
+\r
+               test_replaceName : function()\r
+               {\r
+                       CKEDITOR.replace( 'editor2' );\r
+                       assert.isObject( CKEDITOR.instances.editor2, 'editor instance not found' );\r
+                       assert.areSame( 'editor2', CKEDITOR.instances.editor2.name, 'instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementsByName( 'editor2' )[0], CKEDITOR.instances.editor2.element.$, 'instance element doesn\'t match' );\r
+               },\r
+\r
+               test_replaceElement : function()\r
+               {\r
+                       CKEDITOR.replace( document.getElementById( 'editor5' ) );\r
+                       assert.isObject( CKEDITOR.instances.editor5, 'editor instance not found' );\r
+                       assert.areSame( 'editor5', CKEDITOR.instances.editor5.name, 'instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor5' ), CKEDITOR.instances.editor5.element.$, 'instance element doesn\'t match' );\r
+               },\r
+\r
+\r
+               test_replaceError : function()\r
+               {\r
+                       try\r
+                       {\r
+                               CKEDITOR.replace( 'error' );\r
+                       }\r
+                       catch ( e )\r
+                       {\r
+                               assert.areSame( '[CKEDITOR.editor.replace] The element with id or name "error" was not found.', e );\r
+                       }\r
+               },\r
+\r
+               test_replaceAll_Class : function()\r
+               {\r
+                       CKEDITOR.replaceAll( 'myclass' );\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor3, 'editor3 instance not found' );\r
+                       assert.areSame( 'editor3', CKEDITOR.instances.editor3.name, 'editor3 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor3' ), CKEDITOR.instances.editor3.element.$, 'editor3 instance element doesn\'t match' );\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor4, 'editor4 instance not found' );\r
+                       assert.areSame( 'editor4', CKEDITOR.instances.editor4.name, 'editor4 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementsByName( 'editor4' )[0], CKEDITOR.instances.editor4.element.$, 'editor4 instance element doesn\'t match' );\r
+\r
+                       assert.isUndefined( CKEDITOR.instances.editor6, 'editor6 should be undefined' );\r
+                       assert.isUndefined( CKEDITOR.instances.editor7, 'editor7 should be undefined' );\r
+                       assert.isUndefined( CKEDITOR.instances.editor8, 'editor8 should be undefined' );\r
+                       assert.isUndefined( CKEDITOR.instances.editor8, 'editor9 should be undefined' );\r
+               },\r
+\r
+               test_replaceAll_Function : function()\r
+               {\r
+                       CKEDITOR.replaceAll( function( textarea )\r
+                               {\r
+                                       return ( textarea.id != 'editor6' && textarea.id != 'editor8' );\r
+                               } );\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor7, 'editor7 instance not found' );\r
+                       assert.areSame( 'editor7', CKEDITOR.instances.editor7.name, 'editor7 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor7' ), CKEDITOR.instances.editor7.element.$, 'editor7 instance element doesn\'t match' );\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor9, 'editor9 instance not found' );\r
+                       assert.areSame( 'editor9', CKEDITOR.instances.editor9.name, 'editor9 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor9' ), CKEDITOR.instances.editor9.element.$, 'editor9 instance element doesn\'t match' );\r
+\r
+                       assert.isUndefined( CKEDITOR.instances.editor6, 'editor6 should be undefined' );\r
+                       assert.isUndefined( CKEDITOR.instances.editor8, 'editor8 should be undefined' );\r
+               },\r
+\r
+               test_replaceAll : function()\r
+               {\r
+                       CKEDITOR.replaceAll();\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor6, 'editor6 instance not found' );\r
+                       assert.areSame( 'editor6', CKEDITOR.instances.editor6.name, 'editor6 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor6' ), CKEDITOR.instances.editor6.element.$, 'editor6 instance element doesn\'t match' );\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor8, 'editor8 editor instance not found' );\r
+                       assert.areSame( 'editor8', CKEDITOR.instances.editor8.name, 'editor8 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor8' ), CKEDITOR.instances.editor8.element.$, 'editor8 instance element doesn\'t match' );\r
+               },\r
+\r
+               test_add : function()\r
+               {\r
+                       var textarea = CKEDITOR.dom.element.createFromHtml( '<textarea id="test_add">&lt;p&gt;test_add&lt;/p&gt;<\/textarea>' );\r
+                       textarea.appendTo( new CKEDITOR.dom.element( document.body ) );\r
+\r
+                       var editor = new CKEDITOR.editor( {}, textarea, CKEDITOR.ELEMENT_MODE_REPLACE );\r
+\r
+                       CKEDITOR.add( editor );\r
+\r
+                       assert.areSame( editor, CKEDITOR.instances.test_add );\r
+               },\r
+\r
+               setUp : function()\r
+               {\r
+                       removeAllInstances();\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <textarea id="editor1" cols="80" rows="10"></textarea>\r
+       <textarea name="editor2" cols="80" rows="10"></textarea>\r
+       <textarea id="editor3" name="editor3" class="myclass" cols="80" rows="10"></textarea>\r
+       <textarea name="editor4" class="myclass" cols="80" rows="10"></textarea>\r
+       <textarea id="editor5" cols="80" rows="10"></textarea>\r
+       <textarea id="editor6" cols="80" rows="10"></textarea>\r
+       <textarea id="editor7" cols="80" rows="10"></textarea>\r
+       <textarea id="editor8" cols="80" rows="10"></textarea>\r
+       <textarea id="editor9" cols="80" rows="10"></textarea>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/dom/document.html b/_source/tests/core/dom/document.html
new file mode 100644 (file)
index 0000000..ce55ca3
--- /dev/null
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.document</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert,\r
+               arrayAssert = YAHOO.util.ArrayAssert;\r
+\r
+       return {\r
+               test_$ : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       assert.areSame( document, doc.$ );\r
+               },\r
+\r
+               test_appendStyleSheet : function()\r
+               {\r
+                       var cssUrl = CKEDITOR.basePath + '_tests/';\r
+                       cssUrl += '_assets/sample.css';\r
+\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       doc.appendStyleSheet( cssUrl );\r
+\r
+                       var links = document.getElementsByTagName( 'link' );\r
+\r
+                       for ( var i = 0 ; i < links.length ; i++ )\r
+                       {\r
+                               if ( links[i].href == cssUrl )\r
+                                       return ;\r
+                       }\r
+\r
+                       assert.fail( 'The link element was not found' );\r
+               },\r
+\r
+               test_equals1 : function()\r
+               {\r
+                       // Actually checks the real need for equals().\r
+                       var doc1 = new CKEDITOR.dom.document( document );\r
+                       assert.isFalse( doc1 == document );\r
+               },\r
+\r
+               test_equals2 : function()\r
+               {\r
+                       // Actually checks the real need for equals().\r
+                       var doc1 = new CKEDITOR.dom.document( document );\r
+                       var doc2 = new CKEDITOR.dom.document( document );\r
+                       assert.isFalse( doc1 == doc2, 'doc1 == doc2' );\r
+               },\r
+\r
+               test_equals3 : function()\r
+               {\r
+                       var doc1 = new CKEDITOR.dom.document( document );\r
+                       var doc2 = new CKEDITOR.dom.document( document );\r
+                       assert.isTrue( doc1.equals( doc2 ), 'doc1.equals( doc2 )' );\r
+                       assert.isTrue( doc2.equals( doc1 ), 'doc2.equals( doc1 )' );\r
+               },\r
+\r
+               test_getById1 : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       var element = doc.getById( 'test1' );\r
+                       assert.areSame( document.getElementById( 'test1' ), element.$ );\r
+               },\r
+\r
+               test_getById2 : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       var element = doc.getById( 'test_invalid' );\r
+                       assert.isNull( element );\r
+               },\r
+\r
+               test_getHead : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       assert.areSame( document.getElementsByTagName( 'head' )[0], doc.getHead().$ );\r
+               },\r
+\r
+               test_getBody : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       assert.areSame( document.body, doc.getBody().$, '1st call failed' );\r
+                       assert.areSame( document.body, doc.getBody().$, '2nd call failed' );\r
+               },\r
+               test_createText : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document ), contentText = 'text content';\r
+                       var textNode = doc.createText( contentText );\r
+                       assert.areSame( contentText, textNode.getText(),\r
+                               'Create text node content doesn\'t match.' );\r
+               },\r
+\r
+               test_getByAddress1 : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       var node = doc.getByAddress( [ 1, 1, 0, 1, 0, 0 ] );\r
+                       assert.areSame( 'target', node.getText(),\r
+                               'Addressing target doesn\'t match.' );\r
+               },\r
+\r
+               test_getElementsByTag : function()\r
+               {\r
+                       var nodeList = new CKEDITOR.dom.document( document ).getElementsByTag( 'span' ),\r
+                               results = [];\r
+                       for( var i = 0; i < nodeList.count(); i++ ){\r
+                               results.push( nodeList.getItem( i ).$ );\r
+                       }\r
+                       arrayAssert.itemsAreEqual( results, document.getElementsByTagName( 'span' ) );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body><div id="test1"></div><div><p>text<span><b id="addressTarget1">target</b>text</span>text</p></div><span ><b id="addressTarget2">target</b></span></body>\r
+</html>\r
diff --git a/_source/tests/core/dom/documentfragment.html b/_source/tests/core/dom/documentfragment.html
new file mode 100644 (file)
index 0000000..fefd611
--- /dev/null
@@ -0,0 +1,292 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.documentFragment</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+var tc;\r
+CKEDITOR.test.addTestCase( tc = ( function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = YAHOO.util.Assert,\r
+               doc = CKEDITOR.document;\r
+\r
+       return {\r
+\r
+               test_appendTo : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner =\r
+                                       new CKEDITOR.dom.element( 'b' );\r
+                       frag.append( inner );\r
+                       var container = CKEDITOR.document.getById( 'fragmentContainer1' );\r
+                       frag.appendTo( container );\r
+                       assert.isTrue( container.getLast().equals( inner ) );\r
+               },\r
+\r
+               test_append : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner =\r
+                                       new CKEDITOR.dom.element( 'b' );\r
+                       frag.append( inner );\r
+                       var container = CKEDITOR.document.getById( 'fragmentContainer3' );\r
+                       container.append( frag );\r
+                       assert.isTrue( container.getLast().equals( inner ) );\r
+               },\r
+\r
+               test_getFirst : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner =\r
+                                       new CKEDITOR.dom.element( 'b' );\r
+                       frag.append( inner );\r
+                       var first = frag.getFirst();\r
+                       assert.isTrue( first.equals( inner ) );\r
+               },\r
+\r
+               test_getLast : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner =\r
+                                       new CKEDITOR.dom.element( 'b' ), lastInner = inner.clone();\r
+                       frag.append( inner );\r
+                       frag.append( lastInner );\r
+                       var last = frag.getLast();\r
+                       assert.isTrue( last.equals( lastInner ) );\r
+               },\r
+\r
+               test_moveChildren : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner1 = new CKEDITOR.dom.element( 'b' ),\r
+                       inner2 = new CKEDITOR.dom.element( 'i' );\r
+                       frag.append( inner1 );\r
+                       frag.append( inner2 );\r
+\r
+                       // Move to element\r
+                       var element = new CKEDITOR.dom.element( 'span' );\r
+                       frag.moveChildren( element, true );\r
+                       assert.isTrue( element.getFirst().equals( inner1 ) );\r
+                       assert.isTrue( element.getLast().equals( inner2 ) );\r
+               },\r
+\r
+               test_moveChildren2 : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner1 = new CKEDITOR.dom.element( 'b' ),\r
+                               inner2 = new CKEDITOR.dom.element( 'i' );\r
+                       frag.append( inner1 );\r
+                       frag.append( inner2 );\r
+\r
+                       // Move to fragment\r
+                       var anotherFrag = new CKEDITOR.dom.documentFragment(\r
+                               CKEDITOR.document );\r
+                       frag.moveChildren( anotherFrag, true );\r
+                       assert.isTrue( anotherFrag.getFirst().equals( inner1 ) );\r
+                       assert.isTrue( anotherFrag.getLast().equals( inner2 ) );\r
+               },\r
+\r
+               test_appendText : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'script' );\r
+                       element.appendText( 'Test appendText' );\r
+                       assert.areEqual( 'Test appendText', element.$.text );\r
+               },\r
+\r
+               test_ltrim : function()\r
+               {\r
+                       // IE need special treatement to setup this tc, see\r
+                       // next tc for this.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+                       var element = CKEDITOR.dom.element.createFromHtml(\r
+                               '<div id="trimTarget">\t\ntext\t\n</div>'\r
+                       );\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       element.moveChildren( frag );\r
+                       frag.ltrim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+                       assert.areSame( 'text\t\n', ct.getText() );\r
+               },\r
+\r
+               test_ltrim_ie : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+                       // IE dom operation will trim preceding empty text,\r
+                       // here we use 'splitText' way to create leading spaces\r
+                       // instead for testing.\r
+                       var emptyTextNode = doc.createText( '@ \ttext\t ');\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( doc );\r
+                       frag.append( emptyTextNode );\r
+                       frag.getFirst().$.splitText( 1 );\r
+                       frag.getFirst().remove();\r
+                       frag.ltrim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+                       assert.areSame( 'text\t ', ct.getText() );\r
+               },\r
+\r
+               test_rtrim : function()\r
+               {\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+                       var element = CKEDITOR.dom.element.createFromHtml(\r
+                               '<div id="trimTarget">\t\ntext\t\n</div>'\r
+                       );\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       element.moveChildren( frag );\r
+                       frag.rtrim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+\r
+                       assert.areSame( '\t\ntext', ct.getText() );\r
+               },\r
+\r
+               /**\r
+                *@see test_ltrim_ie\r
+                */\r
+               test_rtrim_ie : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+                       var emptyTextNode = doc.createText( '@ \ttext\t ');\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( doc );\r
+                       frag.append( emptyTextNode );\r
+                       frag.getFirst().$.splitText( 1 );\r
+                       frag.getFirst().remove();\r
+                       frag.rtrim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+                       assert.areSame( ' \ttext', ct.getText() );\r
+               },\r
+\r
+\r
+               test_trim : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+                       var element = CKEDITOR.dom.element.createFromHtml(\r
+                               '<div id="trimTarget">\t\ntext\t\n</div>'\r
+                       );\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       element.moveChildren( frag );\r
+                       frag.trim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+                       assert.areSame( 'text', ct.getText() );\r
+               },\r
+\r
+\r
+               /**\r
+                *@see test_ltrim_ie\r
+                */\r
+               test_trim_ie : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+                       var emptyTextNode = doc.createText( '@ \t\ntext\t\n ');\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( doc );\r
+                       frag.append( emptyTextNode );\r
+                       frag.getFirst().$.splitText( 1 );\r
+                       frag.getFirst().remove();\r
+                       frag.trim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+                       assert.areSame( 'text', ct.getText() );\r
+               },\r
+\r
+               test_insertAfter : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner = new CKEDITOR.dom.element( 'b' );\r
+                       frag.append( inner );\r
+                       var container = CKEDITOR.document.getById( 'fragmentContainer2' );\r
+                       var sibling = CKEDITOR.document.getById( 'fragmentSibling1' );\r
+                       frag.insertAfterNode( sibling );\r
+                       assert.isTrue( container.getLast().equals( inner ) );\r
+               },\r
+\r
+               test_getChildCount : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner1 = new CKEDITOR.dom.element( 'b' ),\r
+                               inner2 = new CKEDITOR.dom.element( 'i' );\r
+                       frag.append( inner1 );\r
+                       frag.append( inner2 );\r
+\r
+                       assert.areEqual( 2, frag.getChildCount() );\r
+               },\r
+\r
+               test_getChild : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner1 = new CKEDITOR.dom.element( 'b' ),\r
+                               inner2 = new CKEDITOR.dom.element( 'i' );\r
+                       frag.append( inner1 );\r
+                       frag.append( inner2 );\r
+\r
+                       assert.isTrue( inner2.equals( frag.getChild( 1 ) ) );\r
+               },\r
+\r
+               test_getChildren : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner1 = new CKEDITOR.dom.element( 'b' ),\r
+                               inner2 = new CKEDITOR.dom.element( 'i' );\r
+                       frag.append( inner1 );\r
+                       frag.append( inner2 );\r
+\r
+                       var childNodesList = frag.getChildren();\r
+                       assert.areEqual( 2, childNodesList.count() );\r
+                       assert.isTrue( inner2.equals( childNodesList.getItem( 1 ) ) );\r
+               },\r
+\r
+               test_getDocument : function()\r
+               {\r
+                       var doc = CKEDITOR.document,\r
+                               innerDoc = new CKEDITOR.dom.document(\r
+                                       doc.getById( 'innerFrame' ).$.contentWindow.document );\r
+                       var frag1 = new CKEDITOR.dom.documentFragment( doc ),\r
+                               frag2 = new CKEDITOR.dom.documentFragment( innerDoc );\r
+\r
+                       assert.isTrue( doc.equals( frag1.getDocument() ) );\r
+                       assert.isTrue( innerDoc.equals( frag2.getDocument() ) );\r
+               },\r
+\r
+               name :document.title\r
+       };\r
+} )() );\r
+\r
+//window.onload = tc.test_rtrim_ie;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="fragmentContainer1"></div>\r
+       <div id="fragmentContainer2"><div id="fragmentSibling1"></div></div>\r
+       <div id="fragmentContainer3"></div>\r
+       <iframe id="innerFrame" name="innerFrame" src="about:blank"></iframe>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/dom/element.html b/_source/tests/core/dom/element.html
new file mode 100644 (file)
index 0000000..0aac3c4
--- /dev/null
@@ -0,0 +1,637 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.element</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+       var getInnerHtml = CKEDITOR.test.getInnerHtml;\r
+\r
+       return {\r
+               test_$ : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       assert.areSame( document.getElementById( 'test1' ), element.$ );\r
+               },\r
+\r
+               test_getId1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       assert.areEqual( 'test1', element.getId() );\r
+               },\r
+\r
+               test_getId2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementsByTagName( 'div' )[0] );\r
+                       assert.isNull( element.getId() );\r
+               },\r
+\r
+               test_getNameAtt1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementsByName( 'named1' )[0] );\r
+                       assert.areEqual( 'named1', element.getNameAtt() );\r
+               },\r
+\r
+               test_getNameAtt2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       assert.isNull( element.getNameAtt() );\r
+               },\r
+\r
+               test_getName : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       assert.areEqual( 'textarea', element.getName(), 'First call' );\r
+                       assert.areEqual( 'textarea', element.getName(), 'Second call' );\r
+               },\r
+\r
+               test_hide : function()\r
+               {\r
+                       var nativeElement = document.getElementById( 'test1' );\r
+                       nativeElement.style.display = '';\r
+\r
+                       var element = new CKEDITOR.dom.element( nativeElement );\r
+                       element.hide();\r
+\r
+                       assert.areEqual( 'none', nativeElement.style.display );\r
+               },\r
+\r
+               test_show : function()\r
+               {\r
+                       var nativeElement = document.getElementById( 'test1' );\r
+                       nativeElement.style.display = '';\r
+\r
+                       var element = new CKEDITOR.dom.element( nativeElement );\r
+                       element.show();\r
+\r
+                       assert.areEqual( '', nativeElement.style.display );\r
+               },\r
+\r
+               test_createFromHtml : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<p>My test</p>' );\r
+                       assert.areEqual( 'p', element.getName(), 'element name doesn\'t match' );\r
+                       assert.areEqual( 'My test', element.$.innerHTML, 'the innerHTML doesn\'t match' );\r
+               },\r
+\r
+               test_createFromHtml2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x><p>Test</p></div>' );\r
+                       assert.areNotEqual( 'Test', element.getChild( 0, 0 ).innerHTML );\r
+               },\r
+\r
+               test_append1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.append( new CKEDITOR.dom.element( 'b' ) );\r
+                       assert.areEqual( 'b', document.getElementById( 'append' ).firstChild.nodeName.toLowerCase() );\r
+               },\r
+\r
+               test_append2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.append( 'i' );\r
+                       assert.areEqual( 'i', document.getElementById( 'append' ).lastChild.nodeName.toLowerCase() );\r
+               },\r
+\r
+               test_appendText1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.setHtml( '' );\r
+                       element.appendText( 'Test appendText' );\r
+                       assert.areEqual( 'Test appendText', document.getElementById( 'append' ).innerHTML );\r
+               },\r
+\r
+               test_appendText2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'script' );\r
+                       element.appendText( 'Test appendText' );\r
+                       assert.areEqual( 'Test appendText', element.$.text );\r
+               },\r
+\r
+               test_setHtml : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.setHtml( '<b>Test</b>' );\r
+                       assert.areEqual( '<b>test</b>', document.getElementById( 'append' ).innerHTML.toLowerCase(), 'First call doesn\'t match' );\r
+                       element.setHtml( 'Another test' );\r
+                       assert.areEqual( 'Another test', document.getElementById( 'append' ).innerHTML, 'Second call doesn\'t match' );\r
+               },\r
+\r
+               test_getDocument1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'div' );\r
+                       assert.areSame( document, element.getDocument().$, 'First call' );\r
+                       assert.areSame( document, element.getDocument().$, 'Second call' );\r
+               },\r
+\r
+               test_getDocument2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.body );\r
+                       assert.areSame( document, element.getDocument().$, 'First call' );\r
+                       assert.areSame( document, element.getDocument().$, 'Second call' );\r
+               },\r
+\r
+               test_getFirst1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.setHtml( '<b>Test</b>' );\r
+                       var first = element.getFirst();\r
+                       assert.areSame( 'b', first.getName() );\r
+               },\r
+\r
+               test_getFirst2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.setHtml( 'Test' );\r
+                       var first = element.getFirst();\r
+                       assert.areSame( 'Test', first.$.nodeValue );\r
+               },\r
+\r
+               test_getFirst3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.setHtml( '' );\r
+                       var first = element.getFirst();\r
+                       assert.isNull( first );\r
+               },\r
+\r
+               test_setAttribute1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       element.setAttribute( 'class', 'Test' );\r
+\r
+                       assert.areSame( 'Test', document.getElementById( 'test1' ).className );\r
+               },\r
+\r
+               test_setAttribute2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       element.setAttribute( 'style', 'position: absolute;' );\r
+\r
+                       assert.areEqual( 'position: absolute;', CKEDITOR.test.getAttribute( element, 'style' ) );\r
+               },\r
+\r
+               test_setAttribute3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       element.setAttribute( 'name', 'TestName' );\r
+\r
+                       assert.areEqual( 'TestName', document.getElementById( 'test1' ).name );\r
+               },\r
+\r
+               test_setAttribute4 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       element.setAttribute( 'rows', 5 );\r
+\r
+                       assert.areEqual( 5, document.getElementById( 'test1' ).rows );\r
+               },\r
+\r
+               test_setAttributes : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test2' ) );\r
+                       element.setAttributes({\r
+                               'class' : 'Test',\r
+                               'style' : 'position: absolute;',\r
+                               'name'  : 'TestName',\r
+                               'rows'  : 5 });\r
+\r
+                       assert.areSame( 'Test', document.getElementById( 'test1' ).className, 'class is wrong' );\r
+                       assert.areEqual( 'position: absolute;', CKEDITOR.test.getAttribute( element, 'style'), 'style is wrong' );\r
+                       assert.areEqual( 'TestName', document.getElementById( 'test1' ).name, 'name is wrong' );\r
+                       assert.areEqual( 5, document.getElementById( 'test1' ).rows, 'rows is wrong' );\r
+               },\r
+\r
+               test_setStyle1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'setStyle' ) );\r
+                       element.setStyle( 'position', 'absolute' );\r
+\r
+                       assert.areEqual( 'absolute', document.getElementById( 'setStyle' ).style.position );\r
+               },\r
+\r
+               test_setStyle2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'setStyle' ) );\r
+                       element.setStyle( 'float', 'right' );\r
+\r
+                       assert.areEqual( 'right', document.getElementById( 'setStyle' ).style.cssFloat );\r
+               },\r
+\r
+               test_setStyles : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'setStyle' ) );\r
+                       element.setStyles({\r
+                                       'position' : 'absolute',\r
+                                       'float' : 'right'\r
+                               });\r
+\r
+                       assert.areEqual( 'absolute', document.getElementById( 'setStyle' ).style.position );\r
+                       assert.areEqual( 'right', document.getElementById( 'setStyle' ).style.cssFloat );\r
+               },\r
+\r
+               test_setText1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'setText' ) );\r
+                       element.setText( 'A & B' );\r
+                       assert.areSame( 'A &amp; B', document.getElementById( 'setText' ).innerHTML );\r
+               },\r
+\r
+               test_setText2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'setText' ) );\r
+                       element.setText( 'C & D' );\r
+                       assert.areSame( 'C &amp; D', document.getElementById( 'setText' ).innerHTML );\r
+               },\r
+\r
+               test_addClass1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'div' );\r
+                       element.addClass( 'classA' );\r
+                       assert.areSame( 'classA', element.$.className );\r
+               },\r
+\r
+               test_addClass2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'div' );\r
+                       element.addClass( 'classA' );\r
+                       element.addClass( 'classA' );\r
+                       assert.areSame( 'classA', element.$.className );\r
+               },\r
+\r
+               test_addClass3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'div' );\r
+                       element.addClass( 'classA' );\r
+                       element.addClass( 'classB' );\r
+                       element.addClass( 'classC' );\r
+                       assert.areSame( 'classA classB classC', element.$.className );\r
+               },\r
+\r
+               test_addClass4 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'div' );\r
+                       element.addClass( 'classA' );\r
+                       element.addClass( 'classB' );\r
+                       element.addClass( 'classC' );\r
+                       element.addClass( 'classA' );\r
+                       element.addClass( 'classB' );\r
+                       element.addClass( 'classC' );\r
+                       assert.areSame( 'classA classB classC', element.$.className );\r
+               },\r
+\r
+               test_removeClass1 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div class="classA"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       assert.areSame( '<div class="classa"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classA' );\r
+                       assert.areSame( '<div></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_removeClass2 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div class="classA classB classC classD"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       assert.areSame( '<div class="classa classb classc classd"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classA' );\r
+                       assert.areSame( '<div class="classb classc classd"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classC' );\r
+                       assert.areSame( '<div class="classb classd"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classD' );\r
+                       assert.areSame( '<div class="classb"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classB' );\r
+                       assert.areSame( '<div></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_removeClass3 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div class="classA classB"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       assert.areSame( '<div class="classa classb"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classXXX' );\r
+                       assert.areSame( '<div class="classa classb"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classB' );\r
+                       assert.areSame( '<div class="classa"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classYYY' );\r
+                       assert.areSame( '<div class="classa"></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_removeAttribute1 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div class="classA"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       element.removeAttribute( 'class' );\r
+                       assert.areSame( '<div></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_removeAttribute2 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div style="position:absolute"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       element.removeAttribute( 'style' );\r
+                       assert.areSame( '<div></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_removeAttribute3 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div title="Test"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       element.removeAttribute( 'title' );\r
+                       assert.areSame( '<div></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_remove : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'removeInner' ) );\r
+                       element.remove();\r
+\r
+                       assert.areSame( '', getInnerHtml( 'removeOuter' ) );\r
+               },\r
+\r
+               test_getAttribute_tabindex1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndex10' ) );\r
+                       assert.areEqual( 10, CKEDITOR.test.getAttribute( element, 'tabindex' ) );\r
+               },\r
+\r
+               test_getAttribute_tabindex2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexDef' ) );\r
+                       assert.isNull( CKEDITOR.test.getAttribute( element, 'tabindex' ) );\r
+               },\r
+\r
+               test_getAttribute_tabindex3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexInputDef' ) );\r
+                       assert.isNull( CKEDITOR.test.getAttribute( element, 'tabindex' ) );\r
+               },\r
+\r
+               test_getAttribute_tabindex4 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexInput20' ) );\r
+                       assert.areEqual( 20, CKEDITOR.test.getAttribute( element, 'tabindex' ) );\r
+               },\r
+\r
+               test_getAttribute_tabindex5 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexScriptDef' ) );\r
+                       assert.areEqual( null, CKEDITOR.test.getAttribute( element, 'tabindex' ) );\r
+               },\r
+\r
+               /**\r
+                *  Test getAttribute and getAttribute will ingore  '_cke_expando' attribute.\r
+                */\r
+               test_getAttribute_ignoreExpandoAttributes : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'testExpandoAttributes' ) );\r
+\r
+                       assert.areEqual( 1, CKEDITOR.test.getAttribute( element, 'tabindex' ), 'tabindex is wrong' );\r
+                       element.removeAttribute( 'tabindex' );\r
+\r
+                       assert.areEqual( 'hasExpando', CKEDITOR.test.getAttribute( element, 'class' ), 'class is wrong' );\r
+                       element.removeAttribute( 'class' );\r
+\r
+                       assert.areEqual( 'float: right;', CKEDITOR.test.getAttribute( element, 'style' ) );\r
+\r
+                       element.removeAttribute( 'style' );\r
+                       element.removeAttribute( 'id' );\r
+                       assert.isFalse( element.hasAttributes(), 'hasAttributes should be false' );\r
+               },\r
+\r
+               test_getTabIndex1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndex10' ) );\r
+                       assert.areSame( 10, element.getTabIndex() );\r
+               },\r
+\r
+               test_getTabIndex2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexDef' ) );\r
+                       assert.areSame( -1, element.getTabIndex() );\r
+               },\r
+\r
+               test_getTabIndex3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexInputDef' ) );\r
+                       assert.areSame( 0, element.getTabIndex() );\r
+               },\r
+\r
+               test_getTabIndex4 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexInput20' ) );\r
+                       assert.areSame( 20, element.getTabIndex() );\r
+               },\r
+\r
+               test_getTabIndex5 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexScriptDef' ) );\r
+                       assert.areSame( -1, element.getTabIndex() );\r
+               },\r
+\r
+               test_private1 : function()\r
+               {\r
+                       var a = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       var b = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+\r
+                       assert.areSame( a.getPrivate(), b.getPrivate() );\r
+               },\r
+\r
+               test_private2 : function()\r
+               {\r
+                       var a = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       var b = new CKEDITOR.dom.element( document.getElementById( 'test2' ) );\r
+\r
+                       assert.areNotSame( a.getPrivate(), b.getPrivate() );\r
+               },\r
+\r
+               test_getText1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'getText' ) );\r
+\r
+                       // IE gives us a different result, which is ok for us (see code comments).\r
+                       if ( CKEDITOR.env.ie )\r
+                               assert.areSame( 'Some \nsample text for testing', element.getText().replace( /\r\n|\r/g, '\n' ) );\r
+                       else\r
+                               assert.areSame( 'Some  sample text    for    testing', element.getText() );\r
+               },\r
+\r
+               test_getText2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'getText2' ).getElementsByTagName( 'b' )[0] );\r
+                       assert.areSame( ' ', element.getText() );\r
+               },\r
+\r
+               test_getText3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'getText3' ) );\r
+\r
+                       // IE gives us a different result, which is ok for us (see code comments).\r
+                       if ( CKEDITOR.env.ie )\r
+                               assert.areSame( 'A B', element.getText() );\r
+                       else\r
+                               assert.areSame( 'A\nB', element.getText().replace( /\r\n|\r/g, '\n' ) );\r
+               },\r
+\r
+               test_hasAttributes1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementsByTagName( 'big' )[0] );\r
+                       assert.isFalse( element.hasAttributes() );\r
+               },\r
+\r
+               test_hasAttributes2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementsByTagName( 'small' )[0] );\r
+                       assert.isTrue( element.hasAttributes() );\r
+               },\r
+\r
+               /**\r
+                * Test detecting of 'class' attribute in IE6/7.\r
+                */\r
+               test_hasAttributes_4075 : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) )\r
+                               return;\r
+                       var element = new CKEDITOR.dom.element( 'span' );\r
+                       element.setAttribute( 'class', 'value' );\r
+                       assert.isTrue( element.hasAttributes(), 'Failed to detect "class" attribute existence.' );\r
+               },\r
+\r
+               test_getDocumentPosition : function()\r
+               {\r
+                       // Assign the page location of the element.\r
+                       YAHOO.util.Dom.setXY('DocPositionTarget', [ 350, 450 ] );\r
+                       var pos = CKEDITOR.document.getById( 'DocPositionTarget' ).getDocumentPosition();\r
+                       if ( !CKEDITOR.env.ie || CKEDITOR.env.ie8 )\r
+                       {\r
+                               assert.areEqual( 350, pos.x, 'Position coordinates:x relative to document doesn\'t match.' );\r
+                               assert.areEqual( 450, pos.y, 'Position coordinates:y relative to document doesn\'t match.' );\r
+                       }\r
+                       else\r
+                       {\r
+                               assert.isTrue( pos.x == 348 || pos.x == 349, 'Position coordinates:x relative to document doesn\'t match.' );\r
+                               assert.areEqual( 448, pos.y, 'Position coordinates:y relative to document doesn\'t match.' );\r
+                       }\r
+               },\r
+\r
+               // Test get last non-spaces child node.\r
+               test_getLast : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       var span1 = new CKEDITOR.dom.element( 'span' );\r
+                       element.append( span1 );\r
+                       element.append( new CKEDITOR.dom.text( ' ' ) );\r
+                       element.append( new CKEDITOR.dom.text( ' ' ) );\r
+                       var last = element.getLast( CKEDITOR.dom.walker.whitespaces( true ) );\r
+                       assert.areSame( span1.$, last.$ );\r
+               },\r
+\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+       <style type="text/css" media="screen">\r
+               #test-computed {\r
+                   width:50%;\r
+                   margin:auto;\r
+                   padding:10px;\r
+                   z-index: 2;\r
+               }\r
+               .scroll\r
+               {\r
+                       overflow: visible;\r
+               }\r
+               .block1\r
+               {\r
+                       width: 100%;\r
+                       height: 100px;\r
+                       background-color: blue;\r
+                       text-align: center;\r
+               }\r
+               .block2\r
+               {\r
+                       margin: auto;\r
+                       width: 200px;\r
+                       height: 200px;\r
+                       background-color: green;\r
+                       position : relative;\r
+               }\r
+               .block3\r
+               {\r
+                       position: absolute;\r
+                       float:right;\r
+                       width: 300px;\r
+                       height: 300px;\r
+                       background-color: black;\r
+               }\r
+               .block4\r
+               {\r
+                       position: absolute;\r
+                       left: 50px;\r
+                       right: 50px;\r
+                       width: 400px;\r
+                       height: 400px;\r
+                       background-color: pink;\r
+               }\r
+               #DocPositionTarget\r
+               {\r
+                       background-color: red;\r
+               }\r
+       </style>\r
+</head>\r
+<body>\r
+       <textarea id="test1" rows="10" cols="80"></textarea>\r
+       <textarea id="test2" rows="10" cols="80"></textarea>\r
+       <textarea name="named1" rows="10" cols="80"></textarea>\r
+       <div>Test</div>\r
+       <div id="append"></div>\r
+       <div id="setStyle"></div>\r
+       <div id="setText"></div>\r
+       <div id="removeClass"></div>\r
+       <div id="removeOuter"><b id="removeInner"></b></div>\r
+       <div id="tabIndex10" tabindex="10"></div>\r
+       <div id="testExpandoAttributes" _cke_expando ="1" class="hasExpando" tabindex="1" style="float:right"></div>\r
+       <div id="tabIndexDef"></div>\r
+       <input id="tabIndexInputDef" />\r
+       <input id="tabIndexInput20" tabindex="20" />\r
+       <script id="tabIndexScriptDef" type="text/javascript"></script>\r
+       <div id="getText">Some <br /><b> sample text</b>    for <i>   testing</i></div>\r
+       <div id="getText2">A<b> </b>B</div>\r
+       <div id="getText3">A\r
+B</div>\r
+       <big>Test</big>\r
+       <small title="Testing">Test</small>\r
+\r
+       <div class="block1 scroll" id="block1"><div class="block2 scroll" id="block2"><div class="block3 scroll" id="block3"><div class="block4 scroll" id="block4"><div id="DocPositionTarget">target</div></div></div></div></div>\r
+\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/dom/node.html b/_source/tests/core/dom/node.html
new file mode 100644 (file)
index 0000000..dcad605
--- /dev/null
@@ -0,0 +1,164 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.node</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+var tc;\r
+CKEDITOR.test.addTestCase( tc = (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_getPosition1 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'p' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition2 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'p' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_FOLLOWING, node2.getPosition( node1 ) );\r
+               },\r
+\r
+               test_getPosition3 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'p' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition4 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'p' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING, node2.getPosition( node1 ) );\r
+               },\r
+\r
+               test_getPosition5 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'div' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'div' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_IDENTICAL, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition6 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0].firstChild );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition7 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0].firstChild );\r
+                       assert.areSame( CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING, node2.getPosition( node1 ) );\r
+               },\r
+\r
+               test_getPosition8 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0].firstChild );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0].firstChild );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition9 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0].firstChild );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0].firstChild );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_FOLLOWING, node2.getPosition( node1 ) );\r
+               },\r
+\r
+               test_getPosition10 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'i' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition11 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'i' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_FOLLOWING, node2.getPosition( node1 ) );\r
+               },\r
+\r
+               /**\r
+                *  Test 'preceding' position.\r
+                */\r
+               test_getPosition_3240: function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0].firstChild );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'span' )[0].firstChild );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               // Test get previous non-spaces node.\r
+               test_getPrevious : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       var span1 = new CKEDITOR.dom.element( 'span' );\r
+                       element.append( span1 );\r
+                       element.append( new CKEDITOR.dom.text( ' ' ) );\r
+                       var span2 = new CKEDITOR.dom.element( 'span' );\r
+                       element.append( span2 );\r
+                       var previous = span2.getPrevious( CKEDITOR.dom.walker.whitespaces( true ) );\r
+                       assert.areSame( span1.$, previous.$ );\r
+               },\r
+\r
+               // Test get next non-spaces node.\r
+               test_getNext : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       var span1 = new CKEDITOR.dom.element( 'span' );\r
+                       element.append( span1 );\r
+                       element.append( new CKEDITOR.dom.text( ' ' ) );\r
+                       var span2 = new CKEDITOR.dom.element( 'span' );\r
+                       element.append( span2 );\r
+                       var next = span1.getNext( CKEDITOR.dom.walker.whitespaces( true ) );\r
+                       assert.areSame( span2.$, next.$ );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+//window.onload = function()\r
+//{\r
+//     var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0] );\r
+//     var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'p' )[0] );\r
+//\r
+//     alert( node1.getPosition( node2 ) );\r
+//};\r
+//window.onload =  tc.test_getPosition6;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div>\r
+               <h1>Title</h1>\r
+               <p><b>Sample</b> <i>Text</i></p>\r
+       </div>\r
+       <span>Another</span>\r
+       <p id="append"></p>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/dom/range.html b/_source/tests/core/dom/range.html
new file mode 100644 (file)
index 0000000..6ed253d
--- /dev/null
@@ -0,0 +1,2411 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.range</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var html1, html2;\r
+var tests;\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local references.\r
+       var assert                      = CKEDITOR.test.assert;\r
+       var getInnerHtml        = CKEDITOR.test.getInnerHtml;\r
+\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       var getRange = function( startId, endId )\r
+       {\r
+               var range = new CKEDITOR.dom.range( CKEDITOR.document );\r
+               range.moveToBookmark( { startNode : startId, endNode : endId, serializable : true } );\r
+               return range;\r
+       };\r
+\r
+       return tests = {\r
+               test__constructor : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       assert.isNotNull( range, 'range must not be null' );\r
+\r
+                       assert.isNull( range.startContainer, 'startContainer must be null' );\r
+                       assert.isNull( range.startOffset, 'startOffset must be null' );\r
+                       assert.isNull( range.endContainer, 'endContainer must be null' );\r
+                       assert.isNull( range.endOffset, 'endOffset must be null' );\r
+\r
+                       assert.isTrue( range.collapsed, 'range must be collapsed' );\r
+               },\r
+\r
+               test_setStart : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( 'playground' ), 1 );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$ );\r
+                       assert.areSame( 1, range.startOffset );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$ );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed );\r
+               },\r
+\r
+               test_setEnd : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEnd( doc.getById( 'playground' ), 1 );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$ );\r
+                       assert.areSame( 1, range.startOffset );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$ );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed );\r
+               },\r
+\r
+               test_setStartAfter : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAfter( doc.getById( '_B' ) );\r
+                       range.setStartAfter( doc.getById( '_H1' ).getFirst() );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_setStartBefore : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartBefore( doc.getById( '_B' ) );\r
+                       range.setStartBefore( doc.getById( '_H1' ).getFirst() );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_setEndAfter : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndAfter( doc.getById( '_H1' ).getFirst() );\r
+                       range.setEndAfter( doc.getById( '_B' ) );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_setEndBefore : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndBefore( doc.getById( '_H1' ).getFirst() );\r
+                       range.setEndBefore( doc.getById( '_B' ) );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_setStartAt_1 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setStartAt_2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setStartAt_3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_START );\r
+\r
+                       assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setStartAt_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setEndAt_1 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setEndAt_2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setEndAt_3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_START );\r
+\r
+                       assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setEndAt_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_collapsed : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_P' ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       assert.isTrue( range.collapsed );\r
+               },\r
+\r
+               test_collapse : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_Para' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( '_Span' ), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+                       assert.isFalse( range.collapsed, 'collapsed' );\r
+\r
+                       range.collapse( true );\r
+\r
+                       assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_selectNodeContents_Element : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // Test with an Element node.\r
+                       range.selectNodeContents( doc.getById( '_Para' ) );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_selectNodeContents_Text : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // Test with a Text node.\r
+                       range.selectNodeContents( doc.getById( '_Para' ).getFirst() );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 8, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_collapse_ToStart : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById( '_P' ) );\r
+                       range.collapse( true );\r
+\r
+                       assert.areSame( document.getElementById( '_P' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_P' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_collapse_ToEnd : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById( '_Para' ) );\r
+                       range.collapse( false );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 3, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_ElementContents : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById( '_B' ) );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( '_B' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_B' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_ElementCollapsed : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartBefore( doc.getById( '_Para' ) );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_ElementNotCollapsed : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartBefore( doc.getById( '_Para' ) );\r
+                       range.setStartBefore( doc.getById( '_H1' ) );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_DiffElements : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById( '_Para' ) );\r
+\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+\r
+                       assert.isTrue( range.startContainer.getChild( range.startOffset ).equals( newNode ), 'Start must be on new node' );\r
+               },\r
+\r
+               test_insertNode_TextCollapsed : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_H1' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_TextNotCollapsed : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
+                       range.setEnd( doc.getById( '_H1' ).getFirst(), 5 );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_H1' ).childNodes[2], range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_Mixed : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_P' ), 1 );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_P' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_getCommonAncestor1 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ).firstChild, range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_getCommonAncestor2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_getCommonAncestor3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+                       range.setEnd( doc.getById( '_Para' ), 0 );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_getCommonAncestor4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ), 0 );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_getCommonAncestor5 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getBody(), 0 );\r
+                       range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+                       assert.areSame( document.body, range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_getCommonAncestor6 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB' ), 3 );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_enlarge_element1 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> Test <b> <i>  [Enlarge]</i> this</b>   </p>\r
+                       // <p> Test <b> [<i>  Enlarge</i>] this</b>   </p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element1_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test <b><i>[Enlarge]</i> this</b></p>\r
+                       // <p>Test <b>[<i>Enlarge</i>] this</b></p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element2 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> Test <b> <i>  [Enlarge</i> this]</b>   </p>\r
+                       // <p> Test [<b> <i>  Enlarge</i> this</b>]   </p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB' ), 3 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element2_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test <b><i>[Enlarge</i> this]</b></p>\r
+                       // <p>Test [<b><i>Enlarge</i> this</b>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element3 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> [Test <b> <i>  Enlarge]</i> this</b>   </p>\r
+                       // <p> [Test <b> <i>  Enlarge</i>] this</b>   </p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element3_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>[Test <b><i>Enlarge]</i> this</b></p>\r
+                       // <p>[Test <b><i>Enlarge</i>] this</b></p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element4 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> [Test <b> <i>  Enlarge</i> this]</b>   </p>\r
+                       // [<p> Test <b> <i>  Enlarge</i> this</b>   </p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_EnlargeB' ).getChild( 2 ), 5 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element4_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>[Test <b><i>Enlarge</i> this]</b></p>\r
+                       // [<p>Test <b><i>Enlarge</i> this</b></p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB' ).getChild( 1 ), 5 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element5 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> Test<b> <i>  [Enlarge</i> this]</b>   </p>\r
+                       // <p> Test<b> [<i>  Enlarge</i> this]</b>   </p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI1' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB1' ).getChild( 2 ), 5 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB1' ).childNodes[ 2 ], range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element5_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test<b> <i>[Enlarge</i> this]</b></p>\r
+                       // <p>Test<b> [<i>Enlarge</i> this]</b></p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI1' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB1' ).getChild( 2 ), 5 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB1' ).childNodes[ 2 ], range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element6 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> <b> <i>  [Enlarge</i>] this</b>   </p>\r
+                       // <p> <b> [<i>  Enlarge</i>] this</b>   </p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB2' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB2' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element6_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p><b><i>[Enlarge</i>] this</b></p>\r
+                       // <p><b>[<i>Enlarge</i>] this</b></p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB2' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB2' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element7 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> <b> <i>  [Enlarge</i> this]</b>   </p>\r
+                       // [<p> <b> <i>  Enlarge</i> this</b>   </p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 3 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element7_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p><b><i>[Enlarge</i> this]</b></p>\r
+                       // [<p><b><i>Enlarge</i> this</b></p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element8 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> Test <b> <i>  [Enlarge</i> this</b>   </p><p> <b> <i>  Enlarge</i> this]</b>   </p>\r
+                       // <p> Test [<b> <i>  Enlarge</i> this</b>   </p><p> <b> <i>  Enlarge</i> this</b>   </p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 3 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element8_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test <b><i>[Enlarge</i> this</b></p><p><b><i>Enlarge</i> this]</b></p>\r
+                       // <p>Test [<b><i>Enlarge</i> this</b></p><p><b><i>Enlarge</i> this</b></p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element9 : function()\r
+               {\r
+                       // <p>Test<i> [Enlarge</i>]</p>\r
+                       // <p>Test<i> [Enlarge</i>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI3' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_EnlargeP3' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeI3' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP3' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element10 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test <i> [Enlarge</i>]</p>\r
+                       // <p>Test [<i> Enlarge</i>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI4' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_EnlargeP4' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP4' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP4' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element10_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test <i>[Enlarge</i>]</p>\r
+                       // <p>Test [<i>Enlarge</i>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI4' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeP4' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP4' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP4' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element11 : function()\r
+               {\r
+                       // <p>Test <i>[Enlarge]</i></p>\r
+                       // <p>Test [<i>Enlarge</i>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI5' ), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeI5' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP5' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP5' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element12 : function()\r
+               {\r
+                       // <p>Test <i><b></b>[Enlarge]</i></p>\r
+                       // <p>Test [<i><b></b>Enlarge</i>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI6' ), 1 );\r
+                       range.setEnd( doc.getById( '_EnlargeI6' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP6' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP6' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element13 : function()\r
+               {\r
+                       // <p>Test <i><b></b>[Enlarge]</i></p>\r
+                       // <p>Test [<i><b></b>Enlarge</i>]</p>\r
+\r
+                       doc.getById( '_EnlargeP' ).setHtml( 'this <i>is some </i>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeP' ), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeP' ).getChild( 1 ), 0 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).childNodes[ 1 ], range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_list1 : function()\r
+               {\r
+                       var range = getRange( 'S1', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP7' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP7' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_list2 : function()\r
+               {\r
+                       var range = getRange( 'S2', 'E2' );\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP8' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP8' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 4, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_list3 : function()\r
+               {\r
+                       var range = getRange( 'S3', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP9' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP9' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_list4 : function()\r
+               {\r
+                       var range = getRange( 'S4', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP10' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 3, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP10' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_list5 : function()\r
+               {\r
+                       var range = getRange( 'S9', null );\r
+                       var bookmark = range.createBookmark();\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP15' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP15' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 4, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+                       range.moveToBookmark( bookmark );\r
+               },\r
+\r
+               test_enlarge_block1 : function()\r
+               {\r
+                       var range = getRange( 'S5', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP11' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP11'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_block2 : function()\r
+               {\r
+                       var range = getRange( 'S10', null );\r
+                       var bookmark = range.createBookmark();\r
+                       range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP16' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP16'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+                       range.moveToBookmark( bookmark );\r
+               },\r
+\r
+               test_enlarge_block3 : function()\r
+               {\r
+                       var range = getRange( 'S6', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP12' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP12'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_block4 : function()\r
+               {\r
+                       var range = getRange( 'S7', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP13' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP13'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_block5 : function()\r
+               {\r
+                       var range = getRange( 'S8', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP14' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               /**\r
+                * Test enlarge list when there's no nodes between\r
+                * range start and the block boundary.\r
+                */\r
+               test_enlarge_block6 : function()\r
+               {\r
+                       var range = getRange( 'S11', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP17' ),\r
+                               range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+               },\r
+\r
+               test_deleteContents_W3C_1 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 1\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_Para' ), 2 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( 't text.', getInnerHtml( '_Para' ), 'HTML after deletion' );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_W3C_2 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 2\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getNext(), 1 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( 'this is <b id="_b">s</b>text.', getInnerHtml( '_Para' ) );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_W3C_3 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 3\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( 't<b id="_b">ome</b> text.', getInnerHtml( '_Para' ) );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_W3C_4 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 4\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( '<h1 id="_h1">f</h1><p>nother paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_Other : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( '<h1 id="_h1"></h1><p></p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_Other_2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( 'playground' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ), 2 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( '<p>another paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame(document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_Other_3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( doc.getById('_B') );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( '', getInnerHtml('_B') );\r
+\r
+                       assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_Other_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( doc.getById('_Para') );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( '', getInnerHtml('_Para') );\r
+\r
+                       assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_W3C_1 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.7 - Example 1\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_Para' ), 2 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'his is <b id="_b">some</b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( 't text.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_W3C_2 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.7 - Example 2\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getNext(), 2 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<b>ome</b> t', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( 'this is <b id="_b">s</b>ext.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_W3C_3 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 3\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'his is <b>s</b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( 't<b id="_b">ome</b> text.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_W3C_4 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 4\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1>ckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p><p>a</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '<h1 id="_h1">f</h1><p>nother paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1>fckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p><p>another paragraph.</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '<h1 id="_h1"></h1><p></p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other_2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( 'playground' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ), 2 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1 id="_h1">fckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '<p>another paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other_3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById('_B') );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'some', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '', getInnerHtml('_B'), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById('_Para') );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'this is <b id="_b">some</b> text.', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '', getInnerHtml('_Para'), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other_5 : function()\r
+               {\r
+                       document.getElementById( 'playground' ).innerHTML = '<p><b><i>test</i></b></p>';\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAfter( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('i')[0] ) );\r
+                       range.setEndAfter( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('b')[0] ) );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<b></b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '<p><b><i>test</i></b></p>', getInnerHtml( 'playground' ), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other_6 : function()\r
+               {\r
+                       document.getElementById( 'playground' ).innerHTML = '<p><b><i>test</i></b></p>';\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartBefore( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('b')[0] ) );\r
+                       range.setEndBefore( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('i')[0] ) );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<b></b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '<p><b><i>test</i></b></p>', getInnerHtml( 'playground' ), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_W3C_1 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.7 - Example 1\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_Para' ), 2 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'his is <b>some</b>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_W3C_2 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.7 - Example 2\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getNext(), 2 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<b>ome</b> t', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( '_B' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_B' ).nextSibling, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_W3C_3 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 3\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'his is <b>s</b>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( '_B' ).previousSibling, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_B' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               // W3C DOM Range Specs - Section 2.6 - Example 4\r
+               test_cloneContents_W3C_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1>ckw3crange test</h1><p>this is <b>some</b> text.</p><p>a</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( '_H1' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ).lastChild.firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_Other : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1>fckw3crange test</h1><p>this is <b>some</b> text.</p><p>another paragraph.</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ).lastChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_Other_2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( 'playground' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ), 2 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1>fckw3crange test</h1><p>this is <b>some</b> text.</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_Other_3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById('_B') );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'some', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_Other_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById('_Para') );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'this is <b>some</b> text.', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_createBookmark2_1 : function()\r
+               {\r
+                       doc.getById( 'playground' ).setHtml( '<p id="P">This is <b id="B">a test</b></p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( 'P' ), 0 );\r
+                       range.setEnd( doc.getById( 'B' ).getFirst(), 3 );\r
+\r
+                       var bookmark = range.createBookmark2();\r
+\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.moveToBookmark( bookmark );\r
+\r
+                       assert.areSame( document.getElementById('P'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('B').firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               // This test is just like test_createBookmark2_3, but uses a "non\r
+               // normalized" bookmark.\r
+               test_createBookmark2_2 : function()\r
+               {\r
+                       var html = '<p id="P">A B <b>C </b>D E</p>';\r
+\r
+                       doc.getById( 'playground' ).setHtml( html );\r
+\r
+                       var p = doc.getById( 'P' );\r
+\r
+                       // Split the text nodes.\r
+                       p.getFirst().split( 2 );        // Right before "B"\r
+                       p.getChild( 3 ).split( 2 );     // Right before "E"\r
+\r
+                       assert.areSame( 5, p.getChildCount(), 'The number of nodes after split doesn\'t match' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // Create a range that enbraces "E".\r
+                       range.setStartBefore( p.getChild( 4 ) );\r
+                       range.setEndAfter( p.getChild( 4 ) );\r
+\r
+                       var bookmark = range.createBookmark2();\r
+\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.moveToBookmark( bookmark );\r
+\r
+                       assert.areSame( document.getElementById('P'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 4, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('P'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_createBookmark2_3 : function()\r
+               {\r
+                       var html = '<p id="P">A B <b>C </b>D E</p>';\r
+\r
+                       doc.getById( 'playground' ).setHtml( html );\r
+\r
+                       var p = doc.getById( 'P' );\r
+\r
+                       // Split the text nodes.\r
+                       p.getFirst().split( 2 );        // Right before "B"\r
+                       p.getChild( 3 ).split( 2 );     // Right before "E"\r
+\r
+                       assert.areSame( 5, p.getChildCount(), 'The number of nodes after split doesn\'t match' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // Create a range that enbraces "E".\r
+                       range.setStartBefore( p.getChild( 4 ) );\r
+                       range.setEndAfter( p.getChild( 4 ) );\r
+\r
+                       var bookmark = range.createBookmark2( true );\r
+\r
+                       // Normalize the contents.\r
+                       doc.getById( 'playground' ).setHtml( html );\r
+\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.moveToBookmark( bookmark );\r
+\r
+                       assert.areSame( document.getElementById('P').childNodes[2], range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('P'), range.endContainer.$, 'range.endContainer' );\r
+\r
+                       // Note that the endOffset doesn't get normalized as it's not\r
+                       // needed. Any offset pointing over the container size is meant to\r
+                       // be at the end of it.\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_checkStartOfBlock1 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock2 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock3 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock4 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock5 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p> Test </p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // IE trims the space in the beginning of text nodes in our case.\r
+                       // So, let's just check it and make it pass.\r
+                       range.setStart( el, ( el.substring( 0, 1 ) == 'T' ) ? 0 : 1 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock6 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 5 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock7 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p><b>Test</b></p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock8 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+                       el = el.getFirst().getFirst().getNext();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock1 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock2 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock3 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock4 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock5 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 1 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock6 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 5 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock7 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p><b>Test</b></p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock8 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+                       el = el.getFirst().getFirst().getNext();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock1 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock2 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock3 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock4 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock5 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p> Test </p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // IE trims the space in the beginning of text nodes in our case.\r
+                       // So, let's just check it and make it pass.\r
+                       range.setStart( el, ( el.substring( 0, 1 ) == 'T' ) ? 0 : 1 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock6 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 5 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock7 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p><b>Test</b></p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock8 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+                       el = el.getFirst().getFirst().getNext();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock1 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock2 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock3 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock4 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock5 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 1 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock6 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 5 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock7 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p><b>Test</b></p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock8 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+                       el = el.getFirst().getFirst().getNext();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               /**\r
+                *  Test trim with text range.\r
+                */\r
+               test_trim : function()\r
+               {\r
+                       var text = doc.getById( '_trim_ct').getFirst();\r
+                       var range = new CKEDITOR.dom.range();\r
+                       range.setStart(text, 2);\r
+                       range.setEnd(text, 6);\r
+                       range.trim();\r
+\r
+                       assert.isFalse( range.collapsed );\r
+                       assert.isTrue( range.startContainer.equals( doc.getById( '_trim_ct') ) );\r
+                       assert.areEqual( range.startOffset, 1 );\r
+                       assert.isTrue( range.endContainer.equals( doc.getById( '_trim_ct') ) );\r
+                       assert.areEqual( range.endOffset, 2 );\r
+               },\r
+\r
+               /**\r
+                * Trim range which collapsed at text node boundary.\r
+                */\r
+               test_trim_3790 : function()\r
+               {\r
+\r
+                       var ct = doc.getById( '_trim_ct');\r
+                       ct.setHtml( '<span id="_SPAN1">text</span>' );\r
+                       var text = doc.getById( '_trim_ct').getFirst();\r
+\r
+                       // <span id="_SPAN1">text^</span>\r
+                       var range = new CKEDITOR.dom.range();\r
+                       range.setStartAt( doc.getById( '_SPAN1' ).getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+                       range.trim( true );\r
+\r
+                       // <span id="_SPAN1">text^</span>\r
+                       assert.isTrue( range.collapsed );\r
+                       assert.areEqual( doc.getById( '_SPAN1').$, range.startContainer.$ );\r
+                       assert.areEqual( range.startOffset, 1 );\r
+               },\r
+\r
+               /**\r
+                * Trim range which collapsed inside text node.\r
+                */\r
+               test_trim_3790_2 : function()\r
+               {\r
+\r
+                       var ct = doc.getById( '_trim_ct');\r
+                       ct.setHtml( '<span id="_SPAN1">text</span>' );\r
+                       var text = doc.getById( '_trim_ct').getFirst();\r
+\r
+                       // <span id="_SPAN1">te^xt</span>\r
+                       var range = new CKEDITOR.dom.range();\r
+                       range.setStart( doc.getById( '_SPAN1' ).getFirst(), 2 );\r
+                       range.collapse( true );\r
+                       range.trim( true );\r
+\r
+                       // <span id="_SPAN1">te^xt</span>\r
+                       assert.isTrue( range.collapsed );\r
+                       assert.areEqual( doc.getById( '_SPAN1').$, range.startContainer.$ );\r
+                       assert.areEqual( range.startOffset, 1 );\r
+               },\r
+               /////////////\r
+\r
+               setUp : function()\r
+               {\r
+                        document.getElementById( 'playground' ).innerHTML = html1;\r
+                        document.getElementById( 'playground2' ).innerHTML = html2;\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+//window.onload = tests.test_trim;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="playground" style="visibility:hidden"><h1 id="_H1">FCKW3CRange Test</h1><p id="_Para">This is <b id="_B">some</b> text.</p><p>Another paragraph.</p></div>\r
+       <div id="playground2" style="visibility: hidden">\r
+               <h1>\r
+                       Test page for CKEditor\r
+               </h1>\r
+               <p id="_P">\r
+                       This document contains various markup features commonly used by content editors\r
+                       or "<span id="_Span" lang="fr">r&eacute;dacteurs de contenu</span>" as they are\r
+                       called in <a id="_A" href="http://en.wikipedia.org/wiki/France" title="Wikipedia article about France">\r
+                               France</a>.<br />\r
+                       It is important that a <acronym id="_Acronym" title="what you see is what you get">WYSIWYG</acronym>\r
+                       tool has features that are easily available for the editor. If not, there is a risk\r
+                       that content won't receive <strong id="_Strong">proper</strong> markup. Examples\r
+                       of commonly found content are:</p>\r
+               <p id="_Pnbsp">\r
+                       &nbsp;\r
+               </p>\r
+               <p id="_Pspaces">\r
+               </p>\r
+               <ol>\r
+                       <li>Headings</li>\r
+                       <li style="color: Red">Links (with optional title) </li>\r
+                       <li>Lists (like this one)\r
+                               <ul>\r
+                                       <li>including nested lists </li>\r
+                               </ul>\r
+                       </li>\r
+                       <li>Tables\r
+                               <ul>\r
+                                       <li>caption</li>\r
+                                       <li>headers</li>\r
+                                       <li>summary</li>\r
+                               </ul>\r
+                       </li>\r
+                       <li>Language information</li>\r
+                       <li>Acronyms and abbreviations</li>\r
+                       <li>Emphasis and strong emphasis </li>\r
+                       <li>Quotes, inline and block </li>\r
+                       <li>Images</li>\r
+               </ol>\r
+               <hr />\r
+               <h2 style="background-color: Silver">\r
+                       Test procedure\r
+               </h2>\r
+               This text has no block tag. It should be corrected when working with the enter key\r
+               set to "p" or "div" tags. The "br" configuration should not make changes instead.\r
+               <p id="_P2">\r
+                       In the test we will try to recreate this document using the editor tools. To make\r
+                       sure tables can be inserted <em id="_Em">properly</em> we re-visit banana import\r
+                       statistics from 1998.\r
+               </p>\r
+               <p id="_P3">\r
+                       This paragraph has and image at the very end of its contents.<img id="_Img" src="img.gif"\r
+                               alt="" />\r
+               </p>\r
+               This text has no block tag.<br />It should be corrected when working with the enter key\r
+               set to "p" or "div" tags. The <strong id="_StrongNoPara">"br" configuration</strong>\r
+               should not make changes instead.<br />It has three lines separated by BR tags.\r
+               <p>\r
+                       In the test we will try to recreate this document using the editor tools. To make\r
+                       sure tables can be inserted <em>properly</em> we re-visit banana import statistics\r
+                       from 1998.\r
+               </p>\r
+               <table summary="Sweden was the top importing country by far in 1998.">\r
+                       <caption>\r
+                               Top banana importers 1998 (value of banana imports in millions of US dollars per\r
+                               million people)<br />\r
+                               <br />\r
+                       </caption>\r
+                       <tr>\r
+                               <th scope="col">\r
+                                       Country</th>\r
+                               <th scope="col">\r
+                                       Millions of US dollars per million people</th>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>\r
+                                       Sweden</td>\r
+                               <td>\r
+                                       17.12</td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>\r
+                                       United&nbsp;Kingdom</td>\r
+                               <td>\r
+                                       8.88</td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>\r
+                                       Germany</td>\r
+                               <td>\r
+                                       8.36</td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>\r
+                                       Italy</td>\r
+                               <td>\r
+                                       5.96</td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>\r
+                                       United States</td>\r
+                               <td>\r
+                                       4.78</td>\r
+                       </tr>\r
+               </table>\r
+               <p>\r
+                       For block quotes we will have a look at <a href="http://fawny.org/rhcp.html">what Joe\r
+                               Clark says about redheads</a>:</p>\r
+               <blockquote cite="http://fawny.org/rhcp.html#me">\r
+                       <p>\r
+                               "Since boyhood I&rsquo;ve always believed, at the deepest level, that redheads are\r
+                               standard-bearers of the grandest and most wondrous human beauty."</p>\r
+               </blockquote>\r
+               <p>\r
+                       <img src="img.gif" alt="" /></p>\r
+               <p>\r
+                       The above is the CKEditor logo loaded from the FCKeditor.net web site.</p>\r
+               <p><b id="_B1">Line 1<br />Line 2<br /><i id="_I1">Line 3</i></b></p>\r
+               <p id="_EnlargeP"> Test <b id="_EnlargeB"> <i id="_EnlargeI">  Enlarge</i> this</b>   </p>\r
+               <p id="_EnlargeP1"> Test<b id="_EnlargeB1"> <i id="_EnlargeI1">  Enlarge</i> this</b>   </p>\r
+               <p id="_EnlargeP2"> <b id="_EnlargeB2"> <i id="_EnlargeI2">  Enlarge</i> this</b>   </p>\r
+               <p id="_EnlargeP3">Test<i id="_EnlargeI3"> Enlarge</i></p>\r
+               <p id="_EnlargeP4">Test <i id="_EnlargeI4"> Enlarge</i></p>\r
+               <p id="_EnlargeP5">Test <i id="_EnlargeI5">Enlarge</i></p>\r
+               <p id="_EnlargeP6">Test <i id="_EnlargeI6"><b></b>Enlarge</i></p>\r
+               <p id="_EnlargeP7">Test <span id="S1"></span>List<br/ >Item Enlarge</p>\r
+               <p id="_EnlargeP8">Test <span id="S2"></span>List<span id="E2"></span> <br /><br />Item Enlarge</p>\r
+               <p id="_EnlargeP9">Test List <br /><span id="S3"></span><br />Item Enlarge</p>\r
+               <p id="_EnlargeP10">Test List <br /><br />Item<span id="S4"></span> Enlarge</p>\r
+               <p id="_EnlargeP11">Test <strong>Block<span id="S5"></span></strong><br /><br />Enlarge</p>\r
+               <div id="_EnlargeP12">Test<span id="S6"></span> Block <div>Enlarge</div></div>\r
+               <div>Test <div id="_EnlargeP13">Blo<span id="S7"></span>ck</div> Enlarge</div>\r
+               <p id="_EnlargeP14"><span id="S8"></span></p>\r
+               <p id="_EnlargeP15">Test <span id="S9"></span>List<br/ >Item Enlarge</p>\r
+               <p id="_EnlargeP16">Test <strong>Block<span id="S10"></span></strong><br /><br />Enlarge</p>\r
+               <p id="_EnlargeP17"><span><span id="S11"></span>Test Block Enlarge<span id="E11"></span></span></p>\r
+               <p id="_trim_ct">Test trim</p>\r
+       </div>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+html1 = document.getElementById( 'playground' ).innerHTML;\r
+html2 = document.getElementById( 'playground2' ).innerHTML;\r
+\r
+       //]]>\r
+       </script>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/dom/text.html b/_source/tests/core/dom/text.html
new file mode 100644 (file)
index 0000000..a3053f5
--- /dev/null
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.text</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var tc;\r
+CKEDITOR.test.addTestCase( tc = (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+\r
+               test_substring1 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '123', text.substring( 1, 4 ) );\r
+               },\r
+\r
+               test_substring2 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '56789', text.substring( 5 ) );\r
+               },\r
+\r
+               test_substring3 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '', text.substring( 1,1 ) );\r
+               },\r
+\r
+               test_substring4 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '012', text.substring( -10,3 ) );\r
+               },\r
+\r
+               test_substring5 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '89', text.substring( 8,100 ) );\r
+               },\r
+\r
+               test_substring6 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '234', text.substring( 5,2 ) );\r
+               },\r
+\r
+               test_split1 : function()\r
+               {\r
+                       var div = CKEDITOR.document.getById( 'playground' );\r
+                       div.setHtml( '01234' );\r
+\r
+                       var text = div.getFirst(),\r
+                               next = text.split( 3 );\r
+\r
+                       assert.areSame( '012', text.getText(), 'text.getText() is wrong' );\r
+                       assert.areSame( '34', next.getText(), 'next.getText() is wrong' );\r
+\r
+                       assert.areSame( div.$, next.$.parentNode, 'parentNode is wrong' );\r
+                       assert.areSame( text.$, next.$.previousSibling, 'sibling is wrong' );\r
+               },\r
+\r
+               test_split2 : function()\r
+               {\r
+                       var div = CKEDITOR.document.getById( 'playground' );\r
+                       div.setHtml( '01234' );\r
+\r
+                       var text = div.getFirst(),\r
+                               next = text.split( 5 );\r
+\r
+                       assert.areSame( '01234', text.getText(), 'text.getText() is wrong' );\r
+                       assert.areSame( '', next.getText(), 'next.getText() is wrong' );\r
+\r
+                       assert.areSame( div.$, next.$.parentNode, 'parentNode is wrong' );\r
+                       assert.areSame( text.$, next.$.previousSibling, 'sibling is wrong' );\r
+               },\r
+\r
+               test_split3 : function()\r
+               {\r
+                       var div = CKEDITOR.document.getById( 'playground' );\r
+                       div.setHtml( '01234' );\r
+\r
+                       var text = div.getFirst(),\r
+                               next = text.split( 0 );\r
+\r
+                       assert.areSame( '', text.getText(), 'text.getText() is wrong' );\r
+                       assert.areSame( '01234', next.getText(), 'next.getText() is wrong' );\r
+\r
+                       assert.areSame( div.$, next.$.parentNode, 'parentNode is wrong' );\r
+                       assert.areSame( text.$, next.$.previousSibling, 'sibling is wrong' );\r
+               },\r
+\r
+               test_split_3436 : function()\r
+               {\r
+                       var parent = CKEDITOR.document.getById( 'playground2' );\r
+                       parent.setHtml( 'A B <b>C </b>D E' );\r
+                       parent.getFirst().split( 2 );   // Right before "B"\r
+                       parent.getChildren().getItem( 3 ).split( 2 );   // Right before "E"\r
+                       assert.areSame( 5, parent.getChildren().count(), 'Child nodes num doesn\'t match after split' );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+//window.onload = tc.test_split_3436;\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <p id="playground"></p>\r
+       <p id="playground2"></p>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/dom/walker.html b/_source/tests/core/dom/walker.html
new file mode 100644 (file)
index 0000000..e17b3f1
--- /dev/null
@@ -0,0 +1,340 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.walker</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var tc;\r
+\r
+CKEDITOR.test.addTestCase( tc = (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       function assertNodesList( wanted, nodes )\r
+       {\r
+               var simplifiedNodes = [];\r
+\r
+               for ( var i = 0 ; i < nodes.length ; i++ )\r
+                       simplifiedNodes.push( nodes[i].type == CKEDITOR.NODE_TEXT ? nodes[i].getText() : ( '<' + nodes[i].getName() + '>' ) );\r
+\r
+               assert.areSame( wanted.toString(), simplifiedNodes.toString() );\r
+       }\r
+\r
+       return {\r
+\r
+               test_collapsed : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( node.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       assert.isNull( walker.next() );\r
+               },\r
+\r
+               test_next_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>', 'This is ', '<b>', 'a ', '<i>', 'simple', ' test' ], nodes );\r
+               },\r
+\r
+               test_next_2 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEnd( node.getChild( [0,1,1,0] ), 2 );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ 'This is ', '<b>', 'a ', '<i>', 'si' ], nodes );\r
+               },\r
+\r
+               test_next_3 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 1 ), CKEDITOR.POSITION_BEFORE_START );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<h1>' ], nodes );\r
+               },\r
+\r
+               test_next_4 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 0 ), CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [], nodes );\r
+               },\r
+\r
+               test_next_5 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<h1>' ], nodes );\r
+               },\r
+\r
+               test_previous_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', 'a ', 'This is ' ], nodes );\r
+               },\r
+\r
+               test_previous_2 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEnd( node.getChild( [0,0] ), 2 );\r
+                       range.setEnd( node.getChild( [0,1,1,0] ), 2 );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ 'si', 'a ', 'is is ' ], nodes );\r
+               },\r
+\r
+               test_previous_3 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 1 ), CKEDITOR.POSITION_BEFORE_START );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '' ], nodes );\r
+               },\r
+\r
+               test_previous_4 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 0 ), CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>' ], nodes );\r
+               },\r
+\r
+               test_previous_5 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>' ], nodes );\r
+               },\r
+\r
+               /**\r
+                *  Test guard function is invoked on every move when iterating forward.\r
+                */\r
+               test_guard_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.guard = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.next() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<p>', 'This is ', '<b>', 'a ', '<i>', 'simple', '<i>', '<b>',' test' , '<p>' ], nodes );\r
+               },\r
+\r
+               /**\r
+                *  Test guard function is invoked on every move when iterating backward.\r
+                */\r
+               test_guard_2 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.guard = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.previous() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', '<i>', 'a ', '<b>', 'This is ', '<p>' ], nodes );\r
+               },\r
+\r
+               /**\r
+                *  Test evaluator function is invoked on every  step when iterating backward.\r
+                */\r
+               test_evaluator_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.evaluator = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.previous() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', 'a ', 'This is ' ], nodes );\r
+               },\r
+               /**\r
+                * Test walker stop at empty endContainer.\r
+                */\r
+               test_stopGuard : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<span></span>afterEnd' );\r
+                       var endContainer = node.getFirst();\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+                       range.setEndAt( endContainer, CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.evaluator = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.next() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<span>' ], nodes );\r
+\r
+               },\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+//window.onload = tc.test_stopGuard;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="playground"></div>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/dom/window.html b/_source/tests/core/dom/window.html
new file mode 100644 (file)
index 0000000..349bf0b
--- /dev/null
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.window</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var loadCalled;\r
+\r
+var testWindow = new CKEDITOR.dom.window( window );\r
+\r
+var t;\r
+\r
+testWindow.on( 'load', function()\r
+       {\r
+               t = document.createElement( 'textarea' );\r
+               t.id = 'fred';\r
+\r
+               document.body.appendChild( t );\r
+\r
+               loadCalled = true;\r
+       });\r
+\r
+testWindow.on( 'beforeunload', function()\r
+       {\r
+               t.value = new Date();\r
+       });\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_loadEvent : function()\r
+               {\r
+                       assert.isTrue( loadCalled );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="test1"></div>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/editor.html b/_source/tests/core/editor.html
new file mode 100644 (file)
index 0000000..bece2be
--- /dev/null
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.editor</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+// Disable 'scayt' plugin due to it may alter editor config after initialized.\r
+CKEDITOR.config.removePlugins = 'scayt';\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_name : function()\r
+               {\r
+                       assert.areSame( 'editor1', CKEDITOR.instances.editor1.name );\r
+               },\r
+\r
+               test_element : function()\r
+               {\r
+                       assert.areSame( document.getElementById( 'editor1' ), CKEDITOR.instances.editor1.element.$ );\r
+               },\r
+\r
+               test_config : function()\r
+               {\r
+                       // The instance default config must match the CKEDITOR.config.\r
+\r
+                       var config = CKEDITOR.instances.editor1.config;\r
+\r
+                       for ( var prop in CKEDITOR.config )\r
+                               assert.areSame( CKEDITOR.config[ prop ], config[ prop ], '"' + prop + '" doesn\'t match' );\r
+               },\r
+\r
+               test_config_inpage : function()\r
+               {\r
+                       var self = this;\r
+\r
+                       CKEDITOR.replace( 'editor2',\r
+                               {\r
+                                       // The custom setting to be checked.\r
+                                       test1 : 'ball',\r
+                                       baseHref : 'test',\r
+\r
+                                       on :\r
+                                       {\r
+                                               instanceReady : function()\r
+                                               {\r
+                                                       self.resume( function()\r
+                                                       {\r
+                                                               var config = CKEDITOR.instances.editor2.config;\r
+\r
+                                                               assert.areSame( 'ball', config.test1, '"test1" doesn\'t match' );\r
+                                                               assert.areSame( 'test', config.baseHref, '"baseHref" doesn\'t match' );\r
+\r
+                                                               // All other settings must match CKEDITOR.config.\r
+                                                               for ( var prop in CKEDITOR.config )\r
+                                                               {\r
+                                                                       if ( prop != 'test1' && prop != 'baseHref' )\r
+                                                                               assert.areSame( CKEDITOR.config[ prop ], config[ prop ], '"' + prop + '" doesn\'t match' );\r
+                                                               }\r
+                                                       } );\r
+                                               }\r
+                                       }\r
+                               });\r
+\r
+                       this.wait();\r
+               },\r
+\r
+               test_config_customConfig : function()\r
+               {\r
+                       var testCase = this;\r
+\r
+                       CKEDITOR.on( 'instanceCreated', function( event )\r
+                               {\r
+                                       if ( event.editor.name == 'editor3' )\r
+                                       {\r
+                                               event.editor.on( 'configLoaded', function()\r
+                                                       {\r
+                                                               testCase.resume( function()\r
+                                                               {\r
+                                                                       var config = event.editor.config;\r
+\r
+                                                                       assert.areSame( 'Ok', config.test_custom1, '"test_custom1" doesn\'t match' );\r
+                                                                       assert.areSame( 'Ok', config.test_custom2, '"test_custom1" doesn\'t match' );\r
+                                                                       assert.areSame( 'ball', config.test1, '"test1" doesn\'t match' );\r
+                                                                       assert.areSame( 'test', config.baseHref, '"baseHref" doesn\'t match' );\r
+\r
+                                                                       // All other settings must match CKEDITOR.config.\r
+                                                                       for ( var prop in CKEDITOR.config )\r
+                                                                       {\r
+                                                                               if ( prop != 'customConfig' && prop != 'test_custom1' && prop != 'test_custom2' && prop != 'test1' && prop != 'baseHref' )\r
+                                                                                       assert.areSame( CKEDITOR.config[ prop ], config[ prop ], '"' + prop + '" doesn\'t match' );\r
+                                                                       }\r
+                                                               });\r
+                                                       });\r
+                                       }\r
+                               });\r
+\r
+                       // Pass in-page settings to the instance.\r
+                       CKEDITOR.replace( 'editor3', { customConfig : '_editor/custom_config_1.js', test1 : 'ball', baseHref : 'test' } );\r
+\r
+                       this.wait();\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <textarea id="editor1" class="ckeditor" cols="80" rows="10"></textarea>\r
+       <textarea id="editor2" cols="80" rows="10"></textarea>\r
+       <textarea id="editor3" cols="80" rows="10"></textarea>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/env.html b/_source/tests/core/env.html
new file mode 100644 (file)
index 0000000..b499cdb
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.env</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_ie : function()\r
+               {\r
+                       if ( window.ActiveXObject )\r
+                       {\r
+                               assert.isTrue( CKEDITOR.env.ie          , 'ie should be true' );\r
+                               assert.isFalse( CKEDITOR.env.opera      , 'opera should be false' );\r
+                               assert.isFalse( CKEDITOR.env.webkit     , 'webkit should be false' );\r
+                               assert.isFalse( CKEDITOR.env.air        , 'air should be false' );\r
+                               assert.isFalse( CKEDITOR.env.gecko      , 'gecko should be false' );\r
+                               assert.isFalse( CKEDITOR.env.mac        , 'ismac should be false' );\r
+                       }\r
+                       else\r
+                               assert.isFalse( CKEDITOR.env.ie );\r
+               },\r
+\r
+               test_isCompatible : function()\r
+               {\r
+                       assert.isTrue( CKEDITOR.env.isCompatible );\r
+               },\r
+\r
+\r
+               test_quirks : function()\r
+               {\r
+                       assert.isFalse( CKEDITOR.env.quirks );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/event.html b/_source/tests/core/event.html
new file mode 100644 (file)
index 0000000..69dc4a0
--- /dev/null
@@ -0,0 +1,487 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.event</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_inherit : function()\r
+               {\r
+                       // Create a testClass that inherits from CKEDITOR.event.\r
+                       var testClass = function()\r
+                       {\r
+                               CKEDITOR.event.call( this );\r
+                       };\r
+                       testClass.prototype = CKEDITOR.event.prototype;\r
+\r
+                       var calls = [];\r
+\r
+                       var testInstance = new testClass();\r
+\r
+                       testInstance.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testInstance, this, 'Scope 1 is not valid' );\r
+\r
+                                       assert.areSame( 'someEvent', ev.name, 'ev.name (1) is wrong' );\r
+                                       assert.areSame( testInstance, ev.sender, 'ev.sender (1) is wrong' );\r
+                                       assert.isUndefined( ev.editor, 'ev.editor (1) is wrong' );\r
+                                       assert.isUndefined( ev.data, 'ev.data (1) is wrong' );\r
+                                       assert.isUndefined( ev.listenerData, 'ev.listenerData (1) is wrong' );\r
+\r
+                                       calls.push( 'a' );\r
+                               } );\r
+\r
+                       testInstance.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testInstance, this, 'Scope 2 is not valid' );\r
+\r
+                                       assert.areSame( 'someEvent', ev.name, 'ev.name (2) is wrong' );\r
+                                       assert.areSame( testInstance, ev.sender, 'ev.sender (2) is wrong' );\r
+                                       assert.isUndefined( ev.editor, 'ev.editor (2) is wrong' );\r
+                                       assert.isUndefined( ev.data, 'ev.data (2) is wrong' );\r
+                                       assert.isUndefined( ev.listenerData, 'ev.listenerData (2) is wrong' );\r
+\r
+                                       calls.push( 'b' );\r
+                               } );\r
+\r
+                       assert.areSame( false, testInstance.fire( 'someEvent' ) );\r
+\r
+                       assert.areSame( 2, calls.length, 'number of calls doesn\'t match' );\r
+                       assert.areSame( 'a,b', calls.toString() );\r
+               },\r
+\r
+               test_implementOn : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = { someprop : 'Test' };\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       assert.areSame( 'Test', testObject.someprop );\r
+\r
+                       var calls = [];\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testObject, this, 'Scope 1 is not valid' );\r
+\r
+                                       assert.areSame( 'someEvent', ev.name, 'ev.name (1) is wrong' );\r
+                                       assert.areSame( testObject, ev.sender, 'ev.sender (1) is wrong' );\r
+                                       assert.isUndefined( ev.editor, 'ev.editor (1) is wrong' );\r
+                                       assert.isUndefined( ev.data, 'ev.data (1) is wrong' );\r
+                                       assert.isUndefined( ev.listenerData, 'ev.listenerData (1) is wrong' );\r
+\r
+                                       calls.push( 'a' );\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testObject, this, 'Scope 2 is not valid' );\r
+\r
+                                       assert.areSame( 'someEvent', ev.name, 'ev.name (2) is wrong' );\r
+                                       assert.areSame( testObject, ev.sender, 'ev.sender (2) is wrong' );\r
+                                       assert.isUndefined( ev.editor, 'ev.editor (2) is wrong' );\r
+                                       assert.isUndefined( ev.data, 'ev.data (2) is wrong' );\r
+                                       assert.isUndefined( ev.listenerData, 'ev.listenerData (2) is wrong' );\r
+\r
+                                       calls.push( 'b' );\r
+                               } );\r
+\r
+                       assert.areSame( false, testObject.fire( 'someEvent' ) );\r
+\r
+                       assert.areSame( 2, calls.length, 'number of calls doesn\'t match' );\r
+                       assert.areSame( 'a,b', calls.toString() );\r
+               },\r
+\r
+               test_eventNameCase : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       // Event Names are case sensitive.\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'someEvent', ev.name, 'ev.name (someEvent) is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'SomeEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'SomeEvent', ev.name, 'ev.name (SomeEvent) is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.fire( 'someEvent' );\r
+                       assert.areSame( 1, counter, '"someEvent" calls doesn\'t match' );\r
+\r
+                       counter = 0;\r
+\r
+                       testObject.fire( 'SomeEvent' );\r
+                       assert.areSame( 1, counter, '"SomeEvent" calls doesn\'t match' );\r
+               },\r
+\r
+               test_scope : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       // Counter used just to check that the calls are effectively done.\r
+                       var counter = 0;\r
+\r
+                       var testScope = {};\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testObject, this, 'scope (testObject) is wrong' );\r
+                                       assert.areSame( testObject, ev.sender, 'sender (testObject) is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testScope, this, 'scope (testScope) is wrong' );\r
+                                       assert.areSame( testObject, ev.sender, 'sender (testScope) is wrong' );\r
+                                       counter++;\r
+                               }, testScope );\r
+\r
+                       testObject.fire( 'someEvent' );\r
+\r
+                       assert.areSame( 2, counter, 'wrong number of calls' );\r
+               },\r
+\r
+               test_listenerData : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       // Counter used just to check that the calls are effectively done.\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test1', ev.listenerData, 'listenerData (1) is wrong' );\r
+                                       counter++;\r
+                               }, null, 'Test1'  );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test2', ev.listenerData, 'listenerData (2) is wrong' );\r
+                                       counter++;\r
+                               }, null, 'Test2' );\r
+\r
+                       testObject.fire( 'someEvent' );\r
+\r
+                       assert.areSame( 2, counter, 'wrong number of calls' );\r
+               },\r
+\r
+               test_data : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       // Counter used just to check that the calls are effectively done.\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test data', ev.data, 'data (1) is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test data', ev.data, 'data (2) is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.fire( 'someEvent', 'Test data' );\r
+\r
+                       assert.areSame( 2, counter, 'wrong number of calls' );\r
+               },\r
+\r
+               test_editor : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       // Counter used just to check that the calls are effectively done.\r
+                       var counter = 0;\r
+\r
+                       var editor = {};\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( editor, ev.editor, 'editor is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.fire( 'someEvent', null, editor );\r
+\r
+                       assert.areSame( 1, counter, 'wrong number of calls' );\r
+               },\r
+\r
+               test_stop : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       ev.stop();\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       counter++;\r
+                               } );\r
+\r
+                       assert.areSame( false, testObject.fire( 'someEvent' ), 'fire must return "false"' );\r
+                       assert.areSame( 1, counter, 'number of calls doesn\'t match' );\r
+               },\r
+\r
+               test_cancel : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       ev.cancel();\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       counter++;\r
+                               } );\r
+\r
+                       assert.areSame( true, testObject.fire( 'someEvent' ), 'fire must return "true"' );\r
+                       assert.areSame( 1, counter, 'number of calls doesn\'t match' );\r
+               },\r
+\r
+               test_dataManipulation : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test1', ev.data );\r
+                                       ev.data = 'Test2';\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test2', ev.data );\r
+                                       ev.data = 'Test3';\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test3', ev.data );\r
+                                       ev.data = 'Test4';\r
+                                       counter++;\r
+                               } );\r
+\r
+                       assert.areSame( 'Test4', testObject.fire( 'someEvent', 'Test1' ), 'fire must return "Test4"' );\r
+                       assert.areSame( 3, counter, 'number of calls doesn\'t match' );\r
+               },\r
+\r
+               test_priority : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var calls = [];\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'e' );\r
+                               }, null, null, 11 );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'c' );\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'a' );\r
+                               }, null, null, 9 );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'f' );\r
+                               }, null, null, 11 );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'd' );\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'b' );\r
+                               }, null, null, 9 );\r
+\r
+                       testObject.fire( 'someEvent', 'Test data' );\r
+                       assert.areSame( 'a,b,c,d,e,f', calls.toString() );\r
+               },\r
+\r
+               test_removeListener : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var calls = [];\r
+\r
+                       var listener = function( ev )\r
+                               {\r
+                                       calls.push( 'a' );\r
+                               };\r
+\r
+                       testObject.on( 'someEvent', listener );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'b' );\r
+                               } );\r
+\r
+                       testObject.fire( 'someEvent', 'Test data' );\r
+                       assert.areSame( 'a,b', calls.toString() );\r
+\r
+                       testObject.removeListener( 'someEvent', listener );\r
+\r
+                       calls = [];\r
+\r
+                       testObject.fire( 'someEvent', 'Test data' );\r
+                       assert.areSame( 'b', calls.toString() );\r
+               },\r
+\r
+               test_fireOnce : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       counter++;\r
+                               } );\r
+\r
+                       assert.areSame( false, testObject.fireOnce( 'someEvent' ), 'fireOnce must return "false"' );\r
+                       assert.areSame( 2, counter, 'number of calls doesn\'t match' );\r
+\r
+                       counter = 0;\r
+\r
+                       assert.areSame( false, testObject.fire( 'someEvent' ), 'fire must return "false"' );\r
+                       assert.areSame( 0, counter, 'number of calls doesn\'t match' );\r
+               },\r
+\r
+               test_nestedCancel : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var isCanceledA,\r
+                               isCanceledB,\r
+                               isCanceledC;\r
+\r
+                       testObject.on( 'A', function( ev )\r
+                               {\r
+                                       isCanceledB = testObject.fire( 'B' );\r
+                                       isCanceledC = testObject.fire( 'C' );\r
+                               });\r
+\r
+                       testObject.on( 'B', function( ev )\r
+                               {\r
+                                       ev.cancel();\r
+                               });\r
+\r
+                       testObject.on( 'C', function( ev )\r
+                               {\r
+                               });\r
+\r
+                       isCanceledA = testObject.fire( 'A' );\r
+\r
+                       assert.areSame( false, isCanceledA, 'event A must not be canceled' );\r
+                       assert.areSame( true, isCanceledB, 'event B must be canceled' );\r
+                       assert.areSame( false, isCanceledC, 'event C must not be canceled' );\r
+               },\r
+\r
+               test_event_removeListener : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       // Add two listeners for the same event "A".\r
+\r
+                       testObject.on( 'A', function( ev )\r
+                               {\r
+                                       counter++;\r
+                                       ev.removeListener();\r
+                               });\r
+\r
+                       testObject.on( 'A', function( ev )\r
+                               {\r
+                                       counter++;\r
+                               });\r
+\r
+                       // Fire the event twice.\r
+                       testObject.fire( 'A' );\r
+                       testObject.fire( 'A' );\r
+\r
+                       assert.areSame( 3, counter );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/htmlparser/fragment.html b/_source/tests/core/htmlparser/fragment.html
new file mode 100644 (file)
index 0000000..9556774
--- /dev/null
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.htmlParser.fragment</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var tc;\r
+\r
+CKEDITOR.test.addTestCase( tc = (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       function testParser( input, expected )\r
+       {\r
+               var fragment = CKEDITOR.htmlParser.fragment.fromHtml( input, 'p' ),\r
+                       writer = new CKEDITOR.htmlParser.basicWriter();\r
+\r
+               fragment.writeHtml( writer );\r
+\r
+               assert.areSame( expected, writer.getHtml( true ) );\r
+       }\r
+\r
+       return {\r
+               test_fromHtml_1 : function()\r
+               {\r
+                       var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '<p>Test</p>' );\r
+\r
+                       assert.areSame( 1, fragment.children.length, 'Wrong size' );\r
+                       assert.areSame( CKEDITOR.NODE_ELEMENT, fragment.children[0].type, 'Wrong child type' );\r
+                       assert.areSame( 'p', fragment.children[0].name, 'Wrong child name' );\r
+               },\r
+\r
+               test_parser_1 : function()\r
+               {\r
+                       testParser(     '<table><tr><td>1</td><p><b>2</b> Test</p><td>3</td></tr></table>',\r
+                                               '<p><b>2</b> Test</p><table><tr><td>1</td><td>3</td></tr></table>' );\r
+               },\r
+\r
+               test_parser_2 : function()\r
+               {\r
+                       testParser(     '<b><table><tr><td>1</td><td>2</td></tr></table></b>',\r
+                                               '<table><tr><td><b>1</b></td><td><b>2</b></td></tr></table>' );\r
+               },\r
+\r
+               test_parser_3_1 : function()\r
+               {\r
+                       testParser(     '<b><i>Table:<table><tr><td>1</td><td>2</td></tr></table></i></b>',\r
+                                               '<p><b><i>Table:</i></b></p><table><tr><td><b><i>1</i></b></td><td><b><i>2</i></b></td></tr></table>' );\r
+               },\r
+\r
+               test_parser_3_2 : function()\r
+               {\r
+                       testParser(     '<b><i><table><tr><td>1</td><td>2</td></tr></table>Table</i></b>',\r
+                                               '<table><tr><td><b><i>1</i></b></td><td><b><i>2</i></b></td></tr></table><p><b><i>Table</i></b></p>' );\r
+               },\r
+\r
+               test_parser_4 : function()\r
+               {\r
+                       testParser(     '<b><i>Test',\r
+                                               '<p><b><i>Test</i></b></p>' );\r
+               },\r
+\r
+               test_parser_5 : function()\r
+               {\r
+                       testParser(     '<p>Para 1<p>Para 2<p>Para 3',\r
+                                               '<p>Para 1</p><p>Para 2</p><p>Para 3</p>' );\r
+               },\r
+\r
+               test_parser_6 : function()\r
+               {\r
+                       testParser(     '<b>A</b><i>B</i>',\r
+                                               '<p><b>A</b><i>B</i></p>' );\r
+               },\r
+\r
+               test_parser_7 : function()\r
+               {\r
+                       testParser(     '<p>Para 1<hr>Para 2<h1>Para 3',\r
+                                               '<p>Para 1</p><hr /><p>Para 2</p><h1>Para 3</h1>' );\r
+               },\r
+\r
+               /**\r
+                * Test remove empty inline element.\r
+                */\r
+               test_parser_8 : function()\r
+               {\r
+                       testParser(     '<p><b></b>text</p>',\r
+                                               '<p>text</p>' );\r
+               },\r
+\r
+               /**\r
+                *  Test remove multiple empty inline elements.\r
+                */\r
+               test_parser_8_2 : function()\r
+               {\r
+                       testParser(     '<p><b><i></b></i>text</p>',\r
+                                               '<p>text</p>' );\r
+               },\r
+\r
+               /**\r
+                * Test fixing malformed inline element closing.\r
+                */\r
+               test_parser_9 : function()\r
+               {\r
+                       testParser(     '<p><b>bold<i>ita</b>lic</i></p>',\r
+                                               '<p><b>bold<i>ita</i></b><i>lic</i></p>' );\r
+               },\r
+\r
+               test_ticket_10 : function()\r
+               {\r
+                       testParser(     '<table><tbody><tr><td>A<b></b></td></tr></tbody></table>',\r
+                                               '<table><tbody><tr><td>A</td></tr></tbody></table>' );\r
+               },\r
+\r
+               /**\r
+                *  Test fixing paragraph inside table row.\r
+                */\r
+               test_ticket_3195 : function()\r
+               {\r
+                       testParser(     '<table><tr><td>1</td><p>2</p><td>3</td></tr></table>',\r
+                                               '<p>2</p><table><tr><td>1</td><td>3</td></tr></table>' );\r
+               },\r
+\r
+               /**\r
+                *  Test fixing paragraph inside list.\r
+                */\r
+               test_ticket_3195_2 : function()\r
+               {\r
+                       testParser(     '<ul><li>1</li><p>2</p><li>3</li></ul>',\r
+                                               '<p>2</p><ul><li>1</li><li>3</li></ul>' );\r
+               },\r
+\r
+               /**\r
+                *  Test fixing 'div' inside paragraph.\r
+                */\r
+               test_ticket_3195_3 : function()\r
+               {\r
+                       testParser(     '<p>1<div>2</div><span>3</span></p>',\r
+                                               '<p>1</p><div>2</div><p><span>3</span></p>' );\r
+               },\r
+\r
+               test_ticket_3441 : function()\r
+               {\r
+                       testParser(     '<p><b>Test</b></p><script type="test">var a = "<A Href=xxx>Testing</ A>";\nGo();<\/script>',\r
+                                               '<p><b>Test</b></p><script type="test">var a = "<A Href=xxx>Testing</ A>";\nGo();<\/script>' );\r
+               },\r
+\r
+               test_ticket_3585 : function()\r
+               {\r
+                       testParser(     '<p><br />\t\r\n</p>',\r
+                                               '<p><br /></p>' );\r
+               },\r
+\r
+               test_ticket_3585_1 : function()\r
+               {\r
+                       testParser(     '<p><br />text\t\r\n</p>',\r
+                                               '<p><br />text</p>' );\r
+               },\r
+\r
+               test_ticket_3585_2 : function()\r
+               {\r
+                       testParser(     '<b>inline </b>\n<p>paragraph\t\r\n</p>\t\r\n',\r
+                                               '<p><b>inline </b></p><p>paragraph</p>' );\r
+               },\r
+\r
+               test_ticket_3744 : function()\r
+               {\r
+                       testParser(     '<div><b><font><span>A</font></span></b></div><div>X</div>',\r
+                                               '<div><b><font><span>A</span></font></b></div><div>X</div>' );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+// Uncomment the following to run a single test.\r
+// window.onload = tc.test_ticket_3585_2;\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/htmlparser/htmlparser.html b/_source/tests/core/htmlparser/htmlparser.html
new file mode 100644 (file)
index 0000000..ea52a70
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.htmlParser</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.plugins.load( 'htmlwriter' );\r
+var tc;\r
+CKEDITOR.test.addTestCase( tc = ( function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = YAHOO.util.Assert;\r
+\r
+       /**\r
+        * Wrapper of the combination of htmlParser with htmlWriter, for convenience of\r
+        * testing, formatting of writer has been disabled.\r
+        */\r
+       function htmlParse( htmlString , writerConfig)\r
+       {\r
+               var writer = new CKEDITOR.htmlParser.basicWriter();\r
+               writer.reset();\r
+               var fragment = CKEDITOR.htmlParser.fragment.fromHtml( htmlString );\r
+               fragment.writeHtml( writer );\r
+               return writer.getHtml();\r
+       }\r
+\r
+       /**\r
+        * IE always returning CRLF for line-feed, so remove it when retrieving\r
+        * pre-formated text from text area.\r
+        */\r
+       function getTextAreaValue( id )\r
+       {\r
+               return CKEDITOR.document.getById( id ).getValue().replace( /\r/gi, '' );\r
+       }\r
+\r
+       return {\r
+               /**\r
+                * Test <pre> tag formatting.\r
+                */\r
+               test_fromHtml_3715 : function()\r
+               {\r
+                       assert.areSame( getTextAreaValue( 'htmlResult1' ),\r
+                               htmlParse( getTextAreaValue( 'htmlOriginal1' ) ),\r
+                               '<pre> parsing result doesn\'t match.' );\r
+               },\r
+\r
+               /**\r
+                * Test compress empty spaces within text.\r
+                */\r
+               test_fromHtml_3715_2 : function()\r
+               {\r
+                       assert.areSame( getTextAreaValue( 'htmlResult2' ),\r
+                               htmlParse( getTextAreaValue( 'htmlOriginal2' ) ),\r
+                               'Spaces compressing result doesn\'t match.' );\r
+               },\r
+               name :document.title\r
+       };\r
+} )() );\r
+\r
+//window.onload = tc.test_fromHtml_3715;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+\r
+       <textarea id="htmlOriginal1"><pre>\r
+       text<b>\r
+inside<br /><br /></b>\r
+\r
+pre\r
+</pre></textarea>\r
+       <textarea id="htmlResult1"><pre>\r
+       text<b>\r
+inside\r
+\r
+</b>\r
+\r
+pre\r
+</pre></textarea>\r
+\r
+<textarea id="htmlOriginal2"><p>\r
+       para            graph\r
+</p><b>compress   spaces</b></textarea>\r
+\r
+<textarea id="htmlResult2"><p>para graph</p><b>compress spaces</b></textarea>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/plugins.html b/_source/tests/core/plugins.html
new file mode 100644 (file)
index 0000000..24260d8
--- /dev/null
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.plugins</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+\r
+               /**\r
+                * Test loading self defined external plugin file paths.\r
+                */\r
+               test_addExternal : function()\r
+               {\r
+                       var path = '_tests/';\r
+                       CKEDITOR.plugins.addExternal( 'myplugin',\r
+                       path + 'core/plugins/myplugins/sample/', 'my_plugin.js' );\r
+\r
+                       CKEDITOR.plugins.load( 'myplugin', function(){\r
+                               this.resume( function(){\r
+\r
+                                       assert.isTrue( CKEDITOR.plugins.get( 'myplugin' ).definition );\r
+                               } );\r
+                       }, this );\r
+                       this.wait();\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/plugins/myplugins/sample/my_plugin.js b/_source/tests/core/plugins/myplugins/sample/my_plugin.js
new file mode 100644 (file)
index 0000000..bb908f8
--- /dev/null
@@ -0,0 +1,3 @@
+CKEDITOR.plugins.add( 'myplugin' , {\r
+       definition :  true\r
+} );\r
diff --git a/_source/tests/core/scriptloader.html b/_source/tests/core/scriptloader.html
new file mode 100644 (file)
index 0000000..ecddcc6
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.scriptLoader</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_loadCode : function()\r
+               {\r
+                       CKEDITOR.scriptLoader.loadCode( 'var test="Testing!";' );\r
+\r
+                       /*jsl:ignore*/\r
+                       assert.areEqual( 'Testing!', test );\r
+                       /*jsl:end*/\r
+               },\r
+\r
+               test_load : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               /*jsl:ignore*/\r
+                                               assert.areSame( 'Test!', testVar );\r
+                                               /*jsl:end*/\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.scriptLoader.load( '../_assets/sample.js', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/tools.html b/_source/tests/core/tools.html
new file mode 100644 (file)
index 0000000..72a2722
--- /dev/null
@@ -0,0 +1,170 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.tools</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+var testcase;\r
+CKEDITOR.test.addTestCase( testcase = (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_extend : function()\r
+               {\r
+                       var fakeFn = function() {};\r
+                       var fakeObj = { fake1 : 1, fake2 : 2 };\r
+                       var fakeArray = [ 'Test', 10, fakeFn, fakeObj ];\r
+\r
+                       var target =\r
+                       {\r
+                               prop1 : 'Test',\r
+                               prop2 : 10,\r
+                               prop3 : fakeFn,\r
+                               prop4 : fakeObj,\r
+                               prop5 : fakeArray\r
+                       };\r
+\r
+                       CKEDITOR.tools.extend( target,\r
+                               {\r
+                                       prop3 : 'Wrong',\r
+                                       prop6 : 'Good',\r
+                                       prop7 : fakeArray\r
+                               } );\r
+\r
+                       assert.areSame( 'Test'          , target.prop1, 'prop1 doesn\'t match' );\r
+                       assert.areSame( 10                      , target.prop2, 'prop2 doesn\'t match' );\r
+                       assert.areSame( fakeFn          , target.prop3, 'prop3 doesn\'t match' );\r
+                       assert.areSame( fakeObj         , target.prop4, 'prop4 doesn\'t match' );\r
+                       assert.areSame( fakeArray       , target.prop5, 'prop5 doesn\'t match' );\r
+                       assert.areSame( 'Good'          , target.prop6, 'prop6 doesn\'t match' );\r
+                       assert.areSame( fakeArray       , target.prop7, 'prop7 doesn\'t match' );\r
+               },\r
+\r
+               test_isArray1 : function()\r
+               {\r
+                       assert.isTrue( CKEDITOR.tools.isArray( [] ) );\r
+               },\r
+\r
+               test_isArray2 : function()\r
+               {\r
+                       assert.isFalse( CKEDITOR.tools.isArray( { length:1 } ) );\r
+               },\r
+\r
+               test_isArray3 : function()\r
+               {\r
+                       assert.isFalse( CKEDITOR.tools.isArray( null ) );\r
+               },\r
+\r
+               test_isArray4 : function()\r
+               {\r
+                       assert.isFalse( CKEDITOR.tools.isArray( window.x ) );\r
+               },\r
+\r
+               test_htmlEncode1 : function()\r
+               {\r
+                       assert.areSame( '&lt;b&gt;Test&lt;/b&gt;', CKEDITOR.tools.htmlEncode( '<b>Test</b>' ) );\r
+               },\r
+\r
+               test_htmlEncode2 : function()\r
+               {\r
+                       assert.areSame( 'Test\'s &amp; "quote"', CKEDITOR.tools.htmlEncode( 'Test\'s & "quote"' ) );\r
+               },\r
+\r
+               test_htmlEncode_3874 : function()\r
+               {\r
+                       assert.areSame( 'line1\nline2', CKEDITOR.tools.htmlEncode( 'line1\nline2' ) );\r
+               },\r
+\r
+               test_cssStyleToDomStyle1 : function()\r
+               {\r
+                       assert.areSame( 'backgroundColor', CKEDITOR.tools.cssStyleToDomStyle( 'background-color' ) );\r
+               },\r
+\r
+               test_cssStyleToDomStyle2 : function()\r
+               {\r
+                       assert.areSame( 'cssFloat', CKEDITOR.tools.cssStyleToDomStyle( 'float' ) );\r
+               },\r
+\r
+               test_getNextNumber : function()\r
+               {\r
+                       var number = CKEDITOR.tools.getNextNumber();\r
+                       assert.areSame( number +  1, CKEDITOR.tools.getNextNumber() );\r
+                       assert.areSame( number +  2, CKEDITOR.tools.getNextNumber() );\r
+                       assert.areSame( number +  3, CKEDITOR.tools.getNextNumber() );\r
+               },\r
+\r
+               test_trim1 : function()\r
+               {\r
+                       assert.areSame( 'test', CKEDITOR.tools.trim( '    test   ' ) );\r
+               },\r
+\r
+               test_trim2 : function()\r
+               {\r
+                       assert.areSame( 'test', CKEDITOR.tools.trim( ' \n \t  test\n  \t ' ) );\r
+               },\r
+\r
+               test_ltrim1 : function()\r
+               {\r
+                       assert.areSame( 'test   ', CKEDITOR.tools.ltrim( '    test   ' ) );\r
+               },\r
+\r
+               test_ltrim2 : function()\r
+               {\r
+                       assert.areSame( 'test\n  \t ', CKEDITOR.tools.ltrim( ' \n \t  test\n  \t ' ) );\r
+               },\r
+\r
+               test_rtrim1 : function()\r
+               {\r
+                       assert.areSame( '    test', CKEDITOR.tools.rtrim( '    test   ' ) );\r
+               },\r
+\r
+               test_rtrim2 : function()\r
+               {\r
+                       assert.areSame( ' \n \t  test', CKEDITOR.tools.rtrim( ' \n \t  test\n  \t ' ) );\r
+               },\r
+\r
+               test_clone : function()\r
+               {\r
+                       var obj =\r
+                       {\r
+                               name : 'John',\r
+                               cars :\r
+                               {\r
+                                       Mercedes : { color : 'blue' },\r
+                                       Porsche : { color : 'red' }\r
+                               }\r
+                       };\r
+\r
+                       var clone = CKEDITOR.tools.clone( obj );\r
+\r
+                       clone.name = 'Paul';\r
+                       clone.cars.Porsche.color = 'silver';\r
+\r
+                       assert.areSame( 'John', obj.name );\r
+                       assert.areSame( 'Paul', clone.name );\r
+\r
+                       assert.areSame( 'red', obj.cars.Porsche.color );\r
+                       assert.areSame( 'silver', clone.cars.Porsche.color );\r
+               },\r
+\r
+               test_repeat : function()\r
+               {\r
+                       assert.areSame( '&nbsp;&nbsp;&nbsp;', CKEDITOR.tools.repeat( '&nbsp;', 3 ) );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+//window.onload = testcase.test_htmlEncode_3874;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <iframe></iframe>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/core/xml.html b/_source/tests/core/xml.html
new file mode 100644 (file)
index 0000000..72d25f2
--- /dev/null
@@ -0,0 +1,150 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.xml</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../_source/core/loader.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.loader.load( 'core/xml' );\r
+\r
+       //]]>\r
+       </script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_baseXml : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data />' );\r
+                       assert.isObject( xml.baseXml );\r
+               },\r
+\r
+               test_selectSingleNode1a : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item /></data>' );\r
+                       var node = xml.selectSingleNode( 'data/item' );\r
+                       assert.areEqual( 'item', node.nodeName );\r
+               },\r
+\r
+               test_selectSingleNode1b : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item /></data>' );\r
+                       var node = xml.selectSingleNode( 'item' );\r
+                       assert.isNull( node );\r
+               },\r
+\r
+               test_selectSingleNode2a : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item><subitem/></item></data>' );\r
+                       var contextNode = xml.selectSingleNode( 'data' );\r
+                       var node = xml.selectSingleNode( 'item/subitem', contextNode );\r
+                       assert.areEqual( 'subitem', node.nodeName );\r
+               },\r
+\r
+               test_selectSingleNode2b : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item><subitem/></item></data>' );\r
+                       var contextNode = xml.selectSingleNode( 'data' );\r
+                       var node = xml.selectSingleNode( 'subitem', contextNode );\r
+                       assert.isNull( node );\r
+               },\r
+\r
+               test_selectSingleNode3 : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/></data>' );\r
+                       var node = xml.selectSingleNode( '//item[@id="x2"]' );\r
+                       assert.areEqual( 'item', node.nodeName );\r
+                       assert.areEqual( 'x2', node.getAttribute( 'id' ) );\r
+               },\r
+\r
+               test_selectSingleNode4 : function()\r
+               {\r
+                       // For may results, the first one must be returned.\r
+\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/></data>' );\r
+                       var node = xml.selectSingleNode( '//item' );\r
+                       assert.areEqual( 'item', node.nodeName );\r
+                       assert.areEqual( 'x1', node.getAttribute( 'id' ) );\r
+               },\r
+\r
+               test_selectNodes1 : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item /></data>' );\r
+                       var nodes = xml.selectNodes( 'data/item' );\r
+                       assert.areEqual( 1, nodes.length );\r
+                       assert.areEqual( 'item', nodes[0].nodeName );\r
+               },\r
+\r
+               test_selectNodes2a : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/><item id="x3"/></data>' );\r
+                       var nodes = xml.selectNodes( '//item' );\r
+                       assert.areEqual( 3, nodes.length );\r
+                       assert.areEqual( 'x1', nodes[0].getAttribute( 'id' ) );\r
+                       assert.areEqual( 'x2', nodes[1].getAttribute( 'id' ) );\r
+                       assert.areEqual( 'x3', nodes[2].getAttribute( 'id' ) );\r
+               },\r
+\r
+               test_selectNodes2b : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/><item id="x3"/></data>' );\r
+                       var nodes = xml.selectNodes( '//itemX' );\r
+                       assert.areEqual( 0, nodes.length );\r
+               },\r
+\r
+               test_selectNodes3a : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/><item id="x3"/></data>' );\r
+                       var contextNode = xml.selectSingleNode( 'data' );\r
+                       var nodes = xml.selectNodes( 'item', contextNode );\r
+                       assert.areEqual( 3, nodes.length );\r
+                       assert.areEqual( 'x1', nodes[0].getAttribute( 'id' ) );\r
+                       assert.areEqual( 'x2', nodes[1].getAttribute( 'id' ) );\r
+                       assert.areEqual( 'x3', nodes[2].getAttribute( 'id' ) );\r
+               },\r
+\r
+               test_selectNodes3b : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/><item id="x3"/></data>' );\r
+                       var contextNode = xml.selectSingleNode( 'data' );\r
+                       var nodes = xml.selectNodes( 'itemX', contextNode );\r
+                       assert.areEqual( 0, nodes.length );\r
+               },\r
+\r
+               test_getInnerXml1 : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item/></data>' );\r
+                       assert.areEqual( '<item/>', xml.getInnerXml( 'data' ) );\r
+               },\r
+\r
+               test_getInnerXml2 : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"><subitem name="sub1"/></item></data>' );\r
+                       assert.areEqual( '<subitem name="sub1"/>', xml.getInnerXml( '//item' ) );\r
+               },\r
+\r
+               test_getInnerXml3 : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/></data>' );\r
+                       assert.isNull( xml.getInnerXml( '//itemX' ) );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/plugins/domiterator/domiterator.html b/_source/tests/plugins/domiterator/domiterator.html
new file mode 100644 (file)
index 0000000..6eb42e9
--- /dev/null
@@ -0,0 +1,236 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: domiterator</title>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+\r
+CKEDITOR.plugins.load( [ 'htmldataprocessor', 'htmlwriter', 'domiterator'] );\r
+\r
+\r
+       </script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+/**\r
+ * IE always returning CRLF for linefeed, so remove it when retrieve pre-formated text from text area.\r
+ * @param {Object} id\r
+ */\r
+function getTextAreaValue( id )\r
+{\r
+       return CKEDITOR.document.getById( id ).getValue().replace(/\r/gi,'');\r
+}\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+\r
+       // Local references.\r
+       var assert = CKEDITOR.test.assert,\r
+               arrayAssert = YAHOO.util.ArrayAssert;\r
+\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       // In these tests, we may "reset" the writer rules to avoid it formatting\r
+       // the output, making the assertion easier to the done. We don't need to\r
+       // test formatting features here, so this is ok.\r
+       var getDataProcessor = function()\r
+       {\r
+               var dataProcessor = new CKEDITOR.htmlDataProcessor();\r
+               dataProcessor.writer._.rules = [];\r
+               return dataProcessor;\r
+       };\r
+\r
+       /**\r
+        * IE always returning CRLF for line-feed, so remove it when retrieving\r
+        * pre-formated text from text area.\r
+        */\r
+       function getTextAreaValue( id )\r
+       {\r
+               return CKEDITOR.document.getById( id ).getValue().replace( /\r/gi, '' );\r
+       }\r
+\r
+       function assumeElementContentAreSame( container, textareaId )\r
+       {\r
+               if( typeof container == 'string' )\r
+                       container = doc.getById( container );\r
+               //Assume result document content\r
+               var html = getDataProcessor().toDataFormat( container.getHtml() );\r
+               assert.areSame( getTextAreaValue( textareaId ) , html );\r
+       }\r
+\r
+       function assumeElementAreSame( element, textareaId )\r
+       {\r
+               if( typeof element == 'string' )\r
+                       element = doc.getById( element );\r
+               //Assume result document content\r
+               var html = getDataProcessor().toDataFormat( element.getOuterHtml() );\r
+               assert.areSame( getTextAreaValue( textareaId ) , html );\r
+       }\r
+\r
+       /**\r
+        *\r
+        * @param {String|CKEDITOR.dom.range} containerId|range Either the id of html container which contents are treated as range, or a exisiting range object.\r
+        * @param {Object} iteratorOption\r
+        * @param {Array} expectedTagList block elements tagName list in iteration orders.\r
+        */\r
+       function assumeIterationSameAs( containerIdOrRange, iteratorOption, expectedTagList )\r
+       {\r
+               var range;\r
+               if( typeof containerIdOrRange == 'string' )\r
+               {\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( doc.getById( containerIdOrRange ) );\r
+               }\r
+               else\r
+                       range = containerIdOrRange;\r
+\r
+               var iter = range.createIterator();\r
+               CKEDITOR.tools.extend( iter, iteratorOption, true );\r
+               var blockList = [], block;\r
+               while (( block = iter.getNextParagraph() ) )\r
+               {\r
+                       blockList.push( block.getName() );\r
+               }\r
+               arrayAssert.itemsAreEqual( expectedTagList, blockList );\r
+       }\r
+\r
+       return {\r
+\r
+               /**\r
+                * Test iterating over table cells.\r
+                */\r
+               test_iterator_table_cells : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget2a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( 'iterTarget2b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'th', 'p', 'td' ]);\r
+                       assumeElementContentAreSame( 'iterContainer2', 'iterResult2' );\r
+               },\r
+\r
+               /**\r
+                * Test iterating over list items.\r
+                */\r
+               test_iterator_listItems : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget3a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( 'iterTarget3b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'li', 'p', 'li' ,'p', 'li' ]);\r
+                       assumeElementContentAreSame( 'iterContainer3', 'iterResult3' );\r
+               },\r
+\r
+               /**\r
+                * Test iterating over pseudo block.\r
+                */\r
+               test_iterator_pseudoBlock : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget4a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( 'iterTarget4b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'p', 'p' ] );\r
+                       assumeElementContentAreSame( 'iterContainer4', 'iterResult4' );\r
+               },\r
+\r
+               /**\r
+                * Test collapsed range before paraghraph end.\r
+                */\r
+               test_iterator_collapsed_before_paragraph : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget7' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'p' ]);\r
+                       assumeElementContentAreSame( 'iterContainer7', 'iterResult7' );\r
+               },\r
+\r
+               /**\r
+                * Test range collapsed  inside paraghraph.\r
+                */\r
+               test_iterator_collapsed_inside_paragraph : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( 'para8' ).getFirst(), 3 );\r
+                       assumeIterationSameAs( range, null, [ 'p' ]);\r
+                       assumeElementContentAreSame( 'iterContainer8', 'iterResult8' );\r
+               },\r
+\r
+               /**\r
+                * Test fix paragraph-less content.\r
+                */\r
+               test_iterator_establish_paragraph: function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range(doc);\r
+                       range.setStartAt(doc.getById('iterTarget9'), CKEDITOR.POSITION_AFTER_START);\r
+                       range.setEndAt(doc.getById('iterTarget9'), CKEDITOR.POSITION_BEFORE_END);\r
+                       assumeIterationSameAs(range, null, ['p']);\r
+                       assumeElementContentAreSame( 'iterContainer9', 'iterResult9');\r
+               },\r
+\r
+               /**\r
+                * Test iterating over more than one paragraphs. (#3352)\r
+                */\r
+               test_iterator_multiple_paragraphs: function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt(doc.getById( 'iterTarget10a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt(doc.getById( 'iterTarget10b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'p', 'p' ] );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+\r
+\r
+<div id="iterContainer2"><table summary="summary">\r
+       <caption>caption</caption>\r
+       <tr>\r
+               <th id="iterTarget2a">\r
+                       head1</th>\r
+       </tr>\r
+       <tr>\r
+               <td><p>cell1</p></td>\r
+       </tr>\r
+       <tr>\r
+               <td id="iterTarget2b">cell2</td>\r
+       </tr>\r
+</table></div>\r
+<textarea id="iterResult2"><table summary="summary"><caption>caption</caption><tbody><tr><th id="iterTarget2a">head1</th></tr><tr><td><p>cell1</p></td></tr><tr><td id="iterTarget2b">cell2</td></tr></tbody></table></textarea>\r
+\r
+<div id="iterContainer3"><ul>\r
+       <li id="iterTarget3a">item1</li>\r
+       <li><p>item2</p></li>\r
+       <li>\r
+               <ul><li>item3</li></ul>\r
+               <ul><li><p>item5</p></li></ul>\r
+       </li>\r
+       <li id="iterTarget3b">item5</li>\r
+       </ul></div>\r
+<textarea id="iterResult3"><ul><li id="iterTarget3a">item1</li><li><p>item2</p></li><li><ul><li>item3</li></ul><ul><li><p>item5</p></li></ul></li><li id="iterTarget3b">item5</li></ul></textarea>\r
+\r
+<div id="iterContainer4">\r
+       <div id="iterTarget4b"><p id="iterTarget4a">paragraph</p>text</div>\r
+</div>\r
+<textarea id="iterResult4"><div id="iterTarget4b"><p id="iterTarget4a">paragraph</p><p>text</p></div></textarea>\r
+\r
+<div id="iterContainer7"><p id="iterTarget7">paragraph</p></div>\r
+<textarea id="iterResult7"><p id="iterTarget7">paragraph</p></textarea>\r
+\r
+<div id="iterContainer8"><p id="para8">paragraph</p></div>\r
+<textarea id="iterResult8"><p id="para8">paragraph</p></textarea>\r
+\r
+<form id="iterContainer9"><span id="iterTarget9">non-paragraph</span></form>\r
+<textarea id="iterResult9"><p><span id="iterTarget9">non-paragraph</span></p></textarea>\r
+\r
+<div id="iterContainer10"><p id="iterTarget10a">para1</p><p id="iterTarget10b">para2</p></div>\r
+\r
+</body>\r
+</html>\r
diff --git a/_source/tests/plugins/htmldataprocessor/htmldataprocessor.html b/_source/tests/plugins/htmldataprocessor/htmldataprocessor.html
new file mode 100644 (file)
index 0000000..b7672b9
--- /dev/null
@@ -0,0 +1,386 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: htmldataprocessor</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+// Load the required plugins and launch the runner.\r
+CKEDITOR.test.deferRunner = true;\r
+CKEDITOR.plugins.load( 'htmldataprocessor' , function()\r
+{\r
+ CKEDITOR.test.runner.run();\r
+} );\r
+\r
+var testCase;\r
+\r
+CKEDITOR.test.addTestCase( testCase = (function()\r
+{\r
+       // Local references.\r
+       var assert = CKEDITOR.test.assert;\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       // In these tests, we may "reset" the writer rules to avoid it formatting\r
+       // the output, making the assertion easier to the done. We don't need to\r
+       // test formatting features here, so this is ok.\r
+       var getDataProcessor = function()\r
+       {\r
+               var dataProcessor = new CKEDITOR.htmlDataProcessor();\r
+               dataProcessor.writer._.rules = [];\r
+               return dataProcessor;\r
+       };\r
+\r
+       /**\r
+        * IE always returning CRLF for linefeed, so remove it when retrieve pre-formated text from text area.\r
+        * @param {Object} id\r
+        */\r
+       function getTextAreaValue( id )\r
+       {\r
+               return CKEDITOR.document.getById( id ).getValue().replace(/\r/gi,'');\r
+       }\r
+\r
+       // These tests go far beyond the strict htmlDataProcessor code testing. We\r
+       // are actually testing the entire parsing system here. The combination of\r
+       // htmlParser and htmlWriter inside htmlDataProcessor is useful in this\r
+       // sense.\r
+\r
+       return {\r
+               test_toDataFormat_1a : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><p>Test</p></div>' );\r
+\r
+                       assert.areSame( '<p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+               },\r
+\r
+               test_toDataFormat_1b : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x>Test</x:x></div>' );\r
+\r
+                       // IE adds the XML namespace tag.\r
+                       if ( CKEDITOR.env.ie )\r
+                               assert.areSame( '<?xml:namespace prefix="x" /><x:x>Test</x:x>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+                       else\r
+                               assert.areSame( '<x:x>Test</x:x>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+               },\r
+\r
+               test_toDataFormat_2a : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><br /><p>Test</p></div>' );\r
+\r
+                       assert.areSame( '<br /><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+               },\r
+\r
+               test_toDataFormat_2b : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x></x:x><p>Test</p></div>' );\r
+\r
+                       // IE adds the XML namespace tag.\r
+                       if ( CKEDITOR.env.ie )\r
+                               assert.areSame( '<?xml:namespace prefix="x" /><x:x></x:x><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+                       else\r
+                               assert.areSame( '<x:x></x:x><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+               },\r
+\r
+               test_toDataFormat_3 : function()\r
+               {\r
+                       assert.areSame( '<div><x:x><p>Test</p></x:x></div>', getDataProcessor().toDataFormat( '<div><x:x><p>Test</p></div>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2774 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><P class=MsoNormal><B><I><SPAN lang=EN-US><o:p>Test</o:p></SPAN></I></B></P></div>' );\r
+\r
+                       // IE adds the XML namespace tag.\r
+                       if ( CKEDITOR.env.ie )\r
+                               assert.areSame( '<p class="MsoNormal"><b><i><span lang="EN-US"><?xml:namespace prefix="o" /><o:p>Test</o:p></span></i></b></p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+                       else\r
+                               assert.areSame( '<p class="MsoNormal"><b><i><span lang="EN-US"><o:p>Test</o:p></span></i></b></p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_3036_1 : function()\r
+               {\r
+                       assert.areSame( '<input autocomplete="off" checked="checked" type="checkbox" />',\r
+                               getDataProcessor().toDataFormat( '<INPUT type="checkbox" CHECKED  autocomplete=off>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_3036_2 : function()\r
+               {\r
+                       assert.areSame( '<input autocomplete="off" type="checkbox" unknown="" />',\r
+                               getDataProcessor().toDataFormat( '<INPUT type="checkbox" UNKNOWN  autocomplete=off>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_1 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1;\r
+                       var test = this;\r
+                       var isReady = !!editor.dataProcessor;\r
+\r
+                       if ( !isReady )\r
+                       {\r
+                               editor.on( 'instanceReady', function()\r
+                               {\r
+                                       isReady = true;\r
+                               } );\r
+                       }\r
+\r
+                       this.wait( function()\r
+                               {\r
+                                       if ( !isReady )\r
+                                       {\r
+                                               test.wait( arguments.callee, 100 );\r
+                                               return;\r
+                                       }\r
+\r
+                                       assert.areSame( '<p>\n\t&nbsp;</p>\n',\r
+                                               editor.dataProcessor.toDataFormat( '<p></p>' ) );\r
+                               }, 100 );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_2 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var source = '<p>Some text<br><br><br></p>';\r
+                       if ( CKEDITOR.env.ie )\r
+                               source = '<p>Some text<br><br></p>';\r
+                       assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t&nbsp;</p>\n',\r
+                               dataProcessor.toDataFormat( source ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_3 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t<br />\n\tSome more text</p>\n',\r
+                               dataProcessor.toDataFormat( '<p>Some text<br><br><br>Some more text</p>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_4 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t&nbsp;</p>\n',\r
+                               dataProcessor.toDataFormat( '<p>Some text<br><br>&nbsp;</p>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_5 : function()\r
+               {\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       assert.areSame( '<p>\n\t&nbsp;</p>\n',\r
+                               dataProcessor.toDataFormat( '<p><br></p>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_6 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var source = '<p><br><br></p>';\r
+                       if ( CKEDITOR.env.ie )\r
+                               source = '<p><br></p>';\r
+\r
+                       assert.areSame( '<p>\n\t<br />\n\t&nbsp;</p>\n',\r
+                               dataProcessor.toDataFormat( source ) );\r
+               },\r
+\r
+               test_toHtml_ticket_2886_1 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var expected = '<p><br /></p>';\r
+                       if ( CKEDITOR.env.ie )\r
+                               expected = '<p>\xa0</p>';\r
+                       assert.areSame( expected, dataProcessor.toHtml( '<p></p>' ) );\r
+               },\r
+\r
+               test_toHtml_ticket_2886_2 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var expected = '<p>Some text<br />Some other text</p>';\r
+                       assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br>Some other text</p>' ) );\r
+               },\r
+\r
+               test_toHtml_ticket_2886_3 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var expected = '<p>Some text<br /><br /></p>';\r
+                       if ( CKEDITOR.env.ie )\r
+                               expected = '<p>Some text<br />\xa0</p>';\r
+                       assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br>&nbsp;</p>' ) );\r
+               },\r
+\r
+               test_toHtml_ticket_2886_4 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var expected = '<p>Some text</p>';\r
+                       assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br></p>' ));\r
+               },\r
+\r
+               test_ticket_3407 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor,\r
+                               config = editor.config;\r
+\r
+                       config.protectedSource.push( /<\?[\s\S]*?\?>/g );   // PHP Code\r
+                       config.protectedSource.push( /<%[\s\S]*?%>/g );   // ASP Code\r
+                       config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi );   // ASP.Net Code\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       var html = getTextAreaValue( '_TEXTAREA1' );\r
+                       var protectedHtml = dataProcessor.toHtml( html );\r
+                       assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );\r
+               },\r
+\r
+               test_ticket_3591 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor;\r
+\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       var html = getTextAreaValue( '_TEXTAREA_3591' );\r
+                       var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+                       assert.areSame( getTextAreaValue( CKEDITOR.env.ie ? '_TEXTAREA_3591_protected_ie' : '_TEXTAREA_3591_protected' ),\r
+                               protectedHtml );\r
+                       assert.areSame( getTextAreaValue( '_TEXTAREA_3591' ),\r
+                               dataProcessor.toDataFormat( protectedHtml ) );\r
+               },\r
+\r
+               test_ticket_3591_2 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor;\r
+\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       dataProcessor.writer.sortAttributes = true;\r
+\r
+                       var html = getTextAreaValue( '_TEXTAREA_3591_2' );\r
+                       var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+                       assert.areSame( getTextAreaValue( '_TEXTAREA_3591_2' ),\r
+                               dataProcessor.toDataFormat( protectedHtml ) );\r
+               },\r
+\r
+               test_ticket_3869_1 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor;\r
+\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       var html = getTextAreaValue( '_TEXTAREA_3869_1' );\r
+                       var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+                       assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );\r
+               },\r
+\r
+               test_ticket_3869_2 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor,\r
+                               config = editor.config;\r
+\r
+                       config.protectedSource.push( /<\?[\s\S]*?\?>/g );   // PHP Code\r
+                       config.protectedSource.push( /<%[\s\S]*?%>/g );   // ASP Code\r
+                       config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi );   // ASP.Net Code\r
+                       config.protectedSource.push(/<gallery[\s\S]*?<\/gallery>/gi );  // custom protected source\r
+                       config.protectedSource.push(/<options[\s\S]*?<\/options>/gi );\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       var html = getTextAreaValue( '_TEXTAREA_3869_2' );\r
+                       var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+                       assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );\r
+               },\r
+\r
+               /**\r
+                * Test empty value attributes.\r
+                */\r
+               test_ticket_3884 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor;\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       dataProcessor.writer.sortAttributes = true;\r
+\r
+                       assert.areSame( '<p><a href="" name="">emptylink</a></p>',\r
+                               dataProcessor.toDataFormat( dataProcessor.toHtml( '<p><a href="" name="">emptylink</a></p>' ) ) );\r
+               },\r
+\r
+               test_innerHtmlComments_ticket_3801 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor;\r
+\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+\r
+                       for ( var i = 1; i <= 7; i++ )\r
+                       {\r
+                               var html = getTextAreaValue( '_TEXTAREA_3801_' + i );\r
+                               var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+                               assert.areSame( getTextAreaValue( '_TEXTAREA_3801_' + i ),\r
+                                       dataProcessor.toDataFormat( protectedHtml ) );\r
+                       }\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+//window.onload = testCase.test_ticket_3884;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <textarea id="editor1" class="ckeditor" cols="80" rows="10"></textarea>\r
+       <textarea id="_TEXTAREA1"><script type="text/javascript">alert('>');</script><table><tbody><tr><!--- IE doesn't handle this comment ---><!--[if gte IE 6 ]>\r
+       <![if lt IE 8 ]>\r
+       gIE conditional comments\r
+<![endif]>\r
+<![endif]--><td><%Response.Write(now())%></td><td><asp:control_name id="some_id" runat="server"/></td><td><?php\r
+include ("head.html"); ?></td></tr></tbody></table><noscript>Your browser doesn't support JavaScript</noscript></textarea>\r
+       <textarea id="_TEXTAREA_3591"><object><param /><param /><embed></embed></object></textarea>\r
+       <textarea id="_TEXTAREA_3591_protected"><cke:object><cke:param></cke:param><cke:param></cke:param><cke:embed></cke:embed></cke:object></textarea>\r
+       <textarea id="_TEXTAREA_3591_protected_ie"><?xml:namespace prefix="cke" /><cke:object><cke:param></cke:param><cke:param></cke:param><cke:embed></cke:embed></cke:object></textarea>\r
+       <textarea id="_TEXTAREA_3801_1"><!-- foo --><p>bar</p></textarea>\r
+       <textarea id="_TEXTAREA_3801_2"><p><!-- foo -->bar</p></textarea>\r
+       <textarea id="_TEXTAREA_3801_3"><!-- foo --><p><!-- foo -->bar</p></textarea>\r
+       <textarea id="_TEXTAREA_3801_4"><p>bar</p><!-- foo --></textarea>\r
+       <textarea id="_TEXTAREA_3801_5">bar<!-- foo --></textarea>\r
+       <textarea id="_TEXTAREA_3801_6"><!-- foo -->bar</textarea>\r
+       <textarea id="_TEXTAREA_3801_7"><p><!-- foo -->bar</p><p><!-- foo -->bar</p></textarea>\r
+       <textarea id="_TEXTAREA_3869_1">#3869<script language="Javascript" type="text/javascript">\r
+       <!--\r
+               alert('-->');\r
+       //-->\r
+       </script></textarea>\r
+       <textarea id="_TEXTAREA_3869_2">#3869&lt;gallery&gt;\r
+       file.jpg\r
+       &lt;options name="test1" value="value1"&gt;&lt;/options&gt;\r
+       &lt;options name="test2" value="value2"&gt;&lt;/options&gt;\r
+       &lt;/gallery&gt;&lt;?\r
+               echo '&lt;script type="text/javascript"&gt;';\r
+               echo '&lt;!--alert("--&gt;");//--&gt;';\r
+               echo '&lt;/script&gt;';\r
+       ?&gt;&lt;!--&lt;%Response.Write(now())%&gt;//--&gt;invalid&lt;?\r
+               echo 'bbb&lt;script&gt;\r
+               &lt;!--\r
+               ccc();&lt;!-- &lt;/script&gt;&lt;!-- &lt;/script&gt;\r
+               //--&gt;&lt;/script&gt;\r
+               &lt;script&gt;&lt;!--\r
+               &lt;!--\r
+               ffff();\r
+               //--&gt;&lt;/script&gt;\r
+               ddd';\r
+       ?&gt;html</textarea>\r
+       <textarea id="_TEXTAREA_3591_2"><object classid="clsid"><param name="movie" value="movie.swf" /><embed src="movie.swf" type="application/x-shockwave-flash"></embed></object></textarea>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/plugins/link/link.html b/_source/tests/plugins/link/link.html
new file mode 100644 (file)
index 0000000..8a1510d
--- /dev/null
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: link</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+/**\r
+ * Load the editor and wait for fully interactable.\r
+ * @param {Object} elementId\r
+ * @parma {Object} mode\r
+ * @param {Object} config\r
+ * @param {Object} callback Continuation with {@param editor}.\r
+ * @param {Object} context\r
+ */\r
+function prepareEditor( elementId, mode, config, callback, context )\r
+{\r
+       CKEDITOR.on( 'instanceReady',\r
+               function( evt )\r
+               {\r
+                       var isMe = mode == CKEDITOR.ELEMENT_MODE_REPLACE ?\r
+                               evt.editor.name == elementId\r
+                               : evt.editor.element.$ ==\r
+                                       document.getElementById( elementId );\r
+                       if ( isMe )\r
+                       {\r
+                               var editor = evt.editor;\r
+                               // Force result data unformatted.\r
+                               editor.dataProcessor.writer._.rules = {};\r
+                               // Force remove tail br.\r
+                               editor.dataProcessor.htmlFilter.addRules( {\r
+                                       elements : {\r
+                                               'br' : function( br ){\r
+                                                       var parent = br.parent,\r
+                                                               length = parent.children.length,\r
+                                                               lastChild = parent.children[ length - 1 ];\r
+                                                       if( lastChild == br )\r
+                                                               return false;\r
+                                               }\r
+                                       }\r
+                               } );\r
+                               callback.call( context, editor );\r
+                       }\r
+               }, this );\r
+\r
+       mode = mode || CKEDITOR.ELEMENT_MODE_REPLACE;\r
+       switch( mode )\r
+       {\r
+               case CKEDITOR.ELEMENT_MODE_REPLACE :\r
+                       CKEDITOR.replace( elementId, config );\r
+                       break;\r
+               case CKEDITOR.ELEMENT_MODE_APPENDTO :\r
+                       CKEDITOR.appendTo( elementId, config );\r
+                       break;\r
+       }\r
+}\r
+\r
+/**\r
+ * IE always returning CRLF for line-feed, so remove it when retrieving\r
+ * pre-formated text from text area.\r
+ */\r
+function getTextAreaValue( id )\r
+{\r
+       return CKEDITOR.document.getById( id ).getValue().replace( /\r/gi, '' );\r
+}\r
+\r
+CKEDITOR.test.addTestCase( ( function()\r
+       {\r
+\r
+               // Local references.\r
+               var assert = CKEDITOR.test.assert,\r
+                       doc = CKEDITOR.document,\r
+                       action = YAHOO.util.UserAction,\r
+                       selector = YAHOO.util.Selector;\r
+\r
+               return  {\r
+\r
+                       /**\r
+                        *  Test remove numbered list with 'enterMode = BR'.\r
+                        */\r
+                       test_create_link : function()\r
+                       {\r
+                               prepareEditor( 'test_create_link_editor', null,\r
+                                       null,\r
+                                       function( editor )\r
+                                       {\r
+                                               this.resume( function()\r
+                                               {\r
+                                           editor.focus();\r
+                                           editor.execCommand( 'link' );\r
+                                                       // waiting for dialog to open.\r
+                                           this.wait( function()\r
+                                                        {\r
+                                                               var dialog = editor._.storedDialogs[ 'link' ];\r
+                                                               var urlField = dialog.getContentElement( 'info', 'url' );\r
+                                                               urlField.setValue( 'svn.fckeditor.net' );\r
+\r
+                                                               dialog.fire( 'ok' );\r
+                                                               dialog.hide();\r
+\r
+                                                               var result = editor.getData();\r
+                                                               assert.areEqual(\r
+                                                                '<p><a href="http://svn.fckeditor.net">http://svn.fckeditor.net</a></p>',\r
+                                                                result, 'Created link element doesn\'t match.' );\r
+\r
+                                                        }, 1000 );\r
+                                               } );\r
+                                       }, this );\r
+                                       this.wait();\r
+                       },\r
+\r
+                       name :document.title\r
+               };\r
+       } )() );\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+<textarea id="test_create_link_editor"></textarea>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/plugins/list/list.html b/_source/tests/plugins/list/list.html
new file mode 100644 (file)
index 0000000..99198a2
--- /dev/null
@@ -0,0 +1,217 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: list</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+/**\r
+ * Load the editor and wait for fully interactable.\r
+ * @param {Object} elementId\r
+ * @parma {Object} mode\r
+ * @param {Object} config\r
+ * @param {Object} callback Continuation with {@param editor}.\r
+ * @param {Object} context\r
+ */\r
+function prepareEditor( elementId, mode, config, callback, context )\r
+{\r
+       CKEDITOR.on( 'instanceReady',\r
+               function( evt )\r
+               {\r
+                       var isMe = mode == CKEDITOR.ELEMENT_MODE_REPLACE ?\r
+                               evt.editor.name == elementId\r
+                               : evt.editor.element.$ ==\r
+                                       document.getElementById( elementId );\r
+                       if ( isMe )\r
+                       {\r
+                               var editor = evt.editor;\r
+                               // Force result data unformatted.\r
+                               editor.dataProcessor.writer._.rules = {};\r
+                               callback.call( context, editor );\r
+                       }\r
+               }, this );\r
+\r
+       mode = mode || CKEDITOR.ELEMENT_MODE_REPLACE;\r
+       switch( mode )\r
+       {\r
+               case CKEDITOR.ELEMENT_MODE_REPLACE :\r
+                       CKEDITOR.replace( elementId, config );\r
+                       break;\r
+               case CKEDITOR.ELEMENT_MODE_APPENDTO :\r
+                       CKEDITOR.appendTo( elementId, config );\r
+                       break;\r
+       }\r
+}\r
+\r
+/**\r
+ * IE always returning CRLF for line-feed, so remove it when retrieving\r
+ * pre-formated text from text area.\r
+ */\r
+function getTextAreaValue( id )\r
+{\r
+       return CKEDITOR.document.getById( id ).getValue().replace( /\r/gi, '' );\r
+}\r
+\r
+CKEDITOR.test.addTestCase( ( function()\r
+       {\r
+\r
+               // Local references.\r
+               var assert = CKEDITOR.test.assert,\r
+                       doc = CKEDITOR.document,\r
+                       action = YAHOO.util.UserAction,\r
+                       selector = YAHOO.util.Selector;\r
+\r
+               /**\r
+                * Set the range with the start/end position specified by the locator, which in form of bookmark2.\r
+                * @param {Object} range\r
+                * @param {Array} startPosition range start path including offset\r
+                * @param {Array|Boolean} endPositoin range end path including offset or is collapsed\r
+                */\r
+               function setRange( range, startPosition, endPositoin )\r
+               {\r
+                       var bm = {\r
+                               end : null,\r
+                               start : null,\r
+                               is2: true,\r
+                               startOffset : 0,\r
+                               endoffset : 0\r
+                       };\r
+                       bm.start = startPosition.slice( 0, startPosition.length - 1 );\r
+                       bm.startOffset = startPosition[ startPosition.length -1];\r
+                       if( endPositoin === true )\r
+                       {\r
+                               bm.end = bm.start.slice();\r
+                               bm.endOffset = bm.startOffset;\r
+                       }\r
+                       else\r
+                       {\r
+                               bm.end = endPositoin.slice( 0, endPositoin.length - 1 );\r
+                               bm.endOffset = endPositoin[ endPositoin.length -1 ];\r
+                       }\r
+                       range.moveToBookmark( bm );\r
+               }\r
+\r
+               return  {\r
+\r
+                       /**\r
+                        *  Test remove numbered list with 'enterMode = BR'.\r
+                        */\r
+                       test_ticket_3151 : function()\r
+                       {\r
+                               prepareEditor( 'test_ticket_3151_editor', null,\r
+                                       { enterMode : CKEDITOR.ENTER_BR },\r
+                                       function( editor )\r
+                                       {\r
+                                               this.resume( function()\r
+                                               {\r
+                                                       editor.focus();\r
+\r
+                                                       var doc = editor.document,\r
+                                                               range = new CKEDITOR.dom.range( doc );\r
+\r
+                                                       setRange( range, [ 1, 0, 0, 0, 0 ], true );\r
+                                                       var sel = editor.getSelection();\r
+                                                       sel.selectRanges( [ range ] );\r
+\r
+                                                       // Waiting for 'comand state' effected.\r
+                                                       this.wait( function(){\r
+                                                               // Remove list.\r
+                                                               editor.execCommand( 'numberedlist' );\r
+                                                               assert.areSame( getTextAreaValue( 'test_ticket_3151_result' ),\r
+                                                                       editor.getData(),\r
+                                                                       'Remove list result not correct.' );\r
+                                                       }, 1000 );\r
+\r
+                                               } );\r
+                                       }, this );\r
+                                       this.wait();\r
+                       },\r
+\r
+                       /**\r
+                        *  Test merge newlist with previous list.\r
+                        */\r
+                       test_ticket_3820 : function()\r
+                       {\r
+                               prepareEditor( 'test_ticket_3820_editor', null,\r
+                                       { enterMode : CKEDITOR.ENTER_BR },\r
+                                       function( editor )\r
+                                       {\r
+                                               this.resume( function()\r
+                                               {\r
+                                                       editor.focus();\r
+\r
+                                                       var doc = editor.document,\r
+                                                               range = new CKEDITOR.dom.range( doc );\r
+                                                       setRange( range, [ 1, 1, 0 ], true );\r
+                                                       var sel = editor.getSelection();\r
+                                                       sel.selectRanges( [ range ] );\r
+\r
+                                                       // Waiting for 'comand state' effected.\r
+                                                       this.wait( function(){\r
+                                                               // Remove list.\r
+                                                               editor.execCommand( 'bulletedlist' );\r
+                                                               assert.areSame( getTextAreaValue( 'test_ticket_3820_result' ),\r
+                                                                       editor.getData(),\r
+                                                                       'Merge list result not correct.' );\r
+                                                       }, 1000 );\r
+\r
+                                               } );\r
+                                       }, this );\r
+                                       this.wait();\r
+                       },\r
+\r
+                       /**\r
+                        *  Test remove list first list item not merging with previous text node.\r
+                        */\r
+                       test_ticket_3836 : function()\r
+                       {\r
+                               prepareEditor( 'test_ticket_3836_editor', null,\r
+                                       { enterMode : CKEDITOR.ENTER_BR },\r
+                                       function( editor )\r
+                                       {\r
+                                               this.resume( function()\r
+                                               {\r
+                                                       this.wait( function ()\r
+                                                       {\r
+                                                               editor.focus();\r
+\r
+                                                               var doc = editor.document,\r
+                                                                       range = new CKEDITOR.dom.range( doc );\r
+                                                               setRange( range, [ 1, 1, 0, 0 ], [ 1, 1, 1, 1 ] );\r
+                                                               var sel = editor.getSelection();\r
+                                                               sel.selectRanges( [ range ] );\r
+\r
+                                                               // Waiting for 'comand state' effected.\r
+                                                               this.wait( function(){\r
+                                                                       // Remove list.\r
+                                                                       editor.execCommand( 'bulletedlist' );\r
+                                                                       assert.areSame( getTextAreaValue( 'test_ticket_3836_result' ),\r
+                                                                               editor.getData(),\r
+                                                                               'Remove list result not correct.' );\r
+                                                               }, 1000 );\r
+                                                       }, 1000 );\r
+\r
+                                               } );\r
+                                       }, this );\r
+                                       this.wait();\r
+                       },\r
+\r
+                       name :document.title\r
+               };\r
+       } )() );\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>￘\r
+<textarea id="test_ticket_3151_editor"><ol><li>text</li></ol></textarea>\r
+<textarea id="test_ticket_3151_result">text</textarea>\r
+<textarea id="test_ticket_3820_editor"><ul><li>bullet line 1</li><li>bullet line 2</li></ul><p>Second line</p></textarea>\r
+<textarea id="test_ticket_3820_result"><ul><li>bullet line 1</li><li>bullet line 2</li><li>Second line</li></ul></textarea>\r
+<textarea id="test_ticket_3773_editor"><ol><li>line1</li><li>line2</li></ol></textarea>\r
+<textarea id="test_ticket_3773_result">line1<br />line2</textarea>\r
+<textarea id="test_ticket_3836_editor">line1<ul><li>item1</li><li>item2</li></ul>line2</textarea>\r
+<textarea id="test_ticket_3836_result">line1<br />item1<br />item2<br />line2</textarea>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/plugins/selection/selection.html b/_source/tests/plugins/selection/selection.html
new file mode 100644 (file)
index 0000000..a417df4
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: selection</title>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+//<![CDATA[\r
+CKEDITOR.plugins.load( [ 'selection' ] );\r
+//]]>\r
+       </script>\r
+       <script type="text/javascript">\r
+//<![CDATA[\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       var assert = CKEDITOR.test.assert;\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       return {\r
+               test_selection_ie : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       var $range = document.body.createTextRange();\r
+                       $range.findText( 'This' );\r
+                       $range.select();\r
+\r
+                       var range = doc.getSelection().getRanges()[ 0 ];\r
+                       range.select();\r
+\r
+                       var $range2 = document.selection.createRange();\r
+                       assert.areSame( 0, $range.compareEndPoints( 'StartToStart', $range2 ), 'StartToStart' );\r
+                       assert.areSame( 0, $range.compareEndPoints( 'EndToEnd', $range2 ), 'EndToEnd' );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})());\r
+//]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <p>\r
+               This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">CKEditor</a>.</p>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/plugins/styles/styles.html b/_source/tests/plugins/styles/styles.html
new file mode 100644 (file)
index 0000000..9648cd3
--- /dev/null
@@ -0,0 +1,596 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: styles</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+\r
+CKEDITOR.plugins.load( [ 'styles', 'domiterator', 'htmldataprocessor' ] );\r
+\r
+       </script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var testCase;\r
+\r
+CKEDITOR.test.addTestCase( testCase = (function()\r
+{\r
+       // Local references.\r
+       var assert                      = CKEDITOR.test.assert;\r
+       var getInnerHtml        = CKEDITOR.test.getInnerHtml;\r
+\r
+       function getInnerHtmlParsed( element )\r
+       {\r
+               var dataProcessor = new CKEDITOR.htmlDataProcessor();\r
+               dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+               return dataProcessor.toDataFormat( getInnerHtml( element, false ) );\r
+       }\r
+\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       return {\r
+               test_inline1 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this is some sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ).getFirst(), 5 );\r
+                       range.setEnd( doc.getById( '_P1' ).getFirst(), 7 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <b>is</b> some sample text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline2 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ).getChild( 1 ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 2 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <i><b>is some </b></i>sample text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline3 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ).getChild( 1 ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 2 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <b><i>is</i> some </b>sample text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               // Inline - Remove inner duplicates.\r
+               test_inline4 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 3 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this is some sample text</b>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               // Inline - Merge with next.\r
+               test_inline5 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 1 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this is some </b>sample text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               // Inline - Merge with previous.\r
+               test_inline6 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 2 );\r
+                       range.setEnd( doc.getById( '_P1' ).getChild( 2 ), 6 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <b>is some sample</b> text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               // Inline - Merge several with next.\r
+               test_inline7 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( '<i><u>this </u></i><b><i><u>is</u> some</i> sample</b> text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 1 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b><i><u>this is</u> some</i> sample</b> text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               // Inline - Merge several with previous.\r
+               test_inline8 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is <i>some <u>sample</u></i></b><i><u> text</u></i>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 2 );\r
+                       range.setEnd( doc.getById( '_P1' ), 3 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <b>is <i>some <u>sample text</u></i></b>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline9 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <i>is some </i>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ).getChild( 1 ), 0 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this </b><i>is some </i>sample text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline10 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this is some sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 1 );\r
+\r
+                       var style = new CKEDITOR.style(\r
+                               {\r
+                                       element : 'b',\r
+                                       attributes :\r
+                                               {\r
+                                                       lang : 'it',\r
+                                                       title : 'test'\r
+                                               },\r
+                                       styles :\r
+                                               {\r
+                                                       'font-size' : '10pt',\r
+                                                       'text-decoration' : 'line-through'\r
+                                               }\r
+                               } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b lang="it" style="font-size:10pt;text-decoration:line-through;" title="test">this is some sample text</b>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline11 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b lang="it" class="sample">is</b> <b lang="it" style="font-size: 10pt; text-decoration: line-through;" title="test">some sample</b> <b>t</b>ext' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 7 );\r
+\r
+                       var style = new CKEDITOR.style(\r
+                               {\r
+                                       element : 'b',\r
+                                       attributes :\r
+                                               {\r
+                                                       lang : 'it',\r
+                                                       title : 'test'\r
+                                               },\r
+                                       styles :\r
+                                               {\r
+                                                       'font-size' : '10pt',\r
+                                                       'text-decoration' : 'line-through'\r
+                                               }\r
+                               } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b lang="it" style="font-size: 10pt; text-decoration: line-through;" title="test">this <b class="sample">is</b> some sample text</b>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline11 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <span class="a">is</span> some <span class="b">sample</span> text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 5 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', attributes : { 'class' : 'b' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<span class="b">this <span class="a">is</span> some sample text</span>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline12 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <span style="font-size:12pt; font-weight:600">is</span> some <span style="font-size:10px;">sample</span> text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 5 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', styles : { 'font-size' : '1.5em' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<span style="font-size:1.5em;">this <span style="font-weight:600;">is</span> some sample text</span>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline13 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some sample</b> text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 3 );\r
+                       range.setEnd( doc.getById( '_P1' ), 3 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <b>is <i>some sample</i></b><i> text</i>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline14 : function()\r
+               {\r
+                       var para = doc.getById( '_P1' );\r
+\r
+                       para.setHtml( 'this is some sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( para.getFirst(), 0 );\r
+                       range.setEnd( para.getFirst(), 7 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this is</b> some sample text', getInnerHtml( '_P1' ), 'First range' );\r
+\r
+                       para.setHtml( para.getHtml() );\r
+\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( para.getFirst().getFirst(), 5 );\r
+                       range.setEnd( para.getChild( 1 ), 5 );\r
+\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this is some</b> sample text', getInnerHtml( '_P1' ), 'Second range' );\r
+               },\r
+\r
+               test_inline15 : function()\r
+               {\r
+                       var para = doc.getById( '_P1' );\r
+\r
+                       para.setHtml( 'this is some sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( para.getFirst(), 0 );\r
+                       range.setEnd( para.getFirst(), 7 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', styles : { 'font-family' : '#(family)' } }, { family : 'Arial,Helvetica,sans-serif' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<span style="font-family:arial,helvetica,sans-serif;">this is</span> some sample text', getInnerHtml( '_P1' ), 'First range' );\r
+\r
+                       para.setHtml( para.getHtml() );\r
+\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( para.getFirst().getFirst(), 5 );\r
+                       range.setEnd( para.getChild( 1 ), 5 );\r
+\r
+                       style = new CKEDITOR.style( { element : 'span', styles : { 'font-family' : '#(family)' } }, { family : 'Georgia,serif' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<span style="font-family:arial,helvetica,sans-serif;">this <span style="font-family:georgia,serif;">is</span></span><span style="font-family:georgia,serif;"> some</span> sample text', getInnerHtml( '_P1' ), 'Second range' );\r
+               },\r
+\r
+               test_inline16 : function()\r
+               {\r
+                       var para = doc.getById( '_P1' );\r
+\r
+                       para.setHtml( '<b lang="pt" style="font-size:11pt;color:red;">this is some sample text</b>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( para.getFirst().getFirst(), 4 );\r
+                       range.setEnd( para.getFirst(), 10 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b', styles : { color : 'red', 'font-weight' : '700' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b lang="pt" style="color:red;font-size:11pt;">this<b style="font-weight:700;"> is some sample text</b></b>', getInnerHtml( '_P1' ), 'First range' );\r
+               },\r
+\r
+               test_inline_nobreak1 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this is <a href="http://example.com/">some sample</a> text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 4 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this is </b><a href="http://example.com/"><b>some</b> sample</a> text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_ticket_2040 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">ckeditor<\/a>.' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 1 );\r
+                       range.setEnd( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 6 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this is some <strong><i>sample</i> text<\/strong>. you are using <a href="http://www.fckeditor.net/">ckeditor<\/a>.', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_checkElementRemovable1 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+\r
+                       assert.isTrue( style.checkElementRemovable( element ) );\r
+               },\r
+\r
+               test_checkElementRemovable2 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i' } );\r
+\r
+                       assert.isFalse( style.checkElementRemovable( element ) );\r
+               },\r
+\r
+               test_checkElementRemovable3 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b', attributes : { lang : 'pt' } } );\r
+\r
+                       assert.isTrue( style.checkElementRemovable( element ) );\r
+               },\r
+\r
+               test_checkElementRemovable4 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b', attributes : { lang : 'pt' } } );\r
+\r
+                       assert.isFalse( style.checkElementRemovable( element, true ) );\r
+               },\r
+\r
+               test_checkElementRemovable5 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="color : #fff">Test</span>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'pt' }, style : { color : '#ffffff' } } );\r
+\r
+                       assert.isTrue( style.checkElementRemovable( element, true ) );\r
+               },\r
+\r
+               test_checkElementRemovable6 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="color : #fff">Test</span>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'pt' }, style : { color : '#fffff0' } } );\r
+\r
+                       assert.isTrue( style.checkElementRemovable( element, true ) );\r
+               },\r
+\r
+               test_checkElementRemovable7 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="color : #fff">Test</span>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'fr' }, style : { color : '#ffffff' } } );\r
+\r
+                       assert.isFalse( style.checkElementRemovable( element, true ) );\r
+               },\r
+\r
+               test_checkElementRemovable8 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="font-size: 10px">Test</span>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'pt' , style : 'font-size:10px;' } } );\r
+\r
+                       assert.isTrue( style.checkElementRemovable( element, true ) );\r
+               },\r
+\r
+               test_ticket_3091 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( 'outter<table><tr><td>text</td></tr></table>outter' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( element );\r
+\r
+                       var styleDef =\r
+                       {\r
+                               element         : 'span',\r
+                               styles          : { 'font-family' : '#(family)' },\r
+                               overrides       : [ { element : 'font', attributes : { 'face' : null } } ]\r
+                       };\r
+\r
+                       var style = new CKEDITOR.style( styleDef, { 'family' : 'Arial,Helvetica,sans-serif' } );\r
+                       style.applyToRange( range );\r
+\r
+                       style = new CKEDITOR.style( styleDef, { 'family' : 'Comic Sans MS,cursive' } );\r
+                       style.applyToRange( range );\r
+\r
+                       style = new CKEDITOR.style( styleDef, { 'family' : 'Courier New,Courier,monospace' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<span style="font-family:couriernew,courier,monospace;">outter</span><table><tbody><tr><td><span style="font-family:couriernew,courier,monospace;">text</span></td></tr></tbody></table><span style="font-family:couriernew,courier,monospace;">outter</span>', getInnerHtml( element ) );\r
+               },\r
+\r
+               test_ticket_3091_2 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( 'outter<p>text</p>outter' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( element );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i', attributes : { title : 'x' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<i title="x">outter</i><p><i title="x">text</i></p><i title="x">outter</i>', getInnerHtml( element ), 'First step failed' );\r
+\r
+                       style = new CKEDITOR.style( { element : 'i', attributes : { title : 'y' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<i title="y">outter</i><p><i title="y">text</i></p><i title="y">outter</i>', getInnerHtml( element ), 'Second step failed' );\r
+\r
+                       style = new CKEDITOR.style( { element : 'i', attributes : { title : 'z' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<i title="z">outter</i><p><i title="z">text</i></p><i title="z">outter</i>', getInnerHtml( element ), 'Third step failed' );\r
+               },\r
+\r
+               // TC based on the state of the second step in the above test, before it got fixed.\r
+               test_ticket_3091_3 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( '<p><i title="y">text</i><i title="x"></i></p><i title="y">outter</i><i title="x"></i>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( element );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i', attributes : { title : 'z' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<p><i title="z">text</i></p><i title="z">outter</i>', getInnerHtml( element ) );\r
+               },\r
+\r
+               // Remove inline style when range collapsed at element boundaries,\r
+               // move out of the removing-style element, with inner style copied.\r
+               test_ticket_3309 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( 'this is some <b><i id="_i1">styles</i></b> text' );\r
+\r
+                       // This is some <b><i>styles^</i></b> text\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_i1' ), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.removeFromRange( range );\r
+\r
+                       assert.areSame( 'this is some <b><i id="_i1">styles</i></b><i></i> text', getInnerHtml( element ) );\r
+               },\r
+\r
+               // No inner style preserved, simply move out of the removing-style element.\r
+               test_ticket_3309_2 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( 'this is some <b id="_b1">styles</b> text' );\r
+\r
+                       // This is some <b>styles^</b> text\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_b1' ), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.removeFromRange( range );\r
+                       // This is some <b>styles</b>^ text\r
+                       assert.areSame( doc.getById( '_b1' ).getParent().$, range.startContainer.$ );\r
+                       assert.areSame( 2, range.startOffset );\r
+                       assert.areSame( 'this is some <b id="_b1">styles</b> text', getInnerHtml( element ) );\r
+               },\r
+\r
+               // With style overrides.\r
+               test_ticket_3309_3 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( 'text <strong><bold><span><b><i id="_i1">styles</i></b></span></bold></strong>' );\r
+\r
+                       // text <strong><bold><span><b><i id="_i1">^styles</i></b></span></bold></strong>\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_i1' ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' , overrides : [ 'strong', 'bold' ] } );\r
+                       style.removeFromRange( range );\r
+\r
+                       // text <span><i>^</i></span><bold><span><b><i>styles</i></b></span></bold>\r
+                       assert.areSame( 'text <span><i></i></span><strong><bold><span><b><i id="_i1">styles</i></b></span></bold></strong>', getInnerHtml( element ) );\r
+               },\r
+\r
+               // Test convert multiple paragraphs to one <pre>.\r
+               test_ticket_3188 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( '<p id="_P2">\nparagraph1<br /><br />para\t\ngraph2</p><p id="_P3">\nparagraph3\n</p>' );\r
+\r
+                       // <p id="_P2">[paragraph1</p><p id="_P3">paragraph2]</p>\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_P2' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( '_P3' ), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'pre' } );\r
+                       style.applyToRange( range );\r
+\r
+                       var result = getInnerHtmlParsed( element );\r
+                       assert.areSame( '<pre>paragraph1\n\npara graph2\n\nparagraph3</pre>', result );\r
+               },\r
+\r
+               // Test convert one <pre> to multiple paragraphs.\r
+               test_ticket_3188_2 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( '<pre>\n\tparagraph1\t\tparagraph1\nparagraph2\n\t\n\tpara   graph3\n</pre>' );\r
+\r
+                       //<pre>[\n\tparagraph1\t\tparagraph1\nparagraph2\n\t\n\tpara   graph3\n]</pre>\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( doc.getById( '_P1' ).getFirst() );\r
+                       var style = new CKEDITOR.style( { element : 'p' } );\r
+                       style.applyToRange( range );\r
+\r
+                       var result = getInnerHtmlParsed( element );\r
+\r
+                       if ( CKEDITOR.env.webkit || CKEDITOR.env.opera )\r
+                               result = result.replace( /\xa0/g, '&nbsp;' );\r
+\r
+                       assert.areSame( '<p>&nbsp;paragraph1&nbsp; paragraph1<br />paragraph2</p><p>&nbsp;para&nbsp;&nbsp; graph3</p>',\r
+                                        result );\r
+               },\r
+               name : document.title\r
+       };\r
+})() );\r
+//window.onload = testCase.test_ticket_3188;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="_P1"></div>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/test.css b/_source/tests/test.css
new file mode 100644 (file)
index 0000000..c14c96a
--- /dev/null
@@ -0,0 +1,81 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+body\r
+{\r
+       margin:10px;\r
+}\r
+\r
+#testLogger\r
+{\r
+       position: absolute;\r
+       right: 10px;\r
+       left: 10px;\r
+       top: 10px;\r
+       font-family: Monospace;\r
+       border: solid 2px black;\r
+       background: #ffffff;\r
+       padding: 0px;\r
+}\r
+\r
+/* IE6 */\r
+* html #testLogger\r
+{\r
+       width: 100%;\r
+}\r
+\r
+#testLogger.testAll\r
+{\r
+       position: static;\r
+}\r
+\r
+#testLogger pre\r
+{\r
+       margin: 0 0 0 40px;\r
+       background-color: #f0f0f0;\r
+       padding: 1px 4px 1px 4px;\r
+}\r
+\r
+#testLogger div\r
+{\r
+       margin: 2px;\r
+}\r
+\r
+#testLogger div div\r
+{\r
+       margin-left: 20px;\r
+}\r
+\r
+.testEntry\r
+{\r
+       padding: 5px;\r
+       margin: 0 !important;\r
+}\r
+\r
+.testEntry:hover\r
+{\r
+       background-color: #ffff99;\r
+}\r
+\r
+.testFail, .testPass, .testIgnore\r
+{\r
+       padding-left: 3px;\r
+       padding-right: 3px;\r
+}\r
+\r
+.testFail\r
+{\r
+       background-color: #ff0000;\r
+}\r
+\r
+.testPass\r
+{\r
+       background-color: #00ff00;\r
+}\r
+\r
+.testIgnore\r
+{\r
+       background-color: #f1f100;\r
+}\r
diff --git a/_source/tests/test.js b/_source/tests/test.js
new file mode 100644 (file)
index 0000000..b0d8b6f
--- /dev/null
@@ -0,0 +1,93 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/*jsl:import yuitest.js*/\r
+\r
+// Inject the YUI Test files into the page.\r
+// URLs copied from http://developer.yahoo.com/yui/yuitest/\r
+document.write(\r
+       '<script type="text/javascript" src="' +\r
+       CKEDITOR.basePath +\r
+       '_tests/yuitest.js"></script>' );\r
+\r
+document.write(\r
+       '<script type="text/javascript" src="' +\r
+       CKEDITOR.basePath +\r
+       '_source/' +\r
+       'core/test.js"></script>' );\r
+\r
+(function()\r
+{\r
+       var createLogger = function()\r
+       {\r
+               document.body.appendChild( document.createElement( 'div' ) ).id = 'testLogger';\r
+       };\r
+\r
+       var outputResult = function( text )\r
+       {\r
+               var div = document.getElementById('testLogger').appendChild( document.createElement( 'div' ) );\r
+               div.className = 'testEntry';\r
+               div.innerHTML = text;\r
+       };\r
+\r
+       var htmlEncode = function( data )\r
+       {\r
+               if ( typeof data != 'string' )\r
+                       return data;\r
+\r
+               return data.replace(\r
+                       /&/g, '&amp;' ).replace(\r
+                       /</g, '&lt;' ).replace(\r
+                       />/g, '&gt;' );\r
+       };\r
+\r
+       window.onload = function()\r
+       {\r
+               createLogger();\r
+               var runner = YAHOO.tool.TestRunner;\r
+\r
+               var handleTestResult = function( data )\r
+               {\r
+                       switch( data.type )\r
+                       {\r
+                               case runner.TEST_FAIL_EVENT:\r
+\r
+                                       var expected = data.error.expected;\r
+                                       if ( expected && expected.nodeType )\r
+                                               expected += ' (' + ( expected.nodeType == 1 ? expected.nodeName : expected.nodeValue ) + ')';\r
+\r
+                                       var actual = data.error.actual;\r
+                                       if ( actual && actual.nodeType )\r
+                                               actual += ' (' + ( actual.nodeType == 1 ? actual.nodeName : actual.nodeValue ) + ')';\r
+\r
+                                       outputResult(\r
+                                               '<span class="testFail">FAIL</span> Test named "' + data.testName +\r
+                                               '" failed with message: "' + htmlEncode( data.error.message ) +\r
+                                               '".<div>Expected:</div><pre>' + htmlEncode( expected ) +\r
+                                               '<br></pre><div>Actual:</div><pre>' + htmlEncode( actual ) + '<br></pre>' );\r
+                                       break;\r
+                               case runner.TEST_PASS_EVENT:\r
+                                       outputResult( '<span class="testPass">PASS</span> Test named "' + data.testName + '" passed.' );\r
+                                       break;\r
+                               case runner.TEST_IGNORE_EVENT:\r
+                                       outputResult( '<span class="testIgnore">IGNORE</span> Test named "' + data.testName + '" was ignored.' );\r
+                                       break;\r
+                       }\r
+               };\r
+\r
+               runner.subscribe(runner.TEST_FAIL_EVENT, handleTestResult);\r
+               runner.subscribe(runner.TEST_IGNORE_EVENT, handleTestResult);\r
+               runner.subscribe(runner.TEST_PASS_EVENT, handleTestResult);\r
+\r
+               if ( window.parent && window.parent.onTestStart )\r
+               {\r
+                       runner.subscribe(runner.TEST_CASE_BEGIN_EVENT, window.parent.onTestStart);\r
+                       runner.subscribe(runner.TEST_CASE_COMPLETE_EVENT, window.parent.onTestComplete);\r
+               }\r
+\r
+               if ( !CKEDITOR.test.deferRunner )\r
+                       runner.run();\r
+       };\r
+})();\r
diff --git a/_source/tests/testall.html b/_source/tests/testall.html
new file mode 100644 (file)
index 0000000..55df0bd
--- /dev/null
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEditor Core Tests Runner</title>\r
+       <link rel="stylesheet" type="text/css" href="test.css" />\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var testList =\r
+[\r
+       'core/ajax',\r
+       'core/bootstrap',\r
+       'core/ckeditor',\r
+       'core/editor',\r
+       'core/env',\r
+       'core/event',\r
+       'core/plugins',\r
+       'core/scriptloader',\r
+       'core/tools',\r
+       'core/xml',\r
+       'core/dom/document',\r
+       'core/dom/documentfragment',\r
+       'core/dom/element',\r
+       'core/dom/node',\r
+       'core/dom/range',\r
+       'core/dom/text',\r
+       'core/dom/walker',\r
+       'core/dom/window',\r
+       'core/htmlparser/fragment',\r
+       'core/htmlparser/htmlparser',\r
+       'plugins/domiterator/domiterator',\r
+       'plugins/htmldataprocessor/htmldataprocessor',\r
+       'plugins/link/link',\r
+       'plugins/list/list',\r
+       'plugins/styles/styles',\r
+       'plugins/selection/selection'\r
+];\r
+\r
+var currentTest;\r
+var currentTime;\r
+var totalTime;\r
+var totalFailed = 0;\r
+var totalPassed = 0;\r
+\r
+function runTest()\r
+{\r
+       currentTest = testList.shift();\r
+\r
+       if ( currentTest )\r
+               document.getElementById( 'testFrame' ).src = currentTest + '.html';\r
+}\r
+\r
+function onTestStart( data )\r
+{\r
+       var div = document.getElementById('testLogger').appendChild( document.createElement( 'div' ) );\r
+       div.className = 'testEntry';\r
+       div.innerHTML = 'Testing "<a href="' + currentTest + '.html" target="_blank">' + data.testCase.name + '</a>"...';\r
+\r
+       currentTime = new Date();\r
+\r
+       if ( !totalTime )\r
+               totalTime = currentTime;\r
+}\r
+\r
+function onTestComplete( data )\r
+{\r
+       var finishTime = new Date();\r
+\r
+       var failed = data.results.failed;\r
+       var passed = data.results.passed;\r
+\r
+       var html = '<span class="testIgnore">Unknown</span>';\r
+\r
+       if ( failed > 0 )\r
+               html = '<span class="testFail">FAIL</span>';\r
+       else\r
+               html = '<span class="testPass">PASS</span>';\r
+\r
+       html += ' Test "<a href="' + currentTest + '.html" target="_blank">' + data.testCase.name + '</a>" (' + failed + ' failed / ' + passed + ' passed) - ' + ( finishTime - currentTime ) + 'ms';\r
+\r
+       var div = document.getElementById('testLogger').lastChild;\r
+       div.innerHTML = html;\r
+\r
+       totalFailed += failed;\r
+       totalPassed += passed;\r
+\r
+       document.getElementById('testFailed').innerHTML = totalFailed;\r
+       document.getElementById('testPassed').innerHTML = totalPassed;\r
+       document.getElementById('totalTime').innerHTML = finishTime - totalTime;\r
+\r
+       document.title = totalFailed + ' failed / ' + totalPassed + ' passed - CKEditor Core Tests Runner';\r
+\r
+       runTest();\r
+}\r
+\r
+window.onload = function()\r
+{\r
+       // IE was "caching" the latest logged div on refresh. So, we must clean it\r
+       // on startup.\r
+       document.getElementById('testLogger').innerHTML = '';\r
+\r
+       runTest();\r
+};\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <h1>CKEditor Core Tests Runner (<span id="testFailed">0</span> failed / <span id="testPassed">0</span> passed) - <span id="totalTime">0</span>ms</h1>\r
+       <iframe id="testFrame" src="javascript:;" style="position: absolute; width: 50px; height: 50px; left: -1000px">\r
+       </iframe>\r
+       <div id="testLogger" class="testAll"></div>\r
+</body>\r
+</html>\r
diff --git a/_source/tests/yuitest.js b/_source/tests/yuitest.js
new file mode 100644 (file)
index 0000000..c3ab47a
--- /dev/null
@@ -0,0 +1,75 @@
+/*jsl:ignoreall*/\r
+/*\r
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.5.2\r
+\r
+== BEGIN LICENSE ==\r
+\r
+Software License Agreement (BSD License)\r
+\r
+Copyright (c) 2008, Yahoo! Inc.\r
+All rights reserved.\r
+\r
+Redistribution and use of this software in source and binary forms, with or without modification, are\r
+permitted provided that the following conditions are met:\r
+\r
+* Redistributions of source code must retain the above\r
+  copyright notice, this list of conditions and the\r
+  following disclaimer.\r
+\r
+* Redistributions in binary form must reproduce the above\r
+  copyright notice, this list of conditions and the\r
+  following disclaimer in the documentation and/or other\r
+  materials provided with the distribution.\r
+\r
+* Neither the name of Yahoo! Inc. nor the names of its\r
+  contributors may be used to endorse or promote products\r
+  derived from this software without specific prior\r
+  written permission of Yahoo! Inc.\r
+\r
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED\r
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\r
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\r
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\r
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\r
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+== END LICENSE ==\r
+*/\r
+\r
+/*\r
+This file contains the YUI Tester code as well as its dependencies, in the\r
+order defined at:\r
+http://developer.yahoo.com/yui/yuitest/\r
+*/\r
+\r
+// yahoo-dom-event/yahoo-dom-event.js\r
+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;if(!I[A]){I[A]={versions:[],builds:[]};}var 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(var 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};var 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]);}}}}}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 A=YAHOO.lang,C=["toString","valueOf"],B={isArray:function(D){if(D){return A.isNumber(D.length)&&A.isFunction(D.splice);}return false;},isBoolean:function(D){return typeof D==="boolean";},isFunction:function(D){return typeof D==="function";},isNull:function(D){return D===null;},isNumber:function(D){return typeof D==="number"&&isFinite(D);},isObject:function(D){return(D&&(typeof D==="object"||A.isFunction(D)))||false;},isString:function(D){return typeof D==="string";},isUndefined:function(D){return typeof D==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(F,E){for(var D=0;D<C.length;D=D+1){var H=C[D],G=E[H];if(A.isFunction(G)&&G!=Object.prototype[H]){F[H]=G;}}}:function(){},extend:function(H,I,G){if(!I||!H){throw new Error("extend failed, please check that "+"all dependencies are included.");}var E=function(){};E.prototype=I.prototype;H.prototype=new E();H.prototype.constructor=H;H.superclass=I.prototype;if(I.prototype.constructor==Object.prototype.constructor){I.prototype.constructor=I;}if(G){for(var D in G){if(A.hasOwnProperty(G,D)){H.prototype[D]=G[D];}}A._IEEnumFix(H.prototype,G);}},augmentObject:function(H,G){if(!G||!H){throw new Error("Absorb failed, verify dependencies.");}var D=arguments,F,I,E=D[2];if(E&&E!==true){for(F=2;F<D.length;F=F+1){H[D[F]]=G[D[F]];}}else{for(I in G){if(E||!(I in H)){H[I]=G[I];}}A._IEEnumFix(H,G);}},augmentProto:function(G,F){if(!F||!G){throw new Error("Augment failed, verify dependencies.");}var D=[G.prototype,F.prototype];for(var E=2;E<arguments.length;E=E+1){D.push(arguments[E]);}A.augmentObject.apply(this,D);},dump:function(D,I){var F,H,K=[],L="{...}",E="f(){...}",J=", ",G=" => ";if(!A.isObject(D)){return D+"";}else{if(D instanceof Date||("nodeType" in D&&"tagName" in D)){return D;}else{if(A.isFunction(D)){return E;}}}I=(A.isNumber(I))?I:3;if(A.isArray(D)){K.push("[");for(F=0,H=D.length;F<H;F=F+1){if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}if(K.length>1){K.pop();}K.push("]");}else{K.push("{");for(F in D){if(A.hasOwnProperty(D,F)){K.push(F+G);if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}}if(K.length>1){K.pop();}K.push("}");}return K.join("");},substitute:function(S,E,L){var I,H,G,O,P,R,N=[],F,J="dump",M=" ",D="{",Q="}";for(;;){I=S.lastIndexOf(D);if(I<0){break;}H=S.indexOf(Q,I);if(I+1>=H){break;}F=S.substring(I+1,H);O=F;R=null;G=O.indexOf(M);if(G>-1){R=O.substring(G+1);O=O.substring(0,G);}P=E[O];if(L){P=L(O,P,R);}if(A.isObject(P)){if(A.isArray(P)){P=A.dump(P,parseInt(R,10));}else{R=R||"";var K=R.indexOf(J);if(K>-1){R=R.substring(4);}if(P.toString===Object.prototype.toString||K>-1){P=A.dump(P,parseInt(R,10));}else{P=P.toString();}}}else{if(!A.isString(P)&&!A.isNumber(P)){P="~-"+N.length+"-~";N[N.length]=F;}}S=S.substring(0,I)+P+S.substring(H+1);}for(I=N.length-1;I>=0;I=I-1){S=S.replace(new RegExp("~-"+I+"-~"),"{"+N[I]+"}","g");}return S;},trim:function(D){try{return D.replace(/^\s+|\s+$/g,"");}catch(E){return D;}},merge:function(){var G={},E=arguments;for(var F=0,D=E.length;F<D;F=F+1){A.augmentObject(G,E[F],true);}return G;},later:function(K,E,L,G,H){K=K||0;E=E||{};var F=L,J=G,I,D;if(A.isString(L)){F=E[L];}if(!F){throw new TypeError("method undefined");}if(!A.isArray(J)){J=[G];}I=function(){F.apply(E,J);};D=(H)?setInterval(I,K):setTimeout(I,K);return{interval:H,cancel:function(){if(this.interval){clearInterval(D);}else{clearTimeout(D);}}};},isValue:function(D){return(A.isObject(D)||A.isString(D)||A.isNumber(D)||A.isBoolean(D));}};A.hasOwnProperty=(Object.prototype.hasOwnProperty)?function(D,E){return D&&D.hasOwnProperty(E);}:function(D,E){return !A.isUndefined(D[E])&&D.constructor.prototype[E]!==D[E];};B.augmentObject(A,B,true);YAHOO.util.Lang=A;A.augment=A.augmentProto;YAHOO.augment=A.augmentProto;YAHOO.extend=A.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.5.2",build:"1076"});YAHOO.util.Get=function(){var M={},L=0,Q=0,E=false,N=YAHOO.env.ua,R=YAHOO.lang;var J=function(V,S,W){var T=W||window,X=T.document,Y=X.createElement(V);for(var U in S){if(S[U]&&YAHOO.lang.hasOwnProperty(S,U)){Y.setAttribute(U,S[U]);}}return Y;};var H=function(S,T,V){var U=V||"utf-8";return J("link",{"id":"yui__dyn_"+(Q++),"type":"text/css","charset":U,"rel":"stylesheet","href":S},T);\r
+};var O=function(S,T,V){var U=V||"utf-8";return J("script",{"id":"yui__dyn_"+(Q++),"type":"text/javascript","charset":U,"src":S},T);};var A=function(S,T){return{tId:S.tId,win:S.win,data:S.data,nodes:S.nodes,msg:T,purge:function(){D(this.tId);}};};var B=function(S,V){var T=M[V],U=(R.isString(S))?T.win.document.getElementById(S):S;if(!U){P(V,"target node not found: "+S);}return U;};var P=function(V,U){var S=M[V];if(S.onFailure){var T=S.scope||S.win;S.onFailure.call(T,A(S,U));}};var C=function(V){var S=M[V];S.finished=true;if(S.aborted){var U="transaction "+V+" was aborted";P(V,U);return ;}if(S.onSuccess){var T=S.scope||S.win;S.onSuccess.call(T,A(S));}};var G=function(U,Y){var T=M[U];if(T.aborted){var W="transaction "+U+" was aborted";P(U,W);return ;}if(Y){T.url.shift();if(T.varName){T.varName.shift();}}else{T.url=(R.isString(T.url))?[T.url]:T.url;if(T.varName){T.varName=(R.isString(T.varName))?[T.varName]:T.varName;}}var b=T.win,a=b.document,Z=a.getElementsByTagName("head")[0],V;if(T.url.length===0){if(T.type==="script"&&N.webkit&&N.webkit<420&&!T.finalpass&&!T.varName){var X=O(null,T.win,T.charset);X.innerHTML='YAHOO.util.Get._finalize("'+U+'");';T.nodes.push(X);Z.appendChild(X);}else{C(U);}return ;}var S=T.url[0];if(T.type==="script"){V=O(S,b,T.charset);}else{V=H(S,b,T.charset);}F(T.type,V,U,S,b,T.url.length);T.nodes.push(V);if(T.insertBefore){var c=B(T.insertBefore,U);if(c){c.parentNode.insertBefore(V,c);}}else{Z.appendChild(V);}if((N.webkit||N.gecko)&&T.type==="css"){G(U,S);}};var K=function(){if(E){return ;}E=true;for(var S in M){var T=M[S];if(T.autopurge&&T.finished){D(T.tId);delete M[S];}}E=false;};var D=function(Z){var W=M[Z];if(W){var Y=W.nodes,S=Y.length,X=W.win.document,V=X.getElementsByTagName("head")[0];if(W.insertBefore){var U=B(W.insertBefore,Z);if(U){V=U.parentNode;}}for(var T=0;T<S;T=T+1){V.removeChild(Y[T]);}}W.nodes=[];};var I=function(T,S,U){var W="q"+(L++);U=U||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[W]=R.merge(U,{tId:W,type:T,url:S,finished:false,nodes:[]});var V=M[W];V.win=V.win||window;V.scope=V.scope||V.win;V.autopurge=("autopurge" in V)?V.autopurge:(T==="script")?true:false;R.later(0,V,G,W);return{tId:W};};var F=function(b,W,V,T,X,Y,a){var Z=a||G;if(N.ie){W.onreadystatechange=function(){var c=this.readyState;if("loaded"===c||"complete"===c){Z(V,T);}};}else{if(N.webkit){if(b==="script"){if(N.webkit>=420){W.addEventListener("load",function(){Z(V,T);});}else{var S=M[V];if(S.varName){var U=YAHOO.util.Get.POLL_FREQ;S.maxattempts=YAHOO.util.Get.TIMEOUT/U;S.attempts=0;S._cache=S.varName[0].split(".");S.timer=R.later(U,S,function(h){var e=this._cache,d=e.length,c=this.win,f;for(f=0;f<d;f=f+1){c=c[e[f]];if(!c){this.attempts++;if(this.attempts++>this.maxattempts){var g="Over retry limit, giving up";S.timer.cancel();P(V,g);}else{}return ;}}S.timer.cancel();Z(V,T);},null,true);}else{R.later(YAHOO.util.Get.POLL_FREQ,null,Z,[V,T]);}}}}else{W.onload=function(){Z(V,T);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(S){R.later(0,null,C,S);},abort:function(T){var U=(R.isString(T))?T:T.tId;var S=M[U];if(S){S.aborted=true;}},script:function(S,T){return I("script",S,T);},css:function(S,T){return I("css",S,T);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.5.2",build:"1076"});(function(){var Y=YAHOO,util=Y.util,lang=Y.lang,env=Y.env,PROV="_provides",SUPER="_supersedes",REQ="expanded",AFTER="_after";var YUI={dupsAllowed:{"yahoo":true,"get":true},info:{"base":"http://yui.yahooapis.com/2.5.2/build/","skin":{"defaultSkin":"sam","base":"assets/skins/","path":"skin.css","after":["reset","fonts","grids","base"],"rollup":3},dupsAllowed:["yahoo","get"],"moduleInfo":{"animation":{"type":"js","path":"animation/animation-min.js","requires":["dom","event"]},"autocomplete":{"type":"js","path":"autocomplete/autocomplete-min.js","requires":["dom","event"],"optional":["connection","animation"],"skinnable":true},"base":{"type":"css","path":"base/base-min.css","after":["reset","fonts","grids"]},"button":{"type":"js","path":"button/button-min.js","requires":["element"],"optional":["menu"],"skinnable":true},"calendar":{"type":"js","path":"calendar/calendar-min.js","requires":["event","dom"],"skinnable":true},"charts":{"type":"js","path":"charts/charts-experimental-min.js","requires":["element","json","datasource"]},"colorpicker":{"type":"js","path":"colorpicker/colorpicker-min.js","requires":["slider","element"],"optional":["animation"],"skinnable":true},"connection":{"type":"js","path":"connection/connection-min.js","requires":["event"]},"container":{"type":"js","path":"container/container-min.js","requires":["dom","event"],"optional":["dragdrop","animation","connection"],"supersedes":["containercore"],"skinnable":true},"containercore":{"type":"js","path":"container/container_core-min.js","requires":["dom","event"],"pkg":"container"},"cookie":{"type":"js","path":"cookie/cookie-beta-min.js","requires":["yahoo"]},"datasource":{"type":"js","path":"datasource/datasource-beta-min.js","requires":["event"],"optional":["connection"]},"datatable":{"type":"js","path":"datatable/datatable-beta-min.js","requires":["element","datasource"],"optional":["calendar","dragdrop"],"skinnable":true},"dom":{"type":"js","path":"dom/dom-min.js","requires":["yahoo"]},"dragdrop":{"type":"js","path":"dragdrop/dragdrop-min.js","requires":["dom","event"]},"editor":{"type":"js","path":"editor/editor-beta-min.js","requires":["menu","element","button"],"optional":["animation","dragdrop"],"supersedes":["simpleeditor"],"skinnable":true},"element":{"type":"js","path":"element/element-beta-min.js","requires":["dom","event"]},"event":{"type":"js","path":"event/event-min.js","requires":["yahoo"]},"fonts":{"type":"css","path":"fonts/fonts-min.css"},"get":{"type":"js","path":"get/get-min.js","requires":["yahoo"]},"grids":{"type":"css","path":"grids/grids-min.css","requires":["fonts"],"optional":["reset"]},"history":{"type":"js","path":"history/history-min.js","requires":["event"]},"imagecropper":{"type":"js","path":"imagecropper/imagecropper-beta-min.js","requires":["dom","event","dragdrop","element","resize"],"skinnable":true},"imageloader":{"type":"js","path":"imageloader/imageloader-min.js","requires":["event","dom"]},"json":{"type":"js","path":"json/json-min.js","requires":["yahoo"]},"layout":{"type":"js","path":"layout/layout-beta-min.js","requires":["dom","event","element"],"optional":["animation","dragdrop","resize","selector"],"skinnable":true},"logger":{"type":"js","path":"logger/logger-min.js","requires":["event","dom"],"optional":["dragdrop"],"skinnable":true},"menu":{"type":"js","path":"menu/menu-min.js","requires":["containercore"],"skinnable":true},"profiler":{"type":"js","path":"profiler/profiler-beta-min.js","requires":["yahoo"]},"profilerviewer":{"type":"js","path":"profilerviewer/profilerviewer-beta-min.js","requires":["profiler","yuiloader","element"],"skinnable":true},"reset":{"type":"css","path":"reset/reset-min.css"},"reset-fonts-grids":{"type":"css","path":"reset-fonts-grids/reset-fonts-grids.css","supersedes":["reset","fonts","grids","reset-fonts"],"rollup":4},"reset-fonts":{"type":"css","path":"reset-fonts/reset-fonts.css","supersedes":["reset","fonts"],"rollup":2},"resize":{"type":"js","path":"resize/resize-beta-min.js","requires":["dom","event","dragdrop","element"],"optional":["animation"],"skinnable":true},"selector":{"type":"js","path":"selector/selector-beta-min.js","requires":["yahoo","dom"]},"simpleeditor":{"type":"js","path":"editor/simpleeditor-beta-min.js","requires":["element"],"optional":["containercore","menu","button","animation","dragdrop"],"skinnable":true,"pkg":"editor"},"slider":{"type":"js","path":"slider/slider-min.js","requires":["dragdrop"],"optional":["animation"]},"tabview":{"type":"js","path":"tabview/tabview-min.js","requires":["element"],"optional":["connection"],"skinnable":true},"treeview":{"type":"js","path":"treeview/treeview-min.js","requires":["event"],"skinnable":true},"uploader":{"type":"js","path":"uploader/uploader-experimental.js","requires":["element"]},"utilities":{"type":"js","path":"utilities/utilities.js","supersedes":["yahoo","event","dragdrop","animation","dom","connection","element","yahoo-dom-event","get","yuiloader","yuiloader-dom-event"],"rollup":8},"yahoo":{"type":"js","path":"yahoo/yahoo-min.js"},"yahoo-dom-event":{"type":"js","path":"yahoo-dom-event/yahoo-dom-event.js","supersedes":["yahoo","event","dom"],"rollup":3},"yuiloader":{"type":"js","path":"yuiloader/yuiloader-beta-min.js","supersedes":["yahoo","get"]},"yuiloader-dom-event":{"type":"js","path":"yuiloader-dom-event/yuiloader-dom-event.js","supersedes":["yahoo","dom","event","get","yuiloader","yahoo-dom-event"],"rollup":5},"yuitest":{"type":"js","path":"yuitest/yuitest-min.js","requires":["logger"],"skinnable":true}}},ObjectUtil:{appendArray:function(o,a){if(a){for(var i=0;\r
+i<a.length;i=i+1){o[a[i]]=true;}}},keys:function(o,ordered){var a=[],i;for(i in o){if(lang.hasOwnProperty(o,i)){a.push(i);}}return a;}},ArrayUtil:{appendArray:function(a1,a2){Array.prototype.push.apply(a1,a2);},indexOf:function(a,val){for(var i=0;i<a.length;i=i+1){if(a[i]===val){return i;}}return -1;},toObject:function(a){var o={};for(var i=0;i<a.length;i=i+1){o[a[i]]=true;}return o;},uniq:function(a){return YUI.ObjectUtil.keys(YUI.ArrayUtil.toObject(a));}}};YAHOO.util.YUILoader=function(o){this._internalCallback=null;this._useYahooListener=false;this.onSuccess=null;this.onFailure=Y.log;this.onProgress=null;this.scope=this;this.data=null;this.insertBefore=null;this.charset=null;this.varName=null;this.base=YUI.info.base;this.ignore=null;this.force=null;this.allowRollup=true;this.filter=null;this.required={};this.moduleInfo=lang.merge(YUI.info.moduleInfo);this.rollups=null;this.loadOptional=false;this.sorted=[];this.loaded={};this.dirty=true;this.inserted={};var self=this;env.listeners.push(function(m){if(self._useYahooListener){self.loadNext(m.name);}});this.skin=lang.merge(YUI.info.skin);this._config(o);};Y.util.YUILoader.prototype={FILTERS:{RAW:{"searchExp":"-min\\.js","replaceStr":".js"},DEBUG:{"searchExp":"-min\\.js","replaceStr":"-debug.js"}},SKIN_PREFIX:"skin-",_config:function(o){if(o){for(var i in o){if(lang.hasOwnProperty(o,i)){if(i=="require"){this.require(o[i]);}else{this[i]=o[i];}}}}var f=this.filter;if(lang.isString(f)){f=f.toUpperCase();if(f==="DEBUG"){this.require("logger");}if(!Y.widget.LogWriter){Y.widget.LogWriter=function(){return Y;};}this.filter=this.FILTERS[f];}},addModule:function(o){if(!o||!o.name||!o.type||(!o.path&&!o.fullpath)){return false;}o.ext=("ext" in o)?o.ext:true;o.requires=o.requires||[];this.moduleInfo[o.name]=o;this.dirty=true;return true;},require:function(what){var a=(typeof what==="string")?arguments:what;this.dirty=true;YUI.ObjectUtil.appendArray(this.required,a);},_addSkin:function(skin,mod){var name=this.formatSkin(skin),info=this.moduleInfo,sinf=this.skin,ext=info[mod]&&info[mod].ext;if(!info[name]){this.addModule({"name":name,"type":"css","path":sinf.base+skin+"/"+sinf.path,"after":sinf.after,"rollup":sinf.rollup,"ext":ext});}if(mod){name=this.formatSkin(skin,mod);if(!info[name]){var mdef=info[mod],pkg=mdef.pkg||mod;this.addModule({"name":name,"type":"css","after":sinf.after,"path":pkg+"/"+sinf.base+skin+"/"+mod+".css","ext":ext});}}return name;},getRequires:function(mod){if(!mod){return[];}if(!this.dirty&&mod.expanded){return mod.expanded;}mod.requires=mod.requires||[];var i,d=[],r=mod.requires,o=mod.optional,info=this.moduleInfo,m;for(i=0;i<r.length;i=i+1){d.push(r[i]);m=info[r[i]];YUI.ArrayUtil.appendArray(d,this.getRequires(m));}if(o&&this.loadOptional){for(i=0;i<o.length;i=i+1){d.push(o[i]);YUI.ArrayUtil.appendArray(d,this.getRequires(info[o[i]]));}}mod.expanded=YUI.ArrayUtil.uniq(d);return mod.expanded;},getProvides:function(name,notMe){var addMe=!(notMe),ckey=(addMe)?PROV:SUPER,m=this.moduleInfo[name],o={};if(!m){return o;}if(m[ckey]){return m[ckey];}var s=m.supersedes,done={},me=this;var add=function(mm){if(!done[mm]){done[mm]=true;lang.augmentObject(o,me.getProvides(mm));}};if(s){for(var i=0;i<s.length;i=i+1){add(s[i]);}}m[SUPER]=o;m[PROV]=lang.merge(o);m[PROV][name]=true;return m[ckey];},calculate:function(o){if(this.dirty){this._config(o);this._setup();this._explode();if(this.allowRollup){this._rollup();}this._reduce();this._sort();this.dirty=false;}},_setup:function(){var info=this.moduleInfo,name,i,j;for(name in info){var m=info[name];if(m&&m.skinnable){var o=this.skin.overrides,smod;if(o&&o[name]){for(i=0;i<o[name].length;i=i+1){smod=this._addSkin(o[name][i],name);}}else{smod=this._addSkin(this.skin.defaultSkin,name);}m.requires.push(smod);}}var l=lang.merge(this.inserted);if(!this._sandbox){l=lang.merge(l,env.modules);}if(this.ignore){YUI.ObjectUtil.appendArray(l,this.ignore);}if(this.force){for(i=0;i<this.force.length;i=i+1){if(this.force[i] in l){delete l[this.force[i]];}}}for(j in l){if(lang.hasOwnProperty(l,j)){lang.augmentObject(l,this.getProvides(j));}}this.loaded=l;},_explode:function(){var r=this.required,i,mod;for(i in r){mod=this.moduleInfo[i];if(mod){var req=this.getRequires(mod);if(req){YUI.ObjectUtil.appendArray(r,req);}}}},_skin:function(){},formatSkin:function(skin,mod){var s=this.SKIN_PREFIX+skin;if(mod){s=s+"-"+mod;}return s;},parseSkin:function(mod){if(mod.indexOf(this.SKIN_PREFIX)===0){var a=mod.split("-");return{skin:a[1],module:a[2]};}return null;},_rollup:function(){var i,j,m,s,rollups={},r=this.required,roll;if(this.dirty||!this.rollups){for(i in this.moduleInfo){m=this.moduleInfo[i];if(m&&m.rollup){rollups[i]=m;}}this.rollups=rollups;}for(;;){var rolled=false;for(i in rollups){if(!r[i]&&!this.loaded[i]){m=this.moduleInfo[i];s=m.supersedes;roll=false;if(!m.rollup){continue;}var skin=(m.ext)?false:this.parseSkin(i),c=0;if(skin){for(j in r){if(i!==j&&this.parseSkin(j)){c++;roll=(c>=m.rollup);if(roll){break;}}}}else{for(j=0;j<s.length;j=j+1){if(this.loaded[s[j]]&&(!YUI.dupsAllowed[s[j]])){roll=false;break;}else{if(r[s[j]]){c++;roll=(c>=m.rollup);if(roll){break;}}}}}if(roll){r[i]=true;rolled=true;this.getRequires(m);}}}if(!rolled){break;}}},_reduce:function(){var i,j,s,m,r=this.required;for(i in r){if(i in this.loaded){delete r[i];}else{var skinDef=this.parseSkin(i);if(skinDef){if(!skinDef.module){var skin_pre=this.SKIN_PREFIX+skinDef.skin;for(j in r){m=this.moduleInfo[j];var ext=m&&m.ext;if(!ext&&j!==i&&j.indexOf(skin_pre)>-1){delete r[j];}}}}else{m=this.moduleInfo[i];s=m&&m.supersedes;if(s){for(j=0;j<s.length;j=j+1){if(s[j] in r){delete r[s[j]];}}}}}}},_sort:function(){var s=[],info=this.moduleInfo,loaded=this.loaded,checkOptional=!this.loadOptional,me=this;var requires=function(aa,bb){if(loaded[bb]){return false;}var ii,mm=info[aa],rr=mm&&mm.expanded,after=mm&&mm.after,other=info[bb],optional=mm&&mm.optional;if(rr&&YUI.ArrayUtil.indexOf(rr,bb)>-1){return true;}if(after&&YUI.ArrayUtil.indexOf(after,bb)>-1){return true;\r
+}if(checkOptional&&optional&&YUI.ArrayUtil.indexOf(optional,bb)>-1){return true;}var ss=info[bb]&&info[bb].supersedes;if(ss){for(ii=0;ii<ss.length;ii=ii+1){if(requires(aa,ss[ii])){return true;}}}if(mm.ext&&mm.type=="css"&&(!other.ext)){return true;}return false;};for(var i in this.required){s.push(i);}var p=0;for(;;){var l=s.length,a,b,j,k,moved=false;for(j=p;j<l;j=j+1){a=s[j];for(k=j+1;k<l;k=k+1){if(requires(a,s[k])){b=s.splice(k,1);s.splice(j,0,b[0]);moved=true;break;}}if(moved){break;}else{p=p+1;}}if(!moved){break;}}this.sorted=s;},toString:function(){var o={type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted};lang.dump(o,1);},insert:function(o,type){this.calculate(o);if(!type){var self=this;this._internalCallback=function(){self._internalCallback=null;self.insert(null,"js");};this.insert(null,"css");return ;}this._loading=true;this.loadType=type;this.loadNext();},sandbox:function(o,type){if(o){}else{}this._config(o);if(!this.onSuccess){throw new Error("You must supply an onSuccess handler for your sandbox");}this._sandbox=true;var self=this;if(!type||type!=="js"){this._internalCallback=function(){self._internalCallback=null;self.sandbox(null,"js");};this.insert(null,"css");return ;}if(!util.Connect){var ld=new YAHOO.util.YUILoader();ld.insert({base:this.base,filter:this.filter,require:"connection",insertBefore:this.insertBefore,charset:this.charset,onSuccess:function(){this.sandbox(null,"js");},scope:this},"js");return ;}this._scriptText=[];this._loadCount=0;this._stopCount=this.sorted.length;this._xhr=[];this.calculate();var s=this.sorted,l=s.length,i,m,url;for(i=0;i<l;i=i+1){m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});for(var j=0;j<this._xhr.length;j=j+1){this._xhr[j].abort();}return ;}if(m.type!=="js"){this._loadCount++;continue;}url=m.fullpath||this._url(m.path);var xhrData={success:function(o){var idx=o.argument[0],name=o.argument[2];this._scriptText[idx]=o.responseText;if(this.onProgress){this.onProgress.call(this.scope,{name:name,scriptText:o.responseText,xhrResponse:o,data:this.data});}this._loadCount++;if(this._loadCount>=this._stopCount){var v=this.varName||"YAHOO";var t="(function() {\n";var b="\nreturn "+v+";\n})();";var ref=eval(t+this._scriptText.join("\n")+b);this._pushEvents(ref);if(ref){this.onSuccess.call(this.scope,{reference:ref,data:this.data});}else{this.onFailure.call(this.scope,{msg:this.varName+" reference failure",data:this.data});}}},failure:function(o){this.onFailure.call(this.scope,{msg:"XHR failure",xhrResponse:o,data:this.data});},scope:this,argument:[i,url,s[i]]};this._xhr.push(util.Connect.asyncRequest("GET",url,xhrData));}},loadNext:function(mname){if(!this._loading){return ;}if(mname){if(mname!==this._loading){return ;}this.inserted[mname]=true;if(this.onProgress){this.onProgress.call(this.scope,{name:mname,data:this.data});}}var s=this.sorted,len=s.length,i,m;for(i=0;i<len;i=i+1){if(s[i] in this.inserted){continue;}if(s[i]===this._loading){return ;}m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});return ;}if(!this.loadType||this.loadType===m.type){this._loading=s[i];var fn=(m.type==="css")?util.Get.css:util.Get.script,url=m.fullpath||this._url(m.path),self=this,c=function(o){self.loadNext(o.data);};if(env.ua.webkit&&env.ua.webkit<420&&m.type==="js"&&!m.varName){c=null;this._useYahooListener=true;}fn(url,{data:s[i],onSuccess:c,insertBefore:this.insertBefore,charset:this.charset,varName:m.varName,scope:self});return ;}}this._loading=null;if(this._internalCallback){var f=this._internalCallback;this._internalCallback=null;f.call(this);}else{if(this.onSuccess){this._pushEvents();this.onSuccess.call(this.scope,{data:this.data});}}},_pushEvents:function(ref){var r=ref||YAHOO;if(r.util&&r.util.Event){r.util.Event._load();}},_url:function(path){var u=this.base||"",f=this.filter;u=u+path;if(f){u=u.replace(new RegExp(f.searchExp),f.replaceStr);}return u;}};})();(function(){var B=YAHOO.util,K,I,J={},F={},M=window.document;YAHOO.env._id_counter=YAHOO.env._id_counter||0;var C=YAHOO.env.ua.opera,L=YAHOO.env.ua.webkit,A=YAHOO.env.ua.gecko,G=YAHOO.env.ua.ie;var E={HYPHEN:/(-[a-z])/i,ROOT_TAG:/^body|html$/i,OP_SCROLL:/^(?:inline|table-row)$/i};var N=function(P){if(!E.HYPHEN.test(P)){return P;}if(J[P]){return J[P];}var Q=P;while(E.HYPHEN.exec(Q)){Q=Q.replace(RegExp.$1,RegExp.$1.substr(1).toUpperCase());}J[P]=Q;return Q;};var O=function(Q){var P=F[Q];if(!P){P=new RegExp("(?:^|\\s+)"+Q+"(?:\\s+|$)");F[Q]=P;}return P;};if(M.defaultView&&M.defaultView.getComputedStyle){K=function(P,S){var R=null;if(S=="float"){S="cssFloat";}var Q=P.ownerDocument.defaultView.getComputedStyle(P,"");if(Q){R=Q[N(S)];}return P.style[S]||R;};}else{if(M.documentElement.currentStyle&&G){K=function(P,R){switch(N(R)){case"opacity":var T=100;try{T=P.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(S){try{T=P.filters("alpha").opacity;}catch(S){}}return T/100;case"float":R="styleFloat";default:var Q=P.currentStyle?P.currentStyle[R]:null;return(P.style[R]||Q);}};}else{K=function(P,Q){return P.style[Q];};}}if(G){I=function(P,Q,R){switch(Q){case"opacity":if(YAHOO.lang.isString(P.style.filter)){P.style.filter="alpha(opacity="+R*100+")";if(!P.currentStyle||!P.currentStyle.hasLayout){P.style.zoom=1;}}break;case"float":Q="styleFloat";default:P.style[Q]=R;}};}else{I=function(P,Q,R){if(Q=="float"){Q="cssFloat";}P.style[Q]=R;};}var D=function(P,Q){return P&&P.nodeType==1&&(!Q||Q(P));};YAHOO.util.Dom={get:function(R){if(R&&(R.nodeType||R.item)){return R;}if(YAHOO.lang.isString(R)||!R){return M.getElementById(R);}if(R.length!==undefined){var S=[];for(var Q=0,P=R.length;Q<P;++Q){S[S.length]=B.Dom.get(R[Q]);}return S;}return R;},getStyle:function(P,R){R=N(R);var Q=function(S){return K(S,R);};return B.Dom.batch(P,Q,B.Dom,true);},setStyle:function(P,R,S){R=N(R);var Q=function(T){I(T,R,S);};B.Dom.batch(P,Q,B.Dom,true);},getXY:function(P){var Q=function(R){if((R.parentNode===null||R.offsetParent===null||this.getStyle(R,"display")=="none")&&R!=R.ownerDocument.body){return false;}return H(R);};return B.Dom.batch(P,Q,B.Dom,true);},getX:function(P){var Q=function(R){return B.Dom.getXY(R)[0];};return B.Dom.batch(P,Q,B.Dom,true);},getY:function(P){var Q=function(R){return B.Dom.getXY(R)[1];};return B.Dom.batch(P,Q,B.Dom,true);},setXY:function(P,S,R){var Q=function(V){var U=this.getStyle(V,"position");if(U=="static"){this.setStyle(V,"position","relative");U="relative";}var X=this.getXY(V);if(X===false){return false;}var W=[parseInt(this.getStyle(V,"left"),10),parseInt(this.getStyle(V,"top"),10)];if(isNaN(W[0])){W[0]=(U=="relative")?0:V.offsetLeft;}if(isNaN(W[1])){W[1]=(U=="relative")?0:V.offsetTop;}if(S[0]!==null){V.style.left=S[0]-X[0]+W[0]+"px";}if(S[1]!==null){V.style.top=S[1]-X[1]+W[1]+"px";}if(!R){var T=this.getXY(V);if((S[0]!==null&&T[0]!=S[0])||(S[1]!==null&&T[1]!=S[1])){this.setXY(V,S,true);}}};B.Dom.batch(P,Q,B.Dom,true);},setX:function(Q,P){B.Dom.setXY(Q,[P,null]);},setY:function(P,Q){B.Dom.setXY(P,[null,Q]);},getRegion:function(P){var Q=function(R){if((R.parentNode===null||R.offsetParent===null||this.getStyle(R,"display")=="none")&&R!=R.ownerDocument.body){return false;}var S=B.Region.getRegion(R);return S;};return B.Dom.batch(P,Q,B.Dom,true);},getClientWidth:function(){return B.Dom.getViewportWidth();},getClientHeight:function(){return B.Dom.getViewportHeight();},getElementsByClassName:function(T,X,U,V){X=X||"*";U=(U)?B.Dom.get(U):null||M;if(!U){return[];}var Q=[],P=U.getElementsByTagName(X),W=O(T);for(var R=0,S=P.length;R<S;++R){if(W.test(P[R].className)){Q[Q.length]=P[R];if(V){V.call(P[R],P[R]);}}}return Q;},hasClass:function(R,Q){var P=O(Q);var S=function(T){return P.test(T.className);};return B.Dom.batch(R,S,B.Dom,true);},addClass:function(Q,P){var R=function(S){if(this.hasClass(S,P)){return false;}S.className=YAHOO.lang.trim([S.className,P].join(" "));return true;};return B.Dom.batch(Q,R,B.Dom,true);},removeClass:function(R,Q){var P=O(Q);var S=function(T){if(!Q||!this.hasClass(T,Q)){return false;}var U=T.className;T.className=U.replace(P," ");if(this.hasClass(T,Q)){this.removeClass(T,Q);}T.className=YAHOO.lang.trim(T.className);return true;};return B.Dom.batch(R,S,B.Dom,true);},replaceClass:function(S,Q,P){if(!P||Q===P){return false;}var R=O(Q);var T=function(U){if(!this.hasClass(U,Q)){this.addClass(U,P);return true;}U.className=U.className.replace(R," "+P+" ");if(this.hasClass(U,Q)){this.replaceClass(U,Q,P);}U.className=YAHOO.lang.trim(U.className);return true;};return B.Dom.batch(S,T,B.Dom,true);},generateId:function(P,R){R=R||"yui-gen";var Q=function(S){if(S&&S.id){return S.id;}var T=R+YAHOO.env._id_counter++;if(S){S.id=T;}return T;};return B.Dom.batch(P,Q,B.Dom,true)||Q.apply(B.Dom,arguments);},isAncestor:function(P,Q){P=B.Dom.get(P);Q=B.Dom.get(Q);if(!P||!Q){return false;}if(P.contains&&Q.nodeType&&!L){return P.contains(Q);}else{if(P.compareDocumentPosition&&Q.nodeType){return !!(P.compareDocumentPosition(Q)&16);}else{if(Q.nodeType){return !!this.getAncestorBy(Q,function(R){return R==P;});}}}return false;},inDocument:function(P){return this.isAncestor(M.documentElement,P);},getElementsBy:function(W,Q,R,T){Q=Q||"*";R=(R)?B.Dom.get(R):null||M;if(!R){return[];}var S=[],V=R.getElementsByTagName(Q);for(var U=0,P=V.length;U<P;++U){if(W(V[U])){S[S.length]=V[U];if(T){T(V[U]);}}}return S;},batch:function(T,W,V,R){T=(T&&(T.tagName||T.item))?T:B.Dom.get(T);if(!T||!W){return false;}var S=(R)?V:window;if(T.tagName||T.length===undefined){return W.call(S,T,V);}var U=[];for(var Q=0,P=T.length;Q<P;++Q){U[U.length]=W.call(S,T[Q],V);}return U;},getDocumentHeight:function(){var Q=(M.compatMode!="CSS1Compat")?M.body.scrollHeight:M.documentElement.scrollHeight;var P=Math.max(Q,B.Dom.getViewportHeight());return P;},getDocumentWidth:function(){var Q=(M.compatMode!="CSS1Compat")?M.body.scrollWidth:M.documentElement.scrollWidth;var P=Math.max(Q,B.Dom.getViewportWidth());return P;},getViewportHeight:function(){var P=self.innerHeight;\r
+var Q=M.compatMode;if((Q||G)&&!C){P=(Q=="CSS1Compat")?M.documentElement.clientHeight:M.body.clientHeight;}return P;},getViewportWidth:function(){var P=self.innerWidth;var Q=M.compatMode;if(Q||G){P=(Q=="CSS1Compat")?M.documentElement.clientWidth:M.body.clientWidth;}return P;},getAncestorBy:function(P,Q){while(P=P.parentNode){if(D(P,Q)){return P;}}return null;},getAncestorByClassName:function(Q,P){Q=B.Dom.get(Q);if(!Q){return null;}var R=function(S){return B.Dom.hasClass(S,P);};return B.Dom.getAncestorBy(Q,R);},getAncestorByTagName:function(Q,P){Q=B.Dom.get(Q);if(!Q){return null;}var R=function(S){return S.tagName&&S.tagName.toUpperCase()==P.toUpperCase();};return B.Dom.getAncestorBy(Q,R);},getPreviousSiblingBy:function(P,Q){while(P){P=P.previousSibling;if(D(P,Q)){return P;}}return null;},getPreviousSibling:function(P){P=B.Dom.get(P);if(!P){return null;}return B.Dom.getPreviousSiblingBy(P);},getNextSiblingBy:function(P,Q){while(P){P=P.nextSibling;if(D(P,Q)){return P;}}return null;},getNextSibling:function(P){P=B.Dom.get(P);if(!P){return null;}return B.Dom.getNextSiblingBy(P);},getFirstChildBy:function(P,R){var Q=(D(P.firstChild,R))?P.firstChild:null;return Q||B.Dom.getNextSiblingBy(P.firstChild,R);},getFirstChild:function(P,Q){P=B.Dom.get(P);if(!P){return null;}return B.Dom.getFirstChildBy(P);},getLastChildBy:function(P,R){if(!P){return null;}var Q=(D(P.lastChild,R))?P.lastChild:null;return Q||B.Dom.getPreviousSiblingBy(P.lastChild,R);},getLastChild:function(P){P=B.Dom.get(P);return B.Dom.getLastChildBy(P);},getChildrenBy:function(Q,S){var R=B.Dom.getFirstChildBy(Q,S);var P=R?[R]:[];B.Dom.getNextSiblingBy(R,function(T){if(!S||S(T)){P[P.length]=T;}return false;});return P;},getChildren:function(P){P=B.Dom.get(P);if(!P){}return B.Dom.getChildrenBy(P);},getDocumentScrollLeft:function(P){P=P||M;return Math.max(P.documentElement.scrollLeft,P.body.scrollLeft);},getDocumentScrollTop:function(P){P=P||M;return Math.max(P.documentElement.scrollTop,P.body.scrollTop);},insertBefore:function(Q,P){Q=B.Dom.get(Q);P=B.Dom.get(P);if(!Q||!P||!P.parentNode){return null;}return P.parentNode.insertBefore(Q,P);},insertAfter:function(Q,P){Q=B.Dom.get(Q);P=B.Dom.get(P);if(!Q||!P||!P.parentNode){return null;}if(P.nextSibling){return P.parentNode.insertBefore(Q,P.nextSibling);}else{return P.parentNode.appendChild(Q);}},getClientRegion:function(){var R=B.Dom.getDocumentScrollTop(),Q=B.Dom.getDocumentScrollLeft(),S=B.Dom.getViewportWidth()+Q,P=B.Dom.getViewportHeight()+R;return new B.Region(R,S,P,Q);}};var H=function(){if(M.documentElement.getBoundingClientRect){return function(Q){var R=Q.getBoundingClientRect();var P=Q.ownerDocument;return[R.left+B.Dom.getDocumentScrollLeft(P),R.top+B.Dom.getDocumentScrollTop(P)];};}else{return function(R){var S=[R.offsetLeft,R.offsetTop];var Q=R.offsetParent;var P=(L&&B.Dom.getStyle(R,"position")=="absolute"&&R.offsetParent==R.ownerDocument.body);if(Q!=R){while(Q){S[0]+=Q.offsetLeft;S[1]+=Q.offsetTop;if(!P&&L&&B.Dom.getStyle(Q,"position")=="absolute"){P=true;}Q=Q.offsetParent;}}if(P){S[0]-=R.ownerDocument.body.offsetLeft;S[1]-=R.ownerDocument.body.offsetTop;}Q=R.parentNode;while(Q.tagName&&!E.ROOT_TAG.test(Q.tagName)){if(Q.scrollTop||Q.scrollLeft){if(!E.OP_SCROLL.test(B.Dom.getStyle(Q,"display"))){if(!C||B.Dom.getStyle(Q,"overflow")!=="visible"){S[0]-=Q.scrollLeft;S[1]-=Q.scrollTop;}}}Q=Q.parentNode;}return S;};}}();})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this[0]=B;};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);var D=Math.min(this.right,E.right);var A=Math.min(this.bottom,E.bottom);var 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);var D=Math.max(this.right,E.right);var A=Math.max(this.bottom,E.bottom);var 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+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D);var C=F[1];var E=F[0]+D.offsetWidth;var A=F[1]+D.offsetHeight;var 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];}this.x=this.right=this.left=this[0]=A;this.y=this.top=this.bottom=this[1]=B;};YAHOO.util.Point.prototype=new YAHOO.util.Region();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.5.2",build:"1076"});YAHOO.util.CustomEvent=function(D,B,C,A){this.type=D;this.scope=B||window;this.silent=C;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(B,C,A){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,A);}this.subscribers.push(new YAHOO.util.Subscriber(B,C,A));},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(){for(var A=this.subscribers.length-1;A>-1;A--){this._delete(A);}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+"', "+"scope: "+this.scope;}};YAHOO.util.Subscriber=function(B,C,A){this.fn=B;this.obj=YAHOO.lang.isUndefined(C)?null:C;this.override=A;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.override){if(this.override===true){return this.obj;}else{return this.override;}}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+", override: "+(this.override||"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};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 K=this;var L=function(){K._tryPreloadAttach();};this._interval=setInterval(L,this.POLL_INTERVAL);}},onAvailable:function(P,M,Q,O,N){var K=(YAHOO.lang.isString(P))?[P]:P;for(var L=0;L<K.length;L=L+1){F.push({id:K[L],fn:M,obj:Q,override:O,checkReady:N});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(M,K,N,L){this.onAvailable(M,K,N,L,true);},onDOMReady:function(K,M,L){if(this.DOMReady){setTimeout(function(){var N=window;if(L){if(L===true){N=M;}else{N=L;}}K.call(N,"DOMReady",[],M);},0);}else{this.DOMReadyEvent.subscribe(K,M,L);}},addListener:function(M,K,V,Q,L){if(!V||!V.call){return false;}if(this._isValidCollection(M)){var W=true;for(var R=0,T=M.length;R<T;++R){W=this.on(M[R],K,V,Q,L)&&W;}return W;}else{if(YAHOO.lang.isString(M)){var P=this.getEl(M);if(P){M=P;}else{this.onAvailable(M,function(){YAHOO.util.Event.on(M,K,V,Q,L);});return true;}}}if(!M){return false;}if("unload"==K&&Q!==this){J[J.length]=[M,K,V,Q,L];return true;}var Y=M;if(L){if(L===true){Y=Q;}else{Y=L;}}var N=function(Z){return V.call(Y,YAHOO.util.Event.getEvent(Z,M),Q);};var X=[M,K,V,N,Y,Q,L];var S=I.length;I[S]=X;if(this.useLegacyEvent(M,K)){var O=this.getLegacyIndex(M,K);if(O==-1||M!=G[O][0]){O=G.length;B[M.id+K]=O;G[O]=[M,K,M["on"+K]];E[O]=[];M["on"+K]=function(Z){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(Z),O);};}E[O].push(X);}else{try{this._simpleAdd(M,K,N,false);}catch(U){this.lastError=U;this.removeListener(M,K,V);return false;}}return true;},fireLegacyEvent:function(O,M){var Q=true,K,S,R,T,P;S=E[M].slice();for(var L=0,N=S.length;L<N;++L){R=S[L];if(R&&R[this.WFN]){T=R[this.ADJ_SCOPE];P=R[this.WFN].call(T,O);Q=(Q&&P);}}K=G[M];if(K&&K[2]){K[2](O);}return Q;},getLegacyIndex:function(L,M){var K=this.generateId(L)+M;if(typeof B[K]=="undefined"){return -1;}else{return B[K];}},useLegacyEvent:function(L,M){if(this.webkit&&("click"==M||"dblclick"==M)){var K=parseInt(this.webkit,10);if(!isNaN(K)&&K<418){return true;}}return false;},removeListener:function(L,K,T){var O,R,V;if(typeof L=="string"){L=this.getEl(L);}else{if(this._isValidCollection(L)){var U=true;for(O=L.length-1;O>-1;O--){U=(this.removeListener(L[O],K,T)&&U);}return U;}}if(!T||!T.call){return this.purgeElement(L,false,K);}if("unload"==K){for(O=J.length-1;O>-1;O--){V=J[O];if(V&&V[0]==L&&V[1]==K&&V[2]==T){J.splice(O,1);return true;}}return false;}var P=null;var Q=arguments[3];if("undefined"===typeof Q){Q=this._getCacheIndex(L,K,T);}if(Q>=0){P=I[Q];}if(!L||!P){return false;}if(this.useLegacyEvent(L,K)){var N=this.getLegacyIndex(L,K);var M=E[N];if(M){for(O=0,R=M.length;O<R;++O){V=M[O];if(V&&V[this.EL]==L&&V[this.TYPE]==K&&V[this.FN]==T){M.splice(O,1);break;}}}}else{try{this._simpleRemove(L,K,P[this.WFN],false);}catch(S){this.lastError=S;return false;}}delete I[Q][this.WFN];delete I[Q][this.FN];I.splice(Q,1);return true;},getTarget:function(M,L){var K=M.target||M.srcElement;return this.resolveTextNode(K);},resolveTextNode:function(L){try{if(L&&3==L.nodeType){return L.parentNode;}}catch(K){}return L;},getPageX:function(L){var K=L.pageX;if(!K&&0!==K){K=L.clientX||0;if(this.isIE){K+=this._getScrollLeft();}}return K;},getPageY:function(K){var L=K.pageY;if(!L&&0!==L){L=K.clientY||0;if(this.isIE){L+=this._getScrollTop();}}return L;\r
+},getXY:function(K){return[this.getPageX(K),this.getPageY(K)];},getRelatedTarget:function(L){var K=L.relatedTarget;if(!K){if(L.type=="mouseout"){K=L.toElement;}else{if(L.type=="mouseover"){K=L.fromElement;}}}return this.resolveTextNode(K);},getTime:function(M){if(!M.time){var L=new Date().getTime();try{M.time=L;}catch(K){this.lastError=K;return L;}}return M.time;},stopEvent:function(K){this.stopPropagation(K);this.preventDefault(K);},stopPropagation:function(K){if(K.stopPropagation){K.stopPropagation();}else{K.cancelBubble=true;}},preventDefault:function(K){if(K.preventDefault){K.preventDefault();}else{K.returnValue=false;}},getEvent:function(M,K){var L=M||window.event;if(!L){var N=this.getEvent.caller;while(N){L=N.arguments[0];if(L&&Event==L.constructor){break;}N=N.caller;}}return L;},getCharCode:function(L){var K=L.keyCode||L.charCode||0;if(YAHOO.env.ua.webkit&&(K in D)){K=D[K];}return K;},_getCacheIndex:function(O,P,N){for(var M=0,L=I.length;M<L;M=M+1){var K=I[M];if(K&&K[this.FN]==N&&K[this.EL]==O&&K[this.TYPE]==P){return M;}}return -1;},generateId:function(K){var L=K.id;if(!L){L="yuievtautoid-"+A;++A;K.id=L;}return L;},_isValidCollection:function(L){try{return(L&&typeof L!=="string"&&L.length&&!L.tagName&&!L.alert&&typeof L[0]!=="undefined");}catch(K){return false;}},elCache:{},getEl:function(K){return(typeof K==="string")?document.getElementById(K):K;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(L){if(!H){H=true;var K=YAHOO.util.Event;K._ready();K._tryPreloadAttach();}},_ready:function(L){var K=YAHOO.util.Event;if(!K.DOMReady){K.DOMReady=true;K.DOMReadyEvent.fire();K._simpleRemove(document,"DOMContentLoaded",K._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;clearInterval(this._interval);this._interval=null;return ;}if(this.locked){return ;}if(this.isIE){if(!this.DOMReady){this.startInterval();return ;}}this.locked=true;var Q=!H;if(!Q){Q=(C>0&&F.length>0);}var P=[];var R=function(T,U){var S=T;if(U.override){if(U.override===true){S=U.obj;}else{S=U.override;}}U.fn.call(S,U.obj);};var L,K,O,N,M=[];for(L=0,K=F.length;L<K;L=L+1){O=F[L];if(O){N=this.getEl(O.id);if(N){if(O.checkReady){if(H||N.nextSibling||!Q){M.push(O);F[L]=null;}}else{R(N,O);F[L]=null;}}else{P.push(O);}}}for(L=0,K=M.length;L<K;L=L+1){O=M[L];R(this.getEl(O.id),O);}C--;if(Q){for(L=F.length-1;L>-1;L--){O=F[L];if(!O||!O.id){F.splice(L,1);}}this.startInterval();}else{clearInterval(this._interval);this._interval=null;}this.locked=false;},purgeElement:function(O,P,R){var M=(YAHOO.lang.isString(O))?this.getEl(O):O;var Q=this.getListeners(M,R),N,K;if(Q){for(N=Q.length-1;N>-1;N--){var L=Q[N];this.removeListener(M,L.type,L.fn);}}if(P&&M&&M.childNodes){for(N=0,K=M.childNodes.length;N<K;++N){this.purgeElement(M.childNodes[N],P,R);}}},getListeners:function(M,K){var P=[],L;if(!K){L=[I,J];}else{if(K==="unload"){L=[J];}else{L=[I];}}var R=(YAHOO.lang.isString(M))?this.getEl(M):M;for(var O=0;O<L.length;O=O+1){var T=L[O];if(T){for(var Q=0,S=T.length;Q<S;++Q){var N=T[Q];if(N&&N[this.EL]===R&&(!K||K===N[this.TYPE])){P.push({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.OVERRIDE],scope:N[this.ADJ_SCOPE],index:Q});}}}}return(P.length)?P:null;},_unload:function(Q){var K=YAHOO.util.Event,N,M,L,P,O,R=J.slice();for(N=0,P=J.length;N<P;++N){L=R[N];if(L){var S=window;if(L[K.ADJ_SCOPE]){if(L[K.ADJ_SCOPE]===true){S=L[K.UNLOAD_OBJ];}else{S=L[K.ADJ_SCOPE];}}L[K.FN].call(S,K.getEvent(Q,L[K.EL]),L[K.UNLOAD_OBJ]);R[N]=null;L=null;S=null;}}J=null;if(I){for(M=I.length-1;M>-1;M--){L=I[M];if(L){K.removeListener(L[K.EL],L[K.TYPE],L[K.FN],M);}}L=null;}G=null;K._simpleRemove(window,"unload",K._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var K=document.documentElement,L=document.body;if(K&&(K.scrollTop||K.scrollLeft)){return[K.scrollTop,K.scrollLeft];}else{if(L){return[L.scrollTop,L.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(M,N,L,K){M.addEventListener(N,L,(K));};}else{if(window.attachEvent){return function(M,N,L,K){M.attachEvent("on"+N,L);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(M,N,L,K){M.removeEventListener(N,L,(K));};}else{if(window.detachEvent){return function(L,M,K){L.detachEvent("on"+M,K);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;\r
+/* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */\r
+if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,override:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;\r
+if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].override);}}}return I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};YAHOO.util.KeyListener=function(A,F,B,C){if(!A){}else{if(!F){}else{if(!B){}}}if(!C){C=YAHOO.util.KeyListener.KEYDOWN;}var D=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(typeof A=="string"){A=document.getElementById(A);}if(typeof B=="function"){D.subscribe(B);}else{D.subscribe(B.fn,B.scope,B.correctScope);}function E(J,I){if(!F.shift){F.shift=false;}if(!F.alt){F.alt=false;}if(!F.ctrl){F.ctrl=false;}if(J.shiftKey==F.shift&&J.altKey==F.alt&&J.ctrlKey==F.ctrl){var G;if(F.keys instanceof Array){for(var H=0;H<F.keys.length;H++){G=F.keys[H];if(G==J.charCode){D.fire(J.charCode,J);break;}else{if(G==J.keyCode){D.fire(J.keyCode,J);break;}}}}else{G=F.keys;if(G==J.charCode){D.fire(J.charCode,J);}else{if(G==J.keyCode){D.fire(J.keyCode,J);}}}}}this.enable=function(){if(!this.enabled){YAHOO.util.Event.addListener(A,C,E);this.enabledEvent.fire(F);}this.enabled=true;};this.disable=function(){if(this.enabled){YAHOO.util.Event.removeListener(A,C,E);this.disabledEvent.fire(F);}this.enabled=false;};this.toString=function(){return"KeyListener ["+F.keys+"] "+A.tagName+(A.id?"["+A.id+"]":"");};};YAHOO.util.KeyListener.KEYDOWN="keydown";YAHOO.util.KeyListener.KEYUP="keyup";YAHOO.util.KeyListener.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};YAHOO.register("event",YAHOO.util.Event,{version:"2.5.2",build:"1076"});YAHOO.register("yuiloader-dom-event", YAHOO, {version: "2.5.2", build: "1076"});\r
+\r
+// logger/logger-min.js\r
+YAHOO.widget.LogMsg=function(A){this.msg=this.time=this.category=this.source=this.sourceDetail=null;if(A&&(A.constructor==Object)){for(var B in A){this[B]=A[B];}}};YAHOO.widget.LogWriter=function(A){if(!A){YAHOO.log("Could not instantiate LogWriter due to invalid source.","error","LogWriter");return ;}this._source=A;};YAHOO.widget.LogWriter.prototype.toString=function(){return"LogWriter "+this._sSource;};YAHOO.widget.LogWriter.prototype.log=function(A,B){YAHOO.widget.Logger.log(A,B,this._source);};YAHOO.widget.LogWriter.prototype.getSource=function(){return this._sSource;};YAHOO.widget.LogWriter.prototype.setSource=function(A){if(!A){YAHOO.log("Could not set source due to invalid source.","error",this.toString());return ;}else{this._sSource=A;}};YAHOO.widget.LogWriter.prototype._source=null;YAHOO.widget.LogReader=function(B,A){this._sName=YAHOO.widget.LogReader._index;YAHOO.widget.LogReader._index++;this._buffer=[];this._filterCheckboxes={};this._lastTime=YAHOO.widget.Logger.getStartTime();if(A&&(A.constructor==Object)){for(var C in A){this[C]=A[C];}}this._initContainerEl(B);if(!this._elContainer){YAHOO.log("Could not instantiate LogReader due to an invalid container element "+B,"error",this.toString());return ;}this._initHeaderEl();this._initConsoleEl();this._initFooterEl();this._initDragDrop();this._initCategories();this._initSources();YAHOO.widget.Logger.newLogEvent.subscribe(this._onNewLog,this);YAHOO.widget.Logger.logResetEvent.subscribe(this._onReset,this);YAHOO.widget.Logger.categoryCreateEvent.subscribe(this._onCategoryCreate,this);YAHOO.widget.Logger.sourceCreateEvent.subscribe(this._onSourceCreate,this);this._filterLogs();YAHOO.log("LogReader initialized",null,this.toString());};YAHOO.lang.augmentObject(YAHOO.widget.LogReader,{_index:0,ENTRY_TEMPLATE:(function(){var A=document.createElement("pre");YAHOO.util.Dom.addClass(A,"yui-log-entry");return A;})(),VERBOSE_TEMPLATE:"<span class='{category}'>{label}</span>{totalTime}ms (+{elapsedTime}) {localTime}:</p><p>{sourceAndDetail}</p><p>{message}</p>",BASIC_TEMPLATE:"<p><span class='{category}'>{label}</span>{totalTime}ms (+{elapsedTime}) {localTime}: {sourceAndDetail}: {message}</p>"});YAHOO.widget.LogReader.prototype={logReaderEnabled:true,width:null,height:null,top:null,left:null,right:null,bottom:null,fontSize:null,footerEnabled:true,verboseOutput:true,entryFormat:null,newestOnTop:true,outputBuffer:100,thresholdMax:500,thresholdMin:100,isCollapsed:false,isPaused:false,draggable:true,toString:function(){return"LogReader instance"+this._sName;},pause:function(){this.isPaused=true;this._btnPause.value="Resume";this._timeout=null;this.logReaderEnabled=false;},resume:function(){this.isPaused=false;this._btnPause.value="Pause";this.logReaderEnabled=true;this._printBuffer();},hide:function(){this._elContainer.style.display="none";},show:function(){this._elContainer.style.display="block";},collapse:function(){this._elConsole.style.display="none";if(this._elFt){this._elFt.style.display="none";}this._btnCollapse.value="Expand";this.isCollapsed=true;},expand:function(){this._elConsole.style.display="block";if(this._elFt){this._elFt.style.display="block";}this._btnCollapse.value="Collapse";this.isCollapsed=false;},getCheckbox:function(A){return this._filterCheckboxes[A];},getCategories:function(){return this._categoryFilters;},showCategory:function(B){var D=this._categoryFilters;if(D.indexOf){if(D.indexOf(B)>-1){return ;}}else{for(var A=0;A<D.length;A++){if(D[A]===B){return ;}}}this._categoryFilters.push(B);this._filterLogs();var C=this.getCheckbox(B);if(C){C.checked=true;}},hideCategory:function(B){var D=this._categoryFilters;for(var A=0;A<D.length;A++){if(B==D[A]){D.splice(A,1);break;}}this._filterLogs();var C=this.getCheckbox(B);if(C){C.checked=false;}},getSources:function(){return this._sourceFilters;},showSource:function(A){var D=this._sourceFilters;if(D.indexOf){if(D.indexOf(A)>-1){return ;}}else{for(var B=0;B<D.length;B++){if(A==D[B]){return ;}}}D.push(A);this._filterLogs();var C=this.getCheckbox(A);if(C){C.checked=true;}},hideSource:function(A){var D=this._sourceFilters;for(var B=0;B<D.length;B++){if(A==D[B]){D.splice(B,1);break;}}this._filterLogs();var C=this.getCheckbox(A);if(C){C.checked=false;}},clearConsole:function(){this._timeout=null;this._buffer=[];this._consoleMsgCount=0;var A=this._elConsole;A.innerHTML="";},setTitle:function(A){this._title.innerHTML=this.html2Text(A);},getLastTime:function(){return this._lastTime;},formatMsg:function(C){var B=YAHOO.widget.LogReader,A=this.entryFormat||(this.verboseOutput?B.VERBOSE_TEMPLATE:B.BASIC_TEMPLATE),D={category:C.category,label:C.category.substring(0,4).toUpperCase(),sourceAndDetail:C.sourceDetail?C.source+" "+C.sourceDetail:C.source,message:this.html2Text(C.msg||C.message||"")};if(C.time&&C.time.getTime){D.localTime=C.time.toLocaleTimeString?C.time.toLocaleTimeString():C.time.toString();D.elapsedTime=C.time.getTime()-this.getLastTime();D.totalTime=C.time.getTime()-YAHOO.widget.Logger.getStartTime();}var E=B.ENTRY_TEMPLATE.cloneNode(true);if(this.verboseOutput){E.className+=" yui-log-verbose";}E.innerHTML=YAHOO.lang.substitute(A,D);return E;},html2Text:function(A){if(A){A+="";return A.replace(/&/g,"&#38;").replace(/</g,"&#60;").replace(/>/g,"&#62;");}return"";},_sName:null,_buffer:null,_consoleMsgCount:0,_lastTime:null,_timeout:null,_filterCheckboxes:null,_categoryFilters:null,_sourceFilters:null,_elContainer:null,_elHd:null,_elCollapse:null,_btnCollapse:null,_title:null,_elConsole:null,_elFt:null,_elBtns:null,_elCategoryFilters:null,_elSourceFilters:null,_btnPause:null,_btnClear:null,_initContainerEl:function(B){B=YAHOO.util.Dom.get(B);if(B&&B.tagName&&(B.tagName.toLowerCase()=="div")){this._elContainer=B;YAHOO.util.Dom.addClass(this._elContainer,"yui-log");}else{this._elContainer=document.body.appendChild(document.createElement("div"));YAHOO.util.Dom.addClass(this._elContainer,"yui-log");YAHOO.util.Dom.addClass(this._elContainer,"yui-log-container");var A=this._elContainer.style;\r
+if(this.width){A.width=this.width;}if(this.right){A.right=this.right;}if(this.top){A.top=this.top;}if(this.left){A.left=this.left;A.right="auto";}if(this.bottom){A.bottom=this.bottom;A.top="auto";}if(this.fontSize){A.fontSize=this.fontSize;}if(navigator.userAgent.toLowerCase().indexOf("opera")!=-1){document.body.style+="";}}},_initHeaderEl:function(){var A=this;if(this._elHd){YAHOO.util.Event.purgeElement(this._elHd,true);this._elHd.innerHTML="";}this._elHd=this._elContainer.appendChild(document.createElement("div"));this._elHd.id="yui-log-hd"+this._sName;this._elHd.className="yui-log-hd";this._elCollapse=this._elHd.appendChild(document.createElement("div"));this._elCollapse.className="yui-log-btns";this._btnCollapse=document.createElement("input");this._btnCollapse.type="button";this._btnCollapse.className="yui-log-button";this._btnCollapse.value="Collapse";this._btnCollapse=this._elCollapse.appendChild(this._btnCollapse);YAHOO.util.Event.addListener(A._btnCollapse,"click",A._onClickCollapseBtn,A);this._title=this._elHd.appendChild(document.createElement("h4"));this._title.innerHTML="Logger Console";},_initConsoleEl:function(){if(this._elConsole){YAHOO.util.Event.purgeElement(this._elConsole,true);this._elConsole.innerHTML="";}this._elConsole=this._elContainer.appendChild(document.createElement("div"));this._elConsole.className="yui-log-bd";if(this.height){this._elConsole.style.height=this.height;}},_initFooterEl:function(){var A=this;if(this.footerEnabled){if(this._elFt){YAHOO.util.Event.purgeElement(this._elFt,true);this._elFt.innerHTML="";}this._elFt=this._elContainer.appendChild(document.createElement("div"));this._elFt.className="yui-log-ft";this._elBtns=this._elFt.appendChild(document.createElement("div"));this._elBtns.className="yui-log-btns";this._btnPause=document.createElement("input");this._btnPause.type="button";this._btnPause.className="yui-log-button";this._btnPause.value="Pause";this._btnPause=this._elBtns.appendChild(this._btnPause);YAHOO.util.Event.addListener(A._btnPause,"click",A._onClickPauseBtn,A);this._btnClear=document.createElement("input");this._btnClear.type="button";this._btnClear.className="yui-log-button";this._btnClear.value="Clear";this._btnClear=this._elBtns.appendChild(this._btnClear);YAHOO.util.Event.addListener(A._btnClear,"click",A._onClickClearBtn,A);this._elCategoryFilters=this._elFt.appendChild(document.createElement("div"));this._elCategoryFilters.className="yui-log-categoryfilters";this._elSourceFilters=this._elFt.appendChild(document.createElement("div"));this._elSourceFilters.className="yui-log-sourcefilters";}},_initDragDrop:function(){if(YAHOO.util.DD&&this.draggable&&this._elHd){var A=new YAHOO.util.DD(this._elContainer);A.setHandleElId(this._elHd.id);this._elHd.style.cursor="move";}},_initCategories:function(){this._categoryFilters=[];var C=YAHOO.widget.Logger.categories;for(var A=0;A<C.length;A++){var B=C[A];this._categoryFilters.push(B);if(this._elCategoryFilters){this._createCategoryCheckbox(B);}}},_initSources:function(){this._sourceFilters=[];var C=YAHOO.widget.Logger.sources;for(var B=0;B<C.length;B++){var A=C[B];this._sourceFilters.push(A);if(this._elSourceFilters){this._createSourceCheckbox(A);}}},_createCategoryCheckbox:function(B){var A=this;if(this._elFt){var E=this._elCategoryFilters;var D=E.appendChild(document.createElement("span"));D.className="yui-log-filtergrp";var C=document.createElement("input");C.id="yui-log-filter-"+B+this._sName;C.className="yui-log-filter-"+B;C.type="checkbox";C.category=B;C=D.appendChild(C);C.checked=true;YAHOO.util.Event.addListener(C,"click",A._onCheckCategory,A);var F=D.appendChild(document.createElement("label"));F.htmlFor=C.id;F.className=B;F.innerHTML=B;this._filterCheckboxes[B]=C;}},_createSourceCheckbox:function(A){var D=this;if(this._elFt){var F=this._elSourceFilters;var E=F.appendChild(document.createElement("span"));E.className="yui-log-filtergrp";var C=document.createElement("input");C.id="yui-log-filter"+A+this._sName;C.className="yui-log-filter"+A;C.type="checkbox";C.source=A;C=E.appendChild(C);C.checked=true;YAHOO.util.Event.addListener(C,"click",D._onCheckSource,D);var B=E.appendChild(document.createElement("label"));B.htmlFor=C.id;B.className=A;B.innerHTML=A;this._filterCheckboxes[A]=C;}},_filterLogs:function(){if(this._elConsole!==null){this.clearConsole();this._printToConsole(YAHOO.widget.Logger.getStack());}},_printBuffer:function(){this._timeout=null;if(this._elConsole!==null){var B=this.thresholdMax;B=(B&&!isNaN(B))?B:500;if(this._consoleMsgCount<B){var A=[];for(var C=0;C<this._buffer.length;C++){A[C]=this._buffer[C];}this._buffer=[];this._printToConsole(A);}else{this._filterLogs();}if(!this.newestOnTop){this._elConsole.scrollTop=this._elConsole.scrollHeight;}}},_printToConsole:function(I){var B=I.length,M=document.createDocumentFragment(),P=[],Q=this.thresholdMin,C=this._sourceFilters.length,N=this._categoryFilters.length,K,H,G,F,L;if(isNaN(Q)||(Q>this.thresholdMax)){Q=0;}K=(B>Q)?(B-Q):0;for(H=K;H<B;H++){var E=false;var J=false;var O=I[H];var A=O.source;var D=O.category;for(G=0;G<C;G++){if(A==this._sourceFilters[G]){J=true;break;}}if(J){for(G=0;G<N;G++){if(D==this._categoryFilters[G]){E=true;break;}}}if(E){F=this.formatMsg(O);if(typeof F==="string"){P[P.length]=F;}else{M.insertBefore(F,this.newestOnTop?M.firstChild||null:null);}this._consoleMsgCount++;this._lastTime=O.time.getTime();}}if(P.length){P.splice(0,0,this._elConsole.innerHTML);this._elConsole.innerHTML=this.newestOnTop?P.reverse().join(""):P.join("");}else{if(M.firstChild){this._elConsole.insertBefore(M,this.newestOnTop?this._elConsole.firstChild||null:null);}}},_onCategoryCreate:function(D,C,A){var B=C[0];A._categoryFilters.push(B);if(A._elFt){A._createCategoryCheckbox(B);}},_onSourceCreate:function(D,C,A){var B=C[0];A._sourceFilters.push(B);if(A._elFt){A._createSourceCheckbox(B);}},_onCheckCategory:function(A,B){var C=this.category;if(!this.checked){B.hideCategory(C);}else{B.showCategory(C);}},_onCheckSource:function(A,B){var C=this.source;\r
+if(!this.checked){B.hideSource(C);}else{B.showSource(C);}},_onClickCollapseBtn:function(A,B){if(!B.isCollapsed){B.collapse();}else{B.expand();}},_onClickPauseBtn:function(A,B){if(!B.isPaused){B.pause();}else{B.resume();}},_onClickClearBtn:function(A,B){B.clearConsole();},_onNewLog:function(D,C,A){var B=C[0];A._buffer.push(B);if(A.logReaderEnabled===true&&A._timeout===null){A._timeout=setTimeout(function(){A._printBuffer();},A.outputBuffer);}},_onReset:function(C,B,A){A._filterLogs();}};if(!YAHOO.widget.Logger){YAHOO.widget.Logger={loggerEnabled:true,_browserConsoleEnabled:false,categories:["info","warn","error","time","window"],sources:["global"],_stack:[],maxStackEntries:2500,_startTime:new Date().getTime(),_lastTime:null,_windowErrorsHandled:false,_origOnWindowError:null};YAHOO.widget.Logger.log=function(B,F,G){if(this.loggerEnabled){if(!F){F="info";}else{F=F.toLocaleLowerCase();if(this._isNewCategory(F)){this._createNewCategory(F);}}var C="global";var A=null;if(G){var D=G.indexOf(" ");if(D>0){C=G.substring(0,D);A=G.substring(D,G.length);}else{C=G;}if(this._isNewSource(C)){this._createNewSource(C);}}var H=new Date();var J=new YAHOO.widget.LogMsg({msg:B,time:H,category:F,source:C,sourceDetail:A});var I=this._stack;var E=this.maxStackEntries;if(E&&!isNaN(E)&&(I.length>=E)){I.shift();}I.push(J);this.newLogEvent.fire(J);if(this._browserConsoleEnabled){this._printToBrowserConsole(J);}return true;}else{return false;}};YAHOO.widget.Logger.reset=function(){this._stack=[];this._startTime=new Date().getTime();this.loggerEnabled=true;this.log("Logger reset");this.logResetEvent.fire();};YAHOO.widget.Logger.getStack=function(){return this._stack;};YAHOO.widget.Logger.getStartTime=function(){return this._startTime;};YAHOO.widget.Logger.disableBrowserConsole=function(){YAHOO.log("Logger output to the function console.log() has been disabled.");this._browserConsoleEnabled=false;};YAHOO.widget.Logger.enableBrowserConsole=function(){this._browserConsoleEnabled=true;YAHOO.log("Logger output to the function console.log() has been enabled.");};YAHOO.widget.Logger.handleWindowErrors=function(){if(!YAHOO.widget.Logger._windowErrorsHandled){if(window.error){YAHOO.widget.Logger._origOnWindowError=window.onerror;}window.onerror=YAHOO.widget.Logger._onWindowError;YAHOO.widget.Logger._windowErrorsHandled=true;YAHOO.log("Logger handling of window.onerror has been enabled.");}else{YAHOO.log("Logger handling of window.onerror had already been enabled.");}};YAHOO.widget.Logger.unhandleWindowErrors=function(){if(YAHOO.widget.Logger._windowErrorsHandled){if(YAHOO.widget.Logger._origOnWindowError){window.onerror=YAHOO.widget.Logger._origOnWindowError;YAHOO.widget.Logger._origOnWindowError=null;}else{window.onerror=null;}YAHOO.widget.Logger._windowErrorsHandled=false;YAHOO.log("Logger handling of window.onerror has been disabled.");}else{YAHOO.log("Logger handling of window.onerror had already been disabled.");}};YAHOO.widget.Logger.categoryCreateEvent=new YAHOO.util.CustomEvent("categoryCreate",this,true);YAHOO.widget.Logger.sourceCreateEvent=new YAHOO.util.CustomEvent("sourceCreate",this,true);YAHOO.widget.Logger.newLogEvent=new YAHOO.util.CustomEvent("newLog",this,true);YAHOO.widget.Logger.logResetEvent=new YAHOO.util.CustomEvent("logReset",this,true);YAHOO.widget.Logger._createNewCategory=function(A){this.categories.push(A);this.categoryCreateEvent.fire(A);};YAHOO.widget.Logger._isNewCategory=function(B){for(var A=0;A<this.categories.length;A++){if(B==this.categories[A]){return false;}}return true;};YAHOO.widget.Logger._createNewSource=function(A){this.sources.push(A);this.sourceCreateEvent.fire(A);};YAHOO.widget.Logger._isNewSource=function(A){if(A){for(var B=0;B<this.sources.length;B++){if(A==this.sources[B]){return false;}}return true;}};YAHOO.widget.Logger._printToBrowserConsole=function(C){if(window.console&&console.log){var E=C.category;var D=C.category.substring(0,4).toUpperCase();var G=C.time;var F;if(G.toLocaleTimeString){F=G.toLocaleTimeString();}else{F=G.toString();}var H=G.getTime();var B=(YAHOO.widget.Logger._lastTime)?(H-YAHOO.widget.Logger._lastTime):0;YAHOO.widget.Logger._lastTime=H;var A=F+" ("+B+"ms): "+C.source+": ";console.log(A,C.msg);}};YAHOO.widget.Logger._onWindowError=function(A,C,B){try{YAHOO.widget.Logger.log(A+" ("+C+", line "+B+")","window");if(YAHOO.widget.Logger._origOnWindowError){YAHOO.widget.Logger._origOnWindowError();}}catch(D){return false;}};YAHOO.widget.Logger.log("Logger initialized");}YAHOO.register("logger",YAHOO.widget.Logger,{version:"2.5.2",build:"1076"});\r
+\r
+//selector/selector-min.js\r
+(function(){var A=YAHOO.util;A.Selector={_foundCache:[],_regexCache:{},_re:{nth:/^(?:([-]?\d*)(n){1}|(odd|even)$)*([-+]?\d*)$/,attr:/(\[.*\])/g,urls:/^(?:href|src)/},document:window.document,attrAliases:{},shorthand:{"\\#(-?[_a-z]+[-\\w]*)":"[id=$1]","\\.(-?[_a-z]+[-\\w]*)":"[class~=$1]"},operators:{"=":function(B,C){return B===C;},"!=":function(B,C){return B!==C;},"~=":function(B,D){var C=" ";return(C+B+C).indexOf((C+D+C))>-1;},"|=":function(B,C){return B===C||B.slice(0,C.length+1)===C+"-";},"^=":function(B,C){return B.indexOf(C)===0;},"$=":function(B,C){return B.slice(-C.length)===C;},"*=":function(B,C){return B.indexOf(C)>-1;},"":function(B,C){return B;}},pseudos:{"root":function(B){return B===B.ownerDocument.documentElement;},"nth-child":function(B,C){return A.Selector._getNth(B,C);},"nth-last-child":function(B,C){return A.Selector._getNth(B,C,null,true);},"nth-of-type":function(B,C){return A.Selector._getNth(B,C,B.tagName);},"nth-last-of-type":function(B,C){return A.Selector._getNth(B,C,B.tagName,true);},"first-child":function(B){return A.Selector._getChildren(B.parentNode)[0]===B;},"last-child":function(C){var B=A.Selector._getChildren(C.parentNode);return B[B.length-1]===C;},"first-of-type":function(B,C){return A.Selector._getChildren(B.parentNode,B.tagName)[0];},"last-of-type":function(C,D){var B=A.Selector._getChildren(C.parentNode,C.tagName);return B[B.length-1];},"only-child":function(C){var B=A.Selector._getChildren(C.parentNode);return B.length===1&&B[0]===C;},"only-of-type":function(B){return A.Selector._getChildren(B.parentNode,B.tagName).length===1;},"empty":function(B){return B.childNodes.length===0;},"not":function(B,C){return !A.Selector.test(B,C);},"contains":function(B,D){var C=B.innerText||B.textContent||"";return C.indexOf(D)>-1;},"checked":function(B){return B.checked===true;}},test:function(F,D){F=A.Selector.document.getElementById(F)||F;if(!F){return false;}var C=D?D.split(","):[];if(C.length){for(var E=0,B=C.length;E<B;++E){if(A.Selector._test(F,C[E])){return true;}}return false;}return A.Selector._test(F,D);},_test:function(D,G,F,E){F=F||A.Selector._tokenize(G).pop()||{};if(!D.tagName||(F.tag!=="*"&&D.tagName!==F.tag)||(E&&D._found)){return false;}if(F.attributes.length){var B,H,C=A.Selector._re.urls;if(!D.attributes||!D.attributes.length){return false;}for(var I=0,K;K=F.attributes[I++];){H=(C.test(K[0]))?2:0;B=D.getAttribute(K[0],H);if(B===null||B===undefined){return false;}if(A.Selector.operators[K[1]]&&!A.Selector.operators[K[1]](B,K[2])){return false;}}}if(F.pseudos.length){for(var I=0,J=F.pseudos.length;I<J;++I){if(A.Selector.pseudos[F.pseudos[I][0]]&&!A.Selector.pseudos[F.pseudos[I][0]](D,F.pseudos[I][1])){return false;}}}return(F.previous&&F.previous.combinator!==",")?A.Selector._combinators[F.previous.combinator](D,F):true;},filter:function(E,D){E=E||[];var G,C=[],H=A.Selector._tokenize(D);if(!E.item){for(var F=0,B=E.length;F<B;++F){if(!E[F].tagName){G=A.Selector.document.getElementById(E[F]);if(G){E[F]=G;}else{}}}}C=A.Selector._filter(E,A.Selector._tokenize(D)[0]);return C;},_filter:function(E,G,H,D){var C=H?null:[],I=A.Selector._foundCache;for(var F=0,B=E.length;F<B;F++){if(!A.Selector._test(E[F],"",G,D)){continue;}if(H){return E[F];}if(D){if(E[F]._found){continue;}E[F]._found=true;I[I.length]=E[F];}C[C.length]=E[F];}return C;},query:function(C,D,E){var B=A.Selector._query(C,D,E);return B;},_query:function(H,M,N,F){var P=(N)?null:[],E;if(!H){return P;}var D=H.split(",");if(D.length>1){var O;for(var I=0,J=D.length;I<J;++I){O=arguments.callee(D[I],M,N,true);P=N?O:P.concat(O);}A.Selector._clearFoundCache();return P;}if(M&&!M.nodeName){M=A.Selector.document.getElementById(M);if(!M){return P;}}M=M||A.Selector.document;if(M.nodeName!=="#document"){A.Dom.generateId(M);H=M.tagName+"#"+M.id+" "+H;E=M;M=M.ownerDocument;}var L=A.Selector._tokenize(H);var K=L[A.Selector._getIdTokenIndex(L)],B=[],C,G=L.pop()||{};if(K){C=A.Selector._getId(K.attributes);}if(C){E=E||A.Selector.document.getElementById(C);if(E&&(M.nodeName==="#document"||A.Dom.isAncestor(M,E))){if(A.Selector._test(E,null,K)){if(K===G){B=[E];}else{if(K.combinator===" "||K.combinator===">"){M=E;}}}}else{return P;}}if(M&&!B.length){B=M.getElementsByTagName(G.tag);}if(B.length){P=A.Selector._filter(B,G,N,F);}return P;},_clearFoundCache:function(){var E=A.Selector._foundCache;for(var C=0,B=E.length;C<B;++C){try{delete E[C]._found;}catch(D){E[C].removeAttribute("_found");}}E=[];},_getRegExp:function(D,B){var C=A.Selector._regexCache;B=B||"";if(!C[D+B]){C[D+B]=new RegExp(D,B);}return C[D+B];},_getChildren:function(){if(document.documentElement.children){return function(C,B){return(B)?C.children.tags(B):C.children||[];};}else{return function(F,C){if(F._children){return F._children;}var E=[],G=F.childNodes;for(var D=0,B=G.length;D<B;++D){if(G[D].tagName){if(!C||G[D].tagName===C){E[E.length]=G[D];}}}F._children=E;return E;};}}(),_combinators:{" ":function(C,B){while((C=C.parentNode)){if(A.Selector._test(C,"",B.previous)){return true;}}return false;},">":function(C,B){return A.Selector._test(C.parentNode,null,B.previous);},"+":function(D,C){var B=D.previousSibling;while(B&&B.nodeType!==1){B=B.previousSibling;}if(B&&A.Selector._test(B,null,C.previous)){return true;}return false;},"~":function(D,C){var B=D.previousSibling;while(B){if(B.nodeType===1&&A.Selector._test(B,null,C.previous)){return true;}B=B.previousSibling;}return false;}},_getNth:function(C,L,N,G){A.Selector._re.nth.test(L);var K=parseInt(RegExp.$1,10),B=RegExp.$2,H=RegExp.$3,I=parseInt(RegExp.$4,10)||0,M=[],E;var J=A.Selector._getChildren(C.parentNode,N);if(H){K=2;E="+";B="n";I=(H==="odd")?1:0;}else{if(isNaN(K)){K=(B)?1:0;}}if(K===0){if(G){I=J.length-I+1;}if(J[I-1]===C){return true;}else{return false;}}else{if(K<0){G=!!G;K=Math.abs(K);}}if(!G){for(var D=I-1,F=J.length;D<F;D+=K){if(D>=0&&J[D]===C){return true;}}}else{for(var D=J.length-I,F=J.length;D>=0;D-=K){if(D<F&&J[D]===C){return true;}}}return false;},_getId:function(C){for(var D=0,B=C.length;D<B;\r
+++D){if(C[D][0]=="id"&&C[D][1]==="="){return C[D][2];}}},_getIdTokenIndex:function(D){for(var C=0,B=D.length;C<B;++C){if(A.Selector._getId(D[C].attributes)){return C;}}return -1;},_patterns:{tag:/^((?:-?[_a-z]+[\w-]*)|\*)/i,attributes:/^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^\]]*?)['"]?\]/i,pseudos:/^:([-\w]+)(?:\(['"]?(.+)['"]?\))*/i,combinator:/^\s*([>+~]|\s)\s*/},_tokenize:function(B){var D={},H=[],I,G=false,F=A.Selector._patterns,C;B=A.Selector._replaceShorthand(B);do{G=false;for(var E in F){if(YAHOO.lang.hasOwnProperty(F,E)){if(E!="tag"&&E!="combinator"){D[E]=D[E]||[];}if((C=F[E].exec(B))){G=true;if(E!="tag"&&E!="combinator"){if(E==="attributes"&&C[1]==="id"){D.id=C[3];}D[E].push(C.slice(1));}else{D[E]=C[1];}B=B.replace(C[0],"");if(E==="combinator"||!B.length){D.attributes=A.Selector._fixAttributes(D.attributes);D.pseudos=D.pseudos||[];D.tag=D.tag?D.tag.toUpperCase():"*";H.push(D);D={previous:D};}}}}}while(G);return H;},_fixAttributes:function(C){var D=A.Selector.attrAliases;C=C||[];for(var E=0,B=C.length;E<B;++E){if(D[C[E][0]]){C[E][0]=D[C[E][0]];}if(!C[E][1]){C[E][1]="";}}return C;},_replaceShorthand:function(C){var D=A.Selector.shorthand;var E=C.match(A.Selector._re.attr);if(E){C=C.replace(A.Selector._re.attr,"REPLACED_ATTRIBUTE");}for(var G in D){if(YAHOO.lang.hasOwnProperty(D,G)){C=C.replace(A.Selector._getRegExp(G,"gi"),D[G]);}}if(E){for(var F=0,B=E.length;F<B;++F){C=C.replace("REPLACED_ATTRIBUTE",E[F]);}}return C;}};if(YAHOO.env.ua.ie&&YAHOO.env.ua.ie<8){A.Selector.attrAliases["class"]="className";A.Selector.attrAliases["for"]="htmlFor";}})();YAHOO.register("selector",YAHOO.util.Selector,{version:"2.7.0",build:"1796"});\r
+\r
+// yuitest/yuitest-min.js\r
+YAHOO.namespace("tool");YAHOO.tool.TestCase=function(A){this._should={};for(var B in A){this[B]=A[B];}if(!YAHOO.lang.isString(this.name)){this.name=YAHOO.util.Dom.generateId(null,"testCase");}};YAHOO.tool.TestCase.prototype={resume:function(A){YAHOO.tool.TestRunner.resume(A);},wait:function(B,A){throw new YAHOO.tool.TestCase.Wait(B,A);},setUp:function(){},tearDown:function(){}};YAHOO.tool.TestCase.Wait=function(B,A){this.segment=(YAHOO.lang.isFunction(B)?B:null);this.delay=(YAHOO.lang.isNumber(A)?A:0);};YAHOO.namespace("tool");YAHOO.tool.TestSuite=function(A){this.name="";this.items=[];if(YAHOO.lang.isString(A)){this.name=A;}else{if(YAHOO.lang.isObject(A)){YAHOO.lang.augmentObject(this,A,true);}}if(this.name===""){this.name=YAHOO.util.Dom.generateId(null,"testSuite");}};YAHOO.tool.TestSuite.prototype={add:function(A){if(A instanceof YAHOO.tool.TestSuite||A instanceof YAHOO.tool.TestCase){this.items.push(A);}},setUp:function(){},tearDown:function(){}};YAHOO.namespace("tool");YAHOO.tool.TestRunner=(function(){function B(C){this.testObject=C;this.firstChild=null;this.lastChild=null;this.parent=null;this.next=null;this.results={passed:0,failed:0,total:0,ignored:0};if(C instanceof YAHOO.tool.TestSuite){this.results.type="testsuite";this.results.name=C.name;}else{if(C instanceof YAHOO.tool.TestCase){this.results.type="testcase";this.results.name=C.name;}}}B.prototype={appendChild:function(C){var D=new B(C);if(this.firstChild===null){this.firstChild=this.lastChild=D;}else{this.lastChild.next=D;this.lastChild=D;}D.parent=this;return D;}};function A(){A.superclass.constructor.apply(this,arguments);this.masterSuite=new YAHOO.tool.TestSuite("YUI Test Results");this._cur=null;this._root=null;var D=[this.TEST_CASE_BEGIN_EVENT,this.TEST_CASE_COMPLETE_EVENT,this.TEST_SUITE_BEGIN_EVENT,this.TEST_SUITE_COMPLETE_EVENT,this.TEST_PASS_EVENT,this.TEST_FAIL_EVENT,this.TEST_IGNORE_EVENT,this.COMPLETE_EVENT,this.BEGIN_EVENT];for(var C=0;C<D.length;C++){this.createEvent(D[C],{scope:this});}}YAHOO.lang.extend(A,YAHOO.util.EventProvider,{TEST_CASE_BEGIN_EVENT:"testcasebegin",TEST_CASE_COMPLETE_EVENT:"testcasecomplete",TEST_SUITE_BEGIN_EVENT:"testsuitebegin",TEST_SUITE_COMPLETE_EVENT:"testsuitecomplete",TEST_PASS_EVENT:"pass",TEST_FAIL_EVENT:"fail",TEST_IGNORE_EVENT:"ignore",COMPLETE_EVENT:"complete",BEGIN_EVENT:"begin",_addTestCaseToTestTree:function(C,D){var E=C.appendChild(D);for(var F in D){if(F.indexOf("test")===0&&YAHOO.lang.isFunction(D[F])){E.appendChild(F);}}},_addTestSuiteToTestTree:function(C,F){var E=C.appendChild(F);for(var D=0;D<F.items.length;D++){if(F.items[D] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(E,F.items[D]);}else{if(F.items[D] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(E,F.items[D]);}}}},_buildTestTree:function(){this._root=new B(this.masterSuite);this._cur=this._root;for(var C=0;C<this.masterSuite.items.length;C++){if(this.masterSuite.items[C] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(this._root,this.masterSuite.items[C]);}else{if(this.masterSuite.items[C] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(this._root,this.masterSuite.items[C]);}}}},_handleTestObjectComplete:function(C){if(YAHOO.lang.isObject(C.testObject)){C.parent.results.passed+=C.results.passed;C.parent.results.failed+=C.results.failed;C.parent.results.total+=C.results.total;C.parent.results.ignored+=C.results.ignored;C.parent.results[C.testObject.name]=C.results;if(C.testObject instanceof YAHOO.tool.TestSuite){C.testObject.tearDown();this.fireEvent(this.TEST_SUITE_COMPLETE_EVENT,{testSuite:C.testObject,results:C.results});}else{if(C.testObject instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_COMPLETE_EVENT,{testCase:C.testObject,results:C.results});}}}},_next:function(){if(this._cur.firstChild){this._cur=this._cur.firstChild;}else{if(this._cur.next){this._cur=this._cur.next;}else{while(this._cur&&!this._cur.next&&this._cur!==this._root){this._handleTestObjectComplete(this._cur);this._cur=this._cur.parent;}if(this._cur==this._root){this._cur.results.type="report";this._cur.results.timestamp=(new Date()).toLocaleString();this.fireEvent(this.COMPLETE_EVENT,{results:this._cur.results});this._cur=null;}else{this._handleTestObjectComplete(this._cur);this._cur=this._cur.next;}}}return this._cur;},_run:function(){var E=false;var D=this._next();if(D!==null){var C=D.testObject;if(YAHOO.lang.isObject(C)){if(C instanceof YAHOO.tool.TestSuite){this.fireEvent(this.TEST_SUITE_BEGIN_EVENT,{testSuite:C});C.setUp();}else{if(C instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_BEGIN_EVENT,{testCase:C});}}if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{this._runTest(D);}}},_resumeTest:function(G){var C=this._cur;var H=C.testObject;var E=C.parent.testObject;var K=(E._should.fail||{})[H];var D=(E._should.error||{})[H];var F=false;var I=null;try{G.apply(E);if(K){I=new YAHOO.util.ShouldFail();F=true;}else{if(D){I=new YAHOO.util.ShouldError();F=true;}}}catch(J){if(J instanceof YAHOO.util.AssertionError){if(!K){I=J;F=true;}}else{if(J instanceof YAHOO.tool.TestCase.Wait){if(YAHOO.lang.isFunction(J.segment)){if(YAHOO.lang.isNumber(J.delay)){if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._resumeTest(J.segment);},J.delay);}else{throw new Error("Asynchronous tests not supported in this environment.");}}}return ;}else{if(!D){I=new YAHOO.util.UnexpectedError(J);F=true;}else{if(YAHOO.lang.isString(D)){if(J.message!=D){I=new YAHOO.util.UnexpectedError(J);F=true;}}else{if(YAHOO.lang.isFunction(D)){if(!(J instanceof D)){I=new YAHOO.util.UnexpectedError(J);F=true;}}else{if(YAHOO.lang.isObject(D)){if(!(J instanceof D.constructor)||J.message!=D.message){I=new YAHOO.util.UnexpectedError(J);F=true;}}}}}}}}if(F){this.fireEvent(this.TEST_FAIL_EVENT,{testCase:E,testName:H,error:I});}else{this.fireEvent(this.TEST_PASS_EVENT,{testCase:E,testName:H});}E.tearDown();C.parent.results[H]={result:F?"fail":"pass",message:I?I.getMessage():"Test passed",type:"test",name:H};\r
+if(F){C.parent.results.failed++;}else{C.parent.results.passed++;}C.parent.results.total++;if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}},_runTest:function(F){var C=F.testObject;var D=F.parent.testObject;var G=D[C];var E=(D._should.ignore||{})[C];if(E){F.parent.results[C]={result:"ignore",message:"Test ignored",type:"test",name:C};F.parent.results.ignored++;F.parent.results.total++;this.fireEvent(this.TEST_IGNORE_EVENT,{testCase:D,testName:C});if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{D.setUp();this._resumeTest(G);}},fireEvent:function(C,D){D=D||{};D.type=C;A.superclass.fireEvent.call(this,C,D);},add:function(C){this.masterSuite.add(C);},clear:function(){this.masterSuite.items=[];},resume:function(C){this._resumeTest(C||function(){});},run:function(C){var D=YAHOO.tool.TestRunner;D._buildTestTree();D.fireEvent(D.BEGIN_EVENT);D._run();}});return new A();})();YAHOO.namespace("util");YAHOO.util.Assert={_formatMessage:function(B,A){var C=B;if(YAHOO.lang.isString(B)&&B.length>0){return YAHOO.lang.substitute(B,{message:A});}else{return A;}},fail:function(A){throw new YAHOO.util.AssertionError(this._formatMessage(A,"Test force-failed."));},areEqual:function(B,C,A){if(B!=C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be equal."),B,C);}},areNotEqual:function(A,C,B){if(A==C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be equal."),A);}},areNotSame:function(A,C,B){if(A===C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be the same."),A);}},areSame:function(B,C,A){if(B!==C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be the same."),B,C);}},isFalse:function(B,A){if(false!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be false."),false,B);}},isTrue:function(B,A){if(true!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be true."),true,B);}},isNaN:function(B,A){if(!isNaN(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be NaN."),NaN,B);}},isNotNaN:function(B,A){if(isNaN(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be NaN."),NaN);}},isNotNull:function(B,A){if(YAHOO.lang.isNull(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be null."),null);}},isNotUndefined:function(B,A){if(YAHOO.lang.isUndefined(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should not be undefined."),undefined);}},isNull:function(B,A){if(!YAHOO.lang.isNull(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be null."),null,B);}},isUndefined:function(B,A){if(!YAHOO.lang.isUndefined(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be undefined."),undefined,B);}},isArray:function(B,A){if(!YAHOO.lang.isArray(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an array."),B);}},isBoolean:function(B,A){if(!YAHOO.lang.isBoolean(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a Boolean."),B);}},isFunction:function(B,A){if(!YAHOO.lang.isFunction(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a function."),B);}},isInstanceOf:function(B,C,A){if(!(C instanceof B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value isn't an instance of expected type."),B,C);}},isNumber:function(B,A){if(!YAHOO.lang.isNumber(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a number."),B);}},isObject:function(B,A){if(!YAHOO.lang.isObject(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an object."),B);}},isString:function(B,A){if(!YAHOO.lang.isString(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a string."),B);}},isTypeOf:function(A,C,B){if(typeof C!=A){throw new YAHOO.util.ComparisonFailure(this._formatMessage(B,"Value should be of type "+expected+"."),expected,typeof actual);}}};YAHOO.util.AssertionError=function(A){arguments.callee.superclass.constructor.call(this,A);this.message=A;this.name="AssertionError";};YAHOO.lang.extend(YAHOO.util.AssertionError,Error,{getMessage:function(){return this.message;},toString:function(){return this.name+": "+this.getMessage();},valueOf:function(){return this.toString();}});YAHOO.util.ComparisonFailure=function(B,A,C){arguments.callee.superclass.constructor.call(this,B);this.expected=A;this.actual=C;this.name="ComparisonFailure";};YAHOO.lang.extend(YAHOO.util.ComparisonFailure,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nExpected: "+this.expected+" ("+(typeof this.expected)+")\nActual:"+this.actual+" ("+(typeof this.actual)+")";}});YAHOO.util.UnexpectedValue=function(B,A){arguments.callee.superclass.constructor.call(this,B);this.unexpected=A;this.name="UnexpectedValue";};YAHOO.lang.extend(YAHOO.util.UnexpectedValue,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nUnexpected: "+this.unexpected+" ("+(typeof this.unexpected)+") ";}});YAHOO.util.ShouldFail=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should fail but didn't.");this.name="ShouldFail";};YAHOO.lang.extend(YAHOO.util.ShouldFail,YAHOO.util.AssertionError);YAHOO.util.ShouldError=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should have thrown an error but didn't.");this.name="ShouldError";};YAHOO.lang.extend(YAHOO.util.ShouldError,YAHOO.util.AssertionError);YAHOO.util.UnexpectedError=function(A){arguments.callee.superclass.constructor.call(this,"Unexpected error: "+A.message);this.cause=A;this.name="UnexpectedError";this.stack=A.stack;};YAHOO.lang.extend(YAHOO.util.UnexpectedError,YAHOO.util.AssertionError);YAHOO.util.ArrayAssert={contains:function(E,D,B){var C=false;\r
+var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(!C){F.fail(F._formatMessage(B,"Value "+E+" ("+(typeof E)+") not found in array ["+D+"]."));}},containsItems:function(C,D,B){for(var A=0;A<C.length;A++){this.contains(C[A],D,B);}},containsMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(!C){F.fail(F._formatMessage(B,"No match found in array ["+D+"]."));}},doesNotContain:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},doesNotContainItems:function(C,D,B){for(var A=0;A<C.length;A++){this.doesNotContain(C[A],D,B);}},doesNotContainMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},indexOf:function(E,D,A,C){for(var B=0;B<D.length;B++){if(D[B]===E){YAHOO.util.Assert.areEqual(A,B,C||"Value exists at index "+B+" but should be at index "+A+".");return ;}}var F=YAHOO.util.Assert;F.fail(F._formatMessage(C,"Value doesn't exist in array ["+D+"]."));},itemsAreEqual:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areEqual(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not equal."));}},itemsAreEquivalent:function(E,F,B,D){if(typeof B!="function"){throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");}var A=Math.max(E.length,F.length);for(var C=0;C<A;C++){if(!B(E[C],F[C])){throw new YAHOO.util.ComparisonFailure(YAHOO.util.Assert._formatMessage(D,"Values in position "+C+" are not equivalent."),E[C],F[C]);}}},isEmpty:function(C,A){if(C.length>0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should be empty."));}},isNotEmpty:function(C,A){if(C.length===0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should not be empty."));}},itemsAreSame:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areSame(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not the same."));}},lastIndexOf:function(E,D,A,C){var F=YAHOO.util.Assert;for(var B=D.length;B>=0;B--){if(D[B]===E){F.areEqual(A,B,F._formatMessage(C,"Value exists at index "+B+" but should be at index "+A+"."));return ;}}F.fail(F._formatMessage(C,"Value doesn't exist in array."));}};YAHOO.namespace("util");YAHOO.util.ObjectAssert={propertiesAreEqual:function(D,G,C){var F=YAHOO.util.Assert;var B=[];for(var E in D){B.push(E);}for(var A=0;A<B.length;A++){F.isNotUndefined(G[B[A]],F._formatMessage(C,"Property '"+B[A]+"' expected."));}},hasProperty:function(A,B,C){if(!(A in B)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object."));}},hasOwnProperty:function(A,B,C){if(!YAHOO.lang.hasOwnProperty(B,A)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object instance."));}}};YAHOO.util.DateAssert={datesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getFullYear(),D.getFullYear(),C._formatMessage(A,"Years should be equal."));C.areEqual(B.getMonth(),D.getMonth(),C._formatMessage(A,"Months should be equal."));C.areEqual(B.getDate(),D.getDate(),C._formatMessage(A,"Day of month should be equal."));}else{throw new TypeError("DateAssert.datesAreEqual(): Expected and actual values must be Date objects.");}},timesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getHours(),D.getHours(),C._formatMessage(A,"Hours should be equal."));C.areEqual(B.getMinutes(),D.getMinutes(),C._formatMessage(A,"Minutes should be equal."));C.areEqual(B.getSeconds(),D.getSeconds(),C._formatMessage(A,"Seconds should be equal."));}else{throw new TypeError("DateAssert.timesAreEqual(): Expected and actual values must be Date objects.");}}};YAHOO.namespace("util");YAHOO.util.UserAction={simulateKeyEvent:function(F,J,E,C,L,B,A,K,H,N,M){F=YAHOO.util.Dom.get(F);if(!F){throw new Error("simulateKeyEvent(): Invalid target.");}if(YAHOO.lang.isString(J)){J=J.toLowerCase();switch(J){case"keyup":case"keydown":case"keypress":break;case"textevent":J="keypress";break;default:throw new Error("simulateKeyEvent(): Event type '"+J+"' not supported.");}}else{throw new Error("simulateKeyEvent(): Event type must be a string.");}if(!YAHOO.lang.isBoolean(E)){E=true;}if(!YAHOO.lang.isBoolean(C)){C=true;}if(!YAHOO.lang.isObject(L)){L=window;}if(!YAHOO.lang.isBoolean(B)){B=false;}if(!YAHOO.lang.isBoolean(A)){A=false;}if(!YAHOO.lang.isBoolean(K)){K=false;}if(!YAHOO.lang.isBoolean(H)){H=false;}if(!YAHOO.lang.isNumber(N)){N=0;}if(!YAHOO.lang.isNumber(M)){M=0;}var I=null;if(YAHOO.lang.isFunction(document.createEvent)){try{I=document.createEvent("KeyEvents");I.initKeyEvent(J,E,C,L,B,A,K,H,N,M);}catch(G){try{I=document.createEvent("Events");}catch(D){I=document.createEvent("UIEvents");}finally{I.initEvent(J,E,C);I.view=L;I.altKey=A;I.ctrlKey=B;I.shiftKey=K;I.metaKey=H;I.keyCode=N;I.charCode=M;}}F.dispatchEvent(I);}else{if(YAHOO.lang.isObject(document.createEventObject)){I=document.createEventObject();I.bubbles=E;I.cancelable=C;I.view=L;I.ctrlKey=B;I.altKey=A;I.shiftKey=K;I.metaKey=H;I.keyCode=(M>0)?M:N;F.fireEvent("on"+J,I);}else{throw new Error("simulateKeyEvent(): No event simulation framework present.");}}},simulateMouseEvent:function(K,P,H,E,Q,J,G,F,D,B,C,A,O,M,I,L){K=YAHOO.util.Dom.get(K);if(!K){throw new Error("simulateMouseEvent(): Invalid target.");}if(YAHOO.lang.isString(P)){P=P.toLowerCase();switch(P){case"mouseover":case"mouseout":case"mousedown":case"mouseup":case"click":case"dblclick":case"mousemove":break;default:throw new Error("simulateMouseEvent(): Event type '"+P+"' not supported.");\r
+}}else{throw new Error("simulateMouseEvent(): Event type must be a string.");}if(!YAHOO.lang.isBoolean(H)){H=true;}if(!YAHOO.lang.isBoolean(E)){E=(P!="mousemove");}if(!YAHOO.lang.isObject(Q)){Q=window;}if(!YAHOO.lang.isNumber(J)){J=1;}if(!YAHOO.lang.isNumber(G)){G=0;}if(!YAHOO.lang.isNumber(F)){F=0;}if(!YAHOO.lang.isNumber(D)){D=0;}if(!YAHOO.lang.isNumber(B)){B=0;}if(!YAHOO.lang.isBoolean(C)){C=false;}if(!YAHOO.lang.isBoolean(A)){A=false;}if(!YAHOO.lang.isBoolean(O)){O=false;}if(!YAHOO.lang.isBoolean(M)){M=false;}if(!YAHOO.lang.isNumber(I)){I=0;}var N=null;if(YAHOO.lang.isFunction(document.createEvent)){N=document.createEvent("MouseEvents");if(N.initMouseEvent){N.initMouseEvent(P,H,E,Q,J,G,F,D,B,C,A,O,M,I,L);}else{N=document.createEvent("UIEvents");N.initEvent(P,H,E);N.view=Q;N.detail=J;N.screenX=G;N.screenY=F;N.clientX=D;N.clientY=B;N.ctrlKey=C;N.altKey=A;N.metaKey=M;N.shiftKey=O;N.button=I;N.relatedTarget=L;}if(L&&!N.relatedTarget){if(P=="mouseout"){N.toElement=L;}else{if(P=="mouseover"){N.fromElement=L;}}}K.dispatchEvent(N);}else{if(YAHOO.lang.isObject(document.createEventObject)){N=document.createEventObject();N.bubbles=H;N.cancelable=E;N.view=Q;N.detail=J;N.screenX=G;N.screenY=F;N.clientX=D;N.clientY=B;N.ctrlKey=C;N.altKey=A;N.metaKey=M;N.shiftKey=O;switch(I){case 0:N.button=1;break;case 1:N.button=4;break;case 2:break;default:N.button=0;}N.relatedTarget=L;K.fireEvent("on"+P,N);}else{throw new Error("simulateMouseEvent(): No event simulation framework present.");}}},fireMouseEvent:function(C,B,A){A=A||{};this.simulateMouseEvent(C,B,A.bubbles,A.cancelable,A.view,A.detail,A.screenX,A.screenY,A.clientX,A.clientY,A.ctrlKey,A.altKey,A.shiftKey,A.metaKey,A.button,A.relatedTarget);},click:function(B,A){this.fireMouseEvent(B,"click",A);},dblclick:function(B,A){this.fireMouseEvent(B,"dblclick",A);},mousedown:function(B,A){this.fireMouseEvent(B,"mousedown",A);},mousemove:function(B,A){this.fireMouseEvent(B,"mousemove",A);},mouseout:function(B,A){this.fireMouseEvent(B,"mouseout",A);},mouseover:function(B,A){this.fireMouseEvent(B,"mouseover",A);},mouseup:function(B,A){this.fireMouseEvent(B,"mouseup",A);},fireKeyEvent:function(B,C,A){A=A||{};this.simulateKeyEvent(C,B,A.bubbles,A.cancelable,A.view,A.ctrlKey,A.altKey,A.shiftKey,A.metaKey,A.keyCode,A.charCode);},keydown:function(B,A){this.fireKeyEvent("keydown",B,A);},keypress:function(B,A){this.fireKeyEvent("keypress",B,A);},keyup:function(B,A){this.fireKeyEvent("keyup",B,A);}};YAHOO.namespace("tool");YAHOO.tool.TestManager={TEST_PAGE_BEGIN_EVENT:"testpagebegin",TEST_PAGE_COMPLETE_EVENT:"testpagecomplete",TEST_MANAGER_BEGIN_EVENT:"testmanagerbegin",TEST_MANAGER_COMPLETE_EVENT:"testmanagercomplete",_curPage:null,_frame:null,_logger:null,_timeoutId:0,_pages:[],_results:null,_handleTestRunnerComplete:function(A){this.fireEvent(this.TEST_PAGE_COMPLETE_EVENT,{page:this._curPage,results:A.results});this._processResults(this._curPage,A.results);this._logger.clearTestRunner();if(this._pages.length){this._timeoutId=setTimeout(function(){YAHOO.tool.TestManager._run();},1000);}else{this.fireEvent(this.TEST_MANAGER_COMPLETE_EVENT,this._results);}},_processResults:function(C,A){var B=this._results;B.passed+=A.passed;B.failed+=A.failed;B.ignored+=A.ignored;B.total+=A.total;if(A.failed){B.failedPages.push(C);}else{B.passedPages.push(C);}A.name=C;A.type="page";B[C]=A;},_run:function(){this._curPage=this._pages.shift();this.fireEvent(this.TEST_PAGE_BEGIN_EVENT,this._curPage);this._frame.location.replace(this._curPage);},load:function(){if(parent.YAHOO.tool.TestManager!==this){parent.YAHOO.tool.TestManager.load();}else{if(this._frame){var A=this._frame.YAHOO.tool.TestRunner;this._logger.setTestRunner(A);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerComplete,this,true);A.run();}}},setPages:function(A){this._pages=A;},start:function(){if(!this._initialized){this.createEvent(this.TEST_PAGE_BEGIN_EVENT);this.createEvent(this.TEST_PAGE_COMPLETE_EVENT);this.createEvent(this.TEST_MANAGER_BEGIN_EVENT);this.createEvent(this.TEST_MANAGER_COMPLETE_EVENT);if(!this._frame){var A=document.createElement("iframe");A.style.visibility="hidden";A.style.position="absolute";document.body.appendChild(A);this._frame=A.contentWindow||A.contentDocument.ownerWindow;}if(!this._logger){this._logger=new YAHOO.tool.TestLogger();}this._initialized=true;}this._results={passed:0,failed:0,ignored:0,total:0,type:"report",name:"YUI Test Results",failedPages:[],passedPages:[]};this.fireEvent(this.TEST_MANAGER_BEGIN_EVENT,null);this._run();},stop:function(){clearTimeout(this._timeoutId);}};YAHOO.lang.augmentObject(YAHOO.tool.TestManager,YAHOO.util.EventProvider.prototype);YAHOO.namespace("tool");YAHOO.tool.TestLogger=function(B,A){YAHOO.tool.TestLogger.superclass.constructor.call(this,B,A);this.init();};YAHOO.lang.extend(YAHOO.tool.TestLogger,YAHOO.widget.LogReader,{footerEnabled:true,newestOnTop:false,formatMsg:function(B){var A=B.category;var C=this.html2Text(B.msg);return"<pre><p><span class=\""+A+"\">"+A.toUpperCase()+"</span> "+C+"</p></pre>";},init:function(){if(YAHOO.tool.TestRunner){this.setTestRunner(YAHOO.tool.TestRunner);}this.hideSource("global");this.hideSource("LogReader");this.hideCategory("warn");this.hideCategory("window");this.hideCategory("time");this.clearConsole();},clearTestRunner:function(){if(this._runner){this._runner.unsubscribeAll();this._runner=null;}},setTestRunner:function(A){if(this._runner){this.clearTestRunner();}this._runner=A;A.subscribe(A.TEST_PASS_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_FAIL_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_IGNORE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_CASE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);\r
+A.subscribe(A.TEST_CASE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);},_handleTestRunnerEvent:function(D){var A=YAHOO.tool.TestRunner;var C="";var B="";switch(D.type){case A.BEGIN_EVENT:C="Testing began at "+(new Date()).toString()+".";B="info";break;case A.COMPLETE_EVENT:C="Testing completed at "+(new Date()).toString()+".\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_FAIL_EVENT:C=D.testName+": "+D.error.getMessage();B="fail";break;case A.TEST_IGNORE_EVENT:C=D.testName+": ignored.";B="ignore";break;case A.TEST_PASS_EVENT:C=D.testName+": passed.";B="pass";break;case A.TEST_SUITE_BEGIN_EVENT:C="Test suite \""+D.testSuite.name+"\" started.";B="info";break;case A.TEST_SUITE_COMPLETE_EVENT:C="Test suite \""+D.testSuite.name+"\" completed.\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_CASE_BEGIN_EVENT:C="Test case \""+D.testCase.name+"\" started.";B="info";break;case A.TEST_CASE_COMPLETE_EVENT:C="Test case \""+D.testCase.name+"\" completed.\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;default:C="Unexpected event "+D.type;C="info";}YAHOO.log(C,B,"TestRunner");}});YAHOO.namespace("tool.TestFormat");YAHOO.tool.TestFormat.JSON=function(A){return YAHOO.lang.JSON.stringify(A);};YAHOO.tool.TestFormat.XML=function(C){var A=YAHOO.lang;var B="<"+C.type+" name=\""+C.name.replace(/"/g,"&quot;").replace(/'/g,"&apos;")+"\"";if(C.type=="test"){B+=" result=\""+C.result+"\" message=\""+C.message+"\">";}else{B+=" passed=\""+C.passed+"\" failed=\""+C.failed+"\" ignored=\""+C.ignored+"\" total=\""+C.total+"\">";for(var D in C){if(A.hasOwnProperty(C,D)&&A.isObject(C[D])&&!A.isArray(C[D])){B+=arguments.callee(C[D]);}}}B+="</"+C.type+">";return B;};YAHOO.namespace("tool");YAHOO.tool.TestReporter=function(A,B){this.url=A;this.format=B||YAHOO.tool.TestFormat.XML;this._fields=new Object();this._form=null;this._iframe=null;};YAHOO.tool.TestReporter.prototype={constructor:YAHOO.tool.TestReporter,addField:function(A,B){this._fields[A]=B;},clearFields:function(){this._fields=new Object();},destroy:function(){if(this._form){this._form.parentNode.removeChild(this._form);this._form=null;}if(this._iframe){this._iframe.parentNode.removeChild(this._iframe);this._iframe=null;}this._fields=null;},report:function(A){if(!this._form){this._form=document.createElement("form");this._form.method="post";this._form.style.visibility="hidden";this._form.style.position="absolute";this._form.style.top=0;document.body.appendChild(this._form);if(YAHOO.env.ua.ie){this._iframe=document.createElement("<iframe name=\"yuiTestTarget\" />");}else{this._iframe=document.createElement("iframe");this._iframe.name="yuiTestTarget";}this._iframe.src="javascript:false";this._iframe.style.visibility="hidden";this._iframe.style.position="absolute";this._iframe.style.top=0;document.body.appendChild(this._iframe);this._form.target="yuiTestTarget";}this._form.action=this.url;while(this._form.hasChildNodes()){this._form.removeChild(this._form.lastChild);}this._fields.results=this.format(A);this._fields.useragent=navigator.userAgent;this._fields.timestamp=(new Date()).toLocaleString();for(var B in this._fields){if(YAHOO.lang.hasOwnProperty(this._fields,B)&&typeof this._fields[B]!="function"){if(YAHOO.env.ua.ie){input=document.createElement("<input name=\""+B+"\" >");}else{input=document.createElement("input");input.name=B;}input.type="hidden";input.value=this._fields[B];this._form.appendChild(input);}}delete this._fields.results;delete this._fields.useragent;delete this._fields.timestamp;if(arguments[1]!==false){this._form.submit();}}};YAHOO.register("yuitest",YAHOO.tool.TestRunner,{version:"2.5.2",build:"1076"});\r
diff --git a/_source/themes/default/theme.js b/_source/themes/default/theme.js
new file mode 100644 (file)
index 0000000..b3057d0
--- /dev/null
@@ -0,0 +1,232 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.themes.add( 'default', (function()\r
+{\r
+       return {\r
+               build : function( editor, themePath )\r
+               {\r
+                       var name = editor.name,\r
+                               element = editor.element,\r
+                               elementMode = editor.elementMode;\r
+\r
+                       if ( !element || elementMode == CKEDITOR.ELEMENT_MODE_NONE )\r
+                               return;\r
+\r
+                       if ( elementMode == CKEDITOR.ELEMENT_MODE_REPLACE )\r
+                               element.hide();\r
+\r
+                       // Get the HTML for the predefined spaces.\r
+                       var topHtml                     = editor.fire( 'themeSpace', { space : 'top', html : '' } ).html;\r
+                       var contentsHtml        = editor.fire( 'themeSpace', { space : 'contents', html : '' } ).html;\r
+                       var bottomHtml          = editor.fireOnce( 'themeSpace', { space : 'bottom', html : '' } ).html;\r
+\r
+                       var height      = contentsHtml && editor.config.height;\r
+\r
+                       var tabIndex = editor.config.tabIndex || editor.element.getAttribute( 'tabindex' ) || 0;\r
+\r
+                       // The editor height is considered only if the contents space got filled.\r
+                       if ( !contentsHtml )\r
+                               height = 'auto';\r
+                       else if ( !isNaN( height ) )\r
+                               height += 'px';\r
+\r
+                       var style = '';\r
+                       var width       = editor.config.width;\r
+\r
+                       if ( width )\r
+                       {\r
+                               if ( !isNaN( width ) )\r
+                                       width += 'px';\r
+\r
+                               style += "width: " + width + ";";\r
+                       }\r
+\r
+                       var container = CKEDITOR.dom.element.createFromHtml( [\r
+                               '<span' +\r
+                                       ' id="cke_', name, '"' +\r
+                                       ' onmousedown="return false;"' +\r
+                                       ' class="', editor.skinClass, '"' +\r
+                                       ' dir="', editor.lang.dir, '"' +\r
+                                       ' title="', ( CKEDITOR.env.gecko ? ' ' : '' ), '"' +\r
+                                       ' lang="', editor.langCode, '"' +\r
+                                       ' tabindex="' + tabIndex + '"' +\r
+                                       ( style ? ' style="' + style + '"' : '' ) +\r
+                                       '>' +\r
+                                       '<span class="' , CKEDITOR.env.cssClass, '">' +\r
+                                               '<span class="cke_wrapper cke_', editor.lang.dir, '">' +\r
+                                                       '<table class="cke_editor" border="0" cellspacing="0" cellpadding="0"><tbody>' +\r
+                                                               '<tr', topHtml          ? '' : ' style="display:none"', '><td id="cke_top_'             , name, '" class="cke_top">'    , topHtml               , '</td></tr>' +\r
+                                                               '<tr', contentsHtml     ? '' : ' style="display:none"', '><td id="cke_contents_', name, '" class="cke_contents" style="height:', height, '">', contentsHtml, '</td></tr>' +\r
+                                                               '<tr', bottomHtml       ? '' : ' style="display:none"', '><td id="cke_bottom_'  , name, '" class="cke_bottom">' , bottomHtml    , '</td></tr>' +\r
+                                                       '</tbody></table>' +\r
+                                                       //Hide the container when loading skins, later restored by skin css.\r
+                                                       '<style>.', editor.skinClass, '{visibility:hidden;}</style>' +\r
+                                               '</span>' +\r
+                                       '</span>' +\r
+                               '</span>' ].join( '' ) );\r
+\r
+                       container.getChild( [0, 0, 0, 0, 0] ).unselectable();\r
+                       container.getChild( [0, 0, 0, 0, 2] ).unselectable();\r
+\r
+                       if ( elementMode == CKEDITOR.ELEMENT_MODE_REPLACE )\r
+                               container.insertAfter( element );\r
+                       else\r
+                               element.append( container );\r
+\r
+                       /**\r
+                        * The DOM element that holds the main editor interface.\r
+                        * @name CKEDITOR.editor.prototype.container\r
+                        * @type CKEDITOR.dom.element\r
+                        * @example\r
+                        * var editor = CKEDITOR.instances.editor1;\r
+                        * alert( <b>editor.container</b>.getName() );  "span"\r
+                        */\r
+                       editor.container = container;\r
+\r
+                       editor.fireOnce( 'themeLoaded' );\r
+                       editor.fireOnce( 'uiReady' );\r
+               },\r
+\r
+               buildDialog : function( editor )\r
+               {\r
+                       var baseIdNumber = CKEDITOR.tools.getNextNumber();\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( [\r
+                                       '<div id="cke_' + editor.name.replace('.', '\\.') + '_dialog" class="cke_skin_', editor.skinName,\r
+                                               '" dir="', editor.lang.dir, '"' +\r
+                                               ' lang="', editor.langCode, '"' +\r
+                                               '>' +\r
+\r
+                                               '<div class="cke_dialog', ' ' + CKEDITOR.env.cssClass,\r
+                                                       ' cke_', editor.lang.dir, '" style="position:absolute">' +\r
+                                                       '<div class="%body">' +\r
+                                                               '<div id="%title#" class="%title"></div>' +\r
+                                                               '<div id="%close_button#" class="%close_button">' +\r
+                                                                       '<span>X</span>' +\r
+                                                               '</div>' +\r
+                                                               '<div id="%tabs#" class="%tabs"></div>' +\r
+                                                               '<div id="%contents#" class="%contents"></div>' +\r
+                                                               '<div id="%footer#" class="%footer"></div>' +\r
+                                                       '</div>' +\r
+                                                       '<div id="%tl#" class="%tl"></div>' +\r
+                                                       '<div id="%tc#" class="%tc"></div>' +\r
+                                                       '<div id="%tr#" class="%tr"></div>' +\r
+                                                       '<div id="%ml#" class="%ml"></div>' +\r
+                                                       '<div id="%mr#" class="%mr"></div>' +\r
+                                                       '<div id="%bl#" class="%bl"></div>' +\r
+                                                       '<div id="%bc#" class="%bc"></div>' +\r
+                                                       '<div id="%br#" class="%br"></div>' +\r
+                                               '</div>',\r
+\r
+                                               //Hide the container when loading skins, later restored by skin css.\r
+                                               ( CKEDITOR.env.ie ? '' : '<style>.cke_dialog{visibility:hidden;}</style>' ),\r
+\r
+                                       '</div>'\r
+                               ].join( '' )\r
+                                       .replace( /#/g, '_' + baseIdNumber )\r
+                                       .replace( /%/g, 'cke_dialog_' ) );\r
+\r
+                       var body = element.getChild( [ 0, 0 ] );\r
+\r
+                       // Make the Title and Close Button unselectable.\r
+                       body.getChild( 0 ).unselectable();\r
+                       body.getChild( 1 ).unselectable();\r
+\r
+\r
+                       return {\r
+                               element : element,\r
+                               parts :\r
+                               {\r
+                                       dialog          : element.getChild( 0 ),\r
+                                       title           : body.getChild( 0 ),\r
+                                       close           : body.getChild( 1 ),\r
+                                       tabs            : body.getChild( 2 ),\r
+                                       contents        : body.getChild( 3 ),\r
+                                       footer          : body.getChild( 4 )\r
+                               }\r
+                       };\r
+               },\r
+\r
+               destroy : function( editor )\r
+               {\r
+                       var container = editor.container;\r
+\r
+                       /*\r
+                        * IE BUG: Removing the editor DOM elements while the selection is inside\r
+                        * the editing area would break IE7/8's selection system. So we need to put\r
+                        * the selection back to the parent document without scrolling the window.\r
+                        * (#3812)\r
+                        */\r
+                       if ( CKEDITOR.env.ie )\r
+                       {\r
+                               container.setStyle( 'display', 'none' );\r
+\r
+                               var $range = document.body.createTextRange();\r
+                               $range.moveToElementText( container.$ );\r
+                               try\r
+                               {\r
+                                       // Putting the selection to a display:none element - this will certainly\r
+                                       // fail. But! We've just put the selection document back to the parent\r
+                                       // document without scrolling the window!\r
+                                       $range.select();\r
+                               }\r
+                               catch ( e ) {}\r
+                       }\r
+\r
+                       if ( container )\r
+                               container.remove();\r
+\r
+                       if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE )\r
+                       {\r
+                               editor.element.show();\r
+                               delete editor.element;\r
+                       }\r
+               }\r
+       };\r
+})() );\r
+\r
+CKEDITOR.editor.prototype.getThemeSpace = function( spaceName )\r
+{\r
+       var spacePrefix = 'cke_' + spaceName;\r
+       var space = this._[ spacePrefix ] ||\r
+               ( this._[ spacePrefix ] = CKEDITOR.document.getById( spacePrefix + '_' + this.name ) );\r
+       return space;\r
+};\r
+\r
+CKEDITOR.editor.prototype.resize = function( width, height, isContentHeight, resizeInner )\r
+{\r
+       var numberRegex = /^\d+$/;\r
+       if ( numberRegex.test( width ) )\r
+               width += 'px';\r
+\r
+       var contents = CKEDITOR.document.getById( 'cke_contents_' + this.name );\r
+       var outer = resizeInner ? contents.getAscendant( 'table' ).getParent()\r
+               : contents.getAscendant( 'table' ).getParent().getParent().getParent();\r
+\r
+       // Resize the width first.\r
+       // WEBKIT BUG: Webkit requires that we put the editor off from display when we\r
+       // resize it. If we don't, the browser crashes!\r
+       CKEDITOR.env.webkit && outer.setStyle( 'display', 'none' );\r
+       outer.setStyle( 'width', width );\r
+       if ( CKEDITOR.env.webkit )\r
+       {\r
+               outer.$.offsetWidth;\r
+               outer.setStyle( 'display', '' );\r
+       }\r
+\r
+       // Get the height delta between the outer table and the content area.\r
+       // If we're setting the content area's height, then we don't need the delta.\r
+       var delta = isContentHeight ? 0 : ( outer.$.offsetHeight || 0 ) - ( contents.$.clientHeight || 0 );\r
+       contents.setStyle( 'height', Math.max( height - delta, 0 ) + 'px' );\r
+\r
+       // Emit a resize event.\r
+       this.fire( 'resize' );\r
+};\r
+\r
+CKEDITOR.editor.prototype.getResizable = function()\r
+{\r
+       return this.container.getChild( [ 0, 0 ] );\r
+};\r
diff --git a/_tests/_assets/sample.css b/_tests/_assets/sample.css
new file mode 100644 (file)
index 0000000..cb4ceab
--- /dev/null
@@ -0,0 +1,4 @@
+.sample\r
+{\r
+       position: absolute;\r
+}\r
diff --git a/_tests/_assets/sample.js b/_tests/_assets/sample.js
new file mode 100644 (file)
index 0000000..56f6a62
--- /dev/null
@@ -0,0 +1 @@
+var testVar = 'Test!';\r
diff --git a/_tests/_assets/sample.txt b/_tests/_assets/sample.txt
new file mode 100644 (file)
index 0000000..c51cb7b
--- /dev/null
@@ -0,0 +1 @@
+Sample Text\r
diff --git a/_tests/_assets/sample.xml b/_tests/_assets/sample.xml
new file mode 100644 (file)
index 0000000..9b8be88
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" ?>\r
+<list>\r
+       <item id="test1" />\r
+       <item id="test2" />\r
+</list>\r
diff --git a/_tests/_assets/sample_xml.txt b/_tests/_assets/sample_xml.txt
new file mode 100644 (file)
index 0000000..9b8be88
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" ?>\r
+<list>\r
+       <item id="test1" />\r
+       <item id="test2" />\r
+</list>\r
diff --git a/_tests/core/_editor/custom_config_1.js b/_tests/core/_editor/custom_config_1.js
new file mode 100644 (file)
index 0000000..12a5225
--- /dev/null
@@ -0,0 +1,10 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.editorConfig = function( config )\r
+{\r
+       config.customConfig = '_editor/custom_config_2.js';\r
+       config.test_custom1 = 'Ok';\r
+};\r
diff --git a/_tests/core/_editor/custom_config_2.js b/_tests/core/_editor/custom_config_2.js
new file mode 100644 (file)
index 0000000..6996a96
--- /dev/null
@@ -0,0 +1,9 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.editorConfig = function( config )\r
+{\r
+       config.test_custom2 = 'Ok';\r
+};\r
diff --git a/_tests/core/ajax.html b/_tests/core/ajax.html
new file mode 100644 (file)
index 0000000..cb4a369
--- /dev/null
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.ajax</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../_source/core/loader.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.loader.load( 'core/ajax' );\r
+\r
+       //]]>\r
+       </script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_load_sync : function()\r
+               {\r
+                       var data = CKEDITOR.ajax.load( '../_assets/sample.txt' );\r
+                       assert.areSame( 'Sample Text\r\n', data, 'The loaded data doesn\'t match' );\r
+               },\r
+\r
+               test_load_sync_404 : function()\r
+               {\r
+                       var data = CKEDITOR.ajax.load( '../_assets/404.txt' );\r
+                       assert.isNull( data );\r
+               },\r
+\r
+               test_load_async : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               assert.areSame( 'Sample Text\r\n', data, 'The loaded data doesn\'t match' );\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.ajax.load( '../_assets/sample.txt', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               test_load_async_404 : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               assert.isNull( data );\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.ajax.load( '../_assets/404.txt', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               test_loadXml_sync : function()\r
+               {\r
+                       var data = CKEDITOR.ajax.loadXml( '../_assets/sample.xml' );\r
+                       assert.isInstanceOf( CKEDITOR.xml, data );\r
+                       assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                       assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+               },\r
+\r
+               test_loadXml_sync_404 : function()\r
+               {\r
+                       var data = CKEDITOR.ajax.loadXml( '../_assets/404.xml' );\r
+                       assert.isNull( data );\r
+               },\r
+\r
+               test_loadXml_async : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               assert.isInstanceOf( CKEDITOR.xml, data );\r
+                                               assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                                               assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.ajax.loadXml( '../_assets/sample.xml', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               test_loadXml_async_404 : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               assert.isNull( data );\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.ajax.loadXml( '../_assets/404.xml', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               test_loadXml_sync_txt : function()\r
+               {\r
+                       var data = CKEDITOR.ajax.loadXml( '../_assets/sample_xml.txt' );\r
+                       assert.isInstanceOf( CKEDITOR.xml, data );\r
+                       assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                       assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+               },\r
+\r
+               test_loadXml_async_txt : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               assert.isInstanceOf( CKEDITOR.xml, data );\r
+                                               assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                                               assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.ajax.loadXml( '../_assets/sample_xml.txt', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               test_parseXml : function()\r
+               {\r
+                       var data = new CKEDITOR.xml( '<?xml version="1.0" encoding="utf-8" ?><list><item id="test1" /><item id="test2" /></list>' );\r
+                       assert.isInstanceOf( CKEDITOR.xml, data );\r
+                       assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                       assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+               },\r
+\r
+               test_parseXml_nbsp : function()\r
+               {\r
+                       var data = new CKEDITOR.xml( '<?xml version="1.0" encoding="utf-8" ?><list><item id="test1">&nbsp;</item><item id="test2" /></list>' );\r
+                       assert.isInstanceOf( CKEDITOR.xml, data );\r
+                       assert.isNotNull( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (null)' );\r
+                       assert.isNotUndefined( data.selectSingleNode( '//list/item' ), 'The loaded data doesn\'t match (undefined)' );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/bootstrap.html b/_tests/core/bootstrap.html
new file mode 100644 (file)
index 0000000..a0841a6
--- /dev/null
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.bootstrap</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor_basic.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var before_loadFullCore = CKEDITOR.status;\r
+\r
+var isLoaded;\r
+\r
+CKEDITOR.on( 'loaded', function()\r
+       {\r
+               isLoaded = true;\r
+       });\r
+\r
+\r
+CKEDITOR.loadFullCore();\r
+\r
+       //]]>\r
+       </script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_status1 : function()\r
+               {\r
+                       assert.areSame( 'basic_loaded', before_loadFullCore );\r
+               },\r
+\r
+               test_status2 : function()\r
+               {\r
+                       // In IE, CKEDITOR.on( 'loaded' ) will be called immediately if the scripts are cached.\r
+                       if ( isLoaded )\r
+                               return;\r
+\r
+                       var testCase = this;\r
+                       CKEDITOR.on( 'loaded', function()\r
+                               {\r
+                                       testCase.resume( function()\r
+                                               {\r
+                                                       assert.areSame( 'loaded', CKEDITOR.status );\r
+                                               });\r
+                               });\r
+\r
+                       this.wait();\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/ckeditor.html b/_tests/core/ckeditor.html
new file mode 100644 (file)
index 0000000..4e9a1ae
--- /dev/null
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+       // Clean up all instances been created on the page.\r
+       function removeAllInstances()\r
+       {\r
+               var allInstances = CKEDITOR.instances;\r
+               for( var i in allInstances )\r
+               {\r
+                       CKEDITOR.remove(  allInstances[ i ] );\r
+               }\r
+       }\r
+\r
+       CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_replaceClass : function()\r
+               {\r
+                       // Asserts the default value.\r
+                       assert.areSame( 'ckeditor', CKEDITOR.replaceClass );\r
+               },\r
+\r
+               test_replaceByClassEnabled : function()\r
+               {\r
+                       // Asserts the default value.\r
+                       assert.isTrue( CKEDITOR.replaceByClassEnabled );\r
+               },\r
+\r
+               test_replaceId : function()\r
+               {\r
+                       CKEDITOR.replace( 'editor1' );\r
+                       assert.isObject( CKEDITOR.instances.editor1, 'editor instance not found' );\r
+                       assert.areSame( 'editor1', CKEDITOR.instances.editor1.name, 'instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor1' ), CKEDITOR.instances.editor1.element.$, 'instance element doesn\'t match' );\r
+               },\r
+\r
+               test_replaceName : function()\r
+               {\r
+                       CKEDITOR.replace( 'editor2' );\r
+                       assert.isObject( CKEDITOR.instances.editor2, 'editor instance not found' );\r
+                       assert.areSame( 'editor2', CKEDITOR.instances.editor2.name, 'instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementsByName( 'editor2' )[0], CKEDITOR.instances.editor2.element.$, 'instance element doesn\'t match' );\r
+               },\r
+\r
+               test_replaceElement : function()\r
+               {\r
+                       CKEDITOR.replace( document.getElementById( 'editor5' ) );\r
+                       assert.isObject( CKEDITOR.instances.editor5, 'editor instance not found' );\r
+                       assert.areSame( 'editor5', CKEDITOR.instances.editor5.name, 'instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor5' ), CKEDITOR.instances.editor5.element.$, 'instance element doesn\'t match' );\r
+               },\r
+\r
+\r
+               test_replaceError : function()\r
+               {\r
+                       try\r
+                       {\r
+                               CKEDITOR.replace( 'error' );\r
+                       }\r
+                       catch ( e )\r
+                       {\r
+                               assert.areSame( '[CKEDITOR.editor.replace] The element with id or name "error" was not found.', e );\r
+                       }\r
+               },\r
+\r
+               test_replaceAll_Class : function()\r
+               {\r
+                       CKEDITOR.replaceAll( 'myclass' );\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor3, 'editor3 instance not found' );\r
+                       assert.areSame( 'editor3', CKEDITOR.instances.editor3.name, 'editor3 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor3' ), CKEDITOR.instances.editor3.element.$, 'editor3 instance element doesn\'t match' );\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor4, 'editor4 instance not found' );\r
+                       assert.areSame( 'editor4', CKEDITOR.instances.editor4.name, 'editor4 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementsByName( 'editor4' )[0], CKEDITOR.instances.editor4.element.$, 'editor4 instance element doesn\'t match' );\r
+\r
+                       assert.isUndefined( CKEDITOR.instances.editor6, 'editor6 should be undefined' );\r
+                       assert.isUndefined( CKEDITOR.instances.editor7, 'editor7 should be undefined' );\r
+                       assert.isUndefined( CKEDITOR.instances.editor8, 'editor8 should be undefined' );\r
+                       assert.isUndefined( CKEDITOR.instances.editor8, 'editor9 should be undefined' );\r
+               },\r
+\r
+               test_replaceAll_Function : function()\r
+               {\r
+                       CKEDITOR.replaceAll( function( textarea )\r
+                               {\r
+                                       return ( textarea.id != 'editor6' && textarea.id != 'editor8' );\r
+                               } );\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor7, 'editor7 instance not found' );\r
+                       assert.areSame( 'editor7', CKEDITOR.instances.editor7.name, 'editor7 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor7' ), CKEDITOR.instances.editor7.element.$, 'editor7 instance element doesn\'t match' );\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor9, 'editor9 instance not found' );\r
+                       assert.areSame( 'editor9', CKEDITOR.instances.editor9.name, 'editor9 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor9' ), CKEDITOR.instances.editor9.element.$, 'editor9 instance element doesn\'t match' );\r
+\r
+                       assert.isUndefined( CKEDITOR.instances.editor6, 'editor6 should be undefined' );\r
+                       assert.isUndefined( CKEDITOR.instances.editor8, 'editor8 should be undefined' );\r
+               },\r
+\r
+               test_replaceAll : function()\r
+               {\r
+                       CKEDITOR.replaceAll();\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor6, 'editor6 instance not found' );\r
+                       assert.areSame( 'editor6', CKEDITOR.instances.editor6.name, 'editor6 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor6' ), CKEDITOR.instances.editor6.element.$, 'editor6 instance element doesn\'t match' );\r
+\r
+                       assert.isObject( CKEDITOR.instances.editor8, 'editor8 editor instance not found' );\r
+                       assert.areSame( 'editor8', CKEDITOR.instances.editor8.name, 'editor8 instance name doesn\'t match' );\r
+                       assert.areSame( document.getElementById( 'editor8' ), CKEDITOR.instances.editor8.element.$, 'editor8 instance element doesn\'t match' );\r
+               },\r
+\r
+               test_add : function()\r
+               {\r
+                       var textarea = CKEDITOR.dom.element.createFromHtml( '<textarea id="test_add">&lt;p&gt;test_add&lt;/p&gt;<\/textarea>' );\r
+                       textarea.appendTo( new CKEDITOR.dom.element( document.body ) );\r
+\r
+                       var editor = new CKEDITOR.editor( {}, textarea, CKEDITOR.ELEMENT_MODE_REPLACE );\r
+\r
+                       CKEDITOR.add( editor );\r
+\r
+                       assert.areSame( editor, CKEDITOR.instances.test_add );\r
+               },\r
+\r
+               setUp : function()\r
+               {\r
+                       removeAllInstances();\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <textarea id="editor1" cols="80" rows="10"></textarea>\r
+       <textarea name="editor2" cols="80" rows="10"></textarea>\r
+       <textarea id="editor3" name="editor3" class="myclass" cols="80" rows="10"></textarea>\r
+       <textarea name="editor4" class="myclass" cols="80" rows="10"></textarea>\r
+       <textarea id="editor5" cols="80" rows="10"></textarea>\r
+       <textarea id="editor6" cols="80" rows="10"></textarea>\r
+       <textarea id="editor7" cols="80" rows="10"></textarea>\r
+       <textarea id="editor8" cols="80" rows="10"></textarea>\r
+       <textarea id="editor9" cols="80" rows="10"></textarea>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/dom/document.html b/_tests/core/dom/document.html
new file mode 100644 (file)
index 0000000..ce55ca3
--- /dev/null
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.document</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert,\r
+               arrayAssert = YAHOO.util.ArrayAssert;\r
+\r
+       return {\r
+               test_$ : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       assert.areSame( document, doc.$ );\r
+               },\r
+\r
+               test_appendStyleSheet : function()\r
+               {\r
+                       var cssUrl = CKEDITOR.basePath + '_tests/';\r
+                       cssUrl += '_assets/sample.css';\r
+\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       doc.appendStyleSheet( cssUrl );\r
+\r
+                       var links = document.getElementsByTagName( 'link' );\r
+\r
+                       for ( var i = 0 ; i < links.length ; i++ )\r
+                       {\r
+                               if ( links[i].href == cssUrl )\r
+                                       return ;\r
+                       }\r
+\r
+                       assert.fail( 'The link element was not found' );\r
+               },\r
+\r
+               test_equals1 : function()\r
+               {\r
+                       // Actually checks the real need for equals().\r
+                       var doc1 = new CKEDITOR.dom.document( document );\r
+                       assert.isFalse( doc1 == document );\r
+               },\r
+\r
+               test_equals2 : function()\r
+               {\r
+                       // Actually checks the real need for equals().\r
+                       var doc1 = new CKEDITOR.dom.document( document );\r
+                       var doc2 = new CKEDITOR.dom.document( document );\r
+                       assert.isFalse( doc1 == doc2, 'doc1 == doc2' );\r
+               },\r
+\r
+               test_equals3 : function()\r
+               {\r
+                       var doc1 = new CKEDITOR.dom.document( document );\r
+                       var doc2 = new CKEDITOR.dom.document( document );\r
+                       assert.isTrue( doc1.equals( doc2 ), 'doc1.equals( doc2 )' );\r
+                       assert.isTrue( doc2.equals( doc1 ), 'doc2.equals( doc1 )' );\r
+               },\r
+\r
+               test_getById1 : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       var element = doc.getById( 'test1' );\r
+                       assert.areSame( document.getElementById( 'test1' ), element.$ );\r
+               },\r
+\r
+               test_getById2 : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       var element = doc.getById( 'test_invalid' );\r
+                       assert.isNull( element );\r
+               },\r
+\r
+               test_getHead : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       assert.areSame( document.getElementsByTagName( 'head' )[0], doc.getHead().$ );\r
+               },\r
+\r
+               test_getBody : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       assert.areSame( document.body, doc.getBody().$, '1st call failed' );\r
+                       assert.areSame( document.body, doc.getBody().$, '2nd call failed' );\r
+               },\r
+               test_createText : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document ), contentText = 'text content';\r
+                       var textNode = doc.createText( contentText );\r
+                       assert.areSame( contentText, textNode.getText(),\r
+                               'Create text node content doesn\'t match.' );\r
+               },\r
+\r
+               test_getByAddress1 : function()\r
+               {\r
+                       var doc = new CKEDITOR.dom.document( document );\r
+                       var node = doc.getByAddress( [ 1, 1, 0, 1, 0, 0 ] );\r
+                       assert.areSame( 'target', node.getText(),\r
+                               'Addressing target doesn\'t match.' );\r
+               },\r
+\r
+               test_getElementsByTag : function()\r
+               {\r
+                       var nodeList = new CKEDITOR.dom.document( document ).getElementsByTag( 'span' ),\r
+                               results = [];\r
+                       for( var i = 0; i < nodeList.count(); i++ ){\r
+                               results.push( nodeList.getItem( i ).$ );\r
+                       }\r
+                       arrayAssert.itemsAreEqual( results, document.getElementsByTagName( 'span' ) );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body><div id="test1"></div><div><p>text<span><b id="addressTarget1">target</b>text</span>text</p></div><span ><b id="addressTarget2">target</b></span></body>\r
+</html>\r
diff --git a/_tests/core/dom/documentfragment.html b/_tests/core/dom/documentfragment.html
new file mode 100644 (file)
index 0000000..fefd611
--- /dev/null
@@ -0,0 +1,292 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.documentFragment</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+var tc;\r
+CKEDITOR.test.addTestCase( tc = ( function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = YAHOO.util.Assert,\r
+               doc = CKEDITOR.document;\r
+\r
+       return {\r
+\r
+               test_appendTo : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner =\r
+                                       new CKEDITOR.dom.element( 'b' );\r
+                       frag.append( inner );\r
+                       var container = CKEDITOR.document.getById( 'fragmentContainer1' );\r
+                       frag.appendTo( container );\r
+                       assert.isTrue( container.getLast().equals( inner ) );\r
+               },\r
+\r
+               test_append : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner =\r
+                                       new CKEDITOR.dom.element( 'b' );\r
+                       frag.append( inner );\r
+                       var container = CKEDITOR.document.getById( 'fragmentContainer3' );\r
+                       container.append( frag );\r
+                       assert.isTrue( container.getLast().equals( inner ) );\r
+               },\r
+\r
+               test_getFirst : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner =\r
+                                       new CKEDITOR.dom.element( 'b' );\r
+                       frag.append( inner );\r
+                       var first = frag.getFirst();\r
+                       assert.isTrue( first.equals( inner ) );\r
+               },\r
+\r
+               test_getLast : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner =\r
+                                       new CKEDITOR.dom.element( 'b' ), lastInner = inner.clone();\r
+                       frag.append( inner );\r
+                       frag.append( lastInner );\r
+                       var last = frag.getLast();\r
+                       assert.isTrue( last.equals( lastInner ) );\r
+               },\r
+\r
+               test_moveChildren : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner1 = new CKEDITOR.dom.element( 'b' ),\r
+                       inner2 = new CKEDITOR.dom.element( 'i' );\r
+                       frag.append( inner1 );\r
+                       frag.append( inner2 );\r
+\r
+                       // Move to element\r
+                       var element = new CKEDITOR.dom.element( 'span' );\r
+                       frag.moveChildren( element, true );\r
+                       assert.isTrue( element.getFirst().equals( inner1 ) );\r
+                       assert.isTrue( element.getLast().equals( inner2 ) );\r
+               },\r
+\r
+               test_moveChildren2 : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner1 = new CKEDITOR.dom.element( 'b' ),\r
+                               inner2 = new CKEDITOR.dom.element( 'i' );\r
+                       frag.append( inner1 );\r
+                       frag.append( inner2 );\r
+\r
+                       // Move to fragment\r
+                       var anotherFrag = new CKEDITOR.dom.documentFragment(\r
+                               CKEDITOR.document );\r
+                       frag.moveChildren( anotherFrag, true );\r
+                       assert.isTrue( anotherFrag.getFirst().equals( inner1 ) );\r
+                       assert.isTrue( anotherFrag.getLast().equals( inner2 ) );\r
+               },\r
+\r
+               test_appendText : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'script' );\r
+                       element.appendText( 'Test appendText' );\r
+                       assert.areEqual( 'Test appendText', element.$.text );\r
+               },\r
+\r
+               test_ltrim : function()\r
+               {\r
+                       // IE need special treatement to setup this tc, see\r
+                       // next tc for this.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+                       var element = CKEDITOR.dom.element.createFromHtml(\r
+                               '<div id="trimTarget">\t\ntext\t\n</div>'\r
+                       );\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       element.moveChildren( frag );\r
+                       frag.ltrim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+                       assert.areSame( 'text\t\n', ct.getText() );\r
+               },\r
+\r
+               test_ltrim_ie : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+                       // IE dom operation will trim preceding empty text,\r
+                       // here we use 'splitText' way to create leading spaces\r
+                       // instead for testing.\r
+                       var emptyTextNode = doc.createText( '@ \ttext\t ');\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( doc );\r
+                       frag.append( emptyTextNode );\r
+                       frag.getFirst().$.splitText( 1 );\r
+                       frag.getFirst().remove();\r
+                       frag.ltrim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+                       assert.areSame( 'text\t ', ct.getText() );\r
+               },\r
+\r
+               test_rtrim : function()\r
+               {\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+                       var element = CKEDITOR.dom.element.createFromHtml(\r
+                               '<div id="trimTarget">\t\ntext\t\n</div>'\r
+                       );\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       element.moveChildren( frag );\r
+                       frag.rtrim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+\r
+                       assert.areSame( '\t\ntext', ct.getText() );\r
+               },\r
+\r
+               /**\r
+                *@see test_ltrim_ie\r
+                */\r
+               test_rtrim_ie : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+                       var emptyTextNode = doc.createText( '@ \ttext\t ');\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( doc );\r
+                       frag.append( emptyTextNode );\r
+                       frag.getFirst().$.splitText( 1 );\r
+                       frag.getFirst().remove();\r
+                       frag.rtrim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+                       assert.areSame( ' \ttext', ct.getText() );\r
+               },\r
+\r
+\r
+               test_trim : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+                       var element = CKEDITOR.dom.element.createFromHtml(\r
+                               '<div id="trimTarget">\t\ntext\t\n</div>'\r
+                       );\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       element.moveChildren( frag );\r
+                       frag.trim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+                       assert.areSame( 'text', ct.getText() );\r
+               },\r
+\r
+\r
+               /**\r
+                *@see test_ltrim_ie\r
+                */\r
+               test_trim_ie : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+                       var emptyTextNode = doc.createText( '@ \t\ntext\t\n ');\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( doc );\r
+                       frag.append( emptyTextNode );\r
+                       frag.getFirst().$.splitText( 1 );\r
+                       frag.getFirst().remove();\r
+                       frag.trim();\r
+                       var ct = new CKEDITOR.dom.element( 'div' );\r
+                       ct.append( frag );\r
+                       assert.areSame( 'text', ct.getText() );\r
+               },\r
+\r
+               test_insertAfter : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner = new CKEDITOR.dom.element( 'b' );\r
+                       frag.append( inner );\r
+                       var container = CKEDITOR.document.getById( 'fragmentContainer2' );\r
+                       var sibling = CKEDITOR.document.getById( 'fragmentSibling1' );\r
+                       frag.insertAfterNode( sibling );\r
+                       assert.isTrue( container.getLast().equals( inner ) );\r
+               },\r
+\r
+               test_getChildCount : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner1 = new CKEDITOR.dom.element( 'b' ),\r
+                               inner2 = new CKEDITOR.dom.element( 'i' );\r
+                       frag.append( inner1 );\r
+                       frag.append( inner2 );\r
+\r
+                       assert.areEqual( 2, frag.getChildCount() );\r
+               },\r
+\r
+               test_getChild : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner1 = new CKEDITOR.dom.element( 'b' ),\r
+                               inner2 = new CKEDITOR.dom.element( 'i' );\r
+                       frag.append( inner1 );\r
+                       frag.append( inner2 );\r
+\r
+                       assert.isTrue( inner2.equals( frag.getChild( 1 ) ) );\r
+               },\r
+\r
+               test_getChildren : function()\r
+               {\r
+                       var frag =\r
+                                       new CKEDITOR.dom.documentFragment( CKEDITOR.document );\r
+                       var inner1 = new CKEDITOR.dom.element( 'b' ),\r
+                               inner2 = new CKEDITOR.dom.element( 'i' );\r
+                       frag.append( inner1 );\r
+                       frag.append( inner2 );\r
+\r
+                       var childNodesList = frag.getChildren();\r
+                       assert.areEqual( 2, childNodesList.count() );\r
+                       assert.isTrue( inner2.equals( childNodesList.getItem( 1 ) ) );\r
+               },\r
+\r
+               test_getDocument : function()\r
+               {\r
+                       var doc = CKEDITOR.document,\r
+                               innerDoc = new CKEDITOR.dom.document(\r
+                                       doc.getById( 'innerFrame' ).$.contentWindow.document );\r
+                       var frag1 = new CKEDITOR.dom.documentFragment( doc ),\r
+                               frag2 = new CKEDITOR.dom.documentFragment( innerDoc );\r
+\r
+                       assert.isTrue( doc.equals( frag1.getDocument() ) );\r
+                       assert.isTrue( innerDoc.equals( frag2.getDocument() ) );\r
+               },\r
+\r
+               name :document.title\r
+       };\r
+} )() );\r
+\r
+//window.onload = tc.test_rtrim_ie;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="fragmentContainer1"></div>\r
+       <div id="fragmentContainer2"><div id="fragmentSibling1"></div></div>\r
+       <div id="fragmentContainer3"></div>\r
+       <iframe id="innerFrame" name="innerFrame" src="about:blank"></iframe>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/dom/element.html b/_tests/core/dom/element.html
new file mode 100644 (file)
index 0000000..0aac3c4
--- /dev/null
@@ -0,0 +1,637 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.element</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+       var getInnerHtml = CKEDITOR.test.getInnerHtml;\r
+\r
+       return {\r
+               test_$ : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       assert.areSame( document.getElementById( 'test1' ), element.$ );\r
+               },\r
+\r
+               test_getId1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       assert.areEqual( 'test1', element.getId() );\r
+               },\r
+\r
+               test_getId2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementsByTagName( 'div' )[0] );\r
+                       assert.isNull( element.getId() );\r
+               },\r
+\r
+               test_getNameAtt1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementsByName( 'named1' )[0] );\r
+                       assert.areEqual( 'named1', element.getNameAtt() );\r
+               },\r
+\r
+               test_getNameAtt2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       assert.isNull( element.getNameAtt() );\r
+               },\r
+\r
+               test_getName : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       assert.areEqual( 'textarea', element.getName(), 'First call' );\r
+                       assert.areEqual( 'textarea', element.getName(), 'Second call' );\r
+               },\r
+\r
+               test_hide : function()\r
+               {\r
+                       var nativeElement = document.getElementById( 'test1' );\r
+                       nativeElement.style.display = '';\r
+\r
+                       var element = new CKEDITOR.dom.element( nativeElement );\r
+                       element.hide();\r
+\r
+                       assert.areEqual( 'none', nativeElement.style.display );\r
+               },\r
+\r
+               test_show : function()\r
+               {\r
+                       var nativeElement = document.getElementById( 'test1' );\r
+                       nativeElement.style.display = '';\r
+\r
+                       var element = new CKEDITOR.dom.element( nativeElement );\r
+                       element.show();\r
+\r
+                       assert.areEqual( '', nativeElement.style.display );\r
+               },\r
+\r
+               test_createFromHtml : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<p>My test</p>' );\r
+                       assert.areEqual( 'p', element.getName(), 'element name doesn\'t match' );\r
+                       assert.areEqual( 'My test', element.$.innerHTML, 'the innerHTML doesn\'t match' );\r
+               },\r
+\r
+               test_createFromHtml2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x><p>Test</p></div>' );\r
+                       assert.areNotEqual( 'Test', element.getChild( 0, 0 ).innerHTML );\r
+               },\r
+\r
+               test_append1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.append( new CKEDITOR.dom.element( 'b' ) );\r
+                       assert.areEqual( 'b', document.getElementById( 'append' ).firstChild.nodeName.toLowerCase() );\r
+               },\r
+\r
+               test_append2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.append( 'i' );\r
+                       assert.areEqual( 'i', document.getElementById( 'append' ).lastChild.nodeName.toLowerCase() );\r
+               },\r
+\r
+               test_appendText1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.setHtml( '' );\r
+                       element.appendText( 'Test appendText' );\r
+                       assert.areEqual( 'Test appendText', document.getElementById( 'append' ).innerHTML );\r
+               },\r
+\r
+               test_appendText2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'script' );\r
+                       element.appendText( 'Test appendText' );\r
+                       assert.areEqual( 'Test appendText', element.$.text );\r
+               },\r
+\r
+               test_setHtml : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.setHtml( '<b>Test</b>' );\r
+                       assert.areEqual( '<b>test</b>', document.getElementById( 'append' ).innerHTML.toLowerCase(), 'First call doesn\'t match' );\r
+                       element.setHtml( 'Another test' );\r
+                       assert.areEqual( 'Another test', document.getElementById( 'append' ).innerHTML, 'Second call doesn\'t match' );\r
+               },\r
+\r
+               test_getDocument1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'div' );\r
+                       assert.areSame( document, element.getDocument().$, 'First call' );\r
+                       assert.areSame( document, element.getDocument().$, 'Second call' );\r
+               },\r
+\r
+               test_getDocument2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.body );\r
+                       assert.areSame( document, element.getDocument().$, 'First call' );\r
+                       assert.areSame( document, element.getDocument().$, 'Second call' );\r
+               },\r
+\r
+               test_getFirst1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.setHtml( '<b>Test</b>' );\r
+                       var first = element.getFirst();\r
+                       assert.areSame( 'b', first.getName() );\r
+               },\r
+\r
+               test_getFirst2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.setHtml( 'Test' );\r
+                       var first = element.getFirst();\r
+                       assert.areSame( 'Test', first.$.nodeValue );\r
+               },\r
+\r
+               test_getFirst3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       element.setHtml( '' );\r
+                       var first = element.getFirst();\r
+                       assert.isNull( first );\r
+               },\r
+\r
+               test_setAttribute1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       element.setAttribute( 'class', 'Test' );\r
+\r
+                       assert.areSame( 'Test', document.getElementById( 'test1' ).className );\r
+               },\r
+\r
+               test_setAttribute2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       element.setAttribute( 'style', 'position: absolute;' );\r
+\r
+                       assert.areEqual( 'position: absolute;', CKEDITOR.test.getAttribute( element, 'style' ) );\r
+               },\r
+\r
+               test_setAttribute3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       element.setAttribute( 'name', 'TestName' );\r
+\r
+                       assert.areEqual( 'TestName', document.getElementById( 'test1' ).name );\r
+               },\r
+\r
+               test_setAttribute4 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       element.setAttribute( 'rows', 5 );\r
+\r
+                       assert.areEqual( 5, document.getElementById( 'test1' ).rows );\r
+               },\r
+\r
+               test_setAttributes : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'test2' ) );\r
+                       element.setAttributes({\r
+                               'class' : 'Test',\r
+                               'style' : 'position: absolute;',\r
+                               'name'  : 'TestName',\r
+                               'rows'  : 5 });\r
+\r
+                       assert.areSame( 'Test', document.getElementById( 'test1' ).className, 'class is wrong' );\r
+                       assert.areEqual( 'position: absolute;', CKEDITOR.test.getAttribute( element, 'style'), 'style is wrong' );\r
+                       assert.areEqual( 'TestName', document.getElementById( 'test1' ).name, 'name is wrong' );\r
+                       assert.areEqual( 5, document.getElementById( 'test1' ).rows, 'rows is wrong' );\r
+               },\r
+\r
+               test_setStyle1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'setStyle' ) );\r
+                       element.setStyle( 'position', 'absolute' );\r
+\r
+                       assert.areEqual( 'absolute', document.getElementById( 'setStyle' ).style.position );\r
+               },\r
+\r
+               test_setStyle2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'setStyle' ) );\r
+                       element.setStyle( 'float', 'right' );\r
+\r
+                       assert.areEqual( 'right', document.getElementById( 'setStyle' ).style.cssFloat );\r
+               },\r
+\r
+               test_setStyles : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'setStyle' ) );\r
+                       element.setStyles({\r
+                                       'position' : 'absolute',\r
+                                       'float' : 'right'\r
+                               });\r
+\r
+                       assert.areEqual( 'absolute', document.getElementById( 'setStyle' ).style.position );\r
+                       assert.areEqual( 'right', document.getElementById( 'setStyle' ).style.cssFloat );\r
+               },\r
+\r
+               test_setText1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'setText' ) );\r
+                       element.setText( 'A & B' );\r
+                       assert.areSame( 'A &amp; B', document.getElementById( 'setText' ).innerHTML );\r
+               },\r
+\r
+               test_setText2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'setText' ) );\r
+                       element.setText( 'C & D' );\r
+                       assert.areSame( 'C &amp; D', document.getElementById( 'setText' ).innerHTML );\r
+               },\r
+\r
+               test_addClass1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'div' );\r
+                       element.addClass( 'classA' );\r
+                       assert.areSame( 'classA', element.$.className );\r
+               },\r
+\r
+               test_addClass2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'div' );\r
+                       element.addClass( 'classA' );\r
+                       element.addClass( 'classA' );\r
+                       assert.areSame( 'classA', element.$.className );\r
+               },\r
+\r
+               test_addClass3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'div' );\r
+                       element.addClass( 'classA' );\r
+                       element.addClass( 'classB' );\r
+                       element.addClass( 'classC' );\r
+                       assert.areSame( 'classA classB classC', element.$.className );\r
+               },\r
+\r
+               test_addClass4 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( 'div' );\r
+                       element.addClass( 'classA' );\r
+                       element.addClass( 'classB' );\r
+                       element.addClass( 'classC' );\r
+                       element.addClass( 'classA' );\r
+                       element.addClass( 'classB' );\r
+                       element.addClass( 'classC' );\r
+                       assert.areSame( 'classA classB classC', element.$.className );\r
+               },\r
+\r
+               test_removeClass1 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div class="classA"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       assert.areSame( '<div class="classa"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classA' );\r
+                       assert.areSame( '<div></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_removeClass2 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div class="classA classB classC classD"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       assert.areSame( '<div class="classa classb classc classd"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classA' );\r
+                       assert.areSame( '<div class="classb classc classd"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classC' );\r
+                       assert.areSame( '<div class="classb classd"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classD' );\r
+                       assert.areSame( '<div class="classb"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classB' );\r
+                       assert.areSame( '<div></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_removeClass3 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div class="classA classB"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       assert.areSame( '<div class="classa classb"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classXXX' );\r
+                       assert.areSame( '<div class="classa classb"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classB' );\r
+                       assert.areSame( '<div class="classa"></div>', getInnerHtml( 'removeClass' ) );\r
+                       element.removeClass( 'classYYY' );\r
+                       assert.areSame( '<div class="classa"></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_removeAttribute1 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div class="classA"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       element.removeAttribute( 'class' );\r
+                       assert.areSame( '<div></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_removeAttribute2 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div style="position:absolute"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       element.removeAttribute( 'style' );\r
+                       assert.areSame( '<div></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_removeAttribute3 : function()\r
+               {\r
+                       document.getElementById( 'removeClass' ).innerHTML = '';\r
+\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<div title="Test"></div>' );\r
+                       element.appendTo( new CKEDITOR.dom.element( document.getElementById( 'removeClass' ) ) );\r
+\r
+                       element.removeAttribute( 'title' );\r
+                       assert.areSame( '<div></div>', getInnerHtml( 'removeClass' ) );\r
+               },\r
+\r
+               test_remove : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'removeInner' ) );\r
+                       element.remove();\r
+\r
+                       assert.areSame( '', getInnerHtml( 'removeOuter' ) );\r
+               },\r
+\r
+               test_getAttribute_tabindex1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndex10' ) );\r
+                       assert.areEqual( 10, CKEDITOR.test.getAttribute( element, 'tabindex' ) );\r
+               },\r
+\r
+               test_getAttribute_tabindex2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexDef' ) );\r
+                       assert.isNull( CKEDITOR.test.getAttribute( element, 'tabindex' ) );\r
+               },\r
+\r
+               test_getAttribute_tabindex3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexInputDef' ) );\r
+                       assert.isNull( CKEDITOR.test.getAttribute( element, 'tabindex' ) );\r
+               },\r
+\r
+               test_getAttribute_tabindex4 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexInput20' ) );\r
+                       assert.areEqual( 20, CKEDITOR.test.getAttribute( element, 'tabindex' ) );\r
+               },\r
+\r
+               test_getAttribute_tabindex5 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexScriptDef' ) );\r
+                       assert.areEqual( null, CKEDITOR.test.getAttribute( element, 'tabindex' ) );\r
+               },\r
+\r
+               /**\r
+                *  Test getAttribute and getAttribute will ingore  '_cke_expando' attribute.\r
+                */\r
+               test_getAttribute_ignoreExpandoAttributes : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'testExpandoAttributes' ) );\r
+\r
+                       assert.areEqual( 1, CKEDITOR.test.getAttribute( element, 'tabindex' ), 'tabindex is wrong' );\r
+                       element.removeAttribute( 'tabindex' );\r
+\r
+                       assert.areEqual( 'hasExpando', CKEDITOR.test.getAttribute( element, 'class' ), 'class is wrong' );\r
+                       element.removeAttribute( 'class' );\r
+\r
+                       assert.areEqual( 'float: right;', CKEDITOR.test.getAttribute( element, 'style' ) );\r
+\r
+                       element.removeAttribute( 'style' );\r
+                       element.removeAttribute( 'id' );\r
+                       assert.isFalse( element.hasAttributes(), 'hasAttributes should be false' );\r
+               },\r
+\r
+               test_getTabIndex1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndex10' ) );\r
+                       assert.areSame( 10, element.getTabIndex() );\r
+               },\r
+\r
+               test_getTabIndex2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexDef' ) );\r
+                       assert.areSame( -1, element.getTabIndex() );\r
+               },\r
+\r
+               test_getTabIndex3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexInputDef' ) );\r
+                       assert.areSame( 0, element.getTabIndex() );\r
+               },\r
+\r
+               test_getTabIndex4 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexInput20' ) );\r
+                       assert.areSame( 20, element.getTabIndex() );\r
+               },\r
+\r
+               test_getTabIndex5 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'tabIndexScriptDef' ) );\r
+                       assert.areSame( -1, element.getTabIndex() );\r
+               },\r
+\r
+               test_private1 : function()\r
+               {\r
+                       var a = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       var b = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+\r
+                       assert.areSame( a.getPrivate(), b.getPrivate() );\r
+               },\r
+\r
+               test_private2 : function()\r
+               {\r
+                       var a = new CKEDITOR.dom.element( document.getElementById( 'test1' ) );\r
+                       var b = new CKEDITOR.dom.element( document.getElementById( 'test2' ) );\r
+\r
+                       assert.areNotSame( a.getPrivate(), b.getPrivate() );\r
+               },\r
+\r
+               test_getText1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'getText' ) );\r
+\r
+                       // IE gives us a different result, which is ok for us (see code comments).\r
+                       if ( CKEDITOR.env.ie )\r
+                               assert.areSame( 'Some \nsample text for testing', element.getText().replace( /\r\n|\r/g, '\n' ) );\r
+                       else\r
+                               assert.areSame( 'Some  sample text    for    testing', element.getText() );\r
+               },\r
+\r
+               test_getText2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'getText2' ).getElementsByTagName( 'b' )[0] );\r
+                       assert.areSame( ' ', element.getText() );\r
+               },\r
+\r
+               test_getText3 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'getText3' ) );\r
+\r
+                       // IE gives us a different result, which is ok for us (see code comments).\r
+                       if ( CKEDITOR.env.ie )\r
+                               assert.areSame( 'A B', element.getText() );\r
+                       else\r
+                               assert.areSame( 'A\nB', element.getText().replace( /\r\n|\r/g, '\n' ) );\r
+               },\r
+\r
+               test_hasAttributes1 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementsByTagName( 'big' )[0] );\r
+                       assert.isFalse( element.hasAttributes() );\r
+               },\r
+\r
+               test_hasAttributes2 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementsByTagName( 'small' )[0] );\r
+                       assert.isTrue( element.hasAttributes() );\r
+               },\r
+\r
+               /**\r
+                * Test detecting of 'class' attribute in IE6/7.\r
+                */\r
+               test_hasAttributes_4075 : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) )\r
+                               return;\r
+                       var element = new CKEDITOR.dom.element( 'span' );\r
+                       element.setAttribute( 'class', 'value' );\r
+                       assert.isTrue( element.hasAttributes(), 'Failed to detect "class" attribute existence.' );\r
+               },\r
+\r
+               test_getDocumentPosition : function()\r
+               {\r
+                       // Assign the page location of the element.\r
+                       YAHOO.util.Dom.setXY('DocPositionTarget', [ 350, 450 ] );\r
+                       var pos = CKEDITOR.document.getById( 'DocPositionTarget' ).getDocumentPosition();\r
+                       if ( !CKEDITOR.env.ie || CKEDITOR.env.ie8 )\r
+                       {\r
+                               assert.areEqual( 350, pos.x, 'Position coordinates:x relative to document doesn\'t match.' );\r
+                               assert.areEqual( 450, pos.y, 'Position coordinates:y relative to document doesn\'t match.' );\r
+                       }\r
+                       else\r
+                       {\r
+                               assert.isTrue( pos.x == 348 || pos.x == 349, 'Position coordinates:x relative to document doesn\'t match.' );\r
+                               assert.areEqual( 448, pos.y, 'Position coordinates:y relative to document doesn\'t match.' );\r
+                       }\r
+               },\r
+\r
+               // Test get last non-spaces child node.\r
+               test_getLast : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       var span1 = new CKEDITOR.dom.element( 'span' );\r
+                       element.append( span1 );\r
+                       element.append( new CKEDITOR.dom.text( ' ' ) );\r
+                       element.append( new CKEDITOR.dom.text( ' ' ) );\r
+                       var last = element.getLast( CKEDITOR.dom.walker.whitespaces( true ) );\r
+                       assert.areSame( span1.$, last.$ );\r
+               },\r
+\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+       <style type="text/css" media="screen">\r
+               #test-computed {\r
+                   width:50%;\r
+                   margin:auto;\r
+                   padding:10px;\r
+                   z-index: 2;\r
+               }\r
+               .scroll\r
+               {\r
+                       overflow: visible;\r
+               }\r
+               .block1\r
+               {\r
+                       width: 100%;\r
+                       height: 100px;\r
+                       background-color: blue;\r
+                       text-align: center;\r
+               }\r
+               .block2\r
+               {\r
+                       margin: auto;\r
+                       width: 200px;\r
+                       height: 200px;\r
+                       background-color: green;\r
+                       position : relative;\r
+               }\r
+               .block3\r
+               {\r
+                       position: absolute;\r
+                       float:right;\r
+                       width: 300px;\r
+                       height: 300px;\r
+                       background-color: black;\r
+               }\r
+               .block4\r
+               {\r
+                       position: absolute;\r
+                       left: 50px;\r
+                       right: 50px;\r
+                       width: 400px;\r
+                       height: 400px;\r
+                       background-color: pink;\r
+               }\r
+               #DocPositionTarget\r
+               {\r
+                       background-color: red;\r
+               }\r
+       </style>\r
+</head>\r
+<body>\r
+       <textarea id="test1" rows="10" cols="80"></textarea>\r
+       <textarea id="test2" rows="10" cols="80"></textarea>\r
+       <textarea name="named1" rows="10" cols="80"></textarea>\r
+       <div>Test</div>\r
+       <div id="append"></div>\r
+       <div id="setStyle"></div>\r
+       <div id="setText"></div>\r
+       <div id="removeClass"></div>\r
+       <div id="removeOuter"><b id="removeInner"></b></div>\r
+       <div id="tabIndex10" tabindex="10"></div>\r
+       <div id="testExpandoAttributes" _cke_expando ="1" class="hasExpando" tabindex="1" style="float:right"></div>\r
+       <div id="tabIndexDef"></div>\r
+       <input id="tabIndexInputDef" />\r
+       <input id="tabIndexInput20" tabindex="20" />\r
+       <script id="tabIndexScriptDef" type="text/javascript"></script>\r
+       <div id="getText">Some <br /><b> sample text</b>    for <i>   testing</i></div>\r
+       <div id="getText2">A<b> </b>B</div>\r
+       <div id="getText3">A\r
+B</div>\r
+       <big>Test</big>\r
+       <small title="Testing">Test</small>\r
+\r
+       <div class="block1 scroll" id="block1"><div class="block2 scroll" id="block2"><div class="block3 scroll" id="block3"><div class="block4 scroll" id="block4"><div id="DocPositionTarget">target</div></div></div></div></div>\r
+\r
+</body>\r
+</html>\r
diff --git a/_tests/core/dom/node.html b/_tests/core/dom/node.html
new file mode 100644 (file)
index 0000000..dcad605
--- /dev/null
@@ -0,0 +1,164 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.node</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+var tc;\r
+CKEDITOR.test.addTestCase( tc = (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_getPosition1 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'p' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition2 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'p' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_FOLLOWING, node2.getPosition( node1 ) );\r
+               },\r
+\r
+               test_getPosition3 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'p' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition4 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'p' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING, node2.getPosition( node1 ) );\r
+               },\r
+\r
+               test_getPosition5 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'div' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'div' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_IDENTICAL, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition6 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0].firstChild );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition7 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0].firstChild );\r
+                       assert.areSame( CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING, node2.getPosition( node1 ) );\r
+               },\r
+\r
+               test_getPosition8 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0].firstChild );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0].firstChild );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition9 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0].firstChild );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0].firstChild );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_FOLLOWING, node2.getPosition( node1 ) );\r
+               },\r
+\r
+               test_getPosition10 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'i' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               test_getPosition11 : function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0] );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'i' )[0] );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_FOLLOWING, node2.getPosition( node1 ) );\r
+               },\r
+\r
+               /**\r
+                *  Test 'preceding' position.\r
+                */\r
+               test_getPosition_3240: function()\r
+               {\r
+                       var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'b' )[0].firstChild );\r
+                       var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'span' )[0].firstChild );\r
+\r
+                       assert.areSame( CKEDITOR.POSITION_PRECEDING, node1.getPosition( node2 ) );\r
+               },\r
+\r
+               // Test get previous non-spaces node.\r
+               test_getPrevious : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       var span1 = new CKEDITOR.dom.element( 'span' );\r
+                       element.append( span1 );\r
+                       element.append( new CKEDITOR.dom.text( ' ' ) );\r
+                       var span2 = new CKEDITOR.dom.element( 'span' );\r
+                       element.append( span2 );\r
+                       var previous = span2.getPrevious( CKEDITOR.dom.walker.whitespaces( true ) );\r
+                       assert.areSame( span1.$, previous.$ );\r
+               },\r
+\r
+               // Test get next non-spaces node.\r
+               test_getNext : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element( document.getElementById( 'append' ) );\r
+                       var span1 = new CKEDITOR.dom.element( 'span' );\r
+                       element.append( span1 );\r
+                       element.append( new CKEDITOR.dom.text( ' ' ) );\r
+                       var span2 = new CKEDITOR.dom.element( 'span' );\r
+                       element.append( span2 );\r
+                       var next = span1.getNext( CKEDITOR.dom.walker.whitespaces( true ) );\r
+                       assert.areSame( span2.$, next.$ );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+//window.onload = function()\r
+//{\r
+//     var node1 = new CKEDITOR.dom.node( document.getElementsByTagName( 'h1' )[0] );\r
+//     var node2 = new CKEDITOR.dom.node( document.getElementsByTagName( 'p' )[0] );\r
+//\r
+//     alert( node1.getPosition( node2 ) );\r
+//};\r
+//window.onload =  tc.test_getPosition6;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div>\r
+               <h1>Title</h1>\r
+               <p><b>Sample</b> <i>Text</i></p>\r
+       </div>\r
+       <span>Another</span>\r
+       <p id="append"></p>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/dom/range.html b/_tests/core/dom/range.html
new file mode 100644 (file)
index 0000000..6ed253d
--- /dev/null
@@ -0,0 +1,2411 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.range</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var html1, html2;\r
+var tests;\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local references.\r
+       var assert                      = CKEDITOR.test.assert;\r
+       var getInnerHtml        = CKEDITOR.test.getInnerHtml;\r
+\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       var getRange = function( startId, endId )\r
+       {\r
+               var range = new CKEDITOR.dom.range( CKEDITOR.document );\r
+               range.moveToBookmark( { startNode : startId, endNode : endId, serializable : true } );\r
+               return range;\r
+       };\r
+\r
+       return tests = {\r
+               test__constructor : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       assert.isNotNull( range, 'range must not be null' );\r
+\r
+                       assert.isNull( range.startContainer, 'startContainer must be null' );\r
+                       assert.isNull( range.startOffset, 'startOffset must be null' );\r
+                       assert.isNull( range.endContainer, 'endContainer must be null' );\r
+                       assert.isNull( range.endOffset, 'endOffset must be null' );\r
+\r
+                       assert.isTrue( range.collapsed, 'range must be collapsed' );\r
+               },\r
+\r
+               test_setStart : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( 'playground' ), 1 );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$ );\r
+                       assert.areSame( 1, range.startOffset );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$ );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed );\r
+               },\r
+\r
+               test_setEnd : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEnd( doc.getById( 'playground' ), 1 );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$ );\r
+                       assert.areSame( 1, range.startOffset );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$ );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed );\r
+               },\r
+\r
+               test_setStartAfter : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAfter( doc.getById( '_B' ) );\r
+                       range.setStartAfter( doc.getById( '_H1' ).getFirst() );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_setStartBefore : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartBefore( doc.getById( '_B' ) );\r
+                       range.setStartBefore( doc.getById( '_H1' ).getFirst() );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_setEndAfter : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndAfter( doc.getById( '_H1' ).getFirst() );\r
+                       range.setEndAfter( doc.getById( '_B' ) );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_setEndBefore : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndBefore( doc.getById( '_H1' ).getFirst() );\r
+                       range.setEndBefore( doc.getById( '_B' ) );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_setStartAt_1 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setStartAt_2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setStartAt_3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_START );\r
+\r
+                       assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setStartAt_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setEndAt_1 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setEndAt_2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setEndAt_3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_START );\r
+\r
+                       assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_setEndAt_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_collapsed : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_P' ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       assert.isTrue( range.collapsed );\r
+               },\r
+\r
+               test_collapse : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_Para' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( '_Span' ), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+                       assert.isFalse( range.collapsed, 'collapsed' );\r
+\r
+                       range.collapse( true );\r
+\r
+                       assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'startContainer' );\r
+                       assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'endContainer' );\r
+                       assert.isTrue( range.collapsed, 'collapsed' );\r
+               },\r
+\r
+               test_selectNodeContents_Element : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // Test with an Element node.\r
+                       range.selectNodeContents( doc.getById( '_Para' ) );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_selectNodeContents_Text : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // Test with a Text node.\r
+                       range.selectNodeContents( doc.getById( '_Para' ).getFirst() );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 8, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_collapse_ToStart : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById( '_P' ) );\r
+                       range.collapse( true );\r
+\r
+                       assert.areSame( document.getElementById( '_P' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_P' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_collapse_ToEnd : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById( '_Para' ) );\r
+                       range.collapse( false );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 3, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_ElementContents : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById( '_B' ) );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( '_B' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_B' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_ElementCollapsed : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartBefore( doc.getById( '_Para' ) );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_ElementNotCollapsed : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartBefore( doc.getById( '_Para' ) );\r
+                       range.setStartBefore( doc.getById( '_H1' ) );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_DiffElements : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById( '_Para' ) );\r
+\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+\r
+                       assert.isTrue( range.startContainer.getChild( range.startOffset ).equals( newNode ), 'Start must be on new node' );\r
+               },\r
+\r
+               test_insertNode_TextCollapsed : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_H1' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_TextNotCollapsed : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
+                       range.setEnd( doc.getById( '_H1' ).getFirst(), 5 );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_H1' ).childNodes[2], range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_insertNode_Mixed : function()\r
+               {\r
+                       var newNode = new CKEDITOR.dom.element( 'span' );\r
+                       newNode.setHtml( 'test_' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_P' ), 1 );\r
+                       range.insertNode( newNode );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_P' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_getCommonAncestor1 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ).firstChild, range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_getCommonAncestor2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+\r
+                       assert.areSame( document.getElementById( '_H1' ), range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_getCommonAncestor3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+                       range.setEnd( doc.getById( '_Para' ), 0 );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_getCommonAncestor4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ), 0 );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_getCommonAncestor5 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getBody(), 0 );\r
+                       range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+                       assert.areSame( document.body, range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_getCommonAncestor6 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB' ), 3 );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.getCommonAncestor().$ );\r
+               },\r
+\r
+               test_enlarge_element1 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> Test <b> <i>  [Enlarge]</i> this</b>   </p>\r
+                       // <p> Test <b> [<i>  Enlarge</i>] this</b>   </p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element1_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test <b><i>[Enlarge]</i> this</b></p>\r
+                       // <p>Test <b>[<i>Enlarge</i>] this</b></p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element2 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> Test <b> <i>  [Enlarge</i> this]</b>   </p>\r
+                       // <p> Test [<b> <i>  Enlarge</i> this</b>]   </p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB' ), 3 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element2_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test <b><i>[Enlarge</i> this]</b></p>\r
+                       // <p>Test [<b><i>Enlarge</i> this</b>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element3 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> [Test <b> <i>  Enlarge]</i> this</b>   </p>\r
+                       // <p> [Test <b> <i>  Enlarge</i>] this</b>   </p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element3_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>[Test <b><i>Enlarge]</i> this</b></p>\r
+                       // <p>[Test <b><i>Enlarge</i>] this</b></p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element4 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> [Test <b> <i>  Enlarge</i> this]</b>   </p>\r
+                       // [<p> Test <b> <i>  Enlarge</i> this</b>   </p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_EnlargeB' ).getChild( 2 ), 5 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element4_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>[Test <b><i>Enlarge</i> this]</b></p>\r
+                       // [<p>Test <b><i>Enlarge</i> this</b></p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB' ).getChild( 1 ), 5 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element5 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> Test<b> <i>  [Enlarge</i> this]</b>   </p>\r
+                       // <p> Test<b> [<i>  Enlarge</i> this]</b>   </p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI1' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB1' ).getChild( 2 ), 5 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB1' ).childNodes[ 2 ], range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element5_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test<b> <i>[Enlarge</i> this]</b></p>\r
+                       // <p>Test<b> [<i>Enlarge</i> this]</b></p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI1' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB1' ).getChild( 2 ), 5 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB1' ).childNodes[ 2 ], range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element6 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> <b> <i>  [Enlarge</i>] this</b>   </p>\r
+                       // <p> <b> [<i>  Enlarge</i>] this</b>   </p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB2' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB2' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element6_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p><b><i>[Enlarge</i>] this</b></p>\r
+                       // <p><b>[<i>Enlarge</i>] this</b></p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeB2' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeB2' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element7 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> <b> <i>  [Enlarge</i> this]</b>   </p>\r
+                       // [<p> <b> <i>  Enlarge</i> this</b>   </p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 3 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element7_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p><b><i>[Enlarge</i> this]</b></p>\r
+                       // [<p><b><i>Enlarge</i> this</b></p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element8 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p> Test <b> <i>  [Enlarge</i> this</b>   </p><p> <b> <i>  Enlarge</i> this]</b>   </p>\r
+                       // <p> Test [<b> <i>  Enlarge</i> this</b>   </p><p> <b> <i>  Enlarge</i> this</b>   </p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 3 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element8_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test <b><i>[Enlarge</i> this</b></p><p><b><i>Enlarge</i> this]</b></p>\r
+                       // <p>Test [<b><i>Enlarge</i> this</b></p><p><b><i>Enlarge</i> this</b></p>]\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element9 : function()\r
+               {\r
+                       // <p>Test<i> [Enlarge</i>]</p>\r
+                       // <p>Test<i> [Enlarge</i>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI3' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_EnlargeP3' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeI3' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP3' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element10 : function()\r
+               {\r
+                       // For IE, see the next test.\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test <i> [Enlarge</i>]</p>\r
+                       // <p>Test [<i> Enlarge</i>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI4' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_EnlargeP4' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP4' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP4' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element10_ie : function()\r
+               {\r
+                       // IE normalizes whitespaces when parsing the HTML, so we need a\r
+                       // specific test for it.\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       // <p>Test <i>[Enlarge</i>]</p>\r
+                       // <p>Test [<i>Enlarge</i>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI4' ).getFirst(), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeP4' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP4' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP4' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element11 : function()\r
+               {\r
+                       // <p>Test <i>[Enlarge]</i></p>\r
+                       // <p>Test [<i>Enlarge</i>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI5' ), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeI5' ), 1 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP5' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP5' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element12 : function()\r
+               {\r
+                       // <p>Test <i><b></b>[Enlarge]</i></p>\r
+                       // <p>Test [<i><b></b>Enlarge</i>]</p>\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeI6' ), 1 );\r
+                       range.setEnd( doc.getById( '_EnlargeI6' ), 2 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP6' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP6' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_element13 : function()\r
+               {\r
+                       // <p>Test <i><b></b>[Enlarge]</i></p>\r
+                       // <p>Test [<i><b></b>Enlarge</i>]</p>\r
+\r
+                       doc.getById( '_EnlargeP' ).setHtml( 'this <i>is some </i>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_EnlargeP' ), 0 );\r
+                       range.setEnd( doc.getById( '_EnlargeP' ).getChild( 1 ), 0 );\r
+\r
+                       range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP' ).childNodes[ 1 ], range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_list1 : function()\r
+               {\r
+                       var range = getRange( 'S1', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP7' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP7' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_list2 : function()\r
+               {\r
+                       var range = getRange( 'S2', 'E2' );\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP8' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP8' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 4, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_list3 : function()\r
+               {\r
+                       var range = getRange( 'S3', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP9' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP9' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_list4 : function()\r
+               {\r
+                       var range = getRange( 'S4', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP10' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 3, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP10' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_list5 : function()\r
+               {\r
+                       var range = getRange( 'S9', null );\r
+                       var bookmark = range.createBookmark();\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP15' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP15' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 4, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+                       range.moveToBookmark( bookmark );\r
+               },\r
+\r
+               test_enlarge_block1 : function()\r
+               {\r
+                       var range = getRange( 'S5', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP11' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP11'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_block2 : function()\r
+               {\r
+                       var range = getRange( 'S10', null );\r
+                       var bookmark = range.createBookmark();\r
+                       range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP16' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP16'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+                       range.moveToBookmark( bookmark );\r
+               },\r
+\r
+               test_enlarge_block3 : function()\r
+               {\r
+                       var range = getRange( 'S6', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP12' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP12'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_block4 : function()\r
+               {\r
+                       var range = getRange( 'S7', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP13' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_EnlargeP13'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_enlarge_block5 : function()\r
+               {\r
+                       var range = getRange( 'S8', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP14' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               /**\r
+                * Test enlarge list when there's no nodes between\r
+                * range start and the block boundary.\r
+                */\r
+               test_enlarge_block6 : function()\r
+               {\r
+                       var range = getRange( 'S11', null );\r
+                       range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+                       assert.areSame( document.getElementById( '_EnlargeP17' ),\r
+                               range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+               },\r
+\r
+               test_deleteContents_W3C_1 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 1\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_Para' ), 2 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( 't text.', getInnerHtml( '_Para' ), 'HTML after deletion' );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_W3C_2 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 2\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getNext(), 1 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( 'this is <b id="_b">s</b>text.', getInnerHtml( '_Para' ) );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_W3C_3 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 3\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( 't<b id="_b">ome</b> text.', getInnerHtml( '_Para' ) );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_W3C_4 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 4\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( '<h1 id="_h1">f</h1><p>nother paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_Other : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( '<h1 id="_h1"></h1><p></p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_Other_2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( 'playground' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ), 2 );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( '<p>another paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame(document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_Other_3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( doc.getById('_B') );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( '', getInnerHtml('_B') );\r
+\r
+                       assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_deleteContents_Other_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( doc.getById('_Para') );\r
+\r
+                       range.deleteContents();\r
+\r
+                       assert.areSame( '', getInnerHtml('_Para') );\r
+\r
+                       assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_W3C_1 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.7 - Example 1\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_Para' ), 2 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'his is <b id="_b">some</b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( 't text.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_W3C_2 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.7 - Example 2\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getNext(), 2 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<b>ome</b> t', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( 'this is <b id="_b">s</b>ext.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_W3C_3 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 3\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'his is <b>s</b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( 't<b id="_b">ome</b> text.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_W3C_4 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 4\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1>ckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p><p>a</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '<h1 id="_h1">f</h1><p>nother paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1>fckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p><p>another paragraph.</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '<h1 id="_h1"></h1><p></p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other_2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( 'playground' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ), 2 );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1 id="_h1">fckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '<p>another paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other_3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById('_B') );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'some', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '', getInnerHtml('_B'), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById('_Para') );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'this is <b id="_b">some</b> text.', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '', getInnerHtml('_Para'), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other_5 : function()\r
+               {\r
+                       document.getElementById( 'playground' ).innerHTML = '<p><b><i>test</i></b></p>';\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAfter( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('i')[0] ) );\r
+                       range.setEndAfter( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('b')[0] ) );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<b></b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '<p><b><i>test</i></b></p>', getInnerHtml( 'playground' ), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_extractContents_Other_6 : function()\r
+               {\r
+                       document.getElementById( 'playground' ).innerHTML = '<p><b><i>test</i></b></p>';\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartBefore( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('b')[0] ) );\r
+                       range.setEndBefore( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('i')[0] ) );\r
+\r
+                       var docFrag = range.extractContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<b></b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+                       assert.areSame( '<p><b><i>test</i></b></p>', getInnerHtml( 'playground' ), 'HTML after extraction' );\r
+\r
+                       assert.areSame( document.getElementById( 'playground' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+                       assert.isTrue( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_W3C_1 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.7 - Example 1\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_Para' ), 2 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'his is <b>some</b>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_W3C_2 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.7 - Example 2\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getNext(), 2 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<b>ome</b> t', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( '_B' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_B' ).nextSibling, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_W3C_3 : function()\r
+               {\r
+                       // W3C DOM Range Specs - Section 2.6 - Example 3\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
+                       range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'his is <b>s</b>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( '_B' ).previousSibling, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( '_B' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               // W3C DOM Range Specs - Section 2.6 - Example 4\r
+               test_cloneContents_W3C_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1>ckw3crange test</h1><p>this is <b>some</b> text.</p><p>a</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( '_H1' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ).lastChild.firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_Other : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( '_H1' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1>fckw3crange test</h1><p>this is <b>some</b> text.</p><p>another paragraph.</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ).lastChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_Other_2 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( 'playground' ), 0 );\r
+                       range.setEnd( doc.getById( 'playground' ), 2 );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( '<h1>fckw3crange test</h1><p>this is <b>some</b> text.</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       // The range must also remain unchanged.\r
+                       assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_Other_3 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById('_B') );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'some', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_cloneContents_Other_4 : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.selectNodeContents( doc.getById('_Para') );\r
+\r
+                       var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+                       var docFrag = range.cloneContents();\r
+\r
+                       var tmpDiv = doc.createElement( 'div' );\r
+                       docFrag.appendTo( tmpDiv );\r
+\r
+                       assert.areSame( 'this is <b>some</b> text.', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+                       // The body HTML must remain unchanged.\r
+                       assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+                       assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_createBookmark2_1 : function()\r
+               {\r
+                       doc.getById( 'playground' ).setHtml( '<p id="P">This is <b id="B">a test</b></p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( doc.getById( 'P' ), 0 );\r
+                       range.setEnd( doc.getById( 'B' ).getFirst(), 3 );\r
+\r
+                       var bookmark = range.createBookmark2();\r
+\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.moveToBookmark( bookmark );\r
+\r
+                       assert.areSame( document.getElementById('P'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('B').firstChild, range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               // This test is just like test_createBookmark2_3, but uses a "non\r
+               // normalized" bookmark.\r
+               test_createBookmark2_2 : function()\r
+               {\r
+                       var html = '<p id="P">A B <b>C </b>D E</p>';\r
+\r
+                       doc.getById( 'playground' ).setHtml( html );\r
+\r
+                       var p = doc.getById( 'P' );\r
+\r
+                       // Split the text nodes.\r
+                       p.getFirst().split( 2 );        // Right before "B"\r
+                       p.getChild( 3 ).split( 2 );     // Right before "E"\r
+\r
+                       assert.areSame( 5, p.getChildCount(), 'The number of nodes after split doesn\'t match' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // Create a range that enbraces "E".\r
+                       range.setStartBefore( p.getChild( 4 ) );\r
+                       range.setEndAfter( p.getChild( 4 ) );\r
+\r
+                       var bookmark = range.createBookmark2();\r
+\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.moveToBookmark( bookmark );\r
+\r
+                       assert.areSame( document.getElementById('P'), range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 4, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('P'), range.endContainer.$, 'range.endContainer' );\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_createBookmark2_3 : function()\r
+               {\r
+                       var html = '<p id="P">A B <b>C </b>D E</p>';\r
+\r
+                       doc.getById( 'playground' ).setHtml( html );\r
+\r
+                       var p = doc.getById( 'P' );\r
+\r
+                       // Split the text nodes.\r
+                       p.getFirst().split( 2 );        // Right before "B"\r
+                       p.getChild( 3 ).split( 2 );     // Right before "E"\r
+\r
+                       assert.areSame( 5, p.getChildCount(), 'The number of nodes after split doesn\'t match' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // Create a range that enbraces "E".\r
+                       range.setStartBefore( p.getChild( 4 ) );\r
+                       range.setEndAfter( p.getChild( 4 ) );\r
+\r
+                       var bookmark = range.createBookmark2( true );\r
+\r
+                       // Normalize the contents.\r
+                       doc.getById( 'playground' ).setHtml( html );\r
+\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.moveToBookmark( bookmark );\r
+\r
+                       assert.areSame( document.getElementById('P').childNodes[2], range.startContainer.$, 'range.startContainer' );\r
+                       assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+                       assert.areSame( document.getElementById('P'), range.endContainer.$, 'range.endContainer' );\r
+\r
+                       // Note that the endOffset doesn't get normalized as it's not\r
+                       // needed. Any offset pointing over the container size is meant to\r
+                       // be at the end of it.\r
+                       assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+                       assert.isFalse( range.collapsed, 'range.collapsed' );\r
+               },\r
+\r
+               test_checkStartOfBlock1 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock2 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock3 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock4 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock5 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p> Test </p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // IE trims the space in the beginning of text nodes in our case.\r
+                       // So, let's just check it and make it pass.\r
+                       range.setStart( el, ( el.substring( 0, 1 ) == 'T' ) ? 0 : 1 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock6 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 5 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock7 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p><b>Test</b></p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock8 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+                       el = el.getFirst().getFirst().getNext();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock1 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock2 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock3 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock4 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock5 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 1 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock6 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 5 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock7 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p><b>Test</b></p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock8 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+                       el = el.getFirst().getFirst().getNext();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock1 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock2 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock3 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock4 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock5 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p> Test </p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       // IE trims the space in the beginning of text nodes in our case.\r
+                       // So, let's just check it and make it pass.\r
+                       range.setStart( el, ( el.substring( 0, 1 ) == 'T' ) ? 0 : 1 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock6 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 5 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock7 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p><b>Test</b></p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isTrue( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkStartOfBlock8 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+                       el = el.getFirst().getFirst().getNext();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isFalse( range.checkStartOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock1 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock2 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock3 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock4 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p>Test</p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock5 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 1 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock6 : function()\r
+               {\r
+                       var p = doc.getById( 'playground' );\r
+                       p.setHtml( '<p> Test </p>' );\r
+                       p = p.getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStart( p.getFirst(), 5 );\r
+                       range.collapse( true );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock7 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p><b>Test</b></p>' );\r
+                       el = el.getFirst().getFirst();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isTrue( range.checkEndOfBlock() );\r
+               },\r
+\r
+               test_checkEndOfBlock8 : function()\r
+               {\r
+                       var el = doc.getById( 'playground' );\r
+                       el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+                       el = el.getFirst().getFirst().getNext();\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( el );\r
+\r
+                       assert.isFalse( range.checkEndOfBlock() );\r
+               },\r
+\r
+               /**\r
+                *  Test trim with text range.\r
+                */\r
+               test_trim : function()\r
+               {\r
+                       var text = doc.getById( '_trim_ct').getFirst();\r
+                       var range = new CKEDITOR.dom.range();\r
+                       range.setStart(text, 2);\r
+                       range.setEnd(text, 6);\r
+                       range.trim();\r
+\r
+                       assert.isFalse( range.collapsed );\r
+                       assert.isTrue( range.startContainer.equals( doc.getById( '_trim_ct') ) );\r
+                       assert.areEqual( range.startOffset, 1 );\r
+                       assert.isTrue( range.endContainer.equals( doc.getById( '_trim_ct') ) );\r
+                       assert.areEqual( range.endOffset, 2 );\r
+               },\r
+\r
+               /**\r
+                * Trim range which collapsed at text node boundary.\r
+                */\r
+               test_trim_3790 : function()\r
+               {\r
+\r
+                       var ct = doc.getById( '_trim_ct');\r
+                       ct.setHtml( '<span id="_SPAN1">text</span>' );\r
+                       var text = doc.getById( '_trim_ct').getFirst();\r
+\r
+                       // <span id="_SPAN1">text^</span>\r
+                       var range = new CKEDITOR.dom.range();\r
+                       range.setStartAt( doc.getById( '_SPAN1' ).getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.collapse( true );\r
+                       range.trim( true );\r
+\r
+                       // <span id="_SPAN1">text^</span>\r
+                       assert.isTrue( range.collapsed );\r
+                       assert.areEqual( doc.getById( '_SPAN1').$, range.startContainer.$ );\r
+                       assert.areEqual( range.startOffset, 1 );\r
+               },\r
+\r
+               /**\r
+                * Trim range which collapsed inside text node.\r
+                */\r
+               test_trim_3790_2 : function()\r
+               {\r
+\r
+                       var ct = doc.getById( '_trim_ct');\r
+                       ct.setHtml( '<span id="_SPAN1">text</span>' );\r
+                       var text = doc.getById( '_trim_ct').getFirst();\r
+\r
+                       // <span id="_SPAN1">te^xt</span>\r
+                       var range = new CKEDITOR.dom.range();\r
+                       range.setStart( doc.getById( '_SPAN1' ).getFirst(), 2 );\r
+                       range.collapse( true );\r
+                       range.trim( true );\r
+\r
+                       // <span id="_SPAN1">te^xt</span>\r
+                       assert.isTrue( range.collapsed );\r
+                       assert.areEqual( doc.getById( '_SPAN1').$, range.startContainer.$ );\r
+                       assert.areEqual( range.startOffset, 1 );\r
+               },\r
+               /////////////\r
+\r
+               setUp : function()\r
+               {\r
+                        document.getElementById( 'playground' ).innerHTML = html1;\r
+                        document.getElementById( 'playground2' ).innerHTML = html2;\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+//window.onload = tests.test_trim;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="playground" style="visibility:hidden"><h1 id="_H1">FCKW3CRange Test</h1><p id="_Para">This is <b id="_B">some</b> text.</p><p>Another paragraph.</p></div>\r
+       <div id="playground2" style="visibility: hidden">\r
+               <h1>\r
+                       Test page for CKEditor\r
+               </h1>\r
+               <p id="_P">\r
+                       This document contains various markup features commonly used by content editors\r
+                       or "<span id="_Span" lang="fr">r&eacute;dacteurs de contenu</span>" as they are\r
+                       called in <a id="_A" href="http://en.wikipedia.org/wiki/France" title="Wikipedia article about France">\r
+                               France</a>.<br />\r
+                       It is important that a <acronym id="_Acronym" title="what you see is what you get">WYSIWYG</acronym>\r
+                       tool has features that are easily available for the editor. If not, there is a risk\r
+                       that content won't receive <strong id="_Strong">proper</strong> markup. Examples\r
+                       of commonly found content are:</p>\r
+               <p id="_Pnbsp">\r
+                       &nbsp;\r
+               </p>\r
+               <p id="_Pspaces">\r
+               </p>\r
+               <ol>\r
+                       <li>Headings</li>\r
+                       <li style="color: Red">Links (with optional title) </li>\r
+                       <li>Lists (like this one)\r
+                               <ul>\r
+                                       <li>including nested lists </li>\r
+                               </ul>\r
+                       </li>\r
+                       <li>Tables\r
+                               <ul>\r
+                                       <li>caption</li>\r
+                                       <li>headers</li>\r
+                                       <li>summary</li>\r
+                               </ul>\r
+                       </li>\r
+                       <li>Language information</li>\r
+                       <li>Acronyms and abbreviations</li>\r
+                       <li>Emphasis and strong emphasis </li>\r
+                       <li>Quotes, inline and block </li>\r
+                       <li>Images</li>\r
+               </ol>\r
+               <hr />\r
+               <h2 style="background-color: Silver">\r
+                       Test procedure\r
+               </h2>\r
+               This text has no block tag. It should be corrected when working with the enter key\r
+               set to "p" or "div" tags. The "br" configuration should not make changes instead.\r
+               <p id="_P2">\r
+                       In the test we will try to recreate this document using the editor tools. To make\r
+                       sure tables can be inserted <em id="_Em">properly</em> we re-visit banana import\r
+                       statistics from 1998.\r
+               </p>\r
+               <p id="_P3">\r
+                       This paragraph has and image at the very end of its contents.<img id="_Img" src="img.gif"\r
+                               alt="" />\r
+               </p>\r
+               This text has no block tag.<br />It should be corrected when working with the enter key\r
+               set to "p" or "div" tags. The <strong id="_StrongNoPara">"br" configuration</strong>\r
+               should not make changes instead.<br />It has three lines separated by BR tags.\r
+               <p>\r
+                       In the test we will try to recreate this document using the editor tools. To make\r
+                       sure tables can be inserted <em>properly</em> we re-visit banana import statistics\r
+                       from 1998.\r
+               </p>\r
+               <table summary="Sweden was the top importing country by far in 1998.">\r
+                       <caption>\r
+                               Top banana importers 1998 (value of banana imports in millions of US dollars per\r
+                               million people)<br />\r
+                               <br />\r
+                       </caption>\r
+                       <tr>\r
+                               <th scope="col">\r
+                                       Country</th>\r
+                               <th scope="col">\r
+                                       Millions of US dollars per million people</th>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>\r
+                                       Sweden</td>\r
+                               <td>\r
+                                       17.12</td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>\r
+                                       United&nbsp;Kingdom</td>\r
+                               <td>\r
+                                       8.88</td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>\r
+                                       Germany</td>\r
+                               <td>\r
+                                       8.36</td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>\r
+                                       Italy</td>\r
+                               <td>\r
+                                       5.96</td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>\r
+                                       United States</td>\r
+                               <td>\r
+                                       4.78</td>\r
+                       </tr>\r
+               </table>\r
+               <p>\r
+                       For block quotes we will have a look at <a href="http://fawny.org/rhcp.html">what Joe\r
+                               Clark says about redheads</a>:</p>\r
+               <blockquote cite="http://fawny.org/rhcp.html#me">\r
+                       <p>\r
+                               "Since boyhood I&rsquo;ve always believed, at the deepest level, that redheads are\r
+                               standard-bearers of the grandest and most wondrous human beauty."</p>\r
+               </blockquote>\r
+               <p>\r
+                       <img src="img.gif" alt="" /></p>\r
+               <p>\r
+                       The above is the CKEditor logo loaded from the FCKeditor.net web site.</p>\r
+               <p><b id="_B1">Line 1<br />Line 2<br /><i id="_I1">Line 3</i></b></p>\r
+               <p id="_EnlargeP"> Test <b id="_EnlargeB"> <i id="_EnlargeI">  Enlarge</i> this</b>   </p>\r
+               <p id="_EnlargeP1"> Test<b id="_EnlargeB1"> <i id="_EnlargeI1">  Enlarge</i> this</b>   </p>\r
+               <p id="_EnlargeP2"> <b id="_EnlargeB2"> <i id="_EnlargeI2">  Enlarge</i> this</b>   </p>\r
+               <p id="_EnlargeP3">Test<i id="_EnlargeI3"> Enlarge</i></p>\r
+               <p id="_EnlargeP4">Test <i id="_EnlargeI4"> Enlarge</i></p>\r
+               <p id="_EnlargeP5">Test <i id="_EnlargeI5">Enlarge</i></p>\r
+               <p id="_EnlargeP6">Test <i id="_EnlargeI6"><b></b>Enlarge</i></p>\r
+               <p id="_EnlargeP7">Test <span id="S1"></span>List<br/ >Item Enlarge</p>\r
+               <p id="_EnlargeP8">Test <span id="S2"></span>List<span id="E2"></span> <br /><br />Item Enlarge</p>\r
+               <p id="_EnlargeP9">Test List <br /><span id="S3"></span><br />Item Enlarge</p>\r
+               <p id="_EnlargeP10">Test List <br /><br />Item<span id="S4"></span> Enlarge</p>\r
+               <p id="_EnlargeP11">Test <strong>Block<span id="S5"></span></strong><br /><br />Enlarge</p>\r
+               <div id="_EnlargeP12">Test<span id="S6"></span> Block <div>Enlarge</div></div>\r
+               <div>Test <div id="_EnlargeP13">Blo<span id="S7"></span>ck</div> Enlarge</div>\r
+               <p id="_EnlargeP14"><span id="S8"></span></p>\r
+               <p id="_EnlargeP15">Test <span id="S9"></span>List<br/ >Item Enlarge</p>\r
+               <p id="_EnlargeP16">Test <strong>Block<span id="S10"></span></strong><br /><br />Enlarge</p>\r
+               <p id="_EnlargeP17"><span><span id="S11"></span>Test Block Enlarge<span id="E11"></span></span></p>\r
+               <p id="_trim_ct">Test trim</p>\r
+       </div>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+html1 = document.getElementById( 'playground' ).innerHTML;\r
+html2 = document.getElementById( 'playground2' ).innerHTML;\r
+\r
+       //]]>\r
+       </script>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/dom/text.html b/_tests/core/dom/text.html
new file mode 100644 (file)
index 0000000..a3053f5
--- /dev/null
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.text</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var tc;\r
+CKEDITOR.test.addTestCase( tc = (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+\r
+               test_substring1 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '123', text.substring( 1, 4 ) );\r
+               },\r
+\r
+               test_substring2 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '56789', text.substring( 5 ) );\r
+               },\r
+\r
+               test_substring3 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '', text.substring( 1,1 ) );\r
+               },\r
+\r
+               test_substring4 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '012', text.substring( -10,3 ) );\r
+               },\r
+\r
+               test_substring5 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '89', text.substring( 8,100 ) );\r
+               },\r
+\r
+               test_substring6 : function()\r
+               {\r
+                       var text = new CKEDITOR.dom.text( '0123456789' );\r
+\r
+                       assert.areSame( '234', text.substring( 5,2 ) );\r
+               },\r
+\r
+               test_split1 : function()\r
+               {\r
+                       var div = CKEDITOR.document.getById( 'playground' );\r
+                       div.setHtml( '01234' );\r
+\r
+                       var text = div.getFirst(),\r
+                               next = text.split( 3 );\r
+\r
+                       assert.areSame( '012', text.getText(), 'text.getText() is wrong' );\r
+                       assert.areSame( '34', next.getText(), 'next.getText() is wrong' );\r
+\r
+                       assert.areSame( div.$, next.$.parentNode, 'parentNode is wrong' );\r
+                       assert.areSame( text.$, next.$.previousSibling, 'sibling is wrong' );\r
+               },\r
+\r
+               test_split2 : function()\r
+               {\r
+                       var div = CKEDITOR.document.getById( 'playground' );\r
+                       div.setHtml( '01234' );\r
+\r
+                       var text = div.getFirst(),\r
+                               next = text.split( 5 );\r
+\r
+                       assert.areSame( '01234', text.getText(), 'text.getText() is wrong' );\r
+                       assert.areSame( '', next.getText(), 'next.getText() is wrong' );\r
+\r
+                       assert.areSame( div.$, next.$.parentNode, 'parentNode is wrong' );\r
+                       assert.areSame( text.$, next.$.previousSibling, 'sibling is wrong' );\r
+               },\r
+\r
+               test_split3 : function()\r
+               {\r
+                       var div = CKEDITOR.document.getById( 'playground' );\r
+                       div.setHtml( '01234' );\r
+\r
+                       var text = div.getFirst(),\r
+                               next = text.split( 0 );\r
+\r
+                       assert.areSame( '', text.getText(), 'text.getText() is wrong' );\r
+                       assert.areSame( '01234', next.getText(), 'next.getText() is wrong' );\r
+\r
+                       assert.areSame( div.$, next.$.parentNode, 'parentNode is wrong' );\r
+                       assert.areSame( text.$, next.$.previousSibling, 'sibling is wrong' );\r
+               },\r
+\r
+               test_split_3436 : function()\r
+               {\r
+                       var parent = CKEDITOR.document.getById( 'playground2' );\r
+                       parent.setHtml( 'A B <b>C </b>D E' );\r
+                       parent.getFirst().split( 2 );   // Right before "B"\r
+                       parent.getChildren().getItem( 3 ).split( 2 );   // Right before "E"\r
+                       assert.areSame( 5, parent.getChildren().count(), 'Child nodes num doesn\'t match after split' );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+//window.onload = tc.test_split_3436;\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <p id="playground"></p>\r
+       <p id="playground2"></p>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/dom/walker.html b/_tests/core/dom/walker.html
new file mode 100644 (file)
index 0000000..e17b3f1
--- /dev/null
@@ -0,0 +1,340 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.walker</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var tc;\r
+\r
+CKEDITOR.test.addTestCase( tc = (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       function assertNodesList( wanted, nodes )\r
+       {\r
+               var simplifiedNodes = [];\r
+\r
+               for ( var i = 0 ; i < nodes.length ; i++ )\r
+                       simplifiedNodes.push( nodes[i].type == CKEDITOR.NODE_TEXT ? nodes[i].getText() : ( '<' + nodes[i].getName() + '>' ) );\r
+\r
+               assert.areSame( wanted.toString(), simplifiedNodes.toString() );\r
+       }\r
+\r
+       return {\r
+\r
+               test_collapsed : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( node.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       assert.isNull( walker.next() );\r
+               },\r
+\r
+               test_next_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>', 'This is ', '<b>', 'a ', '<i>', 'simple', ' test' ], nodes );\r
+               },\r
+\r
+               test_next_2 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEnd( node.getChild( [0,1,1,0] ), 2 );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ 'This is ', '<b>', 'a ', '<i>', 'si' ], nodes );\r
+               },\r
+\r
+               test_next_3 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 1 ), CKEDITOR.POSITION_BEFORE_START );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<h1>' ], nodes );\r
+               },\r
+\r
+               test_next_4 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 0 ), CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [], nodes );\r
+               },\r
+\r
+               test_next_5 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<h1>' ], nodes );\r
+               },\r
+\r
+               test_previous_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', 'a ', 'This is ' ], nodes );\r
+               },\r
+\r
+               test_previous_2 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEnd( node.getChild( [0,0] ), 2 );\r
+                       range.setEnd( node.getChild( [0,1,1,0] ), 2 );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ 'si', 'a ', 'is is ' ], nodes );\r
+               },\r
+\r
+               test_previous_3 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 1 ), CKEDITOR.POSITION_BEFORE_START );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '' ], nodes );\r
+               },\r
+\r
+               test_previous_4 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 0 ), CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>' ], nodes );\r
+               },\r
+\r
+               test_previous_5 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>' ], nodes );\r
+               },\r
+\r
+               /**\r
+                *  Test guard function is invoked on every move when iterating forward.\r
+                */\r
+               test_guard_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.guard = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.next() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<p>', 'This is ', '<b>', 'a ', '<i>', 'simple', '<i>', '<b>',' test' , '<p>' ], nodes );\r
+               },\r
+\r
+               /**\r
+                *  Test guard function is invoked on every move when iterating backward.\r
+                */\r
+               test_guard_2 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.guard = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.previous() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', '<i>', 'a ', '<b>', 'This is ', '<p>' ], nodes );\r
+               },\r
+\r
+               /**\r
+                *  Test evaluator function is invoked on every  step when iterating backward.\r
+                */\r
+               test_evaluator_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.evaluator = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.previous() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', 'a ', 'This is ' ], nodes );\r
+               },\r
+               /**\r
+                * Test walker stop at empty endContainer.\r
+                */\r
+               test_stopGuard : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<span></span>afterEnd' );\r
+                       var endContainer = node.getFirst();\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+                       range.setEndAt( endContainer, CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.evaluator = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.next() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<span>' ], nodes );\r
+\r
+               },\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+//window.onload = tc.test_stopGuard;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="playground"></div>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/dom/window.html b/_tests/core/dom/window.html
new file mode 100644 (file)
index 0000000..349bf0b
--- /dev/null
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.dom.window</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var loadCalled;\r
+\r
+var testWindow = new CKEDITOR.dom.window( window );\r
+\r
+var t;\r
+\r
+testWindow.on( 'load', function()\r
+       {\r
+               t = document.createElement( 'textarea' );\r
+               t.id = 'fred';\r
+\r
+               document.body.appendChild( t );\r
+\r
+               loadCalled = true;\r
+       });\r
+\r
+testWindow.on( 'beforeunload', function()\r
+       {\r
+               t.value = new Date();\r
+       });\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_loadEvent : function()\r
+               {\r
+                       assert.isTrue( loadCalled );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="test1"></div>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/editor.html b/_tests/core/editor.html
new file mode 100644 (file)
index 0000000..bece2be
--- /dev/null
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.editor</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+// Disable 'scayt' plugin due to it may alter editor config after initialized.\r
+CKEDITOR.config.removePlugins = 'scayt';\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_name : function()\r
+               {\r
+                       assert.areSame( 'editor1', CKEDITOR.instances.editor1.name );\r
+               },\r
+\r
+               test_element : function()\r
+               {\r
+                       assert.areSame( document.getElementById( 'editor1' ), CKEDITOR.instances.editor1.element.$ );\r
+               },\r
+\r
+               test_config : function()\r
+               {\r
+                       // The instance default config must match the CKEDITOR.config.\r
+\r
+                       var config = CKEDITOR.instances.editor1.config;\r
+\r
+                       for ( var prop in CKEDITOR.config )\r
+                               assert.areSame( CKEDITOR.config[ prop ], config[ prop ], '"' + prop + '" doesn\'t match' );\r
+               },\r
+\r
+               test_config_inpage : function()\r
+               {\r
+                       var self = this;\r
+\r
+                       CKEDITOR.replace( 'editor2',\r
+                               {\r
+                                       // The custom setting to be checked.\r
+                                       test1 : 'ball',\r
+                                       baseHref : 'test',\r
+\r
+                                       on :\r
+                                       {\r
+                                               instanceReady : function()\r
+                                               {\r
+                                                       self.resume( function()\r
+                                                       {\r
+                                                               var config = CKEDITOR.instances.editor2.config;\r
+\r
+                                                               assert.areSame( 'ball', config.test1, '"test1" doesn\'t match' );\r
+                                                               assert.areSame( 'test', config.baseHref, '"baseHref" doesn\'t match' );\r
+\r
+                                                               // All other settings must match CKEDITOR.config.\r
+                                                               for ( var prop in CKEDITOR.config )\r
+                                                               {\r
+                                                                       if ( prop != 'test1' && prop != 'baseHref' )\r
+                                                                               assert.areSame( CKEDITOR.config[ prop ], config[ prop ], '"' + prop + '" doesn\'t match' );\r
+                                                               }\r
+                                                       } );\r
+                                               }\r
+                                       }\r
+                               });\r
+\r
+                       this.wait();\r
+               },\r
+\r
+               test_config_customConfig : function()\r
+               {\r
+                       var testCase = this;\r
+\r
+                       CKEDITOR.on( 'instanceCreated', function( event )\r
+                               {\r
+                                       if ( event.editor.name == 'editor3' )\r
+                                       {\r
+                                               event.editor.on( 'configLoaded', function()\r
+                                                       {\r
+                                                               testCase.resume( function()\r
+                                                               {\r
+                                                                       var config = event.editor.config;\r
+\r
+                                                                       assert.areSame( 'Ok', config.test_custom1, '"test_custom1" doesn\'t match' );\r
+                                                                       assert.areSame( 'Ok', config.test_custom2, '"test_custom1" doesn\'t match' );\r
+                                                                       assert.areSame( 'ball', config.test1, '"test1" doesn\'t match' );\r
+                                                                       assert.areSame( 'test', config.baseHref, '"baseHref" doesn\'t match' );\r
+\r
+                                                                       // All other settings must match CKEDITOR.config.\r
+                                                                       for ( var prop in CKEDITOR.config )\r
+                                                                       {\r
+                                                                               if ( prop != 'customConfig' && prop != 'test_custom1' && prop != 'test_custom2' && prop != 'test1' && prop != 'baseHref' )\r
+                                                                                       assert.areSame( CKEDITOR.config[ prop ], config[ prop ], '"' + prop + '" doesn\'t match' );\r
+                                                                       }\r
+                                                               });\r
+                                                       });\r
+                                       }\r
+                               });\r
+\r
+                       // Pass in-page settings to the instance.\r
+                       CKEDITOR.replace( 'editor3', { customConfig : '_editor/custom_config_1.js', test1 : 'ball', baseHref : 'test' } );\r
+\r
+                       this.wait();\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <textarea id="editor1" class="ckeditor" cols="80" rows="10"></textarea>\r
+       <textarea id="editor2" cols="80" rows="10"></textarea>\r
+       <textarea id="editor3" cols="80" rows="10"></textarea>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/env.html b/_tests/core/env.html
new file mode 100644 (file)
index 0000000..b499cdb
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.env</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_ie : function()\r
+               {\r
+                       if ( window.ActiveXObject )\r
+                       {\r
+                               assert.isTrue( CKEDITOR.env.ie          , 'ie should be true' );\r
+                               assert.isFalse( CKEDITOR.env.opera      , 'opera should be false' );\r
+                               assert.isFalse( CKEDITOR.env.webkit     , 'webkit should be false' );\r
+                               assert.isFalse( CKEDITOR.env.air        , 'air should be false' );\r
+                               assert.isFalse( CKEDITOR.env.gecko      , 'gecko should be false' );\r
+                               assert.isFalse( CKEDITOR.env.mac        , 'ismac should be false' );\r
+                       }\r
+                       else\r
+                               assert.isFalse( CKEDITOR.env.ie );\r
+               },\r
+\r
+               test_isCompatible : function()\r
+               {\r
+                       assert.isTrue( CKEDITOR.env.isCompatible );\r
+               },\r
+\r
+\r
+               test_quirks : function()\r
+               {\r
+                       assert.isFalse( CKEDITOR.env.quirks );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/event.html b/_tests/core/event.html
new file mode 100644 (file)
index 0000000..69dc4a0
--- /dev/null
@@ -0,0 +1,487 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.event</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_inherit : function()\r
+               {\r
+                       // Create a testClass that inherits from CKEDITOR.event.\r
+                       var testClass = function()\r
+                       {\r
+                               CKEDITOR.event.call( this );\r
+                       };\r
+                       testClass.prototype = CKEDITOR.event.prototype;\r
+\r
+                       var calls = [];\r
+\r
+                       var testInstance = new testClass();\r
+\r
+                       testInstance.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testInstance, this, 'Scope 1 is not valid' );\r
+\r
+                                       assert.areSame( 'someEvent', ev.name, 'ev.name (1) is wrong' );\r
+                                       assert.areSame( testInstance, ev.sender, 'ev.sender (1) is wrong' );\r
+                                       assert.isUndefined( ev.editor, 'ev.editor (1) is wrong' );\r
+                                       assert.isUndefined( ev.data, 'ev.data (1) is wrong' );\r
+                                       assert.isUndefined( ev.listenerData, 'ev.listenerData (1) is wrong' );\r
+\r
+                                       calls.push( 'a' );\r
+                               } );\r
+\r
+                       testInstance.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testInstance, this, 'Scope 2 is not valid' );\r
+\r
+                                       assert.areSame( 'someEvent', ev.name, 'ev.name (2) is wrong' );\r
+                                       assert.areSame( testInstance, ev.sender, 'ev.sender (2) is wrong' );\r
+                                       assert.isUndefined( ev.editor, 'ev.editor (2) is wrong' );\r
+                                       assert.isUndefined( ev.data, 'ev.data (2) is wrong' );\r
+                                       assert.isUndefined( ev.listenerData, 'ev.listenerData (2) is wrong' );\r
+\r
+                                       calls.push( 'b' );\r
+                               } );\r
+\r
+                       assert.areSame( false, testInstance.fire( 'someEvent' ) );\r
+\r
+                       assert.areSame( 2, calls.length, 'number of calls doesn\'t match' );\r
+                       assert.areSame( 'a,b', calls.toString() );\r
+               },\r
+\r
+               test_implementOn : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = { someprop : 'Test' };\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       assert.areSame( 'Test', testObject.someprop );\r
+\r
+                       var calls = [];\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testObject, this, 'Scope 1 is not valid' );\r
+\r
+                                       assert.areSame( 'someEvent', ev.name, 'ev.name (1) is wrong' );\r
+                                       assert.areSame( testObject, ev.sender, 'ev.sender (1) is wrong' );\r
+                                       assert.isUndefined( ev.editor, 'ev.editor (1) is wrong' );\r
+                                       assert.isUndefined( ev.data, 'ev.data (1) is wrong' );\r
+                                       assert.isUndefined( ev.listenerData, 'ev.listenerData (1) is wrong' );\r
+\r
+                                       calls.push( 'a' );\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testObject, this, 'Scope 2 is not valid' );\r
+\r
+                                       assert.areSame( 'someEvent', ev.name, 'ev.name (2) is wrong' );\r
+                                       assert.areSame( testObject, ev.sender, 'ev.sender (2) is wrong' );\r
+                                       assert.isUndefined( ev.editor, 'ev.editor (2) is wrong' );\r
+                                       assert.isUndefined( ev.data, 'ev.data (2) is wrong' );\r
+                                       assert.isUndefined( ev.listenerData, 'ev.listenerData (2) is wrong' );\r
+\r
+                                       calls.push( 'b' );\r
+                               } );\r
+\r
+                       assert.areSame( false, testObject.fire( 'someEvent' ) );\r
+\r
+                       assert.areSame( 2, calls.length, 'number of calls doesn\'t match' );\r
+                       assert.areSame( 'a,b', calls.toString() );\r
+               },\r
+\r
+               test_eventNameCase : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       // Event Names are case sensitive.\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'someEvent', ev.name, 'ev.name (someEvent) is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'SomeEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'SomeEvent', ev.name, 'ev.name (SomeEvent) is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.fire( 'someEvent' );\r
+                       assert.areSame( 1, counter, '"someEvent" calls doesn\'t match' );\r
+\r
+                       counter = 0;\r
+\r
+                       testObject.fire( 'SomeEvent' );\r
+                       assert.areSame( 1, counter, '"SomeEvent" calls doesn\'t match' );\r
+               },\r
+\r
+               test_scope : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       // Counter used just to check that the calls are effectively done.\r
+                       var counter = 0;\r
+\r
+                       var testScope = {};\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testObject, this, 'scope (testObject) is wrong' );\r
+                                       assert.areSame( testObject, ev.sender, 'sender (testObject) is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( testScope, this, 'scope (testScope) is wrong' );\r
+                                       assert.areSame( testObject, ev.sender, 'sender (testScope) is wrong' );\r
+                                       counter++;\r
+                               }, testScope );\r
+\r
+                       testObject.fire( 'someEvent' );\r
+\r
+                       assert.areSame( 2, counter, 'wrong number of calls' );\r
+               },\r
+\r
+               test_listenerData : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       // Counter used just to check that the calls are effectively done.\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test1', ev.listenerData, 'listenerData (1) is wrong' );\r
+                                       counter++;\r
+                               }, null, 'Test1'  );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test2', ev.listenerData, 'listenerData (2) is wrong' );\r
+                                       counter++;\r
+                               }, null, 'Test2' );\r
+\r
+                       testObject.fire( 'someEvent' );\r
+\r
+                       assert.areSame( 2, counter, 'wrong number of calls' );\r
+               },\r
+\r
+               test_data : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       // Counter used just to check that the calls are effectively done.\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test data', ev.data, 'data (1) is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test data', ev.data, 'data (2) is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.fire( 'someEvent', 'Test data' );\r
+\r
+                       assert.areSame( 2, counter, 'wrong number of calls' );\r
+               },\r
+\r
+               test_editor : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       // Counter used just to check that the calls are effectively done.\r
+                       var counter = 0;\r
+\r
+                       var editor = {};\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( editor, ev.editor, 'editor is wrong' );\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.fire( 'someEvent', null, editor );\r
+\r
+                       assert.areSame( 1, counter, 'wrong number of calls' );\r
+               },\r
+\r
+               test_stop : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       ev.stop();\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       counter++;\r
+                               } );\r
+\r
+                       assert.areSame( false, testObject.fire( 'someEvent' ), 'fire must return "false"' );\r
+                       assert.areSame( 1, counter, 'number of calls doesn\'t match' );\r
+               },\r
+\r
+               test_cancel : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       ev.cancel();\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       counter++;\r
+                               } );\r
+\r
+                       assert.areSame( true, testObject.fire( 'someEvent' ), 'fire must return "true"' );\r
+                       assert.areSame( 1, counter, 'number of calls doesn\'t match' );\r
+               },\r
+\r
+               test_dataManipulation : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test1', ev.data );\r
+                                       ev.data = 'Test2';\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test2', ev.data );\r
+                                       ev.data = 'Test3';\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       assert.areSame( 'Test3', ev.data );\r
+                                       ev.data = 'Test4';\r
+                                       counter++;\r
+                               } );\r
+\r
+                       assert.areSame( 'Test4', testObject.fire( 'someEvent', 'Test1' ), 'fire must return "Test4"' );\r
+                       assert.areSame( 3, counter, 'number of calls doesn\'t match' );\r
+               },\r
+\r
+               test_priority : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var calls = [];\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'e' );\r
+                               }, null, null, 11 );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'c' );\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'a' );\r
+                               }, null, null, 9 );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'f' );\r
+                               }, null, null, 11 );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'd' );\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'b' );\r
+                               }, null, null, 9 );\r
+\r
+                       testObject.fire( 'someEvent', 'Test data' );\r
+                       assert.areSame( 'a,b,c,d,e,f', calls.toString() );\r
+               },\r
+\r
+               test_removeListener : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var calls = [];\r
+\r
+                       var listener = function( ev )\r
+                               {\r
+                                       calls.push( 'a' );\r
+                               };\r
+\r
+                       testObject.on( 'someEvent', listener );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       calls.push( 'b' );\r
+                               } );\r
+\r
+                       testObject.fire( 'someEvent', 'Test data' );\r
+                       assert.areSame( 'a,b', calls.toString() );\r
+\r
+                       testObject.removeListener( 'someEvent', listener );\r
+\r
+                       calls = [];\r
+\r
+                       testObject.fire( 'someEvent', 'Test data' );\r
+                       assert.areSame( 'b', calls.toString() );\r
+               },\r
+\r
+               test_fireOnce : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       counter++;\r
+                               } );\r
+\r
+                       testObject.on( 'someEvent', function( ev )\r
+                               {\r
+                                       counter++;\r
+                               } );\r
+\r
+                       assert.areSame( false, testObject.fireOnce( 'someEvent' ), 'fireOnce must return "false"' );\r
+                       assert.areSame( 2, counter, 'number of calls doesn\'t match' );\r
+\r
+                       counter = 0;\r
+\r
+                       assert.areSame( false, testObject.fire( 'someEvent' ), 'fire must return "false"' );\r
+                       assert.areSame( 0, counter, 'number of calls doesn\'t match' );\r
+               },\r
+\r
+               test_nestedCancel : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var isCanceledA,\r
+                               isCanceledB,\r
+                               isCanceledC;\r
+\r
+                       testObject.on( 'A', function( ev )\r
+                               {\r
+                                       isCanceledB = testObject.fire( 'B' );\r
+                                       isCanceledC = testObject.fire( 'C' );\r
+                               });\r
+\r
+                       testObject.on( 'B', function( ev )\r
+                               {\r
+                                       ev.cancel();\r
+                               });\r
+\r
+                       testObject.on( 'C', function( ev )\r
+                               {\r
+                               });\r
+\r
+                       isCanceledA = testObject.fire( 'A' );\r
+\r
+                       assert.areSame( false, isCanceledA, 'event A must not be canceled' );\r
+                       assert.areSame( true, isCanceledB, 'event B must be canceled' );\r
+                       assert.areSame( false, isCanceledC, 'event C must not be canceled' );\r
+               },\r
+\r
+               test_event_removeListener : function()\r
+               {\r
+                       // Create a testObject and implement CKEDITOR.event on it.\r
+                       var testObject = {};\r
+                       CKEDITOR.event.implementOn( testObject );\r
+\r
+                       var counter = 0;\r
+\r
+                       // Add two listeners for the same event "A".\r
+\r
+                       testObject.on( 'A', function( ev )\r
+                               {\r
+                                       counter++;\r
+                                       ev.removeListener();\r
+                               });\r
+\r
+                       testObject.on( 'A', function( ev )\r
+                               {\r
+                                       counter++;\r
+                               });\r
+\r
+                       // Fire the event twice.\r
+                       testObject.fire( 'A' );\r
+                       testObject.fire( 'A' );\r
+\r
+                       assert.areSame( 3, counter );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/htmlparser/fragment.html b/_tests/core/htmlparser/fragment.html
new file mode 100644 (file)
index 0000000..9556774
--- /dev/null
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.htmlParser.fragment</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var tc;\r
+\r
+CKEDITOR.test.addTestCase( tc = (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       function testParser( input, expected )\r
+       {\r
+               var fragment = CKEDITOR.htmlParser.fragment.fromHtml( input, 'p' ),\r
+                       writer = new CKEDITOR.htmlParser.basicWriter();\r
+\r
+               fragment.writeHtml( writer );\r
+\r
+               assert.areSame( expected, writer.getHtml( true ) );\r
+       }\r
+\r
+       return {\r
+               test_fromHtml_1 : function()\r
+               {\r
+                       var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '<p>Test</p>' );\r
+\r
+                       assert.areSame( 1, fragment.children.length, 'Wrong size' );\r
+                       assert.areSame( CKEDITOR.NODE_ELEMENT, fragment.children[0].type, 'Wrong child type' );\r
+                       assert.areSame( 'p', fragment.children[0].name, 'Wrong child name' );\r
+               },\r
+\r
+               test_parser_1 : function()\r
+               {\r
+                       testParser(     '<table><tr><td>1</td><p><b>2</b> Test</p><td>3</td></tr></table>',\r
+                                               '<p><b>2</b> Test</p><table><tr><td>1</td><td>3</td></tr></table>' );\r
+               },\r
+\r
+               test_parser_2 : function()\r
+               {\r
+                       testParser(     '<b><table><tr><td>1</td><td>2</td></tr></table></b>',\r
+                                               '<table><tr><td><b>1</b></td><td><b>2</b></td></tr></table>' );\r
+               },\r
+\r
+               test_parser_3_1 : function()\r
+               {\r
+                       testParser(     '<b><i>Table:<table><tr><td>1</td><td>2</td></tr></table></i></b>',\r
+                                               '<p><b><i>Table:</i></b></p><table><tr><td><b><i>1</i></b></td><td><b><i>2</i></b></td></tr></table>' );\r
+               },\r
+\r
+               test_parser_3_2 : function()\r
+               {\r
+                       testParser(     '<b><i><table><tr><td>1</td><td>2</td></tr></table>Table</i></b>',\r
+                                               '<table><tr><td><b><i>1</i></b></td><td><b><i>2</i></b></td></tr></table><p><b><i>Table</i></b></p>' );\r
+               },\r
+\r
+               test_parser_4 : function()\r
+               {\r
+                       testParser(     '<b><i>Test',\r
+                                               '<p><b><i>Test</i></b></p>' );\r
+               },\r
+\r
+               test_parser_5 : function()\r
+               {\r
+                       testParser(     '<p>Para 1<p>Para 2<p>Para 3',\r
+                                               '<p>Para 1</p><p>Para 2</p><p>Para 3</p>' );\r
+               },\r
+\r
+               test_parser_6 : function()\r
+               {\r
+                       testParser(     '<b>A</b><i>B</i>',\r
+                                               '<p><b>A</b><i>B</i></p>' );\r
+               },\r
+\r
+               test_parser_7 : function()\r
+               {\r
+                       testParser(     '<p>Para 1<hr>Para 2<h1>Para 3',\r
+                                               '<p>Para 1</p><hr /><p>Para 2</p><h1>Para 3</h1>' );\r
+               },\r
+\r
+               /**\r
+                * Test remove empty inline element.\r
+                */\r
+               test_parser_8 : function()\r
+               {\r
+                       testParser(     '<p><b></b>text</p>',\r
+                                               '<p>text</p>' );\r
+               },\r
+\r
+               /**\r
+                *  Test remove multiple empty inline elements.\r
+                */\r
+               test_parser_8_2 : function()\r
+               {\r
+                       testParser(     '<p><b><i></b></i>text</p>',\r
+                                               '<p>text</p>' );\r
+               },\r
+\r
+               /**\r
+                * Test fixing malformed inline element closing.\r
+                */\r
+               test_parser_9 : function()\r
+               {\r
+                       testParser(     '<p><b>bold<i>ita</b>lic</i></p>',\r
+                                               '<p><b>bold<i>ita</i></b><i>lic</i></p>' );\r
+               },\r
+\r
+               test_ticket_10 : function()\r
+               {\r
+                       testParser(     '<table><tbody><tr><td>A<b></b></td></tr></tbody></table>',\r
+                                               '<table><tbody><tr><td>A</td></tr></tbody></table>' );\r
+               },\r
+\r
+               /**\r
+                *  Test fixing paragraph inside table row.\r
+                */\r
+               test_ticket_3195 : function()\r
+               {\r
+                       testParser(     '<table><tr><td>1</td><p>2</p><td>3</td></tr></table>',\r
+                                               '<p>2</p><table><tr><td>1</td><td>3</td></tr></table>' );\r
+               },\r
+\r
+               /**\r
+                *  Test fixing paragraph inside list.\r
+                */\r
+               test_ticket_3195_2 : function()\r
+               {\r
+                       testParser(     '<ul><li>1</li><p>2</p><li>3</li></ul>',\r
+                                               '<p>2</p><ul><li>1</li><li>3</li></ul>' );\r
+               },\r
+\r
+               /**\r
+                *  Test fixing 'div' inside paragraph.\r
+                */\r
+               test_ticket_3195_3 : function()\r
+               {\r
+                       testParser(     '<p>1<div>2</div><span>3</span></p>',\r
+                                               '<p>1</p><div>2</div><p><span>3</span></p>' );\r
+               },\r
+\r
+               test_ticket_3441 : function()\r
+               {\r
+                       testParser(     '<p><b>Test</b></p><script type="test">var a = "<A Href=xxx>Testing</ A>";\nGo();<\/script>',\r
+                                               '<p><b>Test</b></p><script type="test">var a = "<A Href=xxx>Testing</ A>";\nGo();<\/script>' );\r
+               },\r
+\r
+               test_ticket_3585 : function()\r
+               {\r
+                       testParser(     '<p><br />\t\r\n</p>',\r
+                                               '<p><br /></p>' );\r
+               },\r
+\r
+               test_ticket_3585_1 : function()\r
+               {\r
+                       testParser(     '<p><br />text\t\r\n</p>',\r
+                                               '<p><br />text</p>' );\r
+               },\r
+\r
+               test_ticket_3585_2 : function()\r
+               {\r
+                       testParser(     '<b>inline </b>\n<p>paragraph\t\r\n</p>\t\r\n',\r
+                                               '<p><b>inline </b></p><p>paragraph</p>' );\r
+               },\r
+\r
+               test_ticket_3744 : function()\r
+               {\r
+                       testParser(     '<div><b><font><span>A</font></span></b></div><div>X</div>',\r
+                                               '<div><b><font><span>A</span></font></b></div><div>X</div>' );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+// Uncomment the following to run a single test.\r
+// window.onload = tc.test_ticket_3585_2;\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/htmlparser/htmlparser.html b/_tests/core/htmlparser/htmlparser.html
new file mode 100644 (file)
index 0000000..ea52a70
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.htmlParser</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.plugins.load( 'htmlwriter' );\r
+var tc;\r
+CKEDITOR.test.addTestCase( tc = ( function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = YAHOO.util.Assert;\r
+\r
+       /**\r
+        * Wrapper of the combination of htmlParser with htmlWriter, for convenience of\r
+        * testing, formatting of writer has been disabled.\r
+        */\r
+       function htmlParse( htmlString , writerConfig)\r
+       {\r
+               var writer = new CKEDITOR.htmlParser.basicWriter();\r
+               writer.reset();\r
+               var fragment = CKEDITOR.htmlParser.fragment.fromHtml( htmlString );\r
+               fragment.writeHtml( writer );\r
+               return writer.getHtml();\r
+       }\r
+\r
+       /**\r
+        * IE always returning CRLF for line-feed, so remove it when retrieving\r
+        * pre-formated text from text area.\r
+        */\r
+       function getTextAreaValue( id )\r
+       {\r
+               return CKEDITOR.document.getById( id ).getValue().replace( /\r/gi, '' );\r
+       }\r
+\r
+       return {\r
+               /**\r
+                * Test <pre> tag formatting.\r
+                */\r
+               test_fromHtml_3715 : function()\r
+               {\r
+                       assert.areSame( getTextAreaValue( 'htmlResult1' ),\r
+                               htmlParse( getTextAreaValue( 'htmlOriginal1' ) ),\r
+                               '<pre> parsing result doesn\'t match.' );\r
+               },\r
+\r
+               /**\r
+                * Test compress empty spaces within text.\r
+                */\r
+               test_fromHtml_3715_2 : function()\r
+               {\r
+                       assert.areSame( getTextAreaValue( 'htmlResult2' ),\r
+                               htmlParse( getTextAreaValue( 'htmlOriginal2' ) ),\r
+                               'Spaces compressing result doesn\'t match.' );\r
+               },\r
+               name :document.title\r
+       };\r
+} )() );\r
+\r
+//window.onload = tc.test_fromHtml_3715;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+\r
+       <textarea id="htmlOriginal1"><pre>\r
+       text<b>\r
+inside<br /><br /></b>\r
+\r
+pre\r
+</pre></textarea>\r
+       <textarea id="htmlResult1"><pre>\r
+       text<b>\r
+inside\r
+\r
+</b>\r
+\r
+pre\r
+</pre></textarea>\r
+\r
+<textarea id="htmlOriginal2"><p>\r
+       para            graph\r
+</p><b>compress   spaces</b></textarea>\r
+\r
+<textarea id="htmlResult2"><p>para graph</p><b>compress spaces</b></textarea>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/plugins.html b/_tests/core/plugins.html
new file mode 100644 (file)
index 0000000..24260d8
--- /dev/null
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.plugins</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+\r
+               /**\r
+                * Test loading self defined external plugin file paths.\r
+                */\r
+               test_addExternal : function()\r
+               {\r
+                       var path = '_tests/';\r
+                       CKEDITOR.plugins.addExternal( 'myplugin',\r
+                       path + 'core/plugins/myplugins/sample/', 'my_plugin.js' );\r
+\r
+                       CKEDITOR.plugins.load( 'myplugin', function(){\r
+                               this.resume( function(){\r
+\r
+                                       assert.isTrue( CKEDITOR.plugins.get( 'myplugin' ).definition );\r
+                               } );\r
+                       }, this );\r
+                       this.wait();\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/plugins/myplugins/sample/my_plugin.js b/_tests/core/plugins/myplugins/sample/my_plugin.js
new file mode 100644 (file)
index 0000000..bb908f8
--- /dev/null
@@ -0,0 +1,3 @@
+CKEDITOR.plugins.add( 'myplugin' , {\r
+       definition :  true\r
+} );\r
diff --git a/_tests/core/scriptloader.html b/_tests/core/scriptloader.html
new file mode 100644 (file)
index 0000000..ecddcc6
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.scriptLoader</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_loadCode : function()\r
+               {\r
+                       CKEDITOR.scriptLoader.loadCode( 'var test="Testing!";' );\r
+\r
+                       /*jsl:ignore*/\r
+                       assert.areEqual( 'Testing!', test );\r
+                       /*jsl:end*/\r
+               },\r
+\r
+               test_load : function()\r
+               {\r
+                       var testCase = this;\r
+                       var callback = function( data )\r
+                       {\r
+                               testCase.resume( function()\r
+                                       {\r
+                                               /*jsl:ignore*/\r
+                                               assert.areSame( 'Test!', testVar );\r
+                                               /*jsl:end*/\r
+                                       } );\r
+                       };\r
+\r
+                       CKEDITOR.scriptLoader.load( '../_assets/sample.js', callback );\r
+                       this.wait();\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/tools.html b/_tests/core/tools.html
new file mode 100644 (file)
index 0000000..72a2722
--- /dev/null
@@ -0,0 +1,170 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.tools</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+var testcase;\r
+CKEDITOR.test.addTestCase( testcase = (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_extend : function()\r
+               {\r
+                       var fakeFn = function() {};\r
+                       var fakeObj = { fake1 : 1, fake2 : 2 };\r
+                       var fakeArray = [ 'Test', 10, fakeFn, fakeObj ];\r
+\r
+                       var target =\r
+                       {\r
+                               prop1 : 'Test',\r
+                               prop2 : 10,\r
+                               prop3 : fakeFn,\r
+                               prop4 : fakeObj,\r
+                               prop5 : fakeArray\r
+                       };\r
+\r
+                       CKEDITOR.tools.extend( target,\r
+                               {\r
+                                       prop3 : 'Wrong',\r
+                                       prop6 : 'Good',\r
+                                       prop7 : fakeArray\r
+                               } );\r
+\r
+                       assert.areSame( 'Test'          , target.prop1, 'prop1 doesn\'t match' );\r
+                       assert.areSame( 10                      , target.prop2, 'prop2 doesn\'t match' );\r
+                       assert.areSame( fakeFn          , target.prop3, 'prop3 doesn\'t match' );\r
+                       assert.areSame( fakeObj         , target.prop4, 'prop4 doesn\'t match' );\r
+                       assert.areSame( fakeArray       , target.prop5, 'prop5 doesn\'t match' );\r
+                       assert.areSame( 'Good'          , target.prop6, 'prop6 doesn\'t match' );\r
+                       assert.areSame( fakeArray       , target.prop7, 'prop7 doesn\'t match' );\r
+               },\r
+\r
+               test_isArray1 : function()\r
+               {\r
+                       assert.isTrue( CKEDITOR.tools.isArray( [] ) );\r
+               },\r
+\r
+               test_isArray2 : function()\r
+               {\r
+                       assert.isFalse( CKEDITOR.tools.isArray( { length:1 } ) );\r
+               },\r
+\r
+               test_isArray3 : function()\r
+               {\r
+                       assert.isFalse( CKEDITOR.tools.isArray( null ) );\r
+               },\r
+\r
+               test_isArray4 : function()\r
+               {\r
+                       assert.isFalse( CKEDITOR.tools.isArray( window.x ) );\r
+               },\r
+\r
+               test_htmlEncode1 : function()\r
+               {\r
+                       assert.areSame( '&lt;b&gt;Test&lt;/b&gt;', CKEDITOR.tools.htmlEncode( '<b>Test</b>' ) );\r
+               },\r
+\r
+               test_htmlEncode2 : function()\r
+               {\r
+                       assert.areSame( 'Test\'s &amp; "quote"', CKEDITOR.tools.htmlEncode( 'Test\'s & "quote"' ) );\r
+               },\r
+\r
+               test_htmlEncode_3874 : function()\r
+               {\r
+                       assert.areSame( 'line1\nline2', CKEDITOR.tools.htmlEncode( 'line1\nline2' ) );\r
+               },\r
+\r
+               test_cssStyleToDomStyle1 : function()\r
+               {\r
+                       assert.areSame( 'backgroundColor', CKEDITOR.tools.cssStyleToDomStyle( 'background-color' ) );\r
+               },\r
+\r
+               test_cssStyleToDomStyle2 : function()\r
+               {\r
+                       assert.areSame( 'cssFloat', CKEDITOR.tools.cssStyleToDomStyle( 'float' ) );\r
+               },\r
+\r
+               test_getNextNumber : function()\r
+               {\r
+                       var number = CKEDITOR.tools.getNextNumber();\r
+                       assert.areSame( number +  1, CKEDITOR.tools.getNextNumber() );\r
+                       assert.areSame( number +  2, CKEDITOR.tools.getNextNumber() );\r
+                       assert.areSame( number +  3, CKEDITOR.tools.getNextNumber() );\r
+               },\r
+\r
+               test_trim1 : function()\r
+               {\r
+                       assert.areSame( 'test', CKEDITOR.tools.trim( '    test   ' ) );\r
+               },\r
+\r
+               test_trim2 : function()\r
+               {\r
+                       assert.areSame( 'test', CKEDITOR.tools.trim( ' \n \t  test\n  \t ' ) );\r
+               },\r
+\r
+               test_ltrim1 : function()\r
+               {\r
+                       assert.areSame( 'test   ', CKEDITOR.tools.ltrim( '    test   ' ) );\r
+               },\r
+\r
+               test_ltrim2 : function()\r
+               {\r
+                       assert.areSame( 'test\n  \t ', CKEDITOR.tools.ltrim( ' \n \t  test\n  \t ' ) );\r
+               },\r
+\r
+               test_rtrim1 : function()\r
+               {\r
+                       assert.areSame( '    test', CKEDITOR.tools.rtrim( '    test   ' ) );\r
+               },\r
+\r
+               test_rtrim2 : function()\r
+               {\r
+                       assert.areSame( ' \n \t  test', CKEDITOR.tools.rtrim( ' \n \t  test\n  \t ' ) );\r
+               },\r
+\r
+               test_clone : function()\r
+               {\r
+                       var obj =\r
+                       {\r
+                               name : 'John',\r
+                               cars :\r
+                               {\r
+                                       Mercedes : { color : 'blue' },\r
+                                       Porsche : { color : 'red' }\r
+                               }\r
+                       };\r
+\r
+                       var clone = CKEDITOR.tools.clone( obj );\r
+\r
+                       clone.name = 'Paul';\r
+                       clone.cars.Porsche.color = 'silver';\r
+\r
+                       assert.areSame( 'John', obj.name );\r
+                       assert.areSame( 'Paul', clone.name );\r
+\r
+                       assert.areSame( 'red', obj.cars.Porsche.color );\r
+                       assert.areSame( 'silver', clone.cars.Porsche.color );\r
+               },\r
+\r
+               test_repeat : function()\r
+               {\r
+                       assert.areSame( '&nbsp;&nbsp;&nbsp;', CKEDITOR.tools.repeat( '&nbsp;', 3 ) );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+//window.onload = testcase.test_htmlEncode_3874;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <iframe></iframe>\r
+</body>\r
+</html>\r
diff --git a/_tests/core/xml.html b/_tests/core/xml.html
new file mode 100644 (file)
index 0000000..72d25f2
--- /dev/null
@@ -0,0 +1,150 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEDITOR.xml</title>\r
+       <link rel="stylesheet" type="text/css" href="../test.css" />\r
+       <script type="text/javascript" src="../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../_source/core/loader.js"></script>\r
+       <script type="text/javascript" src="../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.loader.load( 'core/xml' );\r
+\r
+       //]]>\r
+       </script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       return {\r
+               test_baseXml : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data />' );\r
+                       assert.isObject( xml.baseXml );\r
+               },\r
+\r
+               test_selectSingleNode1a : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item /></data>' );\r
+                       var node = xml.selectSingleNode( 'data/item' );\r
+                       assert.areEqual( 'item', node.nodeName );\r
+               },\r
+\r
+               test_selectSingleNode1b : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item /></data>' );\r
+                       var node = xml.selectSingleNode( 'item' );\r
+                       assert.isNull( node );\r
+               },\r
+\r
+               test_selectSingleNode2a : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item><subitem/></item></data>' );\r
+                       var contextNode = xml.selectSingleNode( 'data' );\r
+                       var node = xml.selectSingleNode( 'item/subitem', contextNode );\r
+                       assert.areEqual( 'subitem', node.nodeName );\r
+               },\r
+\r
+               test_selectSingleNode2b : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item><subitem/></item></data>' );\r
+                       var contextNode = xml.selectSingleNode( 'data' );\r
+                       var node = xml.selectSingleNode( 'subitem', contextNode );\r
+                       assert.isNull( node );\r
+               },\r
+\r
+               test_selectSingleNode3 : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/></data>' );\r
+                       var node = xml.selectSingleNode( '//item[@id="x2"]' );\r
+                       assert.areEqual( 'item', node.nodeName );\r
+                       assert.areEqual( 'x2', node.getAttribute( 'id' ) );\r
+               },\r
+\r
+               test_selectSingleNode4 : function()\r
+               {\r
+                       // For may results, the first one must be returned.\r
+\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/></data>' );\r
+                       var node = xml.selectSingleNode( '//item' );\r
+                       assert.areEqual( 'item', node.nodeName );\r
+                       assert.areEqual( 'x1', node.getAttribute( 'id' ) );\r
+               },\r
+\r
+               test_selectNodes1 : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item /></data>' );\r
+                       var nodes = xml.selectNodes( 'data/item' );\r
+                       assert.areEqual( 1, nodes.length );\r
+                       assert.areEqual( 'item', nodes[0].nodeName );\r
+               },\r
+\r
+               test_selectNodes2a : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/><item id="x3"/></data>' );\r
+                       var nodes = xml.selectNodes( '//item' );\r
+                       assert.areEqual( 3, nodes.length );\r
+                       assert.areEqual( 'x1', nodes[0].getAttribute( 'id' ) );\r
+                       assert.areEqual( 'x2', nodes[1].getAttribute( 'id' ) );\r
+                       assert.areEqual( 'x3', nodes[2].getAttribute( 'id' ) );\r
+               },\r
+\r
+               test_selectNodes2b : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/><item id="x3"/></data>' );\r
+                       var nodes = xml.selectNodes( '//itemX' );\r
+                       assert.areEqual( 0, nodes.length );\r
+               },\r
+\r
+               test_selectNodes3a : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/><item id="x3"/></data>' );\r
+                       var contextNode = xml.selectSingleNode( 'data' );\r
+                       var nodes = xml.selectNodes( 'item', contextNode );\r
+                       assert.areEqual( 3, nodes.length );\r
+                       assert.areEqual( 'x1', nodes[0].getAttribute( 'id' ) );\r
+                       assert.areEqual( 'x2', nodes[1].getAttribute( 'id' ) );\r
+                       assert.areEqual( 'x3', nodes[2].getAttribute( 'id' ) );\r
+               },\r
+\r
+               test_selectNodes3b : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/><item id="x2"/><item id="x3"/></data>' );\r
+                       var contextNode = xml.selectSingleNode( 'data' );\r
+                       var nodes = xml.selectNodes( 'itemX', contextNode );\r
+                       assert.areEqual( 0, nodes.length );\r
+               },\r
+\r
+               test_getInnerXml1 : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item/></data>' );\r
+                       assert.areEqual( '<item/>', xml.getInnerXml( 'data' ) );\r
+               },\r
+\r
+               test_getInnerXml2 : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"><subitem name="sub1"/></item></data>' );\r
+                       assert.areEqual( '<subitem name="sub1"/>', xml.getInnerXml( '//item' ) );\r
+               },\r
+\r
+               test_getInnerXml3 : function()\r
+               {\r
+                       var xml = new CKEDITOR.xml( '<data><item id="x1"/></data>' );\r
+                       assert.isNull( xml.getInnerXml( '//itemX' ) );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r
diff --git a/_tests/plugins/domiterator/domiterator.html b/_tests/plugins/domiterator/domiterator.html
new file mode 100644 (file)
index 0000000..6eb42e9
--- /dev/null
@@ -0,0 +1,236 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: domiterator</title>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+\r
+CKEDITOR.plugins.load( [ 'htmldataprocessor', 'htmlwriter', 'domiterator'] );\r
+\r
+\r
+       </script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+/**\r
+ * IE always returning CRLF for linefeed, so remove it when retrieve pre-formated text from text area.\r
+ * @param {Object} id\r
+ */\r
+function getTextAreaValue( id )\r
+{\r
+       return CKEDITOR.document.getById( id ).getValue().replace(/\r/gi,'');\r
+}\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+\r
+       // Local references.\r
+       var assert = CKEDITOR.test.assert,\r
+               arrayAssert = YAHOO.util.ArrayAssert;\r
+\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       // In these tests, we may "reset" the writer rules to avoid it formatting\r
+       // the output, making the assertion easier to the done. We don't need to\r
+       // test formatting features here, so this is ok.\r
+       var getDataProcessor = function()\r
+       {\r
+               var dataProcessor = new CKEDITOR.htmlDataProcessor();\r
+               dataProcessor.writer._.rules = [];\r
+               return dataProcessor;\r
+       };\r
+\r
+       /**\r
+        * IE always returning CRLF for line-feed, so remove it when retrieving\r
+        * pre-formated text from text area.\r
+        */\r
+       function getTextAreaValue( id )\r
+       {\r
+               return CKEDITOR.document.getById( id ).getValue().replace( /\r/gi, '' );\r
+       }\r
+\r
+       function assumeElementContentAreSame( container, textareaId )\r
+       {\r
+               if( typeof container == 'string' )\r
+                       container = doc.getById( container );\r
+               //Assume result document content\r
+               var html = getDataProcessor().toDataFormat( container.getHtml() );\r
+               assert.areSame( getTextAreaValue( textareaId ) , html );\r
+       }\r
+\r
+       function assumeElementAreSame( element, textareaId )\r
+       {\r
+               if( typeof element == 'string' )\r
+                       element = doc.getById( element );\r
+               //Assume result document content\r
+               var html = getDataProcessor().toDataFormat( element.getOuterHtml() );\r
+               assert.areSame( getTextAreaValue( textareaId ) , html );\r
+       }\r
+\r
+       /**\r
+        *\r
+        * @param {String|CKEDITOR.dom.range} containerId|range Either the id of html container which contents are treated as range, or a exisiting range object.\r
+        * @param {Object} iteratorOption\r
+        * @param {Array} expectedTagList block elements tagName list in iteration orders.\r
+        */\r
+       function assumeIterationSameAs( containerIdOrRange, iteratorOption, expectedTagList )\r
+       {\r
+               var range;\r
+               if( typeof containerIdOrRange == 'string' )\r
+               {\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( doc.getById( containerIdOrRange ) );\r
+               }\r
+               else\r
+                       range = containerIdOrRange;\r
+\r
+               var iter = range.createIterator();\r
+               CKEDITOR.tools.extend( iter, iteratorOption, true );\r
+               var blockList = [], block;\r
+               while (( block = iter.getNextParagraph() ) )\r
+               {\r
+                       blockList.push( block.getName() );\r
+               }\r
+               arrayAssert.itemsAreEqual( expectedTagList, blockList );\r
+       }\r
+\r
+       return {\r
+\r
+               /**\r
+                * Test iterating over table cells.\r
+                */\r
+               test_iterator_table_cells : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget2a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( 'iterTarget2b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'th', 'p', 'td' ]);\r
+                       assumeElementContentAreSame( 'iterContainer2', 'iterResult2' );\r
+               },\r
+\r
+               /**\r
+                * Test iterating over list items.\r
+                */\r
+               test_iterator_listItems : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget3a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( 'iterTarget3b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'li', 'p', 'li' ,'p', 'li' ]);\r
+                       assumeElementContentAreSame( 'iterContainer3', 'iterResult3' );\r
+               },\r
+\r
+               /**\r
+                * Test iterating over pseudo block.\r
+                */\r
+               test_iterator_pseudoBlock : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget4a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( 'iterTarget4b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'p', 'p' ] );\r
+                       assumeElementContentAreSame( 'iterContainer4', 'iterResult4' );\r
+               },\r
+\r
+               /**\r
+                * Test collapsed range before paraghraph end.\r
+                */\r
+               test_iterator_collapsed_before_paragraph : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget7' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'p' ]);\r
+                       assumeElementContentAreSame( 'iterContainer7', 'iterResult7' );\r
+               },\r
+\r
+               /**\r
+                * Test range collapsed  inside paraghraph.\r
+                */\r
+               test_iterator_collapsed_inside_paragraph : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( 'para8' ).getFirst(), 3 );\r
+                       assumeIterationSameAs( range, null, [ 'p' ]);\r
+                       assumeElementContentAreSame( 'iterContainer8', 'iterResult8' );\r
+               },\r
+\r
+               /**\r
+                * Test fix paragraph-less content.\r
+                */\r
+               test_iterator_establish_paragraph: function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range(doc);\r
+                       range.setStartAt(doc.getById('iterTarget9'), CKEDITOR.POSITION_AFTER_START);\r
+                       range.setEndAt(doc.getById('iterTarget9'), CKEDITOR.POSITION_BEFORE_END);\r
+                       assumeIterationSameAs(range, null, ['p']);\r
+                       assumeElementContentAreSame( 'iterContainer9', 'iterResult9');\r
+               },\r
+\r
+               /**\r
+                * Test iterating over more than one paragraphs. (#3352)\r
+                */\r
+               test_iterator_multiple_paragraphs: function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt(doc.getById( 'iterTarget10a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt(doc.getById( 'iterTarget10b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'p', 'p' ] );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+\r
+\r
+<div id="iterContainer2"><table summary="summary">\r
+       <caption>caption</caption>\r
+       <tr>\r
+               <th id="iterTarget2a">\r
+                       head1</th>\r
+       </tr>\r
+       <tr>\r
+               <td><p>cell1</p></td>\r
+       </tr>\r
+       <tr>\r
+               <td id="iterTarget2b">cell2</td>\r
+       </tr>\r
+</table></div>\r
+<textarea id="iterResult2"><table summary="summary"><caption>caption</caption><tbody><tr><th id="iterTarget2a">head1</th></tr><tr><td><p>cell1</p></td></tr><tr><td id="iterTarget2b">cell2</td></tr></tbody></table></textarea>\r
+\r
+<div id="iterContainer3"><ul>\r
+       <li id="iterTarget3a">item1</li>\r
+       <li><p>item2</p></li>\r
+       <li>\r
+               <ul><li>item3</li></ul>\r
+               <ul><li><p>item5</p></li></ul>\r
+       </li>\r
+       <li id="iterTarget3b">item5</li>\r
+       </ul></div>\r
+<textarea id="iterResult3"><ul><li id="iterTarget3a">item1</li><li><p>item2</p></li><li><ul><li>item3</li></ul><ul><li><p>item5</p></li></ul></li><li id="iterTarget3b">item5</li></ul></textarea>\r
+\r
+<div id="iterContainer4">\r
+       <div id="iterTarget4b"><p id="iterTarget4a">paragraph</p>text</div>\r
+</div>\r
+<textarea id="iterResult4"><div id="iterTarget4b"><p id="iterTarget4a">paragraph</p><p>text</p></div></textarea>\r
+\r
+<div id="iterContainer7"><p id="iterTarget7">paragraph</p></div>\r
+<textarea id="iterResult7"><p id="iterTarget7">paragraph</p></textarea>\r
+\r
+<div id="iterContainer8"><p id="para8">paragraph</p></div>\r
+<textarea id="iterResult8"><p id="para8">paragraph</p></textarea>\r
+\r
+<form id="iterContainer9"><span id="iterTarget9">non-paragraph</span></form>\r
+<textarea id="iterResult9"><p><span id="iterTarget9">non-paragraph</span></p></textarea>\r
+\r
+<div id="iterContainer10"><p id="iterTarget10a">para1</p><p id="iterTarget10b">para2</p></div>\r
+\r
+</body>\r
+</html>\r
diff --git a/_tests/plugins/htmldataprocessor/htmldataprocessor.html b/_tests/plugins/htmldataprocessor/htmldataprocessor.html
new file mode 100644 (file)
index 0000000..b7672b9
--- /dev/null
@@ -0,0 +1,386 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: htmldataprocessor</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+// Load the required plugins and launch the runner.\r
+CKEDITOR.test.deferRunner = true;\r
+CKEDITOR.plugins.load( 'htmldataprocessor' , function()\r
+{\r
+ CKEDITOR.test.runner.run();\r
+} );\r
+\r
+var testCase;\r
+\r
+CKEDITOR.test.addTestCase( testCase = (function()\r
+{\r
+       // Local references.\r
+       var assert = CKEDITOR.test.assert;\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       // In these tests, we may "reset" the writer rules to avoid it formatting\r
+       // the output, making the assertion easier to the done. We don't need to\r
+       // test formatting features here, so this is ok.\r
+       var getDataProcessor = function()\r
+       {\r
+               var dataProcessor = new CKEDITOR.htmlDataProcessor();\r
+               dataProcessor.writer._.rules = [];\r
+               return dataProcessor;\r
+       };\r
+\r
+       /**\r
+        * IE always returning CRLF for linefeed, so remove it when retrieve pre-formated text from text area.\r
+        * @param {Object} id\r
+        */\r
+       function getTextAreaValue( id )\r
+       {\r
+               return CKEDITOR.document.getById( id ).getValue().replace(/\r/gi,'');\r
+       }\r
+\r
+       // These tests go far beyond the strict htmlDataProcessor code testing. We\r
+       // are actually testing the entire parsing system here. The combination of\r
+       // htmlParser and htmlWriter inside htmlDataProcessor is useful in this\r
+       // sense.\r
+\r
+       return {\r
+               test_toDataFormat_1a : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><p>Test</p></div>' );\r
+\r
+                       assert.areSame( '<p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+               },\r
+\r
+               test_toDataFormat_1b : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x>Test</x:x></div>' );\r
+\r
+                       // IE adds the XML namespace tag.\r
+                       if ( CKEDITOR.env.ie )\r
+                               assert.areSame( '<?xml:namespace prefix="x" /><x:x>Test</x:x>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+                       else\r
+                               assert.areSame( '<x:x>Test</x:x>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+               },\r
+\r
+               test_toDataFormat_2a : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><br /><p>Test</p></div>' );\r
+\r
+                       assert.areSame( '<br /><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+               },\r
+\r
+               test_toDataFormat_2b : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x></x:x><p>Test</p></div>' );\r
+\r
+                       // IE adds the XML namespace tag.\r
+                       if ( CKEDITOR.env.ie )\r
+                               assert.areSame( '<?xml:namespace prefix="x" /><x:x></x:x><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+                       else\r
+                               assert.areSame( '<x:x></x:x><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+               },\r
+\r
+               test_toDataFormat_3 : function()\r
+               {\r
+                       assert.areSame( '<div><x:x><p>Test</p></x:x></div>', getDataProcessor().toDataFormat( '<div><x:x><p>Test</p></div>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2774 : function()\r
+               {\r
+                       var element = new CKEDITOR.dom.element.createFromHtml( '<div><P class=MsoNormal><B><I><SPAN lang=EN-US><o:p>Test</o:p></SPAN></I></B></P></div>' );\r
+\r
+                       // IE adds the XML namespace tag.\r
+                       if ( CKEDITOR.env.ie )\r
+                               assert.areSame( '<p class="MsoNormal"><b><i><span lang="EN-US"><?xml:namespace prefix="o" /><o:p>Test</o:p></span></i></b></p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+                       else\r
+                               assert.areSame( '<p class="MsoNormal"><b><i><span lang="EN-US"><o:p>Test</o:p></span></i></b></p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_3036_1 : function()\r
+               {\r
+                       assert.areSame( '<input autocomplete="off" checked="checked" type="checkbox" />',\r
+                               getDataProcessor().toDataFormat( '<INPUT type="checkbox" CHECKED  autocomplete=off>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_3036_2 : function()\r
+               {\r
+                       assert.areSame( '<input autocomplete="off" type="checkbox" unknown="" />',\r
+                               getDataProcessor().toDataFormat( '<INPUT type="checkbox" UNKNOWN  autocomplete=off>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_1 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1;\r
+                       var test = this;\r
+                       var isReady = !!editor.dataProcessor;\r
+\r
+                       if ( !isReady )\r
+                       {\r
+                               editor.on( 'instanceReady', function()\r
+                               {\r
+                                       isReady = true;\r
+                               } );\r
+                       }\r
+\r
+                       this.wait( function()\r
+                               {\r
+                                       if ( !isReady )\r
+                                       {\r
+                                               test.wait( arguments.callee, 100 );\r
+                                               return;\r
+                                       }\r
+\r
+                                       assert.areSame( '<p>\n\t&nbsp;</p>\n',\r
+                                               editor.dataProcessor.toDataFormat( '<p></p>' ) );\r
+                               }, 100 );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_2 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var source = '<p>Some text<br><br><br></p>';\r
+                       if ( CKEDITOR.env.ie )\r
+                               source = '<p>Some text<br><br></p>';\r
+                       assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t&nbsp;</p>\n',\r
+                               dataProcessor.toDataFormat( source ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_3 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t<br />\n\tSome more text</p>\n',\r
+                               dataProcessor.toDataFormat( '<p>Some text<br><br><br>Some more text</p>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_4 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t&nbsp;</p>\n',\r
+                               dataProcessor.toDataFormat( '<p>Some text<br><br>&nbsp;</p>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_5 : function()\r
+               {\r
+                       if ( CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       assert.areSame( '<p>\n\t&nbsp;</p>\n',\r
+                               dataProcessor.toDataFormat( '<p><br></p>' ) );\r
+               },\r
+\r
+               test_toDataFormat_ticket_2886_6 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var source = '<p><br><br></p>';\r
+                       if ( CKEDITOR.env.ie )\r
+                               source = '<p><br></p>';\r
+\r
+                       assert.areSame( '<p>\n\t<br />\n\t&nbsp;</p>\n',\r
+                               dataProcessor.toDataFormat( source ) );\r
+               },\r
+\r
+               test_toHtml_ticket_2886_1 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var expected = '<p><br /></p>';\r
+                       if ( CKEDITOR.env.ie )\r
+                               expected = '<p>\xa0</p>';\r
+                       assert.areSame( expected, dataProcessor.toHtml( '<p></p>' ) );\r
+               },\r
+\r
+               test_toHtml_ticket_2886_2 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var expected = '<p>Some text<br />Some other text</p>';\r
+                       assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br>Some other text</p>' ) );\r
+               },\r
+\r
+               test_toHtml_ticket_2886_3 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var expected = '<p>Some text<br /><br /></p>';\r
+                       if ( CKEDITOR.env.ie )\r
+                               expected = '<p>Some text<br />\xa0</p>';\r
+                       assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br>&nbsp;</p>' ) );\r
+               },\r
+\r
+               test_toHtml_ticket_2886_4 : function()\r
+               {\r
+                       var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+                       var expected = '<p>Some text</p>';\r
+                       assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br></p>' ));\r
+               },\r
+\r
+               test_ticket_3407 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor,\r
+                               config = editor.config;\r
+\r
+                       config.protectedSource.push( /<\?[\s\S]*?\?>/g );   // PHP Code\r
+                       config.protectedSource.push( /<%[\s\S]*?%>/g );   // ASP Code\r
+                       config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi );   // ASP.Net Code\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       var html = getTextAreaValue( '_TEXTAREA1' );\r
+                       var protectedHtml = dataProcessor.toHtml( html );\r
+                       assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );\r
+               },\r
+\r
+               test_ticket_3591 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor;\r
+\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       var html = getTextAreaValue( '_TEXTAREA_3591' );\r
+                       var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+                       assert.areSame( getTextAreaValue( CKEDITOR.env.ie ? '_TEXTAREA_3591_protected_ie' : '_TEXTAREA_3591_protected' ),\r
+                               protectedHtml );\r
+                       assert.areSame( getTextAreaValue( '_TEXTAREA_3591' ),\r
+                               dataProcessor.toDataFormat( protectedHtml ) );\r
+               },\r
+\r
+               test_ticket_3591_2 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor;\r
+\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       dataProcessor.writer.sortAttributes = true;\r
+\r
+                       var html = getTextAreaValue( '_TEXTAREA_3591_2' );\r
+                       var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+                       assert.areSame( getTextAreaValue( '_TEXTAREA_3591_2' ),\r
+                               dataProcessor.toDataFormat( protectedHtml ) );\r
+               },\r
+\r
+               test_ticket_3869_1 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor;\r
+\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       var html = getTextAreaValue( '_TEXTAREA_3869_1' );\r
+                       var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+                       assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );\r
+               },\r
+\r
+               test_ticket_3869_2 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor,\r
+                               config = editor.config;\r
+\r
+                       config.protectedSource.push( /<\?[\s\S]*?\?>/g );   // PHP Code\r
+                       config.protectedSource.push( /<%[\s\S]*?%>/g );   // ASP Code\r
+                       config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi );   // ASP.Net Code\r
+                       config.protectedSource.push(/<gallery[\s\S]*?<\/gallery>/gi );  // custom protected source\r
+                       config.protectedSource.push(/<options[\s\S]*?<\/options>/gi );\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       var html = getTextAreaValue( '_TEXTAREA_3869_2' );\r
+                       var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+                       assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );\r
+               },\r
+\r
+               /**\r
+                * Test empty value attributes.\r
+                */\r
+               test_ticket_3884 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor;\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+                       dataProcessor.writer.sortAttributes = true;\r
+\r
+                       assert.areSame( '<p><a href="" name="">emptylink</a></p>',\r
+                               dataProcessor.toDataFormat( dataProcessor.toHtml( '<p><a href="" name="">emptylink</a></p>' ) ) );\r
+               },\r
+\r
+               test_innerHtmlComments_ticket_3801 : function()\r
+               {\r
+                       var editor = CKEDITOR.instances.editor1,\r
+                               dataProcessor = editor.dataProcessor;\r
+\r
+                       dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+\r
+                       for ( var i = 1; i <= 7; i++ )\r
+                       {\r
+                               var html = getTextAreaValue( '_TEXTAREA_3801_' + i );\r
+                               var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+                               assert.areSame( getTextAreaValue( '_TEXTAREA_3801_' + i ),\r
+                                       dataProcessor.toDataFormat( protectedHtml ) );\r
+                       }\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+//window.onload = testCase.test_ticket_3884;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <textarea id="editor1" class="ckeditor" cols="80" rows="10"></textarea>\r
+       <textarea id="_TEXTAREA1"><script type="text/javascript">alert('>');</script><table><tbody><tr><!--- IE doesn't handle this comment ---><!--[if gte IE 6 ]>\r
+       <![if lt IE 8 ]>\r
+       gIE conditional comments\r
+<![endif]>\r
+<![endif]--><td><%Response.Write(now())%></td><td><asp:control_name id="some_id" runat="server"/></td><td><?php\r
+include ("head.html"); ?></td></tr></tbody></table><noscript>Your browser doesn't support JavaScript</noscript></textarea>\r
+       <textarea id="_TEXTAREA_3591"><object><param /><param /><embed></embed></object></textarea>\r
+       <textarea id="_TEXTAREA_3591_protected"><cke:object><cke:param></cke:param><cke:param></cke:param><cke:embed></cke:embed></cke:object></textarea>\r
+       <textarea id="_TEXTAREA_3591_protected_ie"><?xml:namespace prefix="cke" /><cke:object><cke:param></cke:param><cke:param></cke:param><cke:embed></cke:embed></cke:object></textarea>\r
+       <textarea id="_TEXTAREA_3801_1"><!-- foo --><p>bar</p></textarea>\r
+       <textarea id="_TEXTAREA_3801_2"><p><!-- foo -->bar</p></textarea>\r
+       <textarea id="_TEXTAREA_3801_3"><!-- foo --><p><!-- foo -->bar</p></textarea>\r
+       <textarea id="_TEXTAREA_3801_4"><p>bar</p><!-- foo --></textarea>\r
+       <textarea id="_TEXTAREA_3801_5">bar<!-- foo --></textarea>\r
+       <textarea id="_TEXTAREA_3801_6"><!-- foo -->bar</textarea>\r
+       <textarea id="_TEXTAREA_3801_7"><p><!-- foo -->bar</p><p><!-- foo -->bar</p></textarea>\r
+       <textarea id="_TEXTAREA_3869_1">#3869<script language="Javascript" type="text/javascript">\r
+       <!--\r
+               alert('-->');\r
+       //-->\r
+       </script></textarea>\r
+       <textarea id="_TEXTAREA_3869_2">#3869&lt;gallery&gt;\r
+       file.jpg\r
+       &lt;options name="test1" value="value1"&gt;&lt;/options&gt;\r
+       &lt;options name="test2" value="value2"&gt;&lt;/options&gt;\r
+       &lt;/gallery&gt;&lt;?\r
+               echo '&lt;script type="text/javascript"&gt;';\r
+               echo '&lt;!--alert("--&gt;");//--&gt;';\r
+               echo '&lt;/script&gt;';\r
+       ?&gt;&lt;!--&lt;%Response.Write(now())%&gt;//--&gt;invalid&lt;?\r
+               echo 'bbb&lt;script&gt;\r
+               &lt;!--\r
+               ccc();&lt;!-- &lt;/script&gt;&lt;!-- &lt;/script&gt;\r
+               //--&gt;&lt;/script&gt;\r
+               &lt;script&gt;&lt;!--\r
+               &lt;!--\r
+               ffff();\r
+               //--&gt;&lt;/script&gt;\r
+               ddd';\r
+       ?&gt;html</textarea>\r
+       <textarea id="_TEXTAREA_3591_2"><object classid="clsid"><param name="movie" value="movie.swf" /><embed src="movie.swf" type="application/x-shockwave-flash"></embed></object></textarea>\r
+</body>\r
+</html>\r
diff --git a/_tests/plugins/link/link.html b/_tests/plugins/link/link.html
new file mode 100644 (file)
index 0000000..8a1510d
--- /dev/null
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: link</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+/**\r
+ * Load the editor and wait for fully interactable.\r
+ * @param {Object} elementId\r
+ * @parma {Object} mode\r
+ * @param {Object} config\r
+ * @param {Object} callback Continuation with {@param editor}.\r
+ * @param {Object} context\r
+ */\r
+function prepareEditor( elementId, mode, config, callback, context )\r
+{\r
+       CKEDITOR.on( 'instanceReady',\r
+               function( evt )\r
+               {\r
+                       var isMe = mode == CKEDITOR.ELEMENT_MODE_REPLACE ?\r
+                               evt.editor.name == elementId\r
+                               : evt.editor.element.$ ==\r
+                                       document.getElementById( elementId );\r
+                       if ( isMe )\r
+                       {\r
+                               var editor = evt.editor;\r
+                               // Force result data unformatted.\r
+                               editor.dataProcessor.writer._.rules = {};\r
+                               // Force remove tail br.\r
+                               editor.dataProcessor.htmlFilter.addRules( {\r
+                                       elements : {\r
+                                               'br' : function( br ){\r
+                                                       var parent = br.parent,\r
+                                                               length = parent.children.length,\r
+                                                               lastChild = parent.children[ length - 1 ];\r
+                                                       if( lastChild == br )\r
+                                                               return false;\r
+                                               }\r
+                                       }\r
+                               } );\r
+                               callback.call( context, editor );\r
+                       }\r
+               }, this );\r
+\r
+       mode = mode || CKEDITOR.ELEMENT_MODE_REPLACE;\r
+       switch( mode )\r
+       {\r
+               case CKEDITOR.ELEMENT_MODE_REPLACE :\r
+                       CKEDITOR.replace( elementId, config );\r
+                       break;\r
+               case CKEDITOR.ELEMENT_MODE_APPENDTO :\r
+                       CKEDITOR.appendTo( elementId, config );\r
+                       break;\r
+       }\r
+}\r
+\r
+/**\r
+ * IE always returning CRLF for line-feed, so remove it when retrieving\r
+ * pre-formated text from text area.\r
+ */\r
+function getTextAreaValue( id )\r
+{\r
+       return CKEDITOR.document.getById( id ).getValue().replace( /\r/gi, '' );\r
+}\r
+\r
+CKEDITOR.test.addTestCase( ( function()\r
+       {\r
+\r
+               // Local references.\r
+               var assert = CKEDITOR.test.assert,\r
+                       doc = CKEDITOR.document,\r
+                       action = YAHOO.util.UserAction,\r
+                       selector = YAHOO.util.Selector;\r
+\r
+               return  {\r
+\r
+                       /**\r
+                        *  Test remove numbered list with 'enterMode = BR'.\r
+                        */\r
+                       test_create_link : function()\r
+                       {\r
+                               prepareEditor( 'test_create_link_editor', null,\r
+                                       null,\r
+                                       function( editor )\r
+                                       {\r
+                                               this.resume( function()\r
+                                               {\r
+                                           editor.focus();\r
+                                           editor.execCommand( 'link' );\r
+                                                       // waiting for dialog to open.\r
+                                           this.wait( function()\r
+                                                        {\r
+                                                               var dialog = editor._.storedDialogs[ 'link' ];\r
+                                                               var urlField = dialog.getContentElement( 'info', 'url' );\r
+                                                               urlField.setValue( 'svn.fckeditor.net' );\r
+\r
+                                                               dialog.fire( 'ok' );\r
+                                                               dialog.hide();\r
+\r
+                                                               var result = editor.getData();\r
+                                                               assert.areEqual(\r
+                                                                '<p><a href="http://svn.fckeditor.net">http://svn.fckeditor.net</a></p>',\r
+                                                                result, 'Created link element doesn\'t match.' );\r
+\r
+                                                        }, 1000 );\r
+                                               } );\r
+                                       }, this );\r
+                                       this.wait();\r
+                       },\r
+\r
+                       name :document.title\r
+               };\r
+       } )() );\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+<textarea id="test_create_link_editor"></textarea>\r
+</body>\r
+</html>\r
diff --git a/_tests/plugins/list/list.html b/_tests/plugins/list/list.html
new file mode 100644 (file)
index 0000000..99198a2
--- /dev/null
@@ -0,0 +1,217 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: list</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+/**\r
+ * Load the editor and wait for fully interactable.\r
+ * @param {Object} elementId\r
+ * @parma {Object} mode\r
+ * @param {Object} config\r
+ * @param {Object} callback Continuation with {@param editor}.\r
+ * @param {Object} context\r
+ */\r
+function prepareEditor( elementId, mode, config, callback, context )\r
+{\r
+       CKEDITOR.on( 'instanceReady',\r
+               function( evt )\r
+               {\r
+                       var isMe = mode == CKEDITOR.ELEMENT_MODE_REPLACE ?\r
+                               evt.editor.name == elementId\r
+                               : evt.editor.element.$ ==\r
+                                       document.getElementById( elementId );\r
+                       if ( isMe )\r
+                       {\r
+                               var editor = evt.editor;\r
+                               // Force result data unformatted.\r
+                               editor.dataProcessor.writer._.rules = {};\r
+                               callback.call( context, editor );\r
+                       }\r
+               }, this );\r
+\r
+       mode = mode || CKEDITOR.ELEMENT_MODE_REPLACE;\r
+       switch( mode )\r
+       {\r
+               case CKEDITOR.ELEMENT_MODE_REPLACE :\r
+                       CKEDITOR.replace( elementId, config );\r
+                       break;\r
+               case CKEDITOR.ELEMENT_MODE_APPENDTO :\r
+                       CKEDITOR.appendTo( elementId, config );\r
+                       break;\r
+       }\r
+}\r
+\r
+/**\r
+ * IE always returning CRLF for line-feed, so remove it when retrieving\r
+ * pre-formated text from text area.\r
+ */\r
+function getTextAreaValue( id )\r
+{\r
+       return CKEDITOR.document.getById( id ).getValue().replace( /\r/gi, '' );\r
+}\r
+\r
+CKEDITOR.test.addTestCase( ( function()\r
+       {\r
+\r
+               // Local references.\r
+               var assert = CKEDITOR.test.assert,\r
+                       doc = CKEDITOR.document,\r
+                       action = YAHOO.util.UserAction,\r
+                       selector = YAHOO.util.Selector;\r
+\r
+               /**\r
+                * Set the range with the start/end position specified by the locator, which in form of bookmark2.\r
+                * @param {Object} range\r
+                * @param {Array} startPosition range start path including offset\r
+                * @param {Array|Boolean} endPositoin range end path including offset or is collapsed\r
+                */\r
+               function setRange( range, startPosition, endPositoin )\r
+               {\r
+                       var bm = {\r
+                               end : null,\r
+                               start : null,\r
+                               is2: true,\r
+                               startOffset : 0,\r
+                               endoffset : 0\r
+                       };\r
+                       bm.start = startPosition.slice( 0, startPosition.length - 1 );\r
+                       bm.startOffset = startPosition[ startPosition.length -1];\r
+                       if( endPositoin === true )\r
+                       {\r
+                               bm.end = bm.start.slice();\r
+                               bm.endOffset = bm.startOffset;\r
+                       }\r
+                       else\r
+                       {\r
+                               bm.end = endPositoin.slice( 0, endPositoin.length - 1 );\r
+                               bm.endOffset = endPositoin[ endPositoin.length -1 ];\r
+                       }\r
+                       range.moveToBookmark( bm );\r
+               }\r
+\r
+               return  {\r
+\r
+                       /**\r
+                        *  Test remove numbered list with 'enterMode = BR'.\r
+                        */\r
+                       test_ticket_3151 : function()\r
+                       {\r
+                               prepareEditor( 'test_ticket_3151_editor', null,\r
+                                       { enterMode : CKEDITOR.ENTER_BR },\r
+                                       function( editor )\r
+                                       {\r
+                                               this.resume( function()\r
+                                               {\r
+                                                       editor.focus();\r
+\r
+                                                       var doc = editor.document,\r
+                                                               range = new CKEDITOR.dom.range( doc );\r
+\r
+                                                       setRange( range, [ 1, 0, 0, 0, 0 ], true );\r
+                                                       var sel = editor.getSelection();\r
+                                                       sel.selectRanges( [ range ] );\r
+\r
+                                                       // Waiting for 'comand state' effected.\r
+                                                       this.wait( function(){\r
+                                                               // Remove list.\r
+                                                               editor.execCommand( 'numberedlist' );\r
+                                                               assert.areSame( getTextAreaValue( 'test_ticket_3151_result' ),\r
+                                                                       editor.getData(),\r
+                                                                       'Remove list result not correct.' );\r
+                                                       }, 1000 );\r
+\r
+                                               } );\r
+                                       }, this );\r
+                                       this.wait();\r
+                       },\r
+\r
+                       /**\r
+                        *  Test merge newlist with previous list.\r
+                        */\r
+                       test_ticket_3820 : function()\r
+                       {\r
+                               prepareEditor( 'test_ticket_3820_editor', null,\r
+                                       { enterMode : CKEDITOR.ENTER_BR },\r
+                                       function( editor )\r
+                                       {\r
+                                               this.resume( function()\r
+                                               {\r
+                                                       editor.focus();\r
+\r
+                                                       var doc = editor.document,\r
+                                                               range = new CKEDITOR.dom.range( doc );\r
+                                                       setRange( range, [ 1, 1, 0 ], true );\r
+                                                       var sel = editor.getSelection();\r
+                                                       sel.selectRanges( [ range ] );\r
+\r
+                                                       // Waiting for 'comand state' effected.\r
+                                                       this.wait( function(){\r
+                                                               // Remove list.\r
+                                                               editor.execCommand( 'bulletedlist' );\r
+                                                               assert.areSame( getTextAreaValue( 'test_ticket_3820_result' ),\r
+                                                                       editor.getData(),\r
+                                                                       'Merge list result not correct.' );\r
+                                                       }, 1000 );\r
+\r
+                                               } );\r
+                                       }, this );\r
+                                       this.wait();\r
+                       },\r
+\r
+                       /**\r
+                        *  Test remove list first list item not merging with previous text node.\r
+                        */\r
+                       test_ticket_3836 : function()\r
+                       {\r
+                               prepareEditor( 'test_ticket_3836_editor', null,\r
+                                       { enterMode : CKEDITOR.ENTER_BR },\r
+                                       function( editor )\r
+                                       {\r
+                                               this.resume( function()\r
+                                               {\r
+                                                       this.wait( function ()\r
+                                                       {\r
+                                                               editor.focus();\r
+\r
+                                                               var doc = editor.document,\r
+                                                                       range = new CKEDITOR.dom.range( doc );\r
+                                                               setRange( range, [ 1, 1, 0, 0 ], [ 1, 1, 1, 1 ] );\r
+                                                               var sel = editor.getSelection();\r
+                                                               sel.selectRanges( [ range ] );\r
+\r
+                                                               // Waiting for 'comand state' effected.\r
+                                                               this.wait( function(){\r
+                                                                       // Remove list.\r
+                                                                       editor.execCommand( 'bulletedlist' );\r
+                                                                       assert.areSame( getTextAreaValue( 'test_ticket_3836_result' ),\r
+                                                                               editor.getData(),\r
+                                                                               'Remove list result not correct.' );\r
+                                                               }, 1000 );\r
+                                                       }, 1000 );\r
+\r
+                                               } );\r
+                                       }, this );\r
+                                       this.wait();\r
+                       },\r
+\r
+                       name :document.title\r
+               };\r
+       } )() );\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>￘\r
+<textarea id="test_ticket_3151_editor"><ol><li>text</li></ol></textarea>\r
+<textarea id="test_ticket_3151_result">text</textarea>\r
+<textarea id="test_ticket_3820_editor"><ul><li>bullet line 1</li><li>bullet line 2</li></ul><p>Second line</p></textarea>\r
+<textarea id="test_ticket_3820_result"><ul><li>bullet line 1</li><li>bullet line 2</li><li>Second line</li></ul></textarea>\r
+<textarea id="test_ticket_3773_editor"><ol><li>line1</li><li>line2</li></ol></textarea>\r
+<textarea id="test_ticket_3773_result">line1<br />line2</textarea>\r
+<textarea id="test_ticket_3836_editor">line1<ul><li>item1</li><li>item2</li></ul>line2</textarea>\r
+<textarea id="test_ticket_3836_result">line1<br />item1<br />item2<br />line2</textarea>\r
+</body>\r
+</html>\r
diff --git a/_tests/plugins/selection/selection.html b/_tests/plugins/selection/selection.html
new file mode 100644 (file)
index 0000000..a417df4
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: selection</title>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+//<![CDATA[\r
+CKEDITOR.plugins.load( [ 'selection' ] );\r
+//]]>\r
+       </script>\r
+       <script type="text/javascript">\r
+//<![CDATA[\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+       var assert = CKEDITOR.test.assert;\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       return {\r
+               test_selection_ie : function()\r
+               {\r
+                       if ( !CKEDITOR.env.ie )\r
+                               return;\r
+\r
+                       var $range = document.body.createTextRange();\r
+                       $range.findText( 'This' );\r
+                       $range.select();\r
+\r
+                       var range = doc.getSelection().getRanges()[ 0 ];\r
+                       range.select();\r
+\r
+                       var $range2 = document.selection.createRange();\r
+                       assert.areSame( 0, $range.compareEndPoints( 'StartToStart', $range2 ), 'StartToStart' );\r
+                       assert.areSame( 0, $range.compareEndPoints( 'EndToEnd', $range2 ), 'EndToEnd' );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})());\r
+//]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <p>\r
+               This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">CKEditor</a>.</p>\r
+</body>\r
+</html>\r
diff --git a/_tests/plugins/styles/styles.html b/_tests/plugins/styles/styles.html
new file mode 100644 (file)
index 0000000..9648cd3
--- /dev/null
@@ -0,0 +1,596 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>Plugin: styles</title>\r
+       <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+       <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+       <script type="text/javascript" src="../../test.js"></script>\r
+       <script type="text/javascript">\r
+\r
+CKEDITOR.plugins.load( [ 'styles', 'domiterator', 'htmldataprocessor' ] );\r
+\r
+       </script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var testCase;\r
+\r
+CKEDITOR.test.addTestCase( testCase = (function()\r
+{\r
+       // Local references.\r
+       var assert                      = CKEDITOR.test.assert;\r
+       var getInnerHtml        = CKEDITOR.test.getInnerHtml;\r
+\r
+       function getInnerHtmlParsed( element )\r
+       {\r
+               var dataProcessor = new CKEDITOR.htmlDataProcessor();\r
+               dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+               return dataProcessor.toDataFormat( getInnerHtml( element, false ) );\r
+       }\r
+\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       return {\r
+               test_inline1 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this is some sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ).getFirst(), 5 );\r
+                       range.setEnd( doc.getById( '_P1' ).getFirst(), 7 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <b>is</b> some sample text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline2 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ).getChild( 1 ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 2 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <i><b>is some </b></i>sample text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline3 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ).getChild( 1 ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 2 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <b><i>is</i> some </b>sample text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               // Inline - Remove inner duplicates.\r
+               test_inline4 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 3 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this is some sample text</b>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               // Inline - Merge with next.\r
+               test_inline5 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 1 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this is some </b>sample text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               // Inline - Merge with previous.\r
+               test_inline6 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 2 );\r
+                       range.setEnd( doc.getById( '_P1' ).getChild( 2 ), 6 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <b>is some sample</b> text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               // Inline - Merge several with next.\r
+               test_inline7 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( '<i><u>this </u></i><b><i><u>is</u> some</i> sample</b> text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 1 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b><i><u>this is</u> some</i> sample</b> text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               // Inline - Merge several with previous.\r
+               test_inline8 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is <i>some <u>sample</u></i></b><i><u> text</u></i>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 2 );\r
+                       range.setEnd( doc.getById( '_P1' ), 3 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <b>is <i>some <u>sample text</u></i></b>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline9 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <i>is some </i>sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ).getChild( 1 ), 0 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this </b><i>is some </i>sample text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline10 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this is some sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 1 );\r
+\r
+                       var style = new CKEDITOR.style(\r
+                               {\r
+                                       element : 'b',\r
+                                       attributes :\r
+                                               {\r
+                                                       lang : 'it',\r
+                                                       title : 'test'\r
+                                               },\r
+                                       styles :\r
+                                               {\r
+                                                       'font-size' : '10pt',\r
+                                                       'text-decoration' : 'line-through'\r
+                                               }\r
+                               } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b lang="it" style="font-size:10pt;text-decoration:line-through;" title="test">this is some sample text</b>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline11 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b lang="it" class="sample">is</b> <b lang="it" style="font-size: 10pt; text-decoration: line-through;" title="test">some sample</b> <b>t</b>ext' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 7 );\r
+\r
+                       var style = new CKEDITOR.style(\r
+                               {\r
+                                       element : 'b',\r
+                                       attributes :\r
+                                               {\r
+                                                       lang : 'it',\r
+                                                       title : 'test'\r
+                                               },\r
+                                       styles :\r
+                                               {\r
+                                                       'font-size' : '10pt',\r
+                                                       'text-decoration' : 'line-through'\r
+                                               }\r
+                               } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b lang="it" style="font-size: 10pt; text-decoration: line-through;" title="test">this <b class="sample">is</b> some sample text</b>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline11 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <span class="a">is</span> some <span class="b">sample</span> text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 5 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', attributes : { 'class' : 'b' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<span class="b">this <span class="a">is</span> some sample text</span>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline12 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <span style="font-size:12pt; font-weight:600">is</span> some <span style="font-size:10px;">sample</span> text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ), 5 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', styles : { 'font-size' : '1.5em' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<span style="font-size:1.5em;">this <span style="font-weight:600;">is</span> some sample text</span>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline13 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this <b>is some sample</b> text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 3 );\r
+                       range.setEnd( doc.getById( '_P1' ), 3 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this <b>is <i>some sample</i></b><i> text</i>', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_inline14 : function()\r
+               {\r
+                       var para = doc.getById( '_P1' );\r
+\r
+                       para.setHtml( 'this is some sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( para.getFirst(), 0 );\r
+                       range.setEnd( para.getFirst(), 7 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this is</b> some sample text', getInnerHtml( '_P1' ), 'First range' );\r
+\r
+                       para.setHtml( para.getHtml() );\r
+\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( para.getFirst().getFirst(), 5 );\r
+                       range.setEnd( para.getChild( 1 ), 5 );\r
+\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this is some</b> sample text', getInnerHtml( '_P1' ), 'Second range' );\r
+               },\r
+\r
+               test_inline15 : function()\r
+               {\r
+                       var para = doc.getById( '_P1' );\r
+\r
+                       para.setHtml( 'this is some sample text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( para.getFirst(), 0 );\r
+                       range.setEnd( para.getFirst(), 7 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', styles : { 'font-family' : '#(family)' } }, { family : 'Arial,Helvetica,sans-serif' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<span style="font-family:arial,helvetica,sans-serif;">this is</span> some sample text', getInnerHtml( '_P1' ), 'First range' );\r
+\r
+                       para.setHtml( para.getHtml() );\r
+\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( para.getFirst().getFirst(), 5 );\r
+                       range.setEnd( para.getChild( 1 ), 5 );\r
+\r
+                       style = new CKEDITOR.style( { element : 'span', styles : { 'font-family' : '#(family)' } }, { family : 'Georgia,serif' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<span style="font-family:arial,helvetica,sans-serif;">this <span style="font-family:georgia,serif;">is</span></span><span style="font-family:georgia,serif;"> some</span> sample text', getInnerHtml( '_P1' ), 'Second range' );\r
+               },\r
+\r
+               test_inline16 : function()\r
+               {\r
+                       var para = doc.getById( '_P1' );\r
+\r
+                       para.setHtml( '<b lang="pt" style="font-size:11pt;color:red;">this is some sample text</b>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( para.getFirst().getFirst(), 4 );\r
+                       range.setEnd( para.getFirst(), 10 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b', styles : { color : 'red', 'font-weight' : '700' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b lang="pt" style="color:red;font-size:11pt;">this<b style="font-weight:700;"> is some sample text</b></b>', getInnerHtml( '_P1' ), 'First range' );\r
+               },\r
+\r
+               test_inline_nobreak1 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'this is <a href="http://example.com/">some sample</a> text' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 0 );\r
+                       range.setEnd( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 4 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<b>this is </b><a href="http://example.com/"><b>some</b> sample</a> text', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_ticket_2040 : function()\r
+               {\r
+                       doc.getById( '_P1' ).setHtml( 'This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">ckeditor<\/a>.' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( '_P1' ), 1 );\r
+                       range.setEnd( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 6 );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( 'this is some <strong><i>sample</i> text<\/strong>. you are using <a href="http://www.fckeditor.net/">ckeditor<\/a>.', getInnerHtml( '_P1' ) );\r
+               },\r
+\r
+               test_checkElementRemovable1 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+\r
+                       assert.isTrue( style.checkElementRemovable( element ) );\r
+               },\r
+\r
+               test_checkElementRemovable2 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i' } );\r
+\r
+                       assert.isFalse( style.checkElementRemovable( element ) );\r
+               },\r
+\r
+               test_checkElementRemovable3 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b', attributes : { lang : 'pt' } } );\r
+\r
+                       assert.isTrue( style.checkElementRemovable( element ) );\r
+               },\r
+\r
+               test_checkElementRemovable4 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b', attributes : { lang : 'pt' } } );\r
+\r
+                       assert.isFalse( style.checkElementRemovable( element, true ) );\r
+               },\r
+\r
+               test_checkElementRemovable5 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="color : #fff">Test</span>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'pt' }, style : { color : '#ffffff' } } );\r
+\r
+                       assert.isTrue( style.checkElementRemovable( element, true ) );\r
+               },\r
+\r
+               test_checkElementRemovable6 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="color : #fff">Test</span>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'pt' }, style : { color : '#fffff0' } } );\r
+\r
+                       assert.isTrue( style.checkElementRemovable( element, true ) );\r
+               },\r
+\r
+               test_checkElementRemovable7 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="color : #fff">Test</span>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'fr' }, style : { color : '#ffffff' } } );\r
+\r
+                       assert.isFalse( style.checkElementRemovable( element, true ) );\r
+               },\r
+\r
+               test_checkElementRemovable8 : function()\r
+               {\r
+                       var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="font-size: 10px">Test</span>', doc );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'pt' , style : 'font-size:10px;' } } );\r
+\r
+                       assert.isTrue( style.checkElementRemovable( element, true ) );\r
+               },\r
+\r
+               test_ticket_3091 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( 'outter<table><tr><td>text</td></tr></table>outter' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( element );\r
+\r
+                       var styleDef =\r
+                       {\r
+                               element         : 'span',\r
+                               styles          : { 'font-family' : '#(family)' },\r
+                               overrides       : [ { element : 'font', attributes : { 'face' : null } } ]\r
+                       };\r
+\r
+                       var style = new CKEDITOR.style( styleDef, { 'family' : 'Arial,Helvetica,sans-serif' } );\r
+                       style.applyToRange( range );\r
+\r
+                       style = new CKEDITOR.style( styleDef, { 'family' : 'Comic Sans MS,cursive' } );\r
+                       style.applyToRange( range );\r
+\r
+                       style = new CKEDITOR.style( styleDef, { 'family' : 'Courier New,Courier,monospace' } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<span style="font-family:couriernew,courier,monospace;">outter</span><table><tbody><tr><td><span style="font-family:couriernew,courier,monospace;">text</span></td></tr></tbody></table><span style="font-family:couriernew,courier,monospace;">outter</span>', getInnerHtml( element ) );\r
+               },\r
+\r
+               test_ticket_3091_2 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( 'outter<p>text</p>outter' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( element );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i', attributes : { title : 'x' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<i title="x">outter</i><p><i title="x">text</i></p><i title="x">outter</i>', getInnerHtml( element ), 'First step failed' );\r
+\r
+                       style = new CKEDITOR.style( { element : 'i', attributes : { title : 'y' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<i title="y">outter</i><p><i title="y">text</i></p><i title="y">outter</i>', getInnerHtml( element ), 'Second step failed' );\r
+\r
+                       style = new CKEDITOR.style( { element : 'i', attributes : { title : 'z' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<i title="z">outter</i><p><i title="z">text</i></p><i title="z">outter</i>', getInnerHtml( element ), 'Third step failed' );\r
+               },\r
+\r
+               // TC based on the state of the second step in the above test, before it got fixed.\r
+               test_ticket_3091_3 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( '<p><i title="y">text</i><i title="x"></i></p><i title="y">outter</i><i title="x"></i>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( element );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'i', attributes : { title : 'z' } } );\r
+                       style.applyToRange( range );\r
+\r
+                       assert.areSame( '<p><i title="z">text</i></p><i title="z">outter</i>', getInnerHtml( element ) );\r
+               },\r
+\r
+               // Remove inline style when range collapsed at element boundaries,\r
+               // move out of the removing-style element, with inner style copied.\r
+               test_ticket_3309 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( 'this is some <b><i id="_i1">styles</i></b> text' );\r
+\r
+                       // This is some <b><i>styles^</i></b> text\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_i1' ), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.removeFromRange( range );\r
+\r
+                       assert.areSame( 'this is some <b><i id="_i1">styles</i></b><i></i> text', getInnerHtml( element ) );\r
+               },\r
+\r
+               // No inner style preserved, simply move out of the removing-style element.\r
+               test_ticket_3309_2 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( 'this is some <b id="_b1">styles</b> text' );\r
+\r
+                       // This is some <b>styles^</b> text\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_b1' ), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' } );\r
+                       style.removeFromRange( range );\r
+                       // This is some <b>styles</b>^ text\r
+                       assert.areSame( doc.getById( '_b1' ).getParent().$, range.startContainer.$ );\r
+                       assert.areSame( 2, range.startOffset );\r
+                       assert.areSame( 'this is some <b id="_b1">styles</b> text', getInnerHtml( element ) );\r
+               },\r
+\r
+               // With style overrides.\r
+               test_ticket_3309_3 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( 'text <strong><bold><span><b><i id="_i1">styles</i></b></span></bold></strong>' );\r
+\r
+                       // text <strong><bold><span><b><i id="_i1">^styles</i></b></span></bold></strong>\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_i1' ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'b' , overrides : [ 'strong', 'bold' ] } );\r
+                       style.removeFromRange( range );\r
+\r
+                       // text <span><i>^</i></span><bold><span><b><i>styles</i></b></span></bold>\r
+                       assert.areSame( 'text <span><i></i></span><strong><bold><span><b><i id="_i1">styles</i></b></span></bold></strong>', getInnerHtml( element ) );\r
+               },\r
+\r
+               // Test convert multiple paragraphs to one <pre>.\r
+               test_ticket_3188 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( '<p id="_P2">\nparagraph1<br /><br />para\t\ngraph2</p><p id="_P3">\nparagraph3\n</p>' );\r
+\r
+                       // <p id="_P2">[paragraph1</p><p id="_P3">paragraph2]</p>\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( '_P2' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( '_P3' ), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+                       var style = new CKEDITOR.style( { element : 'pre' } );\r
+                       style.applyToRange( range );\r
+\r
+                       var result = getInnerHtmlParsed( element );\r
+                       assert.areSame( '<pre>paragraph1\n\npara graph2\n\nparagraph3</pre>', result );\r
+               },\r
+\r
+               // Test convert one <pre> to multiple paragraphs.\r
+               test_ticket_3188_2 : function()\r
+               {\r
+                       var element = doc.getById( '_P1' );\r
+                       element.setHtml( '<pre>\n\tparagraph1\t\tparagraph1\nparagraph2\n\t\n\tpara   graph3\n</pre>' );\r
+\r
+                       //<pre>[\n\tparagraph1\t\tparagraph1\nparagraph2\n\t\n\tpara   graph3\n]</pre>\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( doc.getById( '_P1' ).getFirst() );\r
+                       var style = new CKEDITOR.style( { element : 'p' } );\r
+                       style.applyToRange( range );\r
+\r
+                       var result = getInnerHtmlParsed( element );\r
+\r
+                       if ( CKEDITOR.env.webkit || CKEDITOR.env.opera )\r
+                               result = result.replace( /\xa0/g, '&nbsp;' );\r
+\r
+                       assert.areSame( '<p>&nbsp;paragraph1&nbsp; paragraph1<br />paragraph2</p><p>&nbsp;para&nbsp;&nbsp; graph3</p>',\r
+                                        result );\r
+               },\r
+               name : document.title\r
+       };\r
+})() );\r
+//window.onload = testCase.test_ticket_3188;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="_P1"></div>\r
+</body>\r
+</html>\r
diff --git a/_tests/test.css b/_tests/test.css
new file mode 100644 (file)
index 0000000..c14c96a
--- /dev/null
@@ -0,0 +1,81 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+body\r
+{\r
+       margin:10px;\r
+}\r
+\r
+#testLogger\r
+{\r
+       position: absolute;\r
+       right: 10px;\r
+       left: 10px;\r
+       top: 10px;\r
+       font-family: Monospace;\r
+       border: solid 2px black;\r
+       background: #ffffff;\r
+       padding: 0px;\r
+}\r
+\r
+/* IE6 */\r
+* html #testLogger\r
+{\r
+       width: 100%;\r
+}\r
+\r
+#testLogger.testAll\r
+{\r
+       position: static;\r
+}\r
+\r
+#testLogger pre\r
+{\r
+       margin: 0 0 0 40px;\r
+       background-color: #f0f0f0;\r
+       padding: 1px 4px 1px 4px;\r
+}\r
+\r
+#testLogger div\r
+{\r
+       margin: 2px;\r
+}\r
+\r
+#testLogger div div\r
+{\r
+       margin-left: 20px;\r
+}\r
+\r
+.testEntry\r
+{\r
+       padding: 5px;\r
+       margin: 0 !important;\r
+}\r
+\r
+.testEntry:hover\r
+{\r
+       background-color: #ffff99;\r
+}\r
+\r
+.testFail, .testPass, .testIgnore\r
+{\r
+       padding-left: 3px;\r
+       padding-right: 3px;\r
+}\r
+\r
+.testFail\r
+{\r
+       background-color: #ff0000;\r
+}\r
+\r
+.testPass\r
+{\r
+       background-color: #00ff00;\r
+}\r
+\r
+.testIgnore\r
+{\r
+       background-color: #f1f100;\r
+}\r
diff --git a/_tests/test.js b/_tests/test.js
new file mode 100644 (file)
index 0000000..b0d8b6f
--- /dev/null
@@ -0,0 +1,93 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/*jsl:import yuitest.js*/\r
+\r
+// Inject the YUI Test files into the page.\r
+// URLs copied from http://developer.yahoo.com/yui/yuitest/\r
+document.write(\r
+       '<script type="text/javascript" src="' +\r
+       CKEDITOR.basePath +\r
+       '_tests/yuitest.js"></script>' );\r
+\r
+document.write(\r
+       '<script type="text/javascript" src="' +\r
+       CKEDITOR.basePath +\r
+       '_source/' +\r
+       'core/test.js"></script>' );\r
+\r
+(function()\r
+{\r
+       var createLogger = function()\r
+       {\r
+               document.body.appendChild( document.createElement( 'div' ) ).id = 'testLogger';\r
+       };\r
+\r
+       var outputResult = function( text )\r
+       {\r
+               var div = document.getElementById('testLogger').appendChild( document.createElement( 'div' ) );\r
+               div.className = 'testEntry';\r
+               div.innerHTML = text;\r
+       };\r
+\r
+       var htmlEncode = function( data )\r
+       {\r
+               if ( typeof data != 'string' )\r
+                       return data;\r
+\r
+               return data.replace(\r
+                       /&/g, '&amp;' ).replace(\r
+                       /</g, '&lt;' ).replace(\r
+                       />/g, '&gt;' );\r
+       };\r
+\r
+       window.onload = function()\r
+       {\r
+               createLogger();\r
+               var runner = YAHOO.tool.TestRunner;\r
+\r
+               var handleTestResult = function( data )\r
+               {\r
+                       switch( data.type )\r
+                       {\r
+                               case runner.TEST_FAIL_EVENT:\r
+\r
+                                       var expected = data.error.expected;\r
+                                       if ( expected && expected.nodeType )\r
+                                               expected += ' (' + ( expected.nodeType == 1 ? expected.nodeName : expected.nodeValue ) + ')';\r
+\r
+                                       var actual = data.error.actual;\r
+                                       if ( actual && actual.nodeType )\r
+                                               actual += ' (' + ( actual.nodeType == 1 ? actual.nodeName : actual.nodeValue ) + ')';\r
+\r
+                                       outputResult(\r
+                                               '<span class="testFail">FAIL</span> Test named "' + data.testName +\r
+                                               '" failed with message: "' + htmlEncode( data.error.message ) +\r
+                                               '".<div>Expected:</div><pre>' + htmlEncode( expected ) +\r
+                                               '<br></pre><div>Actual:</div><pre>' + htmlEncode( actual ) + '<br></pre>' );\r
+                                       break;\r
+                               case runner.TEST_PASS_EVENT:\r
+                                       outputResult( '<span class="testPass">PASS</span> Test named "' + data.testName + '" passed.' );\r
+                                       break;\r
+                               case runner.TEST_IGNORE_EVENT:\r
+                                       outputResult( '<span class="testIgnore">IGNORE</span> Test named "' + data.testName + '" was ignored.' );\r
+                                       break;\r
+                       }\r
+               };\r
+\r
+               runner.subscribe(runner.TEST_FAIL_EVENT, handleTestResult);\r
+               runner.subscribe(runner.TEST_IGNORE_EVENT, handleTestResult);\r
+               runner.subscribe(runner.TEST_PASS_EVENT, handleTestResult);\r
+\r
+               if ( window.parent && window.parent.onTestStart )\r
+               {\r
+                       runner.subscribe(runner.TEST_CASE_BEGIN_EVENT, window.parent.onTestStart);\r
+                       runner.subscribe(runner.TEST_CASE_COMPLETE_EVENT, window.parent.onTestComplete);\r
+               }\r
+\r
+               if ( !CKEDITOR.test.deferRunner )\r
+                       runner.run();\r
+       };\r
+})();\r
diff --git a/_tests/testall.html b/_tests/testall.html
new file mode 100644 (file)
index 0000000..55df0bd
--- /dev/null
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>CKEditor Core Tests Runner</title>\r
+       <link rel="stylesheet" type="text/css" href="test.css" />\r
+       <script type="text/javascript">\r
+       //<![CDATA[\r
+\r
+var testList =\r
+[\r
+       'core/ajax',\r
+       'core/bootstrap',\r
+       'core/ckeditor',\r
+       'core/editor',\r
+       'core/env',\r
+       'core/event',\r
+       'core/plugins',\r
+       'core/scriptloader',\r
+       'core/tools',\r
+       'core/xml',\r
+       'core/dom/document',\r
+       'core/dom/documentfragment',\r
+       'core/dom/element',\r
+       'core/dom/node',\r
+       'core/dom/range',\r
+       'core/dom/text',\r
+       'core/dom/walker',\r
+       'core/dom/window',\r
+       'core/htmlparser/fragment',\r
+       'core/htmlparser/htmlparser',\r
+       'plugins/domiterator/domiterator',\r
+       'plugins/htmldataprocessor/htmldataprocessor',\r
+       'plugins/link/link',\r
+       'plugins/list/list',\r
+       'plugins/styles/styles',\r
+       'plugins/selection/selection'\r
+];\r
+\r
+var currentTest;\r
+var currentTime;\r
+var totalTime;\r
+var totalFailed = 0;\r
+var totalPassed = 0;\r
+\r
+function runTest()\r
+{\r
+       currentTest = testList.shift();\r
+\r
+       if ( currentTest )\r
+               document.getElementById( 'testFrame' ).src = currentTest + '.html';\r
+}\r
+\r
+function onTestStart( data )\r
+{\r
+       var div = document.getElementById('testLogger').appendChild( document.createElement( 'div' ) );\r
+       div.className = 'testEntry';\r
+       div.innerHTML = 'Testing "<a href="' + currentTest + '.html" target="_blank">' + data.testCase.name + '</a>"...';\r
+\r
+       currentTime = new Date();\r
+\r
+       if ( !totalTime )\r
+               totalTime = currentTime;\r
+}\r
+\r
+function onTestComplete( data )\r
+{\r
+       var finishTime = new Date();\r
+\r
+       var failed = data.results.failed;\r
+       var passed = data.results.passed;\r
+\r
+       var html = '<span class="testIgnore">Unknown</span>';\r
+\r
+       if ( failed > 0 )\r
+               html = '<span class="testFail">FAIL</span>';\r
+       else\r
+               html = '<span class="testPass">PASS</span>';\r
+\r
+       html += ' Test "<a href="' + currentTest + '.html" target="_blank">' + data.testCase.name + '</a>" (' + failed + ' failed / ' + passed + ' passed) - ' + ( finishTime - currentTime ) + 'ms';\r
+\r
+       var div = document.getElementById('testLogger').lastChild;\r
+       div.innerHTML = html;\r
+\r
+       totalFailed += failed;\r
+       totalPassed += passed;\r
+\r
+       document.getElementById('testFailed').innerHTML = totalFailed;\r
+       document.getElementById('testPassed').innerHTML = totalPassed;\r
+       document.getElementById('totalTime').innerHTML = finishTime - totalTime;\r
+\r
+       document.title = totalFailed + ' failed / ' + totalPassed + ' passed - CKEditor Core Tests Runner';\r
+\r
+       runTest();\r
+}\r
+\r
+window.onload = function()\r
+{\r
+       // IE was "caching" the latest logged div on refresh. So, we must clean it\r
+       // on startup.\r
+       document.getElementById('testLogger').innerHTML = '';\r
+\r
+       runTest();\r
+};\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <h1>CKEditor Core Tests Runner (<span id="testFailed">0</span> failed / <span id="testPassed">0</span> passed) - <span id="totalTime">0</span>ms</h1>\r
+       <iframe id="testFrame" src="javascript:;" style="position: absolute; width: 50px; height: 50px; left: -1000px">\r
+       </iframe>\r
+       <div id="testLogger" class="testAll"></div>\r
+</body>\r
+</html>\r
diff --git a/_tests/yuitest.js b/_tests/yuitest.js
new file mode 100644 (file)
index 0000000..c3ab47a
--- /dev/null
@@ -0,0 +1,75 @@
+/*jsl:ignoreall*/\r
+/*\r
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.5.2\r
+\r
+== BEGIN LICENSE ==\r
+\r
+Software License Agreement (BSD License)\r
+\r
+Copyright (c) 2008, Yahoo! Inc.\r
+All rights reserved.\r
+\r
+Redistribution and use of this software in source and binary forms, with or without modification, are\r
+permitted provided that the following conditions are met:\r
+\r
+* Redistributions of source code must retain the above\r
+  copyright notice, this list of conditions and the\r
+  following disclaimer.\r
+\r
+* Redistributions in binary form must reproduce the above\r
+  copyright notice, this list of conditions and the\r
+  following disclaimer in the documentation and/or other\r
+  materials provided with the distribution.\r
+\r
+* Neither the name of Yahoo! Inc. nor the names of its\r
+  contributors may be used to endorse or promote products\r
+  derived from this software without specific prior\r
+  written permission of Yahoo! Inc.\r
+\r
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED\r
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\r
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\r
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\r
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\r
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+== END LICENSE ==\r
+*/\r
+\r
+/*\r
+This file contains the YUI Tester code as well as its dependencies, in the\r
+order defined at:\r
+http://developer.yahoo.com/yui/yuitest/\r
+*/\r
+\r
+// yahoo-dom-event/yahoo-dom-event.js\r
+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;if(!I[A]){I[A]={versions:[],builds:[]};}var 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(var 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};var 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]);}}}}}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 A=YAHOO.lang,C=["toString","valueOf"],B={isArray:function(D){if(D){return A.isNumber(D.length)&&A.isFunction(D.splice);}return false;},isBoolean:function(D){return typeof D==="boolean";},isFunction:function(D){return typeof D==="function";},isNull:function(D){return D===null;},isNumber:function(D){return typeof D==="number"&&isFinite(D);},isObject:function(D){return(D&&(typeof D==="object"||A.isFunction(D)))||false;},isString:function(D){return typeof D==="string";},isUndefined:function(D){return typeof D==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(F,E){for(var D=0;D<C.length;D=D+1){var H=C[D],G=E[H];if(A.isFunction(G)&&G!=Object.prototype[H]){F[H]=G;}}}:function(){},extend:function(H,I,G){if(!I||!H){throw new Error("extend failed, please check that "+"all dependencies are included.");}var E=function(){};E.prototype=I.prototype;H.prototype=new E();H.prototype.constructor=H;H.superclass=I.prototype;if(I.prototype.constructor==Object.prototype.constructor){I.prototype.constructor=I;}if(G){for(var D in G){if(A.hasOwnProperty(G,D)){H.prototype[D]=G[D];}}A._IEEnumFix(H.prototype,G);}},augmentObject:function(H,G){if(!G||!H){throw new Error("Absorb failed, verify dependencies.");}var D=arguments,F,I,E=D[2];if(E&&E!==true){for(F=2;F<D.length;F=F+1){H[D[F]]=G[D[F]];}}else{for(I in G){if(E||!(I in H)){H[I]=G[I];}}A._IEEnumFix(H,G);}},augmentProto:function(G,F){if(!F||!G){throw new Error("Augment failed, verify dependencies.");}var D=[G.prototype,F.prototype];for(var E=2;E<arguments.length;E=E+1){D.push(arguments[E]);}A.augmentObject.apply(this,D);},dump:function(D,I){var F,H,K=[],L="{...}",E="f(){...}",J=", ",G=" => ";if(!A.isObject(D)){return D+"";}else{if(D instanceof Date||("nodeType" in D&&"tagName" in D)){return D;}else{if(A.isFunction(D)){return E;}}}I=(A.isNumber(I))?I:3;if(A.isArray(D)){K.push("[");for(F=0,H=D.length;F<H;F=F+1){if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}if(K.length>1){K.pop();}K.push("]");}else{K.push("{");for(F in D){if(A.hasOwnProperty(D,F)){K.push(F+G);if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}}if(K.length>1){K.pop();}K.push("}");}return K.join("");},substitute:function(S,E,L){var I,H,G,O,P,R,N=[],F,J="dump",M=" ",D="{",Q="}";for(;;){I=S.lastIndexOf(D);if(I<0){break;}H=S.indexOf(Q,I);if(I+1>=H){break;}F=S.substring(I+1,H);O=F;R=null;G=O.indexOf(M);if(G>-1){R=O.substring(G+1);O=O.substring(0,G);}P=E[O];if(L){P=L(O,P,R);}if(A.isObject(P)){if(A.isArray(P)){P=A.dump(P,parseInt(R,10));}else{R=R||"";var K=R.indexOf(J);if(K>-1){R=R.substring(4);}if(P.toString===Object.prototype.toString||K>-1){P=A.dump(P,parseInt(R,10));}else{P=P.toString();}}}else{if(!A.isString(P)&&!A.isNumber(P)){P="~-"+N.length+"-~";N[N.length]=F;}}S=S.substring(0,I)+P+S.substring(H+1);}for(I=N.length-1;I>=0;I=I-1){S=S.replace(new RegExp("~-"+I+"-~"),"{"+N[I]+"}","g");}return S;},trim:function(D){try{return D.replace(/^\s+|\s+$/g,"");}catch(E){return D;}},merge:function(){var G={},E=arguments;for(var F=0,D=E.length;F<D;F=F+1){A.augmentObject(G,E[F],true);}return G;},later:function(K,E,L,G,H){K=K||0;E=E||{};var F=L,J=G,I,D;if(A.isString(L)){F=E[L];}if(!F){throw new TypeError("method undefined");}if(!A.isArray(J)){J=[G];}I=function(){F.apply(E,J);};D=(H)?setInterval(I,K):setTimeout(I,K);return{interval:H,cancel:function(){if(this.interval){clearInterval(D);}else{clearTimeout(D);}}};},isValue:function(D){return(A.isObject(D)||A.isString(D)||A.isNumber(D)||A.isBoolean(D));}};A.hasOwnProperty=(Object.prototype.hasOwnProperty)?function(D,E){return D&&D.hasOwnProperty(E);}:function(D,E){return !A.isUndefined(D[E])&&D.constructor.prototype[E]!==D[E];};B.augmentObject(A,B,true);YAHOO.util.Lang=A;A.augment=A.augmentProto;YAHOO.augment=A.augmentProto;YAHOO.extend=A.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.5.2",build:"1076"});YAHOO.util.Get=function(){var M={},L=0,Q=0,E=false,N=YAHOO.env.ua,R=YAHOO.lang;var J=function(V,S,W){var T=W||window,X=T.document,Y=X.createElement(V);for(var U in S){if(S[U]&&YAHOO.lang.hasOwnProperty(S,U)){Y.setAttribute(U,S[U]);}}return Y;};var H=function(S,T,V){var U=V||"utf-8";return J("link",{"id":"yui__dyn_"+(Q++),"type":"text/css","charset":U,"rel":"stylesheet","href":S},T);\r
+};var O=function(S,T,V){var U=V||"utf-8";return J("script",{"id":"yui__dyn_"+(Q++),"type":"text/javascript","charset":U,"src":S},T);};var A=function(S,T){return{tId:S.tId,win:S.win,data:S.data,nodes:S.nodes,msg:T,purge:function(){D(this.tId);}};};var B=function(S,V){var T=M[V],U=(R.isString(S))?T.win.document.getElementById(S):S;if(!U){P(V,"target node not found: "+S);}return U;};var P=function(V,U){var S=M[V];if(S.onFailure){var T=S.scope||S.win;S.onFailure.call(T,A(S,U));}};var C=function(V){var S=M[V];S.finished=true;if(S.aborted){var U="transaction "+V+" was aborted";P(V,U);return ;}if(S.onSuccess){var T=S.scope||S.win;S.onSuccess.call(T,A(S));}};var G=function(U,Y){var T=M[U];if(T.aborted){var W="transaction "+U+" was aborted";P(U,W);return ;}if(Y){T.url.shift();if(T.varName){T.varName.shift();}}else{T.url=(R.isString(T.url))?[T.url]:T.url;if(T.varName){T.varName=(R.isString(T.varName))?[T.varName]:T.varName;}}var b=T.win,a=b.document,Z=a.getElementsByTagName("head")[0],V;if(T.url.length===0){if(T.type==="script"&&N.webkit&&N.webkit<420&&!T.finalpass&&!T.varName){var X=O(null,T.win,T.charset);X.innerHTML='YAHOO.util.Get._finalize("'+U+'");';T.nodes.push(X);Z.appendChild(X);}else{C(U);}return ;}var S=T.url[0];if(T.type==="script"){V=O(S,b,T.charset);}else{V=H(S,b,T.charset);}F(T.type,V,U,S,b,T.url.length);T.nodes.push(V);if(T.insertBefore){var c=B(T.insertBefore,U);if(c){c.parentNode.insertBefore(V,c);}}else{Z.appendChild(V);}if((N.webkit||N.gecko)&&T.type==="css"){G(U,S);}};var K=function(){if(E){return ;}E=true;for(var S in M){var T=M[S];if(T.autopurge&&T.finished){D(T.tId);delete M[S];}}E=false;};var D=function(Z){var W=M[Z];if(W){var Y=W.nodes,S=Y.length,X=W.win.document,V=X.getElementsByTagName("head")[0];if(W.insertBefore){var U=B(W.insertBefore,Z);if(U){V=U.parentNode;}}for(var T=0;T<S;T=T+1){V.removeChild(Y[T]);}}W.nodes=[];};var I=function(T,S,U){var W="q"+(L++);U=U||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[W]=R.merge(U,{tId:W,type:T,url:S,finished:false,nodes:[]});var V=M[W];V.win=V.win||window;V.scope=V.scope||V.win;V.autopurge=("autopurge" in V)?V.autopurge:(T==="script")?true:false;R.later(0,V,G,W);return{tId:W};};var F=function(b,W,V,T,X,Y,a){var Z=a||G;if(N.ie){W.onreadystatechange=function(){var c=this.readyState;if("loaded"===c||"complete"===c){Z(V,T);}};}else{if(N.webkit){if(b==="script"){if(N.webkit>=420){W.addEventListener("load",function(){Z(V,T);});}else{var S=M[V];if(S.varName){var U=YAHOO.util.Get.POLL_FREQ;S.maxattempts=YAHOO.util.Get.TIMEOUT/U;S.attempts=0;S._cache=S.varName[0].split(".");S.timer=R.later(U,S,function(h){var e=this._cache,d=e.length,c=this.win,f;for(f=0;f<d;f=f+1){c=c[e[f]];if(!c){this.attempts++;if(this.attempts++>this.maxattempts){var g="Over retry limit, giving up";S.timer.cancel();P(V,g);}else{}return ;}}S.timer.cancel();Z(V,T);},null,true);}else{R.later(YAHOO.util.Get.POLL_FREQ,null,Z,[V,T]);}}}}else{W.onload=function(){Z(V,T);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(S){R.later(0,null,C,S);},abort:function(T){var U=(R.isString(T))?T:T.tId;var S=M[U];if(S){S.aborted=true;}},script:function(S,T){return I("script",S,T);},css:function(S,T){return I("css",S,T);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.5.2",build:"1076"});(function(){var Y=YAHOO,util=Y.util,lang=Y.lang,env=Y.env,PROV="_provides",SUPER="_supersedes",REQ="expanded",AFTER="_after";var YUI={dupsAllowed:{"yahoo":true,"get":true},info:{"base":"http://yui.yahooapis.com/2.5.2/build/","skin":{"defaultSkin":"sam","base":"assets/skins/","path":"skin.css","after":["reset","fonts","grids","base"],"rollup":3},dupsAllowed:["yahoo","get"],"moduleInfo":{"animation":{"type":"js","path":"animation/animation-min.js","requires":["dom","event"]},"autocomplete":{"type":"js","path":"autocomplete/autocomplete-min.js","requires":["dom","event"],"optional":["connection","animation"],"skinnable":true},"base":{"type":"css","path":"base/base-min.css","after":["reset","fonts","grids"]},"button":{"type":"js","path":"button/button-min.js","requires":["element"],"optional":["menu"],"skinnable":true},"calendar":{"type":"js","path":"calendar/calendar-min.js","requires":["event","dom"],"skinnable":true},"charts":{"type":"js","path":"charts/charts-experimental-min.js","requires":["element","json","datasource"]},"colorpicker":{"type":"js","path":"colorpicker/colorpicker-min.js","requires":["slider","element"],"optional":["animation"],"skinnable":true},"connection":{"type":"js","path":"connection/connection-min.js","requires":["event"]},"container":{"type":"js","path":"container/container-min.js","requires":["dom","event"],"optional":["dragdrop","animation","connection"],"supersedes":["containercore"],"skinnable":true},"containercore":{"type":"js","path":"container/container_core-min.js","requires":["dom","event"],"pkg":"container"},"cookie":{"type":"js","path":"cookie/cookie-beta-min.js","requires":["yahoo"]},"datasource":{"type":"js","path":"datasource/datasource-beta-min.js","requires":["event"],"optional":["connection"]},"datatable":{"type":"js","path":"datatable/datatable-beta-min.js","requires":["element","datasource"],"optional":["calendar","dragdrop"],"skinnable":true},"dom":{"type":"js","path":"dom/dom-min.js","requires":["yahoo"]},"dragdrop":{"type":"js","path":"dragdrop/dragdrop-min.js","requires":["dom","event"]},"editor":{"type":"js","path":"editor/editor-beta-min.js","requires":["menu","element","button"],"optional":["animation","dragdrop"],"supersedes":["simpleeditor"],"skinnable":true},"element":{"type":"js","path":"element/element-beta-min.js","requires":["dom","event"]},"event":{"type":"js","path":"event/event-min.js","requires":["yahoo"]},"fonts":{"type":"css","path":"fonts/fonts-min.css"},"get":{"type":"js","path":"get/get-min.js","requires":["yahoo"]},"grids":{"type":"css","path":"grids/grids-min.css","requires":["fonts"],"optional":["reset"]},"history":{"type":"js","path":"history/history-min.js","requires":["event"]},"imagecropper":{"type":"js","path":"imagecropper/imagecropper-beta-min.js","requires":["dom","event","dragdrop","element","resize"],"skinnable":true},"imageloader":{"type":"js","path":"imageloader/imageloader-min.js","requires":["event","dom"]},"json":{"type":"js","path":"json/json-min.js","requires":["yahoo"]},"layout":{"type":"js","path":"layout/layout-beta-min.js","requires":["dom","event","element"],"optional":["animation","dragdrop","resize","selector"],"skinnable":true},"logger":{"type":"js","path":"logger/logger-min.js","requires":["event","dom"],"optional":["dragdrop"],"skinnable":true},"menu":{"type":"js","path":"menu/menu-min.js","requires":["containercore"],"skinnable":true},"profiler":{"type":"js","path":"profiler/profiler-beta-min.js","requires":["yahoo"]},"profilerviewer":{"type":"js","path":"profilerviewer/profilerviewer-beta-min.js","requires":["profiler","yuiloader","element"],"skinnable":true},"reset":{"type":"css","path":"reset/reset-min.css"},"reset-fonts-grids":{"type":"css","path":"reset-fonts-grids/reset-fonts-grids.css","supersedes":["reset","fonts","grids","reset-fonts"],"rollup":4},"reset-fonts":{"type":"css","path":"reset-fonts/reset-fonts.css","supersedes":["reset","fonts"],"rollup":2},"resize":{"type":"js","path":"resize/resize-beta-min.js","requires":["dom","event","dragdrop","element"],"optional":["animation"],"skinnable":true},"selector":{"type":"js","path":"selector/selector-beta-min.js","requires":["yahoo","dom"]},"simpleeditor":{"type":"js","path":"editor/simpleeditor-beta-min.js","requires":["element"],"optional":["containercore","menu","button","animation","dragdrop"],"skinnable":true,"pkg":"editor"},"slider":{"type":"js","path":"slider/slider-min.js","requires":["dragdrop"],"optional":["animation"]},"tabview":{"type":"js","path":"tabview/tabview-min.js","requires":["element"],"optional":["connection"],"skinnable":true},"treeview":{"type":"js","path":"treeview/treeview-min.js","requires":["event"],"skinnable":true},"uploader":{"type":"js","path":"uploader/uploader-experimental.js","requires":["element"]},"utilities":{"type":"js","path":"utilities/utilities.js","supersedes":["yahoo","event","dragdrop","animation","dom","connection","element","yahoo-dom-event","get","yuiloader","yuiloader-dom-event"],"rollup":8},"yahoo":{"type":"js","path":"yahoo/yahoo-min.js"},"yahoo-dom-event":{"type":"js","path":"yahoo-dom-event/yahoo-dom-event.js","supersedes":["yahoo","event","dom"],"rollup":3},"yuiloader":{"type":"js","path":"yuiloader/yuiloader-beta-min.js","supersedes":["yahoo","get"]},"yuiloader-dom-event":{"type":"js","path":"yuiloader-dom-event/yuiloader-dom-event.js","supersedes":["yahoo","dom","event","get","yuiloader","yahoo-dom-event"],"rollup":5},"yuitest":{"type":"js","path":"yuitest/yuitest-min.js","requires":["logger"],"skinnable":true}}},ObjectUtil:{appendArray:function(o,a){if(a){for(var i=0;\r
+i<a.length;i=i+1){o[a[i]]=true;}}},keys:function(o,ordered){var a=[],i;for(i in o){if(lang.hasOwnProperty(o,i)){a.push(i);}}return a;}},ArrayUtil:{appendArray:function(a1,a2){Array.prototype.push.apply(a1,a2);},indexOf:function(a,val){for(var i=0;i<a.length;i=i+1){if(a[i]===val){return i;}}return -1;},toObject:function(a){var o={};for(var i=0;i<a.length;i=i+1){o[a[i]]=true;}return o;},uniq:function(a){return YUI.ObjectUtil.keys(YUI.ArrayUtil.toObject(a));}}};YAHOO.util.YUILoader=function(o){this._internalCallback=null;this._useYahooListener=false;this.onSuccess=null;this.onFailure=Y.log;this.onProgress=null;this.scope=this;this.data=null;this.insertBefore=null;this.charset=null;this.varName=null;this.base=YUI.info.base;this.ignore=null;this.force=null;this.allowRollup=true;this.filter=null;this.required={};this.moduleInfo=lang.merge(YUI.info.moduleInfo);this.rollups=null;this.loadOptional=false;this.sorted=[];this.loaded={};this.dirty=true;this.inserted={};var self=this;env.listeners.push(function(m){if(self._useYahooListener){self.loadNext(m.name);}});this.skin=lang.merge(YUI.info.skin);this._config(o);};Y.util.YUILoader.prototype={FILTERS:{RAW:{"searchExp":"-min\\.js","replaceStr":".js"},DEBUG:{"searchExp":"-min\\.js","replaceStr":"-debug.js"}},SKIN_PREFIX:"skin-",_config:function(o){if(o){for(var i in o){if(lang.hasOwnProperty(o,i)){if(i=="require"){this.require(o[i]);}else{this[i]=o[i];}}}}var f=this.filter;if(lang.isString(f)){f=f.toUpperCase();if(f==="DEBUG"){this.require("logger");}if(!Y.widget.LogWriter){Y.widget.LogWriter=function(){return Y;};}this.filter=this.FILTERS[f];}},addModule:function(o){if(!o||!o.name||!o.type||(!o.path&&!o.fullpath)){return false;}o.ext=("ext" in o)?o.ext:true;o.requires=o.requires||[];this.moduleInfo[o.name]=o;this.dirty=true;return true;},require:function(what){var a=(typeof what==="string")?arguments:what;this.dirty=true;YUI.ObjectUtil.appendArray(this.required,a);},_addSkin:function(skin,mod){var name=this.formatSkin(skin),info=this.moduleInfo,sinf=this.skin,ext=info[mod]&&info[mod].ext;if(!info[name]){this.addModule({"name":name,"type":"css","path":sinf.base+skin+"/"+sinf.path,"after":sinf.after,"rollup":sinf.rollup,"ext":ext});}if(mod){name=this.formatSkin(skin,mod);if(!info[name]){var mdef=info[mod],pkg=mdef.pkg||mod;this.addModule({"name":name,"type":"css","after":sinf.after,"path":pkg+"/"+sinf.base+skin+"/"+mod+".css","ext":ext});}}return name;},getRequires:function(mod){if(!mod){return[];}if(!this.dirty&&mod.expanded){return mod.expanded;}mod.requires=mod.requires||[];var i,d=[],r=mod.requires,o=mod.optional,info=this.moduleInfo,m;for(i=0;i<r.length;i=i+1){d.push(r[i]);m=info[r[i]];YUI.ArrayUtil.appendArray(d,this.getRequires(m));}if(o&&this.loadOptional){for(i=0;i<o.length;i=i+1){d.push(o[i]);YUI.ArrayUtil.appendArray(d,this.getRequires(info[o[i]]));}}mod.expanded=YUI.ArrayUtil.uniq(d);return mod.expanded;},getProvides:function(name,notMe){var addMe=!(notMe),ckey=(addMe)?PROV:SUPER,m=this.moduleInfo[name],o={};if(!m){return o;}if(m[ckey]){return m[ckey];}var s=m.supersedes,done={},me=this;var add=function(mm){if(!done[mm]){done[mm]=true;lang.augmentObject(o,me.getProvides(mm));}};if(s){for(var i=0;i<s.length;i=i+1){add(s[i]);}}m[SUPER]=o;m[PROV]=lang.merge(o);m[PROV][name]=true;return m[ckey];},calculate:function(o){if(this.dirty){this._config(o);this._setup();this._explode();if(this.allowRollup){this._rollup();}this._reduce();this._sort();this.dirty=false;}},_setup:function(){var info=this.moduleInfo,name,i,j;for(name in info){var m=info[name];if(m&&m.skinnable){var o=this.skin.overrides,smod;if(o&&o[name]){for(i=0;i<o[name].length;i=i+1){smod=this._addSkin(o[name][i],name);}}else{smod=this._addSkin(this.skin.defaultSkin,name);}m.requires.push(smod);}}var l=lang.merge(this.inserted);if(!this._sandbox){l=lang.merge(l,env.modules);}if(this.ignore){YUI.ObjectUtil.appendArray(l,this.ignore);}if(this.force){for(i=0;i<this.force.length;i=i+1){if(this.force[i] in l){delete l[this.force[i]];}}}for(j in l){if(lang.hasOwnProperty(l,j)){lang.augmentObject(l,this.getProvides(j));}}this.loaded=l;},_explode:function(){var r=this.required,i,mod;for(i in r){mod=this.moduleInfo[i];if(mod){var req=this.getRequires(mod);if(req){YUI.ObjectUtil.appendArray(r,req);}}}},_skin:function(){},formatSkin:function(skin,mod){var s=this.SKIN_PREFIX+skin;if(mod){s=s+"-"+mod;}return s;},parseSkin:function(mod){if(mod.indexOf(this.SKIN_PREFIX)===0){var a=mod.split("-");return{skin:a[1],module:a[2]};}return null;},_rollup:function(){var i,j,m,s,rollups={},r=this.required,roll;if(this.dirty||!this.rollups){for(i in this.moduleInfo){m=this.moduleInfo[i];if(m&&m.rollup){rollups[i]=m;}}this.rollups=rollups;}for(;;){var rolled=false;for(i in rollups){if(!r[i]&&!this.loaded[i]){m=this.moduleInfo[i];s=m.supersedes;roll=false;if(!m.rollup){continue;}var skin=(m.ext)?false:this.parseSkin(i),c=0;if(skin){for(j in r){if(i!==j&&this.parseSkin(j)){c++;roll=(c>=m.rollup);if(roll){break;}}}}else{for(j=0;j<s.length;j=j+1){if(this.loaded[s[j]]&&(!YUI.dupsAllowed[s[j]])){roll=false;break;}else{if(r[s[j]]){c++;roll=(c>=m.rollup);if(roll){break;}}}}}if(roll){r[i]=true;rolled=true;this.getRequires(m);}}}if(!rolled){break;}}},_reduce:function(){var i,j,s,m,r=this.required;for(i in r){if(i in this.loaded){delete r[i];}else{var skinDef=this.parseSkin(i);if(skinDef){if(!skinDef.module){var skin_pre=this.SKIN_PREFIX+skinDef.skin;for(j in r){m=this.moduleInfo[j];var ext=m&&m.ext;if(!ext&&j!==i&&j.indexOf(skin_pre)>-1){delete r[j];}}}}else{m=this.moduleInfo[i];s=m&&m.supersedes;if(s){for(j=0;j<s.length;j=j+1){if(s[j] in r){delete r[s[j]];}}}}}}},_sort:function(){var s=[],info=this.moduleInfo,loaded=this.loaded,checkOptional=!this.loadOptional,me=this;var requires=function(aa,bb){if(loaded[bb]){return false;}var ii,mm=info[aa],rr=mm&&mm.expanded,after=mm&&mm.after,other=info[bb],optional=mm&&mm.optional;if(rr&&YUI.ArrayUtil.indexOf(rr,bb)>-1){return true;}if(after&&YUI.ArrayUtil.indexOf(after,bb)>-1){return true;\r
+}if(checkOptional&&optional&&YUI.ArrayUtil.indexOf(optional,bb)>-1){return true;}var ss=info[bb]&&info[bb].supersedes;if(ss){for(ii=0;ii<ss.length;ii=ii+1){if(requires(aa,ss[ii])){return true;}}}if(mm.ext&&mm.type=="css"&&(!other.ext)){return true;}return false;};for(var i in this.required){s.push(i);}var p=0;for(;;){var l=s.length,a,b,j,k,moved=false;for(j=p;j<l;j=j+1){a=s[j];for(k=j+1;k<l;k=k+1){if(requires(a,s[k])){b=s.splice(k,1);s.splice(j,0,b[0]);moved=true;break;}}if(moved){break;}else{p=p+1;}}if(!moved){break;}}this.sorted=s;},toString:function(){var o={type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted};lang.dump(o,1);},insert:function(o,type){this.calculate(o);if(!type){var self=this;this._internalCallback=function(){self._internalCallback=null;self.insert(null,"js");};this.insert(null,"css");return ;}this._loading=true;this.loadType=type;this.loadNext();},sandbox:function(o,type){if(o){}else{}this._config(o);if(!this.onSuccess){throw new Error("You must supply an onSuccess handler for your sandbox");}this._sandbox=true;var self=this;if(!type||type!=="js"){this._internalCallback=function(){self._internalCallback=null;self.sandbox(null,"js");};this.insert(null,"css");return ;}if(!util.Connect){var ld=new YAHOO.util.YUILoader();ld.insert({base:this.base,filter:this.filter,require:"connection",insertBefore:this.insertBefore,charset:this.charset,onSuccess:function(){this.sandbox(null,"js");},scope:this},"js");return ;}this._scriptText=[];this._loadCount=0;this._stopCount=this.sorted.length;this._xhr=[];this.calculate();var s=this.sorted,l=s.length,i,m,url;for(i=0;i<l;i=i+1){m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});for(var j=0;j<this._xhr.length;j=j+1){this._xhr[j].abort();}return ;}if(m.type!=="js"){this._loadCount++;continue;}url=m.fullpath||this._url(m.path);var xhrData={success:function(o){var idx=o.argument[0],name=o.argument[2];this._scriptText[idx]=o.responseText;if(this.onProgress){this.onProgress.call(this.scope,{name:name,scriptText:o.responseText,xhrResponse:o,data:this.data});}this._loadCount++;if(this._loadCount>=this._stopCount){var v=this.varName||"YAHOO";var t="(function() {\n";var b="\nreturn "+v+";\n})();";var ref=eval(t+this._scriptText.join("\n")+b);this._pushEvents(ref);if(ref){this.onSuccess.call(this.scope,{reference:ref,data:this.data});}else{this.onFailure.call(this.scope,{msg:this.varName+" reference failure",data:this.data});}}},failure:function(o){this.onFailure.call(this.scope,{msg:"XHR failure",xhrResponse:o,data:this.data});},scope:this,argument:[i,url,s[i]]};this._xhr.push(util.Connect.asyncRequest("GET",url,xhrData));}},loadNext:function(mname){if(!this._loading){return ;}if(mname){if(mname!==this._loading){return ;}this.inserted[mname]=true;if(this.onProgress){this.onProgress.call(this.scope,{name:mname,data:this.data});}}var s=this.sorted,len=s.length,i,m;for(i=0;i<len;i=i+1){if(s[i] in this.inserted){continue;}if(s[i]===this._loading){return ;}m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});return ;}if(!this.loadType||this.loadType===m.type){this._loading=s[i];var fn=(m.type==="css")?util.Get.css:util.Get.script,url=m.fullpath||this._url(m.path),self=this,c=function(o){self.loadNext(o.data);};if(env.ua.webkit&&env.ua.webkit<420&&m.type==="js"&&!m.varName){c=null;this._useYahooListener=true;}fn(url,{data:s[i],onSuccess:c,insertBefore:this.insertBefore,charset:this.charset,varName:m.varName,scope:self});return ;}}this._loading=null;if(this._internalCallback){var f=this._internalCallback;this._internalCallback=null;f.call(this);}else{if(this.onSuccess){this._pushEvents();this.onSuccess.call(this.scope,{data:this.data});}}},_pushEvents:function(ref){var r=ref||YAHOO;if(r.util&&r.util.Event){r.util.Event._load();}},_url:function(path){var u=this.base||"",f=this.filter;u=u+path;if(f){u=u.replace(new RegExp(f.searchExp),f.replaceStr);}return u;}};})();(function(){var B=YAHOO.util,K,I,J={},F={},M=window.document;YAHOO.env._id_counter=YAHOO.env._id_counter||0;var C=YAHOO.env.ua.opera,L=YAHOO.env.ua.webkit,A=YAHOO.env.ua.gecko,G=YAHOO.env.ua.ie;var E={HYPHEN:/(-[a-z])/i,ROOT_TAG:/^body|html$/i,OP_SCROLL:/^(?:inline|table-row)$/i};var N=function(P){if(!E.HYPHEN.test(P)){return P;}if(J[P]){return J[P];}var Q=P;while(E.HYPHEN.exec(Q)){Q=Q.replace(RegExp.$1,RegExp.$1.substr(1).toUpperCase());}J[P]=Q;return Q;};var O=function(Q){var P=F[Q];if(!P){P=new RegExp("(?:^|\\s+)"+Q+"(?:\\s+|$)");F[Q]=P;}return P;};if(M.defaultView&&M.defaultView.getComputedStyle){K=function(P,S){var R=null;if(S=="float"){S="cssFloat";}var Q=P.ownerDocument.defaultView.getComputedStyle(P,"");if(Q){R=Q[N(S)];}return P.style[S]||R;};}else{if(M.documentElement.currentStyle&&G){K=function(P,R){switch(N(R)){case"opacity":var T=100;try{T=P.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(S){try{T=P.filters("alpha").opacity;}catch(S){}}return T/100;case"float":R="styleFloat";default:var Q=P.currentStyle?P.currentStyle[R]:null;return(P.style[R]||Q);}};}else{K=function(P,Q){return P.style[Q];};}}if(G){I=function(P,Q,R){switch(Q){case"opacity":if(YAHOO.lang.isString(P.style.filter)){P.style.filter="alpha(opacity="+R*100+")";if(!P.currentStyle||!P.currentStyle.hasLayout){P.style.zoom=1;}}break;case"float":Q="styleFloat";default:P.style[Q]=R;}};}else{I=function(P,Q,R){if(Q=="float"){Q="cssFloat";}P.style[Q]=R;};}var D=function(P,Q){return P&&P.nodeType==1&&(!Q||Q(P));};YAHOO.util.Dom={get:function(R){if(R&&(R.nodeType||R.item)){return R;}if(YAHOO.lang.isString(R)||!R){return M.getElementById(R);}if(R.length!==undefined){var S=[];for(var Q=0,P=R.length;Q<P;++Q){S[S.length]=B.Dom.get(R[Q]);}return S;}return R;},getStyle:function(P,R){R=N(R);var Q=function(S){return K(S,R);};return B.Dom.batch(P,Q,B.Dom,true);},setStyle:function(P,R,S){R=N(R);var Q=function(T){I(T,R,S);};B.Dom.batch(P,Q,B.Dom,true);},getXY:function(P){var Q=function(R){if((R.parentNode===null||R.offsetParent===null||this.getStyle(R,"display")=="none")&&R!=R.ownerDocument.body){return false;}return H(R);};return B.Dom.batch(P,Q,B.Dom,true);},getX:function(P){var Q=function(R){return B.Dom.getXY(R)[0];};return B.Dom.batch(P,Q,B.Dom,true);},getY:function(P){var Q=function(R){return B.Dom.getXY(R)[1];};return B.Dom.batch(P,Q,B.Dom,true);},setXY:function(P,S,R){var Q=function(V){var U=this.getStyle(V,"position");if(U=="static"){this.setStyle(V,"position","relative");U="relative";}var X=this.getXY(V);if(X===false){return false;}var W=[parseInt(this.getStyle(V,"left"),10),parseInt(this.getStyle(V,"top"),10)];if(isNaN(W[0])){W[0]=(U=="relative")?0:V.offsetLeft;}if(isNaN(W[1])){W[1]=(U=="relative")?0:V.offsetTop;}if(S[0]!==null){V.style.left=S[0]-X[0]+W[0]+"px";}if(S[1]!==null){V.style.top=S[1]-X[1]+W[1]+"px";}if(!R){var T=this.getXY(V);if((S[0]!==null&&T[0]!=S[0])||(S[1]!==null&&T[1]!=S[1])){this.setXY(V,S,true);}}};B.Dom.batch(P,Q,B.Dom,true);},setX:function(Q,P){B.Dom.setXY(Q,[P,null]);},setY:function(P,Q){B.Dom.setXY(P,[null,Q]);},getRegion:function(P){var Q=function(R){if((R.parentNode===null||R.offsetParent===null||this.getStyle(R,"display")=="none")&&R!=R.ownerDocument.body){return false;}var S=B.Region.getRegion(R);return S;};return B.Dom.batch(P,Q,B.Dom,true);},getClientWidth:function(){return B.Dom.getViewportWidth();},getClientHeight:function(){return B.Dom.getViewportHeight();},getElementsByClassName:function(T,X,U,V){X=X||"*";U=(U)?B.Dom.get(U):null||M;if(!U){return[];}var Q=[],P=U.getElementsByTagName(X),W=O(T);for(var R=0,S=P.length;R<S;++R){if(W.test(P[R].className)){Q[Q.length]=P[R];if(V){V.call(P[R],P[R]);}}}return Q;},hasClass:function(R,Q){var P=O(Q);var S=function(T){return P.test(T.className);};return B.Dom.batch(R,S,B.Dom,true);},addClass:function(Q,P){var R=function(S){if(this.hasClass(S,P)){return false;}S.className=YAHOO.lang.trim([S.className,P].join(" "));return true;};return B.Dom.batch(Q,R,B.Dom,true);},removeClass:function(R,Q){var P=O(Q);var S=function(T){if(!Q||!this.hasClass(T,Q)){return false;}var U=T.className;T.className=U.replace(P," ");if(this.hasClass(T,Q)){this.removeClass(T,Q);}T.className=YAHOO.lang.trim(T.className);return true;};return B.Dom.batch(R,S,B.Dom,true);},replaceClass:function(S,Q,P){if(!P||Q===P){return false;}var R=O(Q);var T=function(U){if(!this.hasClass(U,Q)){this.addClass(U,P);return true;}U.className=U.className.replace(R," "+P+" ");if(this.hasClass(U,Q)){this.replaceClass(U,Q,P);}U.className=YAHOO.lang.trim(U.className);return true;};return B.Dom.batch(S,T,B.Dom,true);},generateId:function(P,R){R=R||"yui-gen";var Q=function(S){if(S&&S.id){return S.id;}var T=R+YAHOO.env._id_counter++;if(S){S.id=T;}return T;};return B.Dom.batch(P,Q,B.Dom,true)||Q.apply(B.Dom,arguments);},isAncestor:function(P,Q){P=B.Dom.get(P);Q=B.Dom.get(Q);if(!P||!Q){return false;}if(P.contains&&Q.nodeType&&!L){return P.contains(Q);}else{if(P.compareDocumentPosition&&Q.nodeType){return !!(P.compareDocumentPosition(Q)&16);}else{if(Q.nodeType){return !!this.getAncestorBy(Q,function(R){return R==P;});}}}return false;},inDocument:function(P){return this.isAncestor(M.documentElement,P);},getElementsBy:function(W,Q,R,T){Q=Q||"*";R=(R)?B.Dom.get(R):null||M;if(!R){return[];}var S=[],V=R.getElementsByTagName(Q);for(var U=0,P=V.length;U<P;++U){if(W(V[U])){S[S.length]=V[U];if(T){T(V[U]);}}}return S;},batch:function(T,W,V,R){T=(T&&(T.tagName||T.item))?T:B.Dom.get(T);if(!T||!W){return false;}var S=(R)?V:window;if(T.tagName||T.length===undefined){return W.call(S,T,V);}var U=[];for(var Q=0,P=T.length;Q<P;++Q){U[U.length]=W.call(S,T[Q],V);}return U;},getDocumentHeight:function(){var Q=(M.compatMode!="CSS1Compat")?M.body.scrollHeight:M.documentElement.scrollHeight;var P=Math.max(Q,B.Dom.getViewportHeight());return P;},getDocumentWidth:function(){var Q=(M.compatMode!="CSS1Compat")?M.body.scrollWidth:M.documentElement.scrollWidth;var P=Math.max(Q,B.Dom.getViewportWidth());return P;},getViewportHeight:function(){var P=self.innerHeight;\r
+var Q=M.compatMode;if((Q||G)&&!C){P=(Q=="CSS1Compat")?M.documentElement.clientHeight:M.body.clientHeight;}return P;},getViewportWidth:function(){var P=self.innerWidth;var Q=M.compatMode;if(Q||G){P=(Q=="CSS1Compat")?M.documentElement.clientWidth:M.body.clientWidth;}return P;},getAncestorBy:function(P,Q){while(P=P.parentNode){if(D(P,Q)){return P;}}return null;},getAncestorByClassName:function(Q,P){Q=B.Dom.get(Q);if(!Q){return null;}var R=function(S){return B.Dom.hasClass(S,P);};return B.Dom.getAncestorBy(Q,R);},getAncestorByTagName:function(Q,P){Q=B.Dom.get(Q);if(!Q){return null;}var R=function(S){return S.tagName&&S.tagName.toUpperCase()==P.toUpperCase();};return B.Dom.getAncestorBy(Q,R);},getPreviousSiblingBy:function(P,Q){while(P){P=P.previousSibling;if(D(P,Q)){return P;}}return null;},getPreviousSibling:function(P){P=B.Dom.get(P);if(!P){return null;}return B.Dom.getPreviousSiblingBy(P);},getNextSiblingBy:function(P,Q){while(P){P=P.nextSibling;if(D(P,Q)){return P;}}return null;},getNextSibling:function(P){P=B.Dom.get(P);if(!P){return null;}return B.Dom.getNextSiblingBy(P);},getFirstChildBy:function(P,R){var Q=(D(P.firstChild,R))?P.firstChild:null;return Q||B.Dom.getNextSiblingBy(P.firstChild,R);},getFirstChild:function(P,Q){P=B.Dom.get(P);if(!P){return null;}return B.Dom.getFirstChildBy(P);},getLastChildBy:function(P,R){if(!P){return null;}var Q=(D(P.lastChild,R))?P.lastChild:null;return Q||B.Dom.getPreviousSiblingBy(P.lastChild,R);},getLastChild:function(P){P=B.Dom.get(P);return B.Dom.getLastChildBy(P);},getChildrenBy:function(Q,S){var R=B.Dom.getFirstChildBy(Q,S);var P=R?[R]:[];B.Dom.getNextSiblingBy(R,function(T){if(!S||S(T)){P[P.length]=T;}return false;});return P;},getChildren:function(P){P=B.Dom.get(P);if(!P){}return B.Dom.getChildrenBy(P);},getDocumentScrollLeft:function(P){P=P||M;return Math.max(P.documentElement.scrollLeft,P.body.scrollLeft);},getDocumentScrollTop:function(P){P=P||M;return Math.max(P.documentElement.scrollTop,P.body.scrollTop);},insertBefore:function(Q,P){Q=B.Dom.get(Q);P=B.Dom.get(P);if(!Q||!P||!P.parentNode){return null;}return P.parentNode.insertBefore(Q,P);},insertAfter:function(Q,P){Q=B.Dom.get(Q);P=B.Dom.get(P);if(!Q||!P||!P.parentNode){return null;}if(P.nextSibling){return P.parentNode.insertBefore(Q,P.nextSibling);}else{return P.parentNode.appendChild(Q);}},getClientRegion:function(){var R=B.Dom.getDocumentScrollTop(),Q=B.Dom.getDocumentScrollLeft(),S=B.Dom.getViewportWidth()+Q,P=B.Dom.getViewportHeight()+R;return new B.Region(R,S,P,Q);}};var H=function(){if(M.documentElement.getBoundingClientRect){return function(Q){var R=Q.getBoundingClientRect();var P=Q.ownerDocument;return[R.left+B.Dom.getDocumentScrollLeft(P),R.top+B.Dom.getDocumentScrollTop(P)];};}else{return function(R){var S=[R.offsetLeft,R.offsetTop];var Q=R.offsetParent;var P=(L&&B.Dom.getStyle(R,"position")=="absolute"&&R.offsetParent==R.ownerDocument.body);if(Q!=R){while(Q){S[0]+=Q.offsetLeft;S[1]+=Q.offsetTop;if(!P&&L&&B.Dom.getStyle(Q,"position")=="absolute"){P=true;}Q=Q.offsetParent;}}if(P){S[0]-=R.ownerDocument.body.offsetLeft;S[1]-=R.ownerDocument.body.offsetTop;}Q=R.parentNode;while(Q.tagName&&!E.ROOT_TAG.test(Q.tagName)){if(Q.scrollTop||Q.scrollLeft){if(!E.OP_SCROLL.test(B.Dom.getStyle(Q,"display"))){if(!C||B.Dom.getStyle(Q,"overflow")!=="visible"){S[0]-=Q.scrollLeft;S[1]-=Q.scrollTop;}}}Q=Q.parentNode;}return S;};}}();})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this[0]=B;};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);var D=Math.min(this.right,E.right);var A=Math.min(this.bottom,E.bottom);var 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);var D=Math.max(this.right,E.right);var A=Math.max(this.bottom,E.bottom);var 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+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D);var C=F[1];var E=F[0]+D.offsetWidth;var A=F[1]+D.offsetHeight;var 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];}this.x=this.right=this.left=this[0]=A;this.y=this.top=this.bottom=this[1]=B;};YAHOO.util.Point.prototype=new YAHOO.util.Region();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.5.2",build:"1076"});YAHOO.util.CustomEvent=function(D,B,C,A){this.type=D;this.scope=B||window;this.silent=C;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(B,C,A){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,A);}this.subscribers.push(new YAHOO.util.Subscriber(B,C,A));},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(){for(var A=this.subscribers.length-1;A>-1;A--){this._delete(A);}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+"', "+"scope: "+this.scope;}};YAHOO.util.Subscriber=function(B,C,A){this.fn=B;this.obj=YAHOO.lang.isUndefined(C)?null:C;this.override=A;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.override){if(this.override===true){return this.obj;}else{return this.override;}}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+", override: "+(this.override||"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};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 K=this;var L=function(){K._tryPreloadAttach();};this._interval=setInterval(L,this.POLL_INTERVAL);}},onAvailable:function(P,M,Q,O,N){var K=(YAHOO.lang.isString(P))?[P]:P;for(var L=0;L<K.length;L=L+1){F.push({id:K[L],fn:M,obj:Q,override:O,checkReady:N});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(M,K,N,L){this.onAvailable(M,K,N,L,true);},onDOMReady:function(K,M,L){if(this.DOMReady){setTimeout(function(){var N=window;if(L){if(L===true){N=M;}else{N=L;}}K.call(N,"DOMReady",[],M);},0);}else{this.DOMReadyEvent.subscribe(K,M,L);}},addListener:function(M,K,V,Q,L){if(!V||!V.call){return false;}if(this._isValidCollection(M)){var W=true;for(var R=0,T=M.length;R<T;++R){W=this.on(M[R],K,V,Q,L)&&W;}return W;}else{if(YAHOO.lang.isString(M)){var P=this.getEl(M);if(P){M=P;}else{this.onAvailable(M,function(){YAHOO.util.Event.on(M,K,V,Q,L);});return true;}}}if(!M){return false;}if("unload"==K&&Q!==this){J[J.length]=[M,K,V,Q,L];return true;}var Y=M;if(L){if(L===true){Y=Q;}else{Y=L;}}var N=function(Z){return V.call(Y,YAHOO.util.Event.getEvent(Z,M),Q);};var X=[M,K,V,N,Y,Q,L];var S=I.length;I[S]=X;if(this.useLegacyEvent(M,K)){var O=this.getLegacyIndex(M,K);if(O==-1||M!=G[O][0]){O=G.length;B[M.id+K]=O;G[O]=[M,K,M["on"+K]];E[O]=[];M["on"+K]=function(Z){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(Z),O);};}E[O].push(X);}else{try{this._simpleAdd(M,K,N,false);}catch(U){this.lastError=U;this.removeListener(M,K,V);return false;}}return true;},fireLegacyEvent:function(O,M){var Q=true,K,S,R,T,P;S=E[M].slice();for(var L=0,N=S.length;L<N;++L){R=S[L];if(R&&R[this.WFN]){T=R[this.ADJ_SCOPE];P=R[this.WFN].call(T,O);Q=(Q&&P);}}K=G[M];if(K&&K[2]){K[2](O);}return Q;},getLegacyIndex:function(L,M){var K=this.generateId(L)+M;if(typeof B[K]=="undefined"){return -1;}else{return B[K];}},useLegacyEvent:function(L,M){if(this.webkit&&("click"==M||"dblclick"==M)){var K=parseInt(this.webkit,10);if(!isNaN(K)&&K<418){return true;}}return false;},removeListener:function(L,K,T){var O,R,V;if(typeof L=="string"){L=this.getEl(L);}else{if(this._isValidCollection(L)){var U=true;for(O=L.length-1;O>-1;O--){U=(this.removeListener(L[O],K,T)&&U);}return U;}}if(!T||!T.call){return this.purgeElement(L,false,K);}if("unload"==K){for(O=J.length-1;O>-1;O--){V=J[O];if(V&&V[0]==L&&V[1]==K&&V[2]==T){J.splice(O,1);return true;}}return false;}var P=null;var Q=arguments[3];if("undefined"===typeof Q){Q=this._getCacheIndex(L,K,T);}if(Q>=0){P=I[Q];}if(!L||!P){return false;}if(this.useLegacyEvent(L,K)){var N=this.getLegacyIndex(L,K);var M=E[N];if(M){for(O=0,R=M.length;O<R;++O){V=M[O];if(V&&V[this.EL]==L&&V[this.TYPE]==K&&V[this.FN]==T){M.splice(O,1);break;}}}}else{try{this._simpleRemove(L,K,P[this.WFN],false);}catch(S){this.lastError=S;return false;}}delete I[Q][this.WFN];delete I[Q][this.FN];I.splice(Q,1);return true;},getTarget:function(M,L){var K=M.target||M.srcElement;return this.resolveTextNode(K);},resolveTextNode:function(L){try{if(L&&3==L.nodeType){return L.parentNode;}}catch(K){}return L;},getPageX:function(L){var K=L.pageX;if(!K&&0!==K){K=L.clientX||0;if(this.isIE){K+=this._getScrollLeft();}}return K;},getPageY:function(K){var L=K.pageY;if(!L&&0!==L){L=K.clientY||0;if(this.isIE){L+=this._getScrollTop();}}return L;\r
+},getXY:function(K){return[this.getPageX(K),this.getPageY(K)];},getRelatedTarget:function(L){var K=L.relatedTarget;if(!K){if(L.type=="mouseout"){K=L.toElement;}else{if(L.type=="mouseover"){K=L.fromElement;}}}return this.resolveTextNode(K);},getTime:function(M){if(!M.time){var L=new Date().getTime();try{M.time=L;}catch(K){this.lastError=K;return L;}}return M.time;},stopEvent:function(K){this.stopPropagation(K);this.preventDefault(K);},stopPropagation:function(K){if(K.stopPropagation){K.stopPropagation();}else{K.cancelBubble=true;}},preventDefault:function(K){if(K.preventDefault){K.preventDefault();}else{K.returnValue=false;}},getEvent:function(M,K){var L=M||window.event;if(!L){var N=this.getEvent.caller;while(N){L=N.arguments[0];if(L&&Event==L.constructor){break;}N=N.caller;}}return L;},getCharCode:function(L){var K=L.keyCode||L.charCode||0;if(YAHOO.env.ua.webkit&&(K in D)){K=D[K];}return K;},_getCacheIndex:function(O,P,N){for(var M=0,L=I.length;M<L;M=M+1){var K=I[M];if(K&&K[this.FN]==N&&K[this.EL]==O&&K[this.TYPE]==P){return M;}}return -1;},generateId:function(K){var L=K.id;if(!L){L="yuievtautoid-"+A;++A;K.id=L;}return L;},_isValidCollection:function(L){try{return(L&&typeof L!=="string"&&L.length&&!L.tagName&&!L.alert&&typeof L[0]!=="undefined");}catch(K){return false;}},elCache:{},getEl:function(K){return(typeof K==="string")?document.getElementById(K):K;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(L){if(!H){H=true;var K=YAHOO.util.Event;K._ready();K._tryPreloadAttach();}},_ready:function(L){var K=YAHOO.util.Event;if(!K.DOMReady){K.DOMReady=true;K.DOMReadyEvent.fire();K._simpleRemove(document,"DOMContentLoaded",K._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;clearInterval(this._interval);this._interval=null;return ;}if(this.locked){return ;}if(this.isIE){if(!this.DOMReady){this.startInterval();return ;}}this.locked=true;var Q=!H;if(!Q){Q=(C>0&&F.length>0);}var P=[];var R=function(T,U){var S=T;if(U.override){if(U.override===true){S=U.obj;}else{S=U.override;}}U.fn.call(S,U.obj);};var L,K,O,N,M=[];for(L=0,K=F.length;L<K;L=L+1){O=F[L];if(O){N=this.getEl(O.id);if(N){if(O.checkReady){if(H||N.nextSibling||!Q){M.push(O);F[L]=null;}}else{R(N,O);F[L]=null;}}else{P.push(O);}}}for(L=0,K=M.length;L<K;L=L+1){O=M[L];R(this.getEl(O.id),O);}C--;if(Q){for(L=F.length-1;L>-1;L--){O=F[L];if(!O||!O.id){F.splice(L,1);}}this.startInterval();}else{clearInterval(this._interval);this._interval=null;}this.locked=false;},purgeElement:function(O,P,R){var M=(YAHOO.lang.isString(O))?this.getEl(O):O;var Q=this.getListeners(M,R),N,K;if(Q){for(N=Q.length-1;N>-1;N--){var L=Q[N];this.removeListener(M,L.type,L.fn);}}if(P&&M&&M.childNodes){for(N=0,K=M.childNodes.length;N<K;++N){this.purgeElement(M.childNodes[N],P,R);}}},getListeners:function(M,K){var P=[],L;if(!K){L=[I,J];}else{if(K==="unload"){L=[J];}else{L=[I];}}var R=(YAHOO.lang.isString(M))?this.getEl(M):M;for(var O=0;O<L.length;O=O+1){var T=L[O];if(T){for(var Q=0,S=T.length;Q<S;++Q){var N=T[Q];if(N&&N[this.EL]===R&&(!K||K===N[this.TYPE])){P.push({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.OVERRIDE],scope:N[this.ADJ_SCOPE],index:Q});}}}}return(P.length)?P:null;},_unload:function(Q){var K=YAHOO.util.Event,N,M,L,P,O,R=J.slice();for(N=0,P=J.length;N<P;++N){L=R[N];if(L){var S=window;if(L[K.ADJ_SCOPE]){if(L[K.ADJ_SCOPE]===true){S=L[K.UNLOAD_OBJ];}else{S=L[K.ADJ_SCOPE];}}L[K.FN].call(S,K.getEvent(Q,L[K.EL]),L[K.UNLOAD_OBJ]);R[N]=null;L=null;S=null;}}J=null;if(I){for(M=I.length-1;M>-1;M--){L=I[M];if(L){K.removeListener(L[K.EL],L[K.TYPE],L[K.FN],M);}}L=null;}G=null;K._simpleRemove(window,"unload",K._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var K=document.documentElement,L=document.body;if(K&&(K.scrollTop||K.scrollLeft)){return[K.scrollTop,K.scrollLeft];}else{if(L){return[L.scrollTop,L.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(M,N,L,K){M.addEventListener(N,L,(K));};}else{if(window.attachEvent){return function(M,N,L,K){M.attachEvent("on"+N,L);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(M,N,L,K){M.removeEventListener(N,L,(K));};}else{if(window.detachEvent){return function(L,M,K){L.detachEvent("on"+M,K);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;\r
+/* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */\r
+if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,override:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;\r
+if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].override);}}}return I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};YAHOO.util.KeyListener=function(A,F,B,C){if(!A){}else{if(!F){}else{if(!B){}}}if(!C){C=YAHOO.util.KeyListener.KEYDOWN;}var D=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(typeof A=="string"){A=document.getElementById(A);}if(typeof B=="function"){D.subscribe(B);}else{D.subscribe(B.fn,B.scope,B.correctScope);}function E(J,I){if(!F.shift){F.shift=false;}if(!F.alt){F.alt=false;}if(!F.ctrl){F.ctrl=false;}if(J.shiftKey==F.shift&&J.altKey==F.alt&&J.ctrlKey==F.ctrl){var G;if(F.keys instanceof Array){for(var H=0;H<F.keys.length;H++){G=F.keys[H];if(G==J.charCode){D.fire(J.charCode,J);break;}else{if(G==J.keyCode){D.fire(J.keyCode,J);break;}}}}else{G=F.keys;if(G==J.charCode){D.fire(J.charCode,J);}else{if(G==J.keyCode){D.fire(J.keyCode,J);}}}}}this.enable=function(){if(!this.enabled){YAHOO.util.Event.addListener(A,C,E);this.enabledEvent.fire(F);}this.enabled=true;};this.disable=function(){if(this.enabled){YAHOO.util.Event.removeListener(A,C,E);this.disabledEvent.fire(F);}this.enabled=false;};this.toString=function(){return"KeyListener ["+F.keys+"] "+A.tagName+(A.id?"["+A.id+"]":"");};};YAHOO.util.KeyListener.KEYDOWN="keydown";YAHOO.util.KeyListener.KEYUP="keyup";YAHOO.util.KeyListener.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};YAHOO.register("event",YAHOO.util.Event,{version:"2.5.2",build:"1076"});YAHOO.register("yuiloader-dom-event", YAHOO, {version: "2.5.2", build: "1076"});\r
+\r
+// logger/logger-min.js\r
+YAHOO.widget.LogMsg=function(A){this.msg=this.time=this.category=this.source=this.sourceDetail=null;if(A&&(A.constructor==Object)){for(var B in A){this[B]=A[B];}}};YAHOO.widget.LogWriter=function(A){if(!A){YAHOO.log("Could not instantiate LogWriter due to invalid source.","error","LogWriter");return ;}this._source=A;};YAHOO.widget.LogWriter.prototype.toString=function(){return"LogWriter "+this._sSource;};YAHOO.widget.LogWriter.prototype.log=function(A,B){YAHOO.widget.Logger.log(A,B,this._source);};YAHOO.widget.LogWriter.prototype.getSource=function(){return this._sSource;};YAHOO.widget.LogWriter.prototype.setSource=function(A){if(!A){YAHOO.log("Could not set source due to invalid source.","error",this.toString());return ;}else{this._sSource=A;}};YAHOO.widget.LogWriter.prototype._source=null;YAHOO.widget.LogReader=function(B,A){this._sName=YAHOO.widget.LogReader._index;YAHOO.widget.LogReader._index++;this._buffer=[];this._filterCheckboxes={};this._lastTime=YAHOO.widget.Logger.getStartTime();if(A&&(A.constructor==Object)){for(var C in A){this[C]=A[C];}}this._initContainerEl(B);if(!this._elContainer){YAHOO.log("Could not instantiate LogReader due to an invalid container element "+B,"error",this.toString());return ;}this._initHeaderEl();this._initConsoleEl();this._initFooterEl();this._initDragDrop();this._initCategories();this._initSources();YAHOO.widget.Logger.newLogEvent.subscribe(this._onNewLog,this);YAHOO.widget.Logger.logResetEvent.subscribe(this._onReset,this);YAHOO.widget.Logger.categoryCreateEvent.subscribe(this._onCategoryCreate,this);YAHOO.widget.Logger.sourceCreateEvent.subscribe(this._onSourceCreate,this);this._filterLogs();YAHOO.log("LogReader initialized",null,this.toString());};YAHOO.lang.augmentObject(YAHOO.widget.LogReader,{_index:0,ENTRY_TEMPLATE:(function(){var A=document.createElement("pre");YAHOO.util.Dom.addClass(A,"yui-log-entry");return A;})(),VERBOSE_TEMPLATE:"<span class='{category}'>{label}</span>{totalTime}ms (+{elapsedTime}) {localTime}:</p><p>{sourceAndDetail}</p><p>{message}</p>",BASIC_TEMPLATE:"<p><span class='{category}'>{label}</span>{totalTime}ms (+{elapsedTime}) {localTime}: {sourceAndDetail}: {message}</p>"});YAHOO.widget.LogReader.prototype={logReaderEnabled:true,width:null,height:null,top:null,left:null,right:null,bottom:null,fontSize:null,footerEnabled:true,verboseOutput:true,entryFormat:null,newestOnTop:true,outputBuffer:100,thresholdMax:500,thresholdMin:100,isCollapsed:false,isPaused:false,draggable:true,toString:function(){return"LogReader instance"+this._sName;},pause:function(){this.isPaused=true;this._btnPause.value="Resume";this._timeout=null;this.logReaderEnabled=false;},resume:function(){this.isPaused=false;this._btnPause.value="Pause";this.logReaderEnabled=true;this._printBuffer();},hide:function(){this._elContainer.style.display="none";},show:function(){this._elContainer.style.display="block";},collapse:function(){this._elConsole.style.display="none";if(this._elFt){this._elFt.style.display="none";}this._btnCollapse.value="Expand";this.isCollapsed=true;},expand:function(){this._elConsole.style.display="block";if(this._elFt){this._elFt.style.display="block";}this._btnCollapse.value="Collapse";this.isCollapsed=false;},getCheckbox:function(A){return this._filterCheckboxes[A];},getCategories:function(){return this._categoryFilters;},showCategory:function(B){var D=this._categoryFilters;if(D.indexOf){if(D.indexOf(B)>-1){return ;}}else{for(var A=0;A<D.length;A++){if(D[A]===B){return ;}}}this._categoryFilters.push(B);this._filterLogs();var C=this.getCheckbox(B);if(C){C.checked=true;}},hideCategory:function(B){var D=this._categoryFilters;for(var A=0;A<D.length;A++){if(B==D[A]){D.splice(A,1);break;}}this._filterLogs();var C=this.getCheckbox(B);if(C){C.checked=false;}},getSources:function(){return this._sourceFilters;},showSource:function(A){var D=this._sourceFilters;if(D.indexOf){if(D.indexOf(A)>-1){return ;}}else{for(var B=0;B<D.length;B++){if(A==D[B]){return ;}}}D.push(A);this._filterLogs();var C=this.getCheckbox(A);if(C){C.checked=true;}},hideSource:function(A){var D=this._sourceFilters;for(var B=0;B<D.length;B++){if(A==D[B]){D.splice(B,1);break;}}this._filterLogs();var C=this.getCheckbox(A);if(C){C.checked=false;}},clearConsole:function(){this._timeout=null;this._buffer=[];this._consoleMsgCount=0;var A=this._elConsole;A.innerHTML="";},setTitle:function(A){this._title.innerHTML=this.html2Text(A);},getLastTime:function(){return this._lastTime;},formatMsg:function(C){var B=YAHOO.widget.LogReader,A=this.entryFormat||(this.verboseOutput?B.VERBOSE_TEMPLATE:B.BASIC_TEMPLATE),D={category:C.category,label:C.category.substring(0,4).toUpperCase(),sourceAndDetail:C.sourceDetail?C.source+" "+C.sourceDetail:C.source,message:this.html2Text(C.msg||C.message||"")};if(C.time&&C.time.getTime){D.localTime=C.time.toLocaleTimeString?C.time.toLocaleTimeString():C.time.toString();D.elapsedTime=C.time.getTime()-this.getLastTime();D.totalTime=C.time.getTime()-YAHOO.widget.Logger.getStartTime();}var E=B.ENTRY_TEMPLATE.cloneNode(true);if(this.verboseOutput){E.className+=" yui-log-verbose";}E.innerHTML=YAHOO.lang.substitute(A,D);return E;},html2Text:function(A){if(A){A+="";return A.replace(/&/g,"&#38;").replace(/</g,"&#60;").replace(/>/g,"&#62;");}return"";},_sName:null,_buffer:null,_consoleMsgCount:0,_lastTime:null,_timeout:null,_filterCheckboxes:null,_categoryFilters:null,_sourceFilters:null,_elContainer:null,_elHd:null,_elCollapse:null,_btnCollapse:null,_title:null,_elConsole:null,_elFt:null,_elBtns:null,_elCategoryFilters:null,_elSourceFilters:null,_btnPause:null,_btnClear:null,_initContainerEl:function(B){B=YAHOO.util.Dom.get(B);if(B&&B.tagName&&(B.tagName.toLowerCase()=="div")){this._elContainer=B;YAHOO.util.Dom.addClass(this._elContainer,"yui-log");}else{this._elContainer=document.body.appendChild(document.createElement("div"));YAHOO.util.Dom.addClass(this._elContainer,"yui-log");YAHOO.util.Dom.addClass(this._elContainer,"yui-log-container");var A=this._elContainer.style;\r
+if(this.width){A.width=this.width;}if(this.right){A.right=this.right;}if(this.top){A.top=this.top;}if(this.left){A.left=this.left;A.right="auto";}if(this.bottom){A.bottom=this.bottom;A.top="auto";}if(this.fontSize){A.fontSize=this.fontSize;}if(navigator.userAgent.toLowerCase().indexOf("opera")!=-1){document.body.style+="";}}},_initHeaderEl:function(){var A=this;if(this._elHd){YAHOO.util.Event.purgeElement(this._elHd,true);this._elHd.innerHTML="";}this._elHd=this._elContainer.appendChild(document.createElement("div"));this._elHd.id="yui-log-hd"+this._sName;this._elHd.className="yui-log-hd";this._elCollapse=this._elHd.appendChild(document.createElement("div"));this._elCollapse.className="yui-log-btns";this._btnCollapse=document.createElement("input");this._btnCollapse.type="button";this._btnCollapse.className="yui-log-button";this._btnCollapse.value="Collapse";this._btnCollapse=this._elCollapse.appendChild(this._btnCollapse);YAHOO.util.Event.addListener(A._btnCollapse,"click",A._onClickCollapseBtn,A);this._title=this._elHd.appendChild(document.createElement("h4"));this._title.innerHTML="Logger Console";},_initConsoleEl:function(){if(this._elConsole){YAHOO.util.Event.purgeElement(this._elConsole,true);this._elConsole.innerHTML="";}this._elConsole=this._elContainer.appendChild(document.createElement("div"));this._elConsole.className="yui-log-bd";if(this.height){this._elConsole.style.height=this.height;}},_initFooterEl:function(){var A=this;if(this.footerEnabled){if(this._elFt){YAHOO.util.Event.purgeElement(this._elFt,true);this._elFt.innerHTML="";}this._elFt=this._elContainer.appendChild(document.createElement("div"));this._elFt.className="yui-log-ft";this._elBtns=this._elFt.appendChild(document.createElement("div"));this._elBtns.className="yui-log-btns";this._btnPause=document.createElement("input");this._btnPause.type="button";this._btnPause.className="yui-log-button";this._btnPause.value="Pause";this._btnPause=this._elBtns.appendChild(this._btnPause);YAHOO.util.Event.addListener(A._btnPause,"click",A._onClickPauseBtn,A);this._btnClear=document.createElement("input");this._btnClear.type="button";this._btnClear.className="yui-log-button";this._btnClear.value="Clear";this._btnClear=this._elBtns.appendChild(this._btnClear);YAHOO.util.Event.addListener(A._btnClear,"click",A._onClickClearBtn,A);this._elCategoryFilters=this._elFt.appendChild(document.createElement("div"));this._elCategoryFilters.className="yui-log-categoryfilters";this._elSourceFilters=this._elFt.appendChild(document.createElement("div"));this._elSourceFilters.className="yui-log-sourcefilters";}},_initDragDrop:function(){if(YAHOO.util.DD&&this.draggable&&this._elHd){var A=new YAHOO.util.DD(this._elContainer);A.setHandleElId(this._elHd.id);this._elHd.style.cursor="move";}},_initCategories:function(){this._categoryFilters=[];var C=YAHOO.widget.Logger.categories;for(var A=0;A<C.length;A++){var B=C[A];this._categoryFilters.push(B);if(this._elCategoryFilters){this._createCategoryCheckbox(B);}}},_initSources:function(){this._sourceFilters=[];var C=YAHOO.widget.Logger.sources;for(var B=0;B<C.length;B++){var A=C[B];this._sourceFilters.push(A);if(this._elSourceFilters){this._createSourceCheckbox(A);}}},_createCategoryCheckbox:function(B){var A=this;if(this._elFt){var E=this._elCategoryFilters;var D=E.appendChild(document.createElement("span"));D.className="yui-log-filtergrp";var C=document.createElement("input");C.id="yui-log-filter-"+B+this._sName;C.className="yui-log-filter-"+B;C.type="checkbox";C.category=B;C=D.appendChild(C);C.checked=true;YAHOO.util.Event.addListener(C,"click",A._onCheckCategory,A);var F=D.appendChild(document.createElement("label"));F.htmlFor=C.id;F.className=B;F.innerHTML=B;this._filterCheckboxes[B]=C;}},_createSourceCheckbox:function(A){var D=this;if(this._elFt){var F=this._elSourceFilters;var E=F.appendChild(document.createElement("span"));E.className="yui-log-filtergrp";var C=document.createElement("input");C.id="yui-log-filter"+A+this._sName;C.className="yui-log-filter"+A;C.type="checkbox";C.source=A;C=E.appendChild(C);C.checked=true;YAHOO.util.Event.addListener(C,"click",D._onCheckSource,D);var B=E.appendChild(document.createElement("label"));B.htmlFor=C.id;B.className=A;B.innerHTML=A;this._filterCheckboxes[A]=C;}},_filterLogs:function(){if(this._elConsole!==null){this.clearConsole();this._printToConsole(YAHOO.widget.Logger.getStack());}},_printBuffer:function(){this._timeout=null;if(this._elConsole!==null){var B=this.thresholdMax;B=(B&&!isNaN(B))?B:500;if(this._consoleMsgCount<B){var A=[];for(var C=0;C<this._buffer.length;C++){A[C]=this._buffer[C];}this._buffer=[];this._printToConsole(A);}else{this._filterLogs();}if(!this.newestOnTop){this._elConsole.scrollTop=this._elConsole.scrollHeight;}}},_printToConsole:function(I){var B=I.length,M=document.createDocumentFragment(),P=[],Q=this.thresholdMin,C=this._sourceFilters.length,N=this._categoryFilters.length,K,H,G,F,L;if(isNaN(Q)||(Q>this.thresholdMax)){Q=0;}K=(B>Q)?(B-Q):0;for(H=K;H<B;H++){var E=false;var J=false;var O=I[H];var A=O.source;var D=O.category;for(G=0;G<C;G++){if(A==this._sourceFilters[G]){J=true;break;}}if(J){for(G=0;G<N;G++){if(D==this._categoryFilters[G]){E=true;break;}}}if(E){F=this.formatMsg(O);if(typeof F==="string"){P[P.length]=F;}else{M.insertBefore(F,this.newestOnTop?M.firstChild||null:null);}this._consoleMsgCount++;this._lastTime=O.time.getTime();}}if(P.length){P.splice(0,0,this._elConsole.innerHTML);this._elConsole.innerHTML=this.newestOnTop?P.reverse().join(""):P.join("");}else{if(M.firstChild){this._elConsole.insertBefore(M,this.newestOnTop?this._elConsole.firstChild||null:null);}}},_onCategoryCreate:function(D,C,A){var B=C[0];A._categoryFilters.push(B);if(A._elFt){A._createCategoryCheckbox(B);}},_onSourceCreate:function(D,C,A){var B=C[0];A._sourceFilters.push(B);if(A._elFt){A._createSourceCheckbox(B);}},_onCheckCategory:function(A,B){var C=this.category;if(!this.checked){B.hideCategory(C);}else{B.showCategory(C);}},_onCheckSource:function(A,B){var C=this.source;\r
+if(!this.checked){B.hideSource(C);}else{B.showSource(C);}},_onClickCollapseBtn:function(A,B){if(!B.isCollapsed){B.collapse();}else{B.expand();}},_onClickPauseBtn:function(A,B){if(!B.isPaused){B.pause();}else{B.resume();}},_onClickClearBtn:function(A,B){B.clearConsole();},_onNewLog:function(D,C,A){var B=C[0];A._buffer.push(B);if(A.logReaderEnabled===true&&A._timeout===null){A._timeout=setTimeout(function(){A._printBuffer();},A.outputBuffer);}},_onReset:function(C,B,A){A._filterLogs();}};if(!YAHOO.widget.Logger){YAHOO.widget.Logger={loggerEnabled:true,_browserConsoleEnabled:false,categories:["info","warn","error","time","window"],sources:["global"],_stack:[],maxStackEntries:2500,_startTime:new Date().getTime(),_lastTime:null,_windowErrorsHandled:false,_origOnWindowError:null};YAHOO.widget.Logger.log=function(B,F,G){if(this.loggerEnabled){if(!F){F="info";}else{F=F.toLocaleLowerCase();if(this._isNewCategory(F)){this._createNewCategory(F);}}var C="global";var A=null;if(G){var D=G.indexOf(" ");if(D>0){C=G.substring(0,D);A=G.substring(D,G.length);}else{C=G;}if(this._isNewSource(C)){this._createNewSource(C);}}var H=new Date();var J=new YAHOO.widget.LogMsg({msg:B,time:H,category:F,source:C,sourceDetail:A});var I=this._stack;var E=this.maxStackEntries;if(E&&!isNaN(E)&&(I.length>=E)){I.shift();}I.push(J);this.newLogEvent.fire(J);if(this._browserConsoleEnabled){this._printToBrowserConsole(J);}return true;}else{return false;}};YAHOO.widget.Logger.reset=function(){this._stack=[];this._startTime=new Date().getTime();this.loggerEnabled=true;this.log("Logger reset");this.logResetEvent.fire();};YAHOO.widget.Logger.getStack=function(){return this._stack;};YAHOO.widget.Logger.getStartTime=function(){return this._startTime;};YAHOO.widget.Logger.disableBrowserConsole=function(){YAHOO.log("Logger output to the function console.log() has been disabled.");this._browserConsoleEnabled=false;};YAHOO.widget.Logger.enableBrowserConsole=function(){this._browserConsoleEnabled=true;YAHOO.log("Logger output to the function console.log() has been enabled.");};YAHOO.widget.Logger.handleWindowErrors=function(){if(!YAHOO.widget.Logger._windowErrorsHandled){if(window.error){YAHOO.widget.Logger._origOnWindowError=window.onerror;}window.onerror=YAHOO.widget.Logger._onWindowError;YAHOO.widget.Logger._windowErrorsHandled=true;YAHOO.log("Logger handling of window.onerror has been enabled.");}else{YAHOO.log("Logger handling of window.onerror had already been enabled.");}};YAHOO.widget.Logger.unhandleWindowErrors=function(){if(YAHOO.widget.Logger._windowErrorsHandled){if(YAHOO.widget.Logger._origOnWindowError){window.onerror=YAHOO.widget.Logger._origOnWindowError;YAHOO.widget.Logger._origOnWindowError=null;}else{window.onerror=null;}YAHOO.widget.Logger._windowErrorsHandled=false;YAHOO.log("Logger handling of window.onerror has been disabled.");}else{YAHOO.log("Logger handling of window.onerror had already been disabled.");}};YAHOO.widget.Logger.categoryCreateEvent=new YAHOO.util.CustomEvent("categoryCreate",this,true);YAHOO.widget.Logger.sourceCreateEvent=new YAHOO.util.CustomEvent("sourceCreate",this,true);YAHOO.widget.Logger.newLogEvent=new YAHOO.util.CustomEvent("newLog",this,true);YAHOO.widget.Logger.logResetEvent=new YAHOO.util.CustomEvent("logReset",this,true);YAHOO.widget.Logger._createNewCategory=function(A){this.categories.push(A);this.categoryCreateEvent.fire(A);};YAHOO.widget.Logger._isNewCategory=function(B){for(var A=0;A<this.categories.length;A++){if(B==this.categories[A]){return false;}}return true;};YAHOO.widget.Logger._createNewSource=function(A){this.sources.push(A);this.sourceCreateEvent.fire(A);};YAHOO.widget.Logger._isNewSource=function(A){if(A){for(var B=0;B<this.sources.length;B++){if(A==this.sources[B]){return false;}}return true;}};YAHOO.widget.Logger._printToBrowserConsole=function(C){if(window.console&&console.log){var E=C.category;var D=C.category.substring(0,4).toUpperCase();var G=C.time;var F;if(G.toLocaleTimeString){F=G.toLocaleTimeString();}else{F=G.toString();}var H=G.getTime();var B=(YAHOO.widget.Logger._lastTime)?(H-YAHOO.widget.Logger._lastTime):0;YAHOO.widget.Logger._lastTime=H;var A=F+" ("+B+"ms): "+C.source+": ";console.log(A,C.msg);}};YAHOO.widget.Logger._onWindowError=function(A,C,B){try{YAHOO.widget.Logger.log(A+" ("+C+", line "+B+")","window");if(YAHOO.widget.Logger._origOnWindowError){YAHOO.widget.Logger._origOnWindowError();}}catch(D){return false;}};YAHOO.widget.Logger.log("Logger initialized");}YAHOO.register("logger",YAHOO.widget.Logger,{version:"2.5.2",build:"1076"});\r
+\r
+//selector/selector-min.js\r
+(function(){var A=YAHOO.util;A.Selector={_foundCache:[],_regexCache:{},_re:{nth:/^(?:([-]?\d*)(n){1}|(odd|even)$)*([-+]?\d*)$/,attr:/(\[.*\])/g,urls:/^(?:href|src)/},document:window.document,attrAliases:{},shorthand:{"\\#(-?[_a-z]+[-\\w]*)":"[id=$1]","\\.(-?[_a-z]+[-\\w]*)":"[class~=$1]"},operators:{"=":function(B,C){return B===C;},"!=":function(B,C){return B!==C;},"~=":function(B,D){var C=" ";return(C+B+C).indexOf((C+D+C))>-1;},"|=":function(B,C){return B===C||B.slice(0,C.length+1)===C+"-";},"^=":function(B,C){return B.indexOf(C)===0;},"$=":function(B,C){return B.slice(-C.length)===C;},"*=":function(B,C){return B.indexOf(C)>-1;},"":function(B,C){return B;}},pseudos:{"root":function(B){return B===B.ownerDocument.documentElement;},"nth-child":function(B,C){return A.Selector._getNth(B,C);},"nth-last-child":function(B,C){return A.Selector._getNth(B,C,null,true);},"nth-of-type":function(B,C){return A.Selector._getNth(B,C,B.tagName);},"nth-last-of-type":function(B,C){return A.Selector._getNth(B,C,B.tagName,true);},"first-child":function(B){return A.Selector._getChildren(B.parentNode)[0]===B;},"last-child":function(C){var B=A.Selector._getChildren(C.parentNode);return B[B.length-1]===C;},"first-of-type":function(B,C){return A.Selector._getChildren(B.parentNode,B.tagName)[0];},"last-of-type":function(C,D){var B=A.Selector._getChildren(C.parentNode,C.tagName);return B[B.length-1];},"only-child":function(C){var B=A.Selector._getChildren(C.parentNode);return B.length===1&&B[0]===C;},"only-of-type":function(B){return A.Selector._getChildren(B.parentNode,B.tagName).length===1;},"empty":function(B){return B.childNodes.length===0;},"not":function(B,C){return !A.Selector.test(B,C);},"contains":function(B,D){var C=B.innerText||B.textContent||"";return C.indexOf(D)>-1;},"checked":function(B){return B.checked===true;}},test:function(F,D){F=A.Selector.document.getElementById(F)||F;if(!F){return false;}var C=D?D.split(","):[];if(C.length){for(var E=0,B=C.length;E<B;++E){if(A.Selector._test(F,C[E])){return true;}}return false;}return A.Selector._test(F,D);},_test:function(D,G,F,E){F=F||A.Selector._tokenize(G).pop()||{};if(!D.tagName||(F.tag!=="*"&&D.tagName!==F.tag)||(E&&D._found)){return false;}if(F.attributes.length){var B,H,C=A.Selector._re.urls;if(!D.attributes||!D.attributes.length){return false;}for(var I=0,K;K=F.attributes[I++];){H=(C.test(K[0]))?2:0;B=D.getAttribute(K[0],H);if(B===null||B===undefined){return false;}if(A.Selector.operators[K[1]]&&!A.Selector.operators[K[1]](B,K[2])){return false;}}}if(F.pseudos.length){for(var I=0,J=F.pseudos.length;I<J;++I){if(A.Selector.pseudos[F.pseudos[I][0]]&&!A.Selector.pseudos[F.pseudos[I][0]](D,F.pseudos[I][1])){return false;}}}return(F.previous&&F.previous.combinator!==",")?A.Selector._combinators[F.previous.combinator](D,F):true;},filter:function(E,D){E=E||[];var G,C=[],H=A.Selector._tokenize(D);if(!E.item){for(var F=0,B=E.length;F<B;++F){if(!E[F].tagName){G=A.Selector.document.getElementById(E[F]);if(G){E[F]=G;}else{}}}}C=A.Selector._filter(E,A.Selector._tokenize(D)[0]);return C;},_filter:function(E,G,H,D){var C=H?null:[],I=A.Selector._foundCache;for(var F=0,B=E.length;F<B;F++){if(!A.Selector._test(E[F],"",G,D)){continue;}if(H){return E[F];}if(D){if(E[F]._found){continue;}E[F]._found=true;I[I.length]=E[F];}C[C.length]=E[F];}return C;},query:function(C,D,E){var B=A.Selector._query(C,D,E);return B;},_query:function(H,M,N,F){var P=(N)?null:[],E;if(!H){return P;}var D=H.split(",");if(D.length>1){var O;for(var I=0,J=D.length;I<J;++I){O=arguments.callee(D[I],M,N,true);P=N?O:P.concat(O);}A.Selector._clearFoundCache();return P;}if(M&&!M.nodeName){M=A.Selector.document.getElementById(M);if(!M){return P;}}M=M||A.Selector.document;if(M.nodeName!=="#document"){A.Dom.generateId(M);H=M.tagName+"#"+M.id+" "+H;E=M;M=M.ownerDocument;}var L=A.Selector._tokenize(H);var K=L[A.Selector._getIdTokenIndex(L)],B=[],C,G=L.pop()||{};if(K){C=A.Selector._getId(K.attributes);}if(C){E=E||A.Selector.document.getElementById(C);if(E&&(M.nodeName==="#document"||A.Dom.isAncestor(M,E))){if(A.Selector._test(E,null,K)){if(K===G){B=[E];}else{if(K.combinator===" "||K.combinator===">"){M=E;}}}}else{return P;}}if(M&&!B.length){B=M.getElementsByTagName(G.tag);}if(B.length){P=A.Selector._filter(B,G,N,F);}return P;},_clearFoundCache:function(){var E=A.Selector._foundCache;for(var C=0,B=E.length;C<B;++C){try{delete E[C]._found;}catch(D){E[C].removeAttribute("_found");}}E=[];},_getRegExp:function(D,B){var C=A.Selector._regexCache;B=B||"";if(!C[D+B]){C[D+B]=new RegExp(D,B);}return C[D+B];},_getChildren:function(){if(document.documentElement.children){return function(C,B){return(B)?C.children.tags(B):C.children||[];};}else{return function(F,C){if(F._children){return F._children;}var E=[],G=F.childNodes;for(var D=0,B=G.length;D<B;++D){if(G[D].tagName){if(!C||G[D].tagName===C){E[E.length]=G[D];}}}F._children=E;return E;};}}(),_combinators:{" ":function(C,B){while((C=C.parentNode)){if(A.Selector._test(C,"",B.previous)){return true;}}return false;},">":function(C,B){return A.Selector._test(C.parentNode,null,B.previous);},"+":function(D,C){var B=D.previousSibling;while(B&&B.nodeType!==1){B=B.previousSibling;}if(B&&A.Selector._test(B,null,C.previous)){return true;}return false;},"~":function(D,C){var B=D.previousSibling;while(B){if(B.nodeType===1&&A.Selector._test(B,null,C.previous)){return true;}B=B.previousSibling;}return false;}},_getNth:function(C,L,N,G){A.Selector._re.nth.test(L);var K=parseInt(RegExp.$1,10),B=RegExp.$2,H=RegExp.$3,I=parseInt(RegExp.$4,10)||0,M=[],E;var J=A.Selector._getChildren(C.parentNode,N);if(H){K=2;E="+";B="n";I=(H==="odd")?1:0;}else{if(isNaN(K)){K=(B)?1:0;}}if(K===0){if(G){I=J.length-I+1;}if(J[I-1]===C){return true;}else{return false;}}else{if(K<0){G=!!G;K=Math.abs(K);}}if(!G){for(var D=I-1,F=J.length;D<F;D+=K){if(D>=0&&J[D]===C){return true;}}}else{for(var D=J.length-I,F=J.length;D>=0;D-=K){if(D<F&&J[D]===C){return true;}}}return false;},_getId:function(C){for(var D=0,B=C.length;D<B;\r
+++D){if(C[D][0]=="id"&&C[D][1]==="="){return C[D][2];}}},_getIdTokenIndex:function(D){for(var C=0,B=D.length;C<B;++C){if(A.Selector._getId(D[C].attributes)){return C;}}return -1;},_patterns:{tag:/^((?:-?[_a-z]+[\w-]*)|\*)/i,attributes:/^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^\]]*?)['"]?\]/i,pseudos:/^:([-\w]+)(?:\(['"]?(.+)['"]?\))*/i,combinator:/^\s*([>+~]|\s)\s*/},_tokenize:function(B){var D={},H=[],I,G=false,F=A.Selector._patterns,C;B=A.Selector._replaceShorthand(B);do{G=false;for(var E in F){if(YAHOO.lang.hasOwnProperty(F,E)){if(E!="tag"&&E!="combinator"){D[E]=D[E]||[];}if((C=F[E].exec(B))){G=true;if(E!="tag"&&E!="combinator"){if(E==="attributes"&&C[1]==="id"){D.id=C[3];}D[E].push(C.slice(1));}else{D[E]=C[1];}B=B.replace(C[0],"");if(E==="combinator"||!B.length){D.attributes=A.Selector._fixAttributes(D.attributes);D.pseudos=D.pseudos||[];D.tag=D.tag?D.tag.toUpperCase():"*";H.push(D);D={previous:D};}}}}}while(G);return H;},_fixAttributes:function(C){var D=A.Selector.attrAliases;C=C||[];for(var E=0,B=C.length;E<B;++E){if(D[C[E][0]]){C[E][0]=D[C[E][0]];}if(!C[E][1]){C[E][1]="";}}return C;},_replaceShorthand:function(C){var D=A.Selector.shorthand;var E=C.match(A.Selector._re.attr);if(E){C=C.replace(A.Selector._re.attr,"REPLACED_ATTRIBUTE");}for(var G in D){if(YAHOO.lang.hasOwnProperty(D,G)){C=C.replace(A.Selector._getRegExp(G,"gi"),D[G]);}}if(E){for(var F=0,B=E.length;F<B;++F){C=C.replace("REPLACED_ATTRIBUTE",E[F]);}}return C;}};if(YAHOO.env.ua.ie&&YAHOO.env.ua.ie<8){A.Selector.attrAliases["class"]="className";A.Selector.attrAliases["for"]="htmlFor";}})();YAHOO.register("selector",YAHOO.util.Selector,{version:"2.7.0",build:"1796"});\r
+\r
+// yuitest/yuitest-min.js\r
+YAHOO.namespace("tool");YAHOO.tool.TestCase=function(A){this._should={};for(var B in A){this[B]=A[B];}if(!YAHOO.lang.isString(this.name)){this.name=YAHOO.util.Dom.generateId(null,"testCase");}};YAHOO.tool.TestCase.prototype={resume:function(A){YAHOO.tool.TestRunner.resume(A);},wait:function(B,A){throw new YAHOO.tool.TestCase.Wait(B,A);},setUp:function(){},tearDown:function(){}};YAHOO.tool.TestCase.Wait=function(B,A){this.segment=(YAHOO.lang.isFunction(B)?B:null);this.delay=(YAHOO.lang.isNumber(A)?A:0);};YAHOO.namespace("tool");YAHOO.tool.TestSuite=function(A){this.name="";this.items=[];if(YAHOO.lang.isString(A)){this.name=A;}else{if(YAHOO.lang.isObject(A)){YAHOO.lang.augmentObject(this,A,true);}}if(this.name===""){this.name=YAHOO.util.Dom.generateId(null,"testSuite");}};YAHOO.tool.TestSuite.prototype={add:function(A){if(A instanceof YAHOO.tool.TestSuite||A instanceof YAHOO.tool.TestCase){this.items.push(A);}},setUp:function(){},tearDown:function(){}};YAHOO.namespace("tool");YAHOO.tool.TestRunner=(function(){function B(C){this.testObject=C;this.firstChild=null;this.lastChild=null;this.parent=null;this.next=null;this.results={passed:0,failed:0,total:0,ignored:0};if(C instanceof YAHOO.tool.TestSuite){this.results.type="testsuite";this.results.name=C.name;}else{if(C instanceof YAHOO.tool.TestCase){this.results.type="testcase";this.results.name=C.name;}}}B.prototype={appendChild:function(C){var D=new B(C);if(this.firstChild===null){this.firstChild=this.lastChild=D;}else{this.lastChild.next=D;this.lastChild=D;}D.parent=this;return D;}};function A(){A.superclass.constructor.apply(this,arguments);this.masterSuite=new YAHOO.tool.TestSuite("YUI Test Results");this._cur=null;this._root=null;var D=[this.TEST_CASE_BEGIN_EVENT,this.TEST_CASE_COMPLETE_EVENT,this.TEST_SUITE_BEGIN_EVENT,this.TEST_SUITE_COMPLETE_EVENT,this.TEST_PASS_EVENT,this.TEST_FAIL_EVENT,this.TEST_IGNORE_EVENT,this.COMPLETE_EVENT,this.BEGIN_EVENT];for(var C=0;C<D.length;C++){this.createEvent(D[C],{scope:this});}}YAHOO.lang.extend(A,YAHOO.util.EventProvider,{TEST_CASE_BEGIN_EVENT:"testcasebegin",TEST_CASE_COMPLETE_EVENT:"testcasecomplete",TEST_SUITE_BEGIN_EVENT:"testsuitebegin",TEST_SUITE_COMPLETE_EVENT:"testsuitecomplete",TEST_PASS_EVENT:"pass",TEST_FAIL_EVENT:"fail",TEST_IGNORE_EVENT:"ignore",COMPLETE_EVENT:"complete",BEGIN_EVENT:"begin",_addTestCaseToTestTree:function(C,D){var E=C.appendChild(D);for(var F in D){if(F.indexOf("test")===0&&YAHOO.lang.isFunction(D[F])){E.appendChild(F);}}},_addTestSuiteToTestTree:function(C,F){var E=C.appendChild(F);for(var D=0;D<F.items.length;D++){if(F.items[D] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(E,F.items[D]);}else{if(F.items[D] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(E,F.items[D]);}}}},_buildTestTree:function(){this._root=new B(this.masterSuite);this._cur=this._root;for(var C=0;C<this.masterSuite.items.length;C++){if(this.masterSuite.items[C] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(this._root,this.masterSuite.items[C]);}else{if(this.masterSuite.items[C] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(this._root,this.masterSuite.items[C]);}}}},_handleTestObjectComplete:function(C){if(YAHOO.lang.isObject(C.testObject)){C.parent.results.passed+=C.results.passed;C.parent.results.failed+=C.results.failed;C.parent.results.total+=C.results.total;C.parent.results.ignored+=C.results.ignored;C.parent.results[C.testObject.name]=C.results;if(C.testObject instanceof YAHOO.tool.TestSuite){C.testObject.tearDown();this.fireEvent(this.TEST_SUITE_COMPLETE_EVENT,{testSuite:C.testObject,results:C.results});}else{if(C.testObject instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_COMPLETE_EVENT,{testCase:C.testObject,results:C.results});}}}},_next:function(){if(this._cur.firstChild){this._cur=this._cur.firstChild;}else{if(this._cur.next){this._cur=this._cur.next;}else{while(this._cur&&!this._cur.next&&this._cur!==this._root){this._handleTestObjectComplete(this._cur);this._cur=this._cur.parent;}if(this._cur==this._root){this._cur.results.type="report";this._cur.results.timestamp=(new Date()).toLocaleString();this.fireEvent(this.COMPLETE_EVENT,{results:this._cur.results});this._cur=null;}else{this._handleTestObjectComplete(this._cur);this._cur=this._cur.next;}}}return this._cur;},_run:function(){var E=false;var D=this._next();if(D!==null){var C=D.testObject;if(YAHOO.lang.isObject(C)){if(C instanceof YAHOO.tool.TestSuite){this.fireEvent(this.TEST_SUITE_BEGIN_EVENT,{testSuite:C});C.setUp();}else{if(C instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_BEGIN_EVENT,{testCase:C});}}if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{this._runTest(D);}}},_resumeTest:function(G){var C=this._cur;var H=C.testObject;var E=C.parent.testObject;var K=(E._should.fail||{})[H];var D=(E._should.error||{})[H];var F=false;var I=null;try{G.apply(E);if(K){I=new YAHOO.util.ShouldFail();F=true;}else{if(D){I=new YAHOO.util.ShouldError();F=true;}}}catch(J){if(J instanceof YAHOO.util.AssertionError){if(!K){I=J;F=true;}}else{if(J instanceof YAHOO.tool.TestCase.Wait){if(YAHOO.lang.isFunction(J.segment)){if(YAHOO.lang.isNumber(J.delay)){if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._resumeTest(J.segment);},J.delay);}else{throw new Error("Asynchronous tests not supported in this environment.");}}}return ;}else{if(!D){I=new YAHOO.util.UnexpectedError(J);F=true;}else{if(YAHOO.lang.isString(D)){if(J.message!=D){I=new YAHOO.util.UnexpectedError(J);F=true;}}else{if(YAHOO.lang.isFunction(D)){if(!(J instanceof D)){I=new YAHOO.util.UnexpectedError(J);F=true;}}else{if(YAHOO.lang.isObject(D)){if(!(J instanceof D.constructor)||J.message!=D.message){I=new YAHOO.util.UnexpectedError(J);F=true;}}}}}}}}if(F){this.fireEvent(this.TEST_FAIL_EVENT,{testCase:E,testName:H,error:I});}else{this.fireEvent(this.TEST_PASS_EVENT,{testCase:E,testName:H});}E.tearDown();C.parent.results[H]={result:F?"fail":"pass",message:I?I.getMessage():"Test passed",type:"test",name:H};\r
+if(F){C.parent.results.failed++;}else{C.parent.results.passed++;}C.parent.results.total++;if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}},_runTest:function(F){var C=F.testObject;var D=F.parent.testObject;var G=D[C];var E=(D._should.ignore||{})[C];if(E){F.parent.results[C]={result:"ignore",message:"Test ignored",type:"test",name:C};F.parent.results.ignored++;F.parent.results.total++;this.fireEvent(this.TEST_IGNORE_EVENT,{testCase:D,testName:C});if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{D.setUp();this._resumeTest(G);}},fireEvent:function(C,D){D=D||{};D.type=C;A.superclass.fireEvent.call(this,C,D);},add:function(C){this.masterSuite.add(C);},clear:function(){this.masterSuite.items=[];},resume:function(C){this._resumeTest(C||function(){});},run:function(C){var D=YAHOO.tool.TestRunner;D._buildTestTree();D.fireEvent(D.BEGIN_EVENT);D._run();}});return new A();})();YAHOO.namespace("util");YAHOO.util.Assert={_formatMessage:function(B,A){var C=B;if(YAHOO.lang.isString(B)&&B.length>0){return YAHOO.lang.substitute(B,{message:A});}else{return A;}},fail:function(A){throw new YAHOO.util.AssertionError(this._formatMessage(A,"Test force-failed."));},areEqual:function(B,C,A){if(B!=C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be equal."),B,C);}},areNotEqual:function(A,C,B){if(A==C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be equal."),A);}},areNotSame:function(A,C,B){if(A===C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be the same."),A);}},areSame:function(B,C,A){if(B!==C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be the same."),B,C);}},isFalse:function(B,A){if(false!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be false."),false,B);}},isTrue:function(B,A){if(true!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be true."),true,B);}},isNaN:function(B,A){if(!isNaN(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be NaN."),NaN,B);}},isNotNaN:function(B,A){if(isNaN(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be NaN."),NaN);}},isNotNull:function(B,A){if(YAHOO.lang.isNull(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be null."),null);}},isNotUndefined:function(B,A){if(YAHOO.lang.isUndefined(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should not be undefined."),undefined);}},isNull:function(B,A){if(!YAHOO.lang.isNull(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be null."),null,B);}},isUndefined:function(B,A){if(!YAHOO.lang.isUndefined(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be undefined."),undefined,B);}},isArray:function(B,A){if(!YAHOO.lang.isArray(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an array."),B);}},isBoolean:function(B,A){if(!YAHOO.lang.isBoolean(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a Boolean."),B);}},isFunction:function(B,A){if(!YAHOO.lang.isFunction(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a function."),B);}},isInstanceOf:function(B,C,A){if(!(C instanceof B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value isn't an instance of expected type."),B,C);}},isNumber:function(B,A){if(!YAHOO.lang.isNumber(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a number."),B);}},isObject:function(B,A){if(!YAHOO.lang.isObject(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an object."),B);}},isString:function(B,A){if(!YAHOO.lang.isString(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a string."),B);}},isTypeOf:function(A,C,B){if(typeof C!=A){throw new YAHOO.util.ComparisonFailure(this._formatMessage(B,"Value should be of type "+expected+"."),expected,typeof actual);}}};YAHOO.util.AssertionError=function(A){arguments.callee.superclass.constructor.call(this,A);this.message=A;this.name="AssertionError";};YAHOO.lang.extend(YAHOO.util.AssertionError,Error,{getMessage:function(){return this.message;},toString:function(){return this.name+": "+this.getMessage();},valueOf:function(){return this.toString();}});YAHOO.util.ComparisonFailure=function(B,A,C){arguments.callee.superclass.constructor.call(this,B);this.expected=A;this.actual=C;this.name="ComparisonFailure";};YAHOO.lang.extend(YAHOO.util.ComparisonFailure,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nExpected: "+this.expected+" ("+(typeof this.expected)+")\nActual:"+this.actual+" ("+(typeof this.actual)+")";}});YAHOO.util.UnexpectedValue=function(B,A){arguments.callee.superclass.constructor.call(this,B);this.unexpected=A;this.name="UnexpectedValue";};YAHOO.lang.extend(YAHOO.util.UnexpectedValue,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nUnexpected: "+this.unexpected+" ("+(typeof this.unexpected)+") ";}});YAHOO.util.ShouldFail=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should fail but didn't.");this.name="ShouldFail";};YAHOO.lang.extend(YAHOO.util.ShouldFail,YAHOO.util.AssertionError);YAHOO.util.ShouldError=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should have thrown an error but didn't.");this.name="ShouldError";};YAHOO.lang.extend(YAHOO.util.ShouldError,YAHOO.util.AssertionError);YAHOO.util.UnexpectedError=function(A){arguments.callee.superclass.constructor.call(this,"Unexpected error: "+A.message);this.cause=A;this.name="UnexpectedError";this.stack=A.stack;};YAHOO.lang.extend(YAHOO.util.UnexpectedError,YAHOO.util.AssertionError);YAHOO.util.ArrayAssert={contains:function(E,D,B){var C=false;\r
+var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(!C){F.fail(F._formatMessage(B,"Value "+E+" ("+(typeof E)+") not found in array ["+D+"]."));}},containsItems:function(C,D,B){for(var A=0;A<C.length;A++){this.contains(C[A],D,B);}},containsMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(!C){F.fail(F._formatMessage(B,"No match found in array ["+D+"]."));}},doesNotContain:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},doesNotContainItems:function(C,D,B){for(var A=0;A<C.length;A++){this.doesNotContain(C[A],D,B);}},doesNotContainMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},indexOf:function(E,D,A,C){for(var B=0;B<D.length;B++){if(D[B]===E){YAHOO.util.Assert.areEqual(A,B,C||"Value exists at index "+B+" but should be at index "+A+".");return ;}}var F=YAHOO.util.Assert;F.fail(F._formatMessage(C,"Value doesn't exist in array ["+D+"]."));},itemsAreEqual:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areEqual(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not equal."));}},itemsAreEquivalent:function(E,F,B,D){if(typeof B!="function"){throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");}var A=Math.max(E.length,F.length);for(var C=0;C<A;C++){if(!B(E[C],F[C])){throw new YAHOO.util.ComparisonFailure(YAHOO.util.Assert._formatMessage(D,"Values in position "+C+" are not equivalent."),E[C],F[C]);}}},isEmpty:function(C,A){if(C.length>0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should be empty."));}},isNotEmpty:function(C,A){if(C.length===0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should not be empty."));}},itemsAreSame:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areSame(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not the same."));}},lastIndexOf:function(E,D,A,C){var F=YAHOO.util.Assert;for(var B=D.length;B>=0;B--){if(D[B]===E){F.areEqual(A,B,F._formatMessage(C,"Value exists at index "+B+" but should be at index "+A+"."));return ;}}F.fail(F._formatMessage(C,"Value doesn't exist in array."));}};YAHOO.namespace("util");YAHOO.util.ObjectAssert={propertiesAreEqual:function(D,G,C){var F=YAHOO.util.Assert;var B=[];for(var E in D){B.push(E);}for(var A=0;A<B.length;A++){F.isNotUndefined(G[B[A]],F._formatMessage(C,"Property '"+B[A]+"' expected."));}},hasProperty:function(A,B,C){if(!(A in B)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object."));}},hasOwnProperty:function(A,B,C){if(!YAHOO.lang.hasOwnProperty(B,A)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object instance."));}}};YAHOO.util.DateAssert={datesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getFullYear(),D.getFullYear(),C._formatMessage(A,"Years should be equal."));C.areEqual(B.getMonth(),D.getMonth(),C._formatMessage(A,"Months should be equal."));C.areEqual(B.getDate(),D.getDate(),C._formatMessage(A,"Day of month should be equal."));}else{throw new TypeError("DateAssert.datesAreEqual(): Expected and actual values must be Date objects.");}},timesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getHours(),D.getHours(),C._formatMessage(A,"Hours should be equal."));C.areEqual(B.getMinutes(),D.getMinutes(),C._formatMessage(A,"Minutes should be equal."));C.areEqual(B.getSeconds(),D.getSeconds(),C._formatMessage(A,"Seconds should be equal."));}else{throw new TypeError("DateAssert.timesAreEqual(): Expected and actual values must be Date objects.");}}};YAHOO.namespace("util");YAHOO.util.UserAction={simulateKeyEvent:function(F,J,E,C,L,B,A,K,H,N,M){F=YAHOO.util.Dom.get(F);if(!F){throw new Error("simulateKeyEvent(): Invalid target.");}if(YAHOO.lang.isString(J)){J=J.toLowerCase();switch(J){case"keyup":case"keydown":case"keypress":break;case"textevent":J="keypress";break;default:throw new Error("simulateKeyEvent(): Event type '"+J+"' not supported.");}}else{throw new Error("simulateKeyEvent(): Event type must be a string.");}if(!YAHOO.lang.isBoolean(E)){E=true;}if(!YAHOO.lang.isBoolean(C)){C=true;}if(!YAHOO.lang.isObject(L)){L=window;}if(!YAHOO.lang.isBoolean(B)){B=false;}if(!YAHOO.lang.isBoolean(A)){A=false;}if(!YAHOO.lang.isBoolean(K)){K=false;}if(!YAHOO.lang.isBoolean(H)){H=false;}if(!YAHOO.lang.isNumber(N)){N=0;}if(!YAHOO.lang.isNumber(M)){M=0;}var I=null;if(YAHOO.lang.isFunction(document.createEvent)){try{I=document.createEvent("KeyEvents");I.initKeyEvent(J,E,C,L,B,A,K,H,N,M);}catch(G){try{I=document.createEvent("Events");}catch(D){I=document.createEvent("UIEvents");}finally{I.initEvent(J,E,C);I.view=L;I.altKey=A;I.ctrlKey=B;I.shiftKey=K;I.metaKey=H;I.keyCode=N;I.charCode=M;}}F.dispatchEvent(I);}else{if(YAHOO.lang.isObject(document.createEventObject)){I=document.createEventObject();I.bubbles=E;I.cancelable=C;I.view=L;I.ctrlKey=B;I.altKey=A;I.shiftKey=K;I.metaKey=H;I.keyCode=(M>0)?M:N;F.fireEvent("on"+J,I);}else{throw new Error("simulateKeyEvent(): No event simulation framework present.");}}},simulateMouseEvent:function(K,P,H,E,Q,J,G,F,D,B,C,A,O,M,I,L){K=YAHOO.util.Dom.get(K);if(!K){throw new Error("simulateMouseEvent(): Invalid target.");}if(YAHOO.lang.isString(P)){P=P.toLowerCase();switch(P){case"mouseover":case"mouseout":case"mousedown":case"mouseup":case"click":case"dblclick":case"mousemove":break;default:throw new Error("simulateMouseEvent(): Event type '"+P+"' not supported.");\r
+}}else{throw new Error("simulateMouseEvent(): Event type must be a string.");}if(!YAHOO.lang.isBoolean(H)){H=true;}if(!YAHOO.lang.isBoolean(E)){E=(P!="mousemove");}if(!YAHOO.lang.isObject(Q)){Q=window;}if(!YAHOO.lang.isNumber(J)){J=1;}if(!YAHOO.lang.isNumber(G)){G=0;}if(!YAHOO.lang.isNumber(F)){F=0;}if(!YAHOO.lang.isNumber(D)){D=0;}if(!YAHOO.lang.isNumber(B)){B=0;}if(!YAHOO.lang.isBoolean(C)){C=false;}if(!YAHOO.lang.isBoolean(A)){A=false;}if(!YAHOO.lang.isBoolean(O)){O=false;}if(!YAHOO.lang.isBoolean(M)){M=false;}if(!YAHOO.lang.isNumber(I)){I=0;}var N=null;if(YAHOO.lang.isFunction(document.createEvent)){N=document.createEvent("MouseEvents");if(N.initMouseEvent){N.initMouseEvent(P,H,E,Q,J,G,F,D,B,C,A,O,M,I,L);}else{N=document.createEvent("UIEvents");N.initEvent(P,H,E);N.view=Q;N.detail=J;N.screenX=G;N.screenY=F;N.clientX=D;N.clientY=B;N.ctrlKey=C;N.altKey=A;N.metaKey=M;N.shiftKey=O;N.button=I;N.relatedTarget=L;}if(L&&!N.relatedTarget){if(P=="mouseout"){N.toElement=L;}else{if(P=="mouseover"){N.fromElement=L;}}}K.dispatchEvent(N);}else{if(YAHOO.lang.isObject(document.createEventObject)){N=document.createEventObject();N.bubbles=H;N.cancelable=E;N.view=Q;N.detail=J;N.screenX=G;N.screenY=F;N.clientX=D;N.clientY=B;N.ctrlKey=C;N.altKey=A;N.metaKey=M;N.shiftKey=O;switch(I){case 0:N.button=1;break;case 1:N.button=4;break;case 2:break;default:N.button=0;}N.relatedTarget=L;K.fireEvent("on"+P,N);}else{throw new Error("simulateMouseEvent(): No event simulation framework present.");}}},fireMouseEvent:function(C,B,A){A=A||{};this.simulateMouseEvent(C,B,A.bubbles,A.cancelable,A.view,A.detail,A.screenX,A.screenY,A.clientX,A.clientY,A.ctrlKey,A.altKey,A.shiftKey,A.metaKey,A.button,A.relatedTarget);},click:function(B,A){this.fireMouseEvent(B,"click",A);},dblclick:function(B,A){this.fireMouseEvent(B,"dblclick",A);},mousedown:function(B,A){this.fireMouseEvent(B,"mousedown",A);},mousemove:function(B,A){this.fireMouseEvent(B,"mousemove",A);},mouseout:function(B,A){this.fireMouseEvent(B,"mouseout",A);},mouseover:function(B,A){this.fireMouseEvent(B,"mouseover",A);},mouseup:function(B,A){this.fireMouseEvent(B,"mouseup",A);},fireKeyEvent:function(B,C,A){A=A||{};this.simulateKeyEvent(C,B,A.bubbles,A.cancelable,A.view,A.ctrlKey,A.altKey,A.shiftKey,A.metaKey,A.keyCode,A.charCode);},keydown:function(B,A){this.fireKeyEvent("keydown",B,A);},keypress:function(B,A){this.fireKeyEvent("keypress",B,A);},keyup:function(B,A){this.fireKeyEvent("keyup",B,A);}};YAHOO.namespace("tool");YAHOO.tool.TestManager={TEST_PAGE_BEGIN_EVENT:"testpagebegin",TEST_PAGE_COMPLETE_EVENT:"testpagecomplete",TEST_MANAGER_BEGIN_EVENT:"testmanagerbegin",TEST_MANAGER_COMPLETE_EVENT:"testmanagercomplete",_curPage:null,_frame:null,_logger:null,_timeoutId:0,_pages:[],_results:null,_handleTestRunnerComplete:function(A){this.fireEvent(this.TEST_PAGE_COMPLETE_EVENT,{page:this._curPage,results:A.results});this._processResults(this._curPage,A.results);this._logger.clearTestRunner();if(this._pages.length){this._timeoutId=setTimeout(function(){YAHOO.tool.TestManager._run();},1000);}else{this.fireEvent(this.TEST_MANAGER_COMPLETE_EVENT,this._results);}},_processResults:function(C,A){var B=this._results;B.passed+=A.passed;B.failed+=A.failed;B.ignored+=A.ignored;B.total+=A.total;if(A.failed){B.failedPages.push(C);}else{B.passedPages.push(C);}A.name=C;A.type="page";B[C]=A;},_run:function(){this._curPage=this._pages.shift();this.fireEvent(this.TEST_PAGE_BEGIN_EVENT,this._curPage);this._frame.location.replace(this._curPage);},load:function(){if(parent.YAHOO.tool.TestManager!==this){parent.YAHOO.tool.TestManager.load();}else{if(this._frame){var A=this._frame.YAHOO.tool.TestRunner;this._logger.setTestRunner(A);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerComplete,this,true);A.run();}}},setPages:function(A){this._pages=A;},start:function(){if(!this._initialized){this.createEvent(this.TEST_PAGE_BEGIN_EVENT);this.createEvent(this.TEST_PAGE_COMPLETE_EVENT);this.createEvent(this.TEST_MANAGER_BEGIN_EVENT);this.createEvent(this.TEST_MANAGER_COMPLETE_EVENT);if(!this._frame){var A=document.createElement("iframe");A.style.visibility="hidden";A.style.position="absolute";document.body.appendChild(A);this._frame=A.contentWindow||A.contentDocument.ownerWindow;}if(!this._logger){this._logger=new YAHOO.tool.TestLogger();}this._initialized=true;}this._results={passed:0,failed:0,ignored:0,total:0,type:"report",name:"YUI Test Results",failedPages:[],passedPages:[]};this.fireEvent(this.TEST_MANAGER_BEGIN_EVENT,null);this._run();},stop:function(){clearTimeout(this._timeoutId);}};YAHOO.lang.augmentObject(YAHOO.tool.TestManager,YAHOO.util.EventProvider.prototype);YAHOO.namespace("tool");YAHOO.tool.TestLogger=function(B,A){YAHOO.tool.TestLogger.superclass.constructor.call(this,B,A);this.init();};YAHOO.lang.extend(YAHOO.tool.TestLogger,YAHOO.widget.LogReader,{footerEnabled:true,newestOnTop:false,formatMsg:function(B){var A=B.category;var C=this.html2Text(B.msg);return"<pre><p><span class=\""+A+"\">"+A.toUpperCase()+"</span> "+C+"</p></pre>";},init:function(){if(YAHOO.tool.TestRunner){this.setTestRunner(YAHOO.tool.TestRunner);}this.hideSource("global");this.hideSource("LogReader");this.hideCategory("warn");this.hideCategory("window");this.hideCategory("time");this.clearConsole();},clearTestRunner:function(){if(this._runner){this._runner.unsubscribeAll();this._runner=null;}},setTestRunner:function(A){if(this._runner){this.clearTestRunner();}this._runner=A;A.subscribe(A.TEST_PASS_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_FAIL_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_IGNORE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_CASE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);\r
+A.subscribe(A.TEST_CASE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);},_handleTestRunnerEvent:function(D){var A=YAHOO.tool.TestRunner;var C="";var B="";switch(D.type){case A.BEGIN_EVENT:C="Testing began at "+(new Date()).toString()+".";B="info";break;case A.COMPLETE_EVENT:C="Testing completed at "+(new Date()).toString()+".\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_FAIL_EVENT:C=D.testName+": "+D.error.getMessage();B="fail";break;case A.TEST_IGNORE_EVENT:C=D.testName+": ignored.";B="ignore";break;case A.TEST_PASS_EVENT:C=D.testName+": passed.";B="pass";break;case A.TEST_SUITE_BEGIN_EVENT:C="Test suite \""+D.testSuite.name+"\" started.";B="info";break;case A.TEST_SUITE_COMPLETE_EVENT:C="Test suite \""+D.testSuite.name+"\" completed.\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_CASE_BEGIN_EVENT:C="Test case \""+D.testCase.name+"\" started.";B="info";break;case A.TEST_CASE_COMPLETE_EVENT:C="Test case \""+D.testCase.name+"\" completed.\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;default:C="Unexpected event "+D.type;C="info";}YAHOO.log(C,B,"TestRunner");}});YAHOO.namespace("tool.TestFormat");YAHOO.tool.TestFormat.JSON=function(A){return YAHOO.lang.JSON.stringify(A);};YAHOO.tool.TestFormat.XML=function(C){var A=YAHOO.lang;var B="<"+C.type+" name=\""+C.name.replace(/"/g,"&quot;").replace(/'/g,"&apos;")+"\"";if(C.type=="test"){B+=" result=\""+C.result+"\" message=\""+C.message+"\">";}else{B+=" passed=\""+C.passed+"\" failed=\""+C.failed+"\" ignored=\""+C.ignored+"\" total=\""+C.total+"\">";for(var D in C){if(A.hasOwnProperty(C,D)&&A.isObject(C[D])&&!A.isArray(C[D])){B+=arguments.callee(C[D]);}}}B+="</"+C.type+">";return B;};YAHOO.namespace("tool");YAHOO.tool.TestReporter=function(A,B){this.url=A;this.format=B||YAHOO.tool.TestFormat.XML;this._fields=new Object();this._form=null;this._iframe=null;};YAHOO.tool.TestReporter.prototype={constructor:YAHOO.tool.TestReporter,addField:function(A,B){this._fields[A]=B;},clearFields:function(){this._fields=new Object();},destroy:function(){if(this._form){this._form.parentNode.removeChild(this._form);this._form=null;}if(this._iframe){this._iframe.parentNode.removeChild(this._iframe);this._iframe=null;}this._fields=null;},report:function(A){if(!this._form){this._form=document.createElement("form");this._form.method="post";this._form.style.visibility="hidden";this._form.style.position="absolute";this._form.style.top=0;document.body.appendChild(this._form);if(YAHOO.env.ua.ie){this._iframe=document.createElement("<iframe name=\"yuiTestTarget\" />");}else{this._iframe=document.createElement("iframe");this._iframe.name="yuiTestTarget";}this._iframe.src="javascript:false";this._iframe.style.visibility="hidden";this._iframe.style.position="absolute";this._iframe.style.top=0;document.body.appendChild(this._iframe);this._form.target="yuiTestTarget";}this._form.action=this.url;while(this._form.hasChildNodes()){this._form.removeChild(this._form.lastChild);}this._fields.results=this.format(A);this._fields.useragent=navigator.userAgent;this._fields.timestamp=(new Date()).toLocaleString();for(var B in this._fields){if(YAHOO.lang.hasOwnProperty(this._fields,B)&&typeof this._fields[B]!="function"){if(YAHOO.env.ua.ie){input=document.createElement("<input name=\""+B+"\" >");}else{input=document.createElement("input");input.name=B;}input.type="hidden";input.value=this._fields[B];this._form.appendChild(input);}}delete this._fields.results;delete this._fields.useragent;delete this._fields.timestamp;if(arguments[1]!==false){this._form.submit();}}};YAHOO.register("yuitest",YAHOO.tool.TestRunner,{version:"2.5.2",build:"1076"});\r
diff --git a/ckeditor.js b/ckeditor.js
new file mode 100644 (file)
index 0000000..ac1c86d
--- /dev/null
@@ -0,0 +1,108 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'97KD',version:'3.0',revision:'4148',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();var a=CKEDITOR;if(!a.event){a.event=function(){};a.event.implementOn=function(b,c){var d=a.event.prototype;for(var e in d)if(b[e]==undefined)b[e]=d[e];};a.event.prototype=(function(){var b=function(d){var e=d.getPrivate&&d.getPrivate()||d._||(d._={});return e.events||(e.events={});},c=function(d){this.name=d;this.listeners=[];};c.prototype={getListenerIndex:function(d){for(var e=0,f=this.listeners;e<f.length;e++)if(f[e].fn==d)return e;return-1;}};return{on:function(d,e,f,g,h){var i=b(this),j=i[d]||(i[d]=new c(d));if(j.getListenerIndex(e)<0){var k=j.listeners;if(!f)f=this;if(isNaN(h))h=10;var l=this,m=function(o,p,q,r){var s={name:d,sender:this,editor:o,data:p,listenerData:g,stop:q,cancel:r,removeListener:function(){l.removeListener(d,e);}};e.call(f,s);return s.data;};m.fn=e;m.priority=h;for(var n=k.length-1;n>=0;n--)if(k[n].priority<=h){k.splice(n+1,0,m);return;}k.unshift(m);}},fire:(function(){var d=false,e=function(){d=true;},f=false,g=function(){f=true;};return function(h,i,j){var k=b(this)[h],l=d,m=f;d=f=false;if(k){var n=k.listeners;if(n.length){n=n.slice(0);for(var o=0;o<n.length;o++){var p=n[o].call(this,j,i,e,g);if(typeof p!='undefined')i=p;if(d||f)break;}}}var q=f||(typeof i=='undefined'?false:i);d=l;f=m;return q;};})(),fireOnce:function(d,e,f){var g=this.fire(d,e,f);delete b(this)[d];return g;},removeListener:function(d,e){var f=b(this)[d];if(f){var g=f.getListenerIndex(e);if(g>=0)f.listeners.splice(g,1);}},hasListeners:function(d){var e=b(this)[d];return e&&e.listeners.length>0;}};})();}if(!a.editor){a.ELEMENT_MODE_NONE=0;a.ELEMENT_MODE_REPLACE=1;a.ELEMENT_MODE_APPENDTO=2;a.editor=function(b,c,d){var e=this;e._={instanceConfig:b,element:c};\r
+e.elementMode=d||0;a.event.call(e);e._init();};a.editor.replace=function(b,c){var d=b;if(typeof d!='object'){d=document.getElementById(b);if(!d){var e=0,f=document.getElementsByName(b);while((d=f[e++])&&(d.tagName.toLowerCase()!='textarea')){}}if(!d)throw '[CKEDITOR.editor.replace] The element with id or name "'+b+'" was not found.';}d.style.visibility='hidden';return new a.editor(c,d,1);};a.editor.appendTo=function(b,c){if(typeof b!='object'){b=document.getElementById(b);if(!b)throw '[CKEDITOR.editor.appendTo] The element with id "'+b+'" was not found.';}return new a.editor(c,b,2);};a.editor.prototype={_init:function(){var b=a.editor._pending||(a.editor._pending=[]);b.push(this);},fire:function(b,c){return a.event.prototype.fire.call(this,b,c,this);},fireOnce:function(b,c){return a.event.prototype.fireOnce.call(this,b,c,this);}};a.event.implementOn(a.editor.prototype,true);}if(!a.env)a.env=(function(){var b=navigator.userAgent.toLowerCase(),c=window.opera,d={ie:/*@cc_on!@*/false,opera:!!c&&c.version,webkit:b.indexOf(' applewebkit/')>-1,air:b.indexOf(' adobeair/')>-1,mac:b.indexOf('macintosh')>-1,quirks:document.compatMode=='BackCompat',isCustomDomain:function(){return this.ie&&document.domain!=window.location.hostname;}};d.gecko=navigator.product=='Gecko'&&!d.webkit&&!d.opera;var e=0;if(d.ie){e=parseFloat(b.match(/msie (\d+)/)[1]);d.ie8=!!document.documentMode;d.ie8Compat=document.documentMode==8;d.ie7Compat=e==7&&!document.documentMode||document.documentMode==7;d.ie6Compat=e<7||d.quirks;}if(d.gecko){var f=b.match(/rv:([\d\.]+)/);if(f){f=f[1].split('.');e=f[0]*10000+(f[1]||0)*(100)+ +(f[2]||0);}}if(d.opera)e=parseFloat(c.version());if(d.air)e=parseFloat(b.match(/ adobeair\/(\d+)/)[1]);if(d.webkit)e=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]);d.version=e;d.isCompatible=d.ie&&e>=6||d.gecko&&e>=10801||d.opera&&e>=9.5||d.air&&e>=1||d.webkit&&e>=522||false;d.cssClass='cke_browser_'+(d.ie?'ie':d.gecko?'gecko':d.opera?'opera':d.air?'air':d.webkit?'webkit':'unknown');if(d.quirks)d.cssClass+=' cke_browser_quirks';if(d.ie){d.cssClass+=' cke_browser_ie'+(d.version<7?'6':d.version>=8?'8':'7');if(d.quirks)d.cssClass+=' cke_browser_iequirks';}if(d.gecko&&e<10900)d.cssClass+=' cke_browser_gecko18';return d;})();var b=a.env;var c=b.ie;if(a.status=='unloaded')(function(){a.event.implementOn(a);a.loadFullCore=function(){if(a.status!='basic_ready'){a.loadFullCore._load=true;return;}delete a.loadFullCore;var e=document.createElement('script');e.type='text/javascript';\r
+e.src=a.basePath+'ckeditor.js';document.getElementsByTagName('head')[0].appendChild(e);};a.loadFullCoreTimeout=0;a.replaceClass='ckeditor';a.replaceByClassEnabled=true;var d=function(e,f,g){if(b.isCompatible){if(a.loadFullCore)a.loadFullCore();var h=g(e,f);a.add(h);return h;}return null;};a.replace=function(e,f){return d(e,f,a.editor.replace);};a.appendTo=function(e,f){return d(e,f,a.editor.appendTo);};a.add=function(e){var f=this._.pending||(this._.pending=[]);f.push(e);};a.replaceAll=function(){var e=document.getElementsByTagName('textarea');for(var f=0;f<e.length;f++){var g=null,h=e[f],i=h.name;if(!h.name&&!h.id)continue;if(typeof arguments[0]=='string'){var j=new RegExp('(?:^| )'+arguments[0]+'(?:$| )');if(!j.test(h.className))continue;}else if(typeof arguments[0]=='function'){g={};if(arguments[0](h,g)===false)continue;}this.replace(h,g);}};(function(){var e=function(){var f=a.loadFullCore,g=a.loadFullCoreTimeout;if(a.replaceByClassEnabled)a.replaceAll(a.replaceClass);a.status='basic_ready';if(f&&f._load)f();else if(g)setTimeout(function(){if(a.loadFullCore)a.loadFullCore();},g*1000);};if(window.addEventListener)window.addEventListener('load',e,false);else if(window.attachEvent)window.attachEvent('onload',e);})();a.status='basic_loaded';})();a.dom={};var d=a.dom;(function(){var e=[];a.tools={arrayCompare:function(f,g){if(!f&&!g)return true;if(!f||!g||f.length!=g.length)return false;for(var h=0;h<f.length;h++)if(f[h]!=g[h])return false;return true;},clone:function(f){var g;if(f&&f instanceof Array){g=[];for(var h=0;h<f.length;h++)g[h]=this.clone(f[h]);return g;}if(f===null||typeof f!='object'||f instanceof String||f instanceof Number||f instanceof Boolean||f instanceof Date)return f;g=new f.constructor();for(var i in f){var j=f[i];g[i]=this.clone(j);}return g;},extend:function(f){var g=arguments.length,h,i;if(typeof (h=arguments[g-1])=='boolean')g--;else if(typeof (h=arguments[g-2])=='boolean'){i=arguments[g-1];g-=2;}for(var j=1;j<g;j++){var k=arguments[j];for(var l in k)if(h===true||f[l]==undefined)if(!i||l in i)f[l]=k[l];}return f;},prototypedCopy:function(f){var g=function(){};g.prototype=f;return new g();},isArray:function(f){return!!f&&f instanceof Array;},cssStyleToDomStyle:function(f){if(f=='float')return 'cssFloat';else return f.replace(/-./g,function(g){return g.substr(1).toUpperCase();});},htmlEncode:function(f){var g=function(k){var l=new d.element('span');l.setText(k);return l.getHtml();},h=g('\n').toLowerCase()=='<br>'?function(k){return g(k).replace(/<br>/gi,'\n');\r
+}:g,i=g('>')=='>'?function(k){return h(k).replace(/>/g,'&gt;');}:h,j=g('  ')=='&nbsp; '?function(k){return i(k).replace(/&nbsp;/g,' ');}:i;this.htmlEncode=j;return this.htmlEncode(f);},getNextNumber:(function(){var f=0;return function(){return++f;};})(),override:function(f,g){return g(f);},setTimeout:function(f,g,h,i,j){if(!j)j=window;if(!h)h=j;return j.setTimeout(function(){if(i)f.apply(h,[].concat(i));else f.apply(h);},g||0);},trim:(function(){var f=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(g){return g.replace(f,'');};})(),ltrim:(function(){var f=/^[ \t\n\r]+/g;return function(g){return g.replace(f,'');};})(),rtrim:(function(){var f=/[ \t\n\r]+$/g;return function(g){return g.replace(f,'');};})(),indexOf:Array.prototype.indexOf?function(f,g){return f.indexOf(g);}:function(f,g){for(var h=0,i=f.length;h<i;h++)if(f[h]===g)return h;return-1;},bind:function(f,g){return function(){return f.apply(g,arguments);};},createClass:function(f){var g=f.$,h=f.base,i=f.privates||f._,j=f.proto,k=f.statics;if(i){var l=g;g=function(){var p=this;var m=p._||(p._={});for(var n in i){var o=i[n];m[n]=typeof o=='function'?a.tools.bind(o,p):o;}l.apply(p,arguments);};}if(h){g.prototype=this.prototypedCopy(h.prototype);g.prototype['constructor']=g;g.prototype.base=function(){this.base=h.prototype.base;h.apply(this,arguments);this.base=arguments.callee;};}if(j)this.extend(g.prototype,j,true);if(k)this.extend(g,k,true);return g;},addFunction:function(f,g){return e.push(function(){f.apply(g||this,arguments);})-1;},callFunction:function(f){var g=e[f];return g.apply(window,Array.prototype.slice.call(arguments,1));},cssLength:(function(){var f=/^\d+(?:\.\d+)?$/;return function(g){return g+(f.test(g)?'px':'');};})(),repeat:function(f,g){return new Array(g+1).join(f);}};})();var e=a.tools;a.dtd=(function(){var f=e.extend,g={isindex:1,fieldset:1},h={input:1,button:1,select:1,textarea:1,label:1},i=f({a:1},h),j=f({iframe:1},i),k={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1},l={ins:1,del:1,script:1},m=f({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},l),n=f({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},m),o=f({p:1},n),p=f({iframe:1},n,h),q={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1},r=f({a:1},p),s={tr:1},t={'#':1},u=f({param:1},q),v=f({form:1},g,j,k,o),w={li:1},x={address:1,blockquote:1,center:1,dir:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,menu:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1};\r
+return{$block:x,$body:f({script:1},x),$cdata:{script:1,style:1},$empty:{area:1,base:1,br:1,col:1,hr:1,img:1,input:1,link:1,meta:1,param:1},$listItem:{dd:1,dt:1,li:1},$nonEditable:{applet:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,script:1,textarea:1},$removeEmpty:{abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:v,td:v,br:{},th:v,center:v,kbd:r,button:f(o,k),basefont:{},h5:r,h4:r,samp:r,h6:r,ol:w,h1:r,h3:r,option:t,h2:r,form:f(g,j,k,o),select:{optgroup:1,option:1},font:r,ins:v,menu:w,abbr:r,label:r,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:r,script:t,tfoot:s,cite:r,li:v,input:{},iframe:v,strong:r,textarea:t,noframes:v,big:r,small:r,span:r,hr:{},dt:r,sub:r,optgroup:{option:1},param:{},bdo:r,'var':r,div:v,object:u,sup:r,dd:v,strike:r,area:{},dir:w,map:f({area:1,form:1,p:1},g,l,k),applet:u,dl:{dt:1,dd:1},del:v,isindex:{},fieldset:f({legend:1},q),thead:s,ul:w,acronym:r,b:r,a:p,blockquote:v,caption:r,i:r,u:r,tbody:s,s:r,address:f(j,o),tt:r,legend:r,q:r,pre:f(m,i),p:r,em:r,dfn:r};})();var f=a.dtd;d.event=function(g){this.$=g;};d.event.prototype={getKey:function(){return this.$.keyCode||this.$.which;},getKeystroke:function(){var h=this;var g=h.getKey();if(h.$.ctrlKey||h.$.metaKey)g+=1000;if(h.$.shiftKey)g+=2000;if(h.$.altKey)g+=4000;return g;},preventDefault:function(g){var h=this.$;if(h.preventDefault)h.preventDefault();else h.returnValue=false;if(g)if(h.stopPropagation)h.stopPropagation();else h.cancelBubble=true;},getTarget:function(){var g=this.$.target||this.$.srcElement;return g?new d.node(g):null;}};a.CTRL=1000;a.SHIFT=2000;a.ALT=4000;d.domObject=function(g){if(g)this.$=g;};d.domObject.prototype=(function(){var g=function(h,i){return function(j){if(typeof a!='undefined')h.fire(i,new d.event(j));};};return{getPrivate:function(){var h;if(!(h=this.getCustomData('_')))this.setCustomData('_',h={});return h;},on:function(h){var k=this;var i=k.getCustomData('_cke_nativeListeners');if(!i){i={};k.setCustomData('_cke_nativeListeners',i);}if(!i[h]){var j=i[h]=g(k,h);if(k.$.addEventListener)k.$.addEventListener(h,j,!!a.event.useCapture);else if(k.$.attachEvent)k.$.attachEvent('on'+h,j);}return a.event.prototype.on.apply(k,arguments);\r
+},removeListener:function(h){var k=this;a.event.prototype.removeListener.apply(k,arguments);if(!k.hasListeners(h)){var i=k.getCustomData('_cke_nativeListeners'),j=i&&i[h];if(j){if(k.$.removeEventListener)k.$.removeEventListener(h,j,false);else if(k.$.detachEvent)k.$.detachEvent('on'+h,j);delete i[h];}}}};})();(function(g){var h={};g.equals=function(i){return i&&i.$===this.$;};g.setCustomData=function(i,j){var k=this.getUniqueId(),l=h[k]||(h[k]={});l[i]=j;return this;};g.getCustomData=function(i){var j=this.$._cke_expando,k=j&&h[j];return k&&k[i];};g.removeCustomData=function(i){var j=this.$._cke_expando,k=j&&h[j],l=k&&k[i];if(typeof l!='undefined')delete k[i];return l||null;};g.getUniqueId=function(){return this.$._cke_expando||(this.$._cke_expando=e.getNextNumber());};a.event.implementOn(g);})(d.domObject.prototype);d.window=function(g){d.domObject.call(this,g);};d.window.prototype=new d.domObject();e.extend(d.window.prototype,{focus:function(){if(b.webkit&&this.$.parent)this.$.parent.focus();this.$.focus();},getViewPaneSize:function(){var g=this.$.document,h=g.compatMode=='CSS1Compat';return{width:(h?g.documentElement.clientWidth:g.body.clientWidth)||(0),height:(h?g.documentElement.clientHeight:g.body.clientHeight)||(0)};},getScrollPosition:function(){var g=this.$;if('pageXOffset' in g)return{x:g.pageXOffset||0,y:g.pageYOffset||0};else{var h=g.document;return{x:h.documentElement.scrollLeft||h.body.scrollLeft||0,y:h.documentElement.scrollTop||h.body.scrollTop||0};}}});d.document=function(g){d.domObject.call(this,g);};var g=d.document;g.prototype=new d.domObject();e.extend(g.prototype,{appendStyleSheet:function(h){if(this.$.createStyleSheet)this.$.createStyleSheet(h);else{var i=new d.element('link');i.setAttributes({rel:'stylesheet',type:'text/css',href:h});this.getHead().append(i);}},createElement:function(h,i){var j=new d.element(h,this);if(i){if(i.attributes)j.setAttributes(i.attributes);if(i.styles)j.setStyles(i.styles);}return j;},createText:function(h){return new d.text(h,this);},focus:function(){this.getWindow().focus();},getById:function(h){var i=this.$.getElementById(h);return i?new d.element(i):null;},getByAddress:function(h,i){var j=this.$.documentElement;for(var k=0;j&&k<h.length;k++){var l=h[k];if(!i){j=j.childNodes[l];continue;}var m=-1;for(var n=0;n<j.childNodes.length;n++){var o=j.childNodes[n];if(i===true&&o.nodeType==3&&o.previousSibling&&o.previousSibling.nodeType==3)continue;m++;if(m==l){j=o;break;}}}return j?new d.node(j):null;},getElementsByTag:function(h,i){if(!c&&i)h=i+':'+h;\r
+return new d.nodeList(this.$.getElementsByTagName(h));},getHead:function(){var h=this.$.getElementsByTagName('head')[0];h=new d.element(h);return(this.getHead=function(){return h;})();},getBody:function(){var h=new d.element(this.$.body);return(this.getBody=function(){return h;})();},getDocumentElement:function(){var h=new d.element(this.$.documentElement);return(this.getDocumentElement=function(){return h;})();},getWindow:function(){var h=new d.window(this.$.parentWindow||this.$.defaultView);return(this.getWindow=function(){return h;})();}});d.node=function(h){if(h){switch(h.nodeType){case 1:return new d.element(h);case 3:return new d.text(h);}d.domObject.call(this,h);}return this;};d.node.prototype=new d.domObject();a.NODE_ELEMENT=1;a.NODE_TEXT=3;a.NODE_COMMENT=8;a.NODE_DOCUMENT_FRAGMENT=11;a.POSITION_IDENTICAL=0;a.POSITION_DISCONNECTED=1;a.POSITION_FOLLOWING=2;a.POSITION_PRECEDING=4;a.POSITION_IS_CONTAINED=8;a.POSITION_CONTAINS=16;e.extend(d.node.prototype,{appendTo:function(h,i){h.append(this,i);return h;},clone:function(h,i){var j=this.$.cloneNode(h);if(!i){var k=function(l){if(l.nodeType!=1)return;l.removeAttribute('id',false);l.removeAttribute('_cke_expando',false);var m=l.childNodes;for(var n=0;n<m.length;n++)k(m[n]);};k(j);}return new d.node(j);},hasPrevious:function(){return!!this.$.previousSibling;},hasNext:function(){return!!this.$.nextSibling;},insertAfter:function(h){h.$.parentNode.insertBefore(this.$,h.$.nextSibling);return h;},insertBefore:function(h){h.$.parentNode.insertBefore(this.$,h.$);return h;},insertBeforeMe:function(h){this.$.parentNode.insertBefore(h.$,this.$);return h;},getAddress:function(h){var i=[],j=this.getDocument().$.documentElement,k=this.$;while(k&&k!=j){var l=k.parentNode,m=-1;for(var n=0;n<l.childNodes.length;n++){var o=l.childNodes[n];if(h&&o.nodeType==3&&o.previousSibling&&o.previousSibling.nodeType==3)continue;m++;if(o==k)break;}i.unshift(m);k=k.parentNode;}return i;},getDocument:function(){var h=new g(this.$.ownerDocument||this.$.parentNode.ownerDocument);return(this.getDocument=function(){return h;})();},getIndex:function(){var h=this.$,i=h.parentNode&&h.parentNode.firstChild,j=-1;while(i){j++;if(i==h)return j;i=i.nextSibling;}return-1;},getNextSourceNode:function(h,i,j){if(j&&!j.call){var k=j;j=function(n){return!n.equals(k);};}var l=!h&&this.getFirst&&this.getFirst(),m;if(!l){if(this.type==1&&j&&j(this,true)===false)return null;l=this.getNext();}while(!l&&(m=(m||this).getParent())){if(j&&j(m,true)===false)return null;\r
+l=m.getNext();}if(!l)return null;if(j&&j(l)===false)return null;if(i&&i!=l.type)return l.getNextSourceNode(false,i,j);return l;},getPreviousSourceNode:function(h,i,j){if(j&&!j.call){var k=j;j=function(n){return!n.equals(k);};}var l=!h&&this.getLast&&this.getLast(),m;if(!l){if(this.type==1&&j&&j(this,true)===false)return null;l=this.getPrevious();}while(!l&&(m=(m||this).getParent())){if(j&&j(m,true)===false)return null;l=m.getPrevious();}if(!l)return null;if(j&&j(l)===false)return null;if(i&&l.type!=i)return l.getPreviousSourceNode(false,i,j);return l;},getPrevious:function(h){var i=this.$,j;do{i=i.previousSibling;j=i&&new d.node(i);}while(j&&h&&!h(j))return j;},getNext:function(h){var i=this.$,j;do{i=i.nextSibling;j=i&&new d.node(i);}while(j&&h&&!h(j))return j;},getParent:function(){var h=this.$.parentNode;return h&&h.nodeType==1?new d.node(h):null;},getParents:function(h){var i=this,j=[];do j[h?'push':'unshift'](i);while(i=i.getParent())return j;},getCommonAncestor:function(h){var j=this;if(h.equals(j))return j;if(h.contains&&h.contains(j))return h;var i=j.contains?j:j.getParent();do if(i.contains(h))return i;while(i=i.getParent())return null;},getPosition:function(h){var i=this.$,j=h.$;if(i.compareDocumentPosition)return i.compareDocumentPosition(j);if(i==j)return 0;if(this.type==1&&h.type==1){if(i.contains){if(i.contains(j))return 16+4;if(j.contains(i))return 8+2;}if('sourceIndex' in i)return i.sourceIndex<0||j.sourceIndex<0?1:i.sourceIndex<j.sourceIndex?4:2;}var k=this.getAddress(),l=h.getAddress(),m=Math.min(k.length,l.length);for(var n=0;n<=m-1;n++)if(k[n]!=l[n]){if(n<m)return k[n]<l[n]?4:2;break;}return k.length<l.length?16+4:8+2;},getAscendant:function(h,i){var j=this.$;if(!i)j=j.parentNode;while(j){if(j.nodeName&&j.nodeName.toLowerCase()==h)return new d.node(j);j=j.parentNode;}return null;},hasAscendant:function(h,i){var j=this.$;if(!i)j=j.parentNode;while(j){if(j.nodeName&&j.nodeName.toLowerCase()==h)return true;j=j.parentNode;}return false;},move:function(h,i){h.append(this.remove(),i);},remove:function(h){var i=this.$,j=i.parentNode;if(j){if(h)for(var k;k=i.firstChild;)j.insertBefore(i.removeChild(k),i);j.removeChild(i);}return this;},replace:function(h){this.insertBefore(h);h.remove();},trim:function(){this.ltrim();this.rtrim();},ltrim:function(){var k=this;var h;while(k.getFirst&&(h=k.getFirst())){if(h.type==3){var i=e.ltrim(h.getText()),j=h.getLength();if(!i){h.remove();continue;}else if(i.length<j){h.split(j-i.length);k.$.removeChild(k.$.firstChild);\r
+}}break;}},rtrim:function(){var k=this;var h;while(k.getLast&&(h=k.getLast())){if(h.type==3){var i=e.rtrim(h.getText()),j=h.getLength();if(!i){h.remove();continue;}else if(i.length<j){h.split(i.length);k.$.lastChild.parentNode.removeChild(k.$.lastChild);}}break;}if(!c&&!b.opera){h=k.$.lastChild;if(h&&h.type==1&&h.nodeName.toLowerCase()=='br')h.parentNode.removeChild(h);}}});d.nodeList=function(h){this.$=h;};d.nodeList.prototype={count:function(){return this.$.length;},getItem:function(h){var i=this.$[h];return i?new d.node(i):null;}};d.element=function(h,i){if(typeof h=='string')h=(i?i.$:document).createElement(h);d.domObject.call(this,h);};var h=d.element;h.get=function(i){return i&&(i.$?i:new h(i));};h.prototype=new d.node();h.createFromHtml=function(i,j){var k=new h('div',j);k.setHtml(i);return k.getFirst().remove();};h.setMarker=function(i,j,k,l){var m=j.getCustomData('list_marker_id')||j.setCustomData('list_marker_id',e.getNextNumber()).getCustomData('list_marker_id'),n=j.getCustomData('list_marker_names')||j.setCustomData('list_marker_names',{}).getCustomData('list_marker_names');i[m]=j;n[k]=1;return j.setCustomData(k,l);};h.clearAllMarkers=function(i){for(var j in i)h.clearMarkers(i,i[j],true);};h.clearMarkers=function(i,j,k){var l=j.getCustomData('list_marker_names'),m=j.getCustomData('list_marker_id');for(var n in l)j.removeCustomData(n);j.removeCustomData('list_marker_names');if(k){j.removeCustomData('list_marker_id');delete i[m];}};e.extend(h.prototype,{type:1,addClass:function(i){var j=this.$.className;if(j){var k=new RegExp('(?:^|\\s)'+i+'(?:\\s|$)','');if(!k.test(j))j+=' '+i;}this.$.className=j||i;},removeClass:function(i){var j=this.getAttribute('class');if(j){var k=new RegExp('(?:^|\\s+)'+i+'(?=\\s|$)','i');if(k.test(j)){j=j.replace(k,'').replace(/^\s+/,'');if(j)this.setAttribute('class',j);else this.removeAttribute('class');}}},hasClass:function(i){var j=new RegExp('(?:^|\\s+)'+i+'(?=\\s|$)','');return j.test(this.getAttribute('class'));},append:function(i,j){var k=this;if(typeof i=='string')i=k.getDocument().createElement(i);if(j)k.$.insertBefore(i.$,k.$.firstChild);else k.$.appendChild(i.$);return i;},appendHtml:function(i){var k=this;if(!k.$.childNodes.length)k.setHtml(i);else{var j=new h('div',k.getDocument());j.setHtml(i);j.moveChildren(k);}},appendText:function(i){if(this.$.text!=undefined)this.$.text+=i;else this.append(new d.text(i));},appendBogus:function(){var j=this;var i=j.getLast();while(i&&i.type==3&&!e.rtrim(i.getText()))i=i.getPrevious();\r
+if(!i||!i.is||!i.is('br'))j.append(b.opera?j.getDocument().createText(''):j.getDocument().createElement('br'));},breakParent:function(i){var l=this;var j=new d.range(l.getDocument());j.setStartAfter(l);j.setEndAfter(i);var k=j.extractContents();j.insertNode(l.remove());k.insertAfterNode(l);},contains:c||b.webkit?function(i){var j=this.$;return i.type!=1?j.contains(i.getParent().$):j!=i.$&&j.contains(i.$);}:function(i){return!!(this.$.compareDocumentPosition(i.$)&16);},focus:function(){try{this.$.focus();}catch(i){}},getHtml:function(){return this.$.innerHTML;},getOuterHtml:function(){var j=this;if(j.$.outerHTML)return j.$.outerHTML.replace(/<\?[^>]*>/,'');var i=j.$.ownerDocument.createElement('div');i.appendChild(j.$.cloneNode(true));return i.innerHTML;},setHtml:function(i){return this.$.innerHTML=i;},setText:function(i){h.prototype.setText=this.$.innerText!=undefined?function(j){return this.$.innerText=j;}:function(j){return this.$.textContent=j;};return this.setText(i);},getAttribute:(function(){var i=function(j){return this.$.getAttribute(j,2);};if(c&&(b.ie7Compat||b.ie6Compat))return function(j){var l=this;switch(j){case 'class':j='className';break;case 'tabindex':var k=i.call(l,j);if(k!==0&&l.$.tabIndex===0)k=null;return k;break;case 'checked':return l.$.checked;break;case 'style':return l.$.style.cssText;}return i.call(l,j);};else return i;})(),getChildren:function(){return new d.nodeList(this.$.childNodes);},getComputedStyle:c?function(i){return this.$.currentStyle[e.cssStyleToDomStyle(i)];}:function(i){return this.getWindow().$.getComputedStyle(this.$,'').getPropertyValue(i);},getDtd:function(){var i=f[this.getName()];this.getDtd=function(){return i;};return i;},getElementsByTag:g.prototype.getElementsByTag,getTabIndex:c?function(){var i=this.$.tabIndex;if(i===0&&!f.$tabIndex[this.getName()]&&parseInt(this.getAttribute('tabindex'),10)!==0)i=-1;return i;}:b.webkit?function(){var i=this.$.tabIndex;if(i==undefined){i=parseInt(this.getAttribute('tabindex'),10);if(isNaN(i))i=-1;}return i;}:function(){return this.$.tabIndex;},getText:function(){return this.$.textContent||this.$.innerText||'';},getWindow:function(){return this.getDocument().getWindow();},getId:function(){return this.$.id||null;},getNameAtt:function(){return this.$.name||null;},getName:function(){var i=this.$.nodeName.toLowerCase();if(c){var j=this.$.scopeName;if(j!='HTML')i=j.toLowerCase()+':'+i;}return(this.getName=function(){return i;})();},getValue:function(){return this.$.value;},getFirst:function(){var i=this.$.firstChild;\r
+return i?new d.node(i):null;},getLast:function(i){var j=this.$.lastChild,k=j&&new d.node(j);if(k&&i&&!i(k))k=k.getPrevious(i);return k;},getStyle:function(i){return this.$.style[e.cssStyleToDomStyle(i)];},is:function(){var i=this.getName();for(var j=0;j<arguments.length;j++)if(arguments[j]==i)return true;return false;},isEditable:function(){var i=this.getName(),j=!f.$nonEditable[i]&&(f[i]||f.span);return j&&j['#'];},isIdentical:function(i){if(this.getName()!=i.getName())return false;var j=this.$.attributes,k=i.$.attributes,l=j.length,m=k.length;if(!c&&l!=m)return false;for(var n=0;n<l;n++){var o=j[n];if((!c||o.specified&&o.nodeName!='_cke_expando')&&(o.nodeValue!=i.getAttribute(o.nodeName)))return false;}if(c)for(n=0;n<m;n++){o=k[n];if((!c||o.specified&&o.nodeName!='_cke_expando')&&(o.nodeValue!=j.getAttribute(o.nodeName)))return false;}return true;},isVisible:function(){return this.$.offsetWidth&&this.$.style.visibility!='hidden';},hasAttributes:c&&(b.ie7Compat||b.ie6Compat)?function(){var i=this.$.attributes;for(var j=0;j<i.length;j++){var k=i[j];switch(k.nodeName){case 'class':if(this.getAttribute('class'))return true;case '_cke_expando':continue;default:if(k.specified)return true;}}return false;}:function(){var i=this.$.attributes;return i.length>1||i.length==1&&i[0].nodeName!='_cke_expando';},hasAttribute:function(i){var j=this.$.attributes.getNamedItem(i);return!!(j&&j.specified);},hide:function(){this.setStyle('display','none');},moveChildren:function(i,j){var k=this.$;i=i.$;if(k==i)return;var l;if(j)while(l=k.lastChild)i.insertBefore(k.removeChild(l),i.firstChild);else while(l=k.firstChild)i.appendChild(k.removeChild(l));},show:function(){this.setStyles({display:'',visibility:''});},setAttribute:(function(){var i=function(j,k){this.$.setAttribute(j,k);return this;};if(c&&(b.ie7Compat||b.ie6Compat))return function(j,k){var l=this;if(j=='class')l.$.className=k;else if(j=='style')l.$.style.cssText=k;else if(j=='tabindex')l.$.tabIndex=k;else if(j=='checked')l.$.checked=k;else i.apply(l,arguments);return l;};else return i;})(),setAttributes:function(i){for(var j in i)this.setAttribute(j,i[j]);return this;},setValue:function(i){this.$.value=i;return this;},removeAttribute:(function(){var i=function(j){this.$.removeAttribute(j);};if(c&&(b.ie7Compat||b.ie6Compat))return function(j){if(j=='class')j='className';else if(j=='tabindex')j='tabIndex';i.call(this,j);};else return i;})(),removeAttributes:function(i){for(var j=0;j<i.length;j++)this.removeAttribute(i[j]);\r
+},removeStyle:function(i){var j=this;if(j.$.style.removeAttribute)j.$.style.removeAttribute(e.cssStyleToDomStyle(i));else j.setStyle(i,'');if(!j.$.style.cssText)j.removeAttribute('style');},setStyle:function(i,j){this.$.style[e.cssStyleToDomStyle(i)]=j;return this;},setStyles:function(i){for(var j in i)this.setStyle(j,i[j]);return this;},setOpacity:function(i){if(c){i=Math.round(i*100);this.setStyle('filter',i>=100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+i+')');}else this.setStyle('opacity',i);},unselectable:b.gecko?function(){this.$.style.MozUserSelect='none';}:b.webkit?function(){this.$.style.KhtmlUserSelect='none';}:function(){if(c||b.opera){var i=this.$,j,k=0;i.unselectable='on';while(j=i.all[k++])switch(j.tagName.toLowerCase()){case 'iframe':case 'textarea':case 'input':case 'select':break;default:j.unselectable='on';}}},getPositionedAncestor:function(){var i=this;while(i.getName()!='html'){if(i.getComputedStyle('position')!='static')return i;i=i.getParent();}return null;},getDocumentPosition:function(i){var D=this;var j=0,k=0,l=D.getDocument().getBody(),m=D.getDocument().$.compatMode=='BackCompat',n=D.getDocument();if(document.documentElement.getBoundingClientRect){var o=D.$.getBoundingClientRect(),p=n.$,q=p.documentElement,r=q.clientTop||l.$.clientTop||0,s=q.clientLeft||l.$.clientLeft||0,t=true;if(c){var u=n.getDocumentElement().contains(D),v=n.getBody().contains(D);t=m&&v||!m&&u;}if(t){j=o.left+(!m&&q.scrollLeft||l.$.scrollLeft);j-=s;k=o.top+(!m&&q.scrollTop||l.$.scrollTop);k-=r;}}else{var w=D,x=null,y;while(w&&!(w.getName()=='body'||w.getName()=='html')){j+=w.$.offsetLeft-w.$.scrollLeft;k+=w.$.offsetTop-w.$.scrollTop;if(!w.equals(D)){j+=w.$.clientLeft||0;k+=w.$.clientTop||0;}var z=x;while(z&&!z.equals(w)){j-=z.$.scrollLeft;k-=z.$.scrollTop;z=z.getParent();}x=w;w=(y=w.$.offsetParent)?new h(y):null;}}if(i){var A=D.getWindow(),B=i.getWindow();if(!A.equals(B)&&A.$.frameElement){var C=new h(A.$.frameElement).getDocumentPosition(i);j+=C.x;k+=C.y;}}if(!document.documentElement.getBoundingClientRect)if(b.gecko&&!m){j+=D.$.clientLeft?1:0;k+=D.$.clientTop?1:0;}return{x:j,y:k};},scrollIntoView:function(i){var o=this;var j=o.getWindow(),k=j.getViewPaneSize().height,l=k*-1;if(i)l+=k;else{l+=o.$.offsetHeight||0;l+=parseInt(o.getComputedStyle('marginBottom')||0,10)||0;}var m=o.getDocumentPosition();l+=m.y;l=l<0?0:l;var n=j.getScrollPosition().y;if(l>n||l<n-k)j.$.scrollTo(0,l);},setState:function(i){var j=this;switch(i){case 1:j.addClass('cke_on');j.removeClass('cke_off');\r
+j.removeClass('cke_disabled');break;case 0:j.addClass('cke_disabled');j.removeClass('cke_off');j.removeClass('cke_on');break;default:j.addClass('cke_off');j.removeClass('cke_on');j.removeClass('cke_disabled');break;}},getFrameDocument:function(){var i=this.$;try{i.contentWindow.document;}catch(j){i.src=i.src;if(c&&b.version<7)window.showModalDialog('javascript:document.write("<script>window.setTimeout(function(){window.close();},50);</script>")');}return i&&new g(i.contentWindow.document);},copyAttributes:function(i,j){var p=this;var k=p.$.attributes;j=j||{};for(var l=0;l<k.length;l++){var m=k[l];if(m.specified||c&&m.nodeValue&&m.nodeName.toLowerCase()=='value'){var n=m.nodeName;if(n in j)continue;var o=p.getAttribute(n);if(o===null)o=m.nodeValue;i.setAttribute(n,o);}}if(p.$.style.cssText!=='')i.$.style.cssText=p.$.style.cssText;},renameNode:function(i){var l=this;if(l.getName()==i)return;var j=l.getDocument(),k=new h(i,j);l.copyAttributes(k);l.moveChildren(k);l.$.parentNode.replaceChild(k.$,l.$);k.$._cke_expando=l.$._cke_expando;l.$=k.$;},getChild:function(i){var j=this.$;if(!i.slice)j=j.childNodes[i];else while(i.length>0&&j)j=j.childNodes[i.shift()];return j?new d.node(j):null;},getChildCount:function(){return this.$.childNodes.length;}});a.command=function(i,j){this.exec=function(k){if(this.state==0)return false;i.focus();return j.exec.call(this,i,k)!==false;};e.extend(this,j,{modes:{wysiwyg:1},state:2});a.event.call(this);};a.command.prototype={enable:function(){var i=this;if(i.state==0)i.setState(!i.preserveState||typeof i.previousState=='undefined'?2:i.previousState);},disable:function(){this.setState(0);},setState:function(i){var j=this;if(j.state==i)return false;j.previousState=j.state;j.state=i;j.fire('state');return true;},toggleState:function(){var i=this;if(i.state==2)i.setState(1);else if(i.state==1)i.setState(2);}};a.event.implementOn(a.command.prototype,true);a.ENTER_P=1;a.ENTER_BR=2;a.ENTER_DIV=3;a.config={customConfig:a.getUrl('config.js'),autoUpdateElement:true,baseHref:'',contentsCss:a.basePath+'contents.css',contentsLangDirection:'ltr',language:'',defaultLanguage:'en',enterMode:1,shiftEnterMode:2,corePlugins:'',docType:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',fullPage:false,height:200,plugins:'about,basicstyles,blockquote,button,clipboard,colorbutton,contextmenu,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',extraPlugins:'',removePlugins:'',protectedSource:[],tabIndex:0,theme:'default',skin:'kama',width:'',baseFloatZIndex:10000};\r
+var i=a.config;a.focusManager=function(j){if(j.focusManager)return j.focusManager;this.hasFocus=false;this._={editor:j};return this;};a.focusManager.prototype={focus:function(){var k=this;if(k._.timer)clearTimeout(k._.timer);if(!k.hasFocus){if(a.currentInstance)a.currentInstance.focusManager.forceBlur();var j=k._.editor;j.container.getFirst().addClass('cke_focus');k.hasFocus=true;j.fire('focus');}},blur:function(){var j=this;if(j._.timer)clearTimeout(j._.timer);j._.timer=setTimeout(function(){delete j._.timer;j.forceBlur();},100);},forceBlur:function(){if(this.hasFocus){var j=this._.editor;j.container.getFirst().removeClass('cke_focus');this.hasFocus=false;j.fire('blur');}}};(function(){var j={};a.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,da:1,de:1,el:1,'en-au':1,'en-ca':1,'en-uk':1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,'fr-ca':1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,is:1,it:1,ja:1,km:1,ko:1,lt:1,lv:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,'pt-br':1,pt:1,ro:1,ru:1,sk:1,sl:1,'sr-latn':1,sr:1,sv:1,th:1,tr:1,uk:1,vi:1,'zh-cn':1,zh:1},load:function(k,l,m){if(!k)k=this.detect(l);if(!this[k])a.scriptLoader.load(a.getUrl('lang/'+k+'.js'),function(){m(k,this[k]);},this);else m(k,this[k]);},detect:function(k){var l=this.languages,m=(navigator.userLanguage||navigator.language).toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),n=m[1],o=m[2];if(l[n+'-'+o])n=n+'-'+o;else if(!l[n])n=null;a.lang.detect=n?function(){return n;}:function(p){return p;};return n||k;}};})();a.scriptLoader=(function(){var j={},k={};return{load:function(l,m,n,o){var p=typeof l=='string';if(p)l=[l];if(!n)n=a;var q=l.length,r=[],s=[],t=function(y){if(m)if(p)m.call(n,y);else m.call(n,r,s);};if(q===0){t(true);return;}var u=function(y,z){(z?r:s).push(y);if(--q<=0)t(z);},v=function(y,z){j[y]=1;var A=k[y];delete k[y];for(var B=0;B<A.length;B++)A[B](y,z);},w=function(y){if(o!==true&&j[y]){u(y,true);return;}var z=k[y]||(k[y]=[]);z.push(u);if(z.length>1)return;var A=new h('script');A.setAttributes({type:'text/javascript',src:y});if(m)if(c)A.$.onreadystatechange=function(){if(A.$.readyState=='loaded'||A.$.readyState=='complete'){A.$.onreadystatechange=null;v(y,true);}};else{A.$.onload=function(){setTimeout(function(){v(y,true);},0);};A.$.onerror=function(){v(y,false);};}A.appendTo(a.document.getHead());};for(var x=0;x<q;x++)w(l[x]);},loadCode:function(l){var m=new h('script');m.setAttribute('type','text/javascript');m.appendText(l);m.appendTo(a.document.getHead());}};})();a.resourceManager=function(j,k){var l=this;\r
+l.basePath=j;l.fileName=k;l.registered={};l.loaded={};l.externals={};l._={waitingList:{}};};a.resourceManager.prototype={add:function(j,k){if(this.registered[j])throw '[CKEDITOR.resourceManager.add] The resource name "'+j+'" is already registered.';this.registered[j]=k||{};},get:function(j){return this.registered[j]||null;},getPath:function(j){var k=this.externals[j];return a.getUrl(k&&k.dir||this.basePath+j+'/');},getFilePath:function(j){var k=this.externals[j];return a.getUrl(this.getPath(j)+(k&&k.file||this.fileName+'.js'));},addExternal:function(j,k,l){j=j.split(',');for(var m=0;m<j.length;m++){var n=j[m];this.externals[n]={dir:k,file:l};}},load:function(j,k,l){if(!e.isArray(j))j=j?[j]:[];var m=this.loaded,n=this.registered,o=[],p={},q={};for(var r=0;r<j.length;r++){var s=j[r];if(!s)continue;if(!m[s]&&!n[s]){var t=this.getFilePath(s);o.push(t);if(!(t in p))p[t]=[];p[t].push(s);}else q[s]=this.get(s);}a.scriptLoader.load(o,function(u,v){if(v.length)throw '[CKEDITOR.resourceManager.load] Resource name "'+p[v[0]].join(',')+'" was not found at "'+v[0]+'".';for(var w=0;w<u.length;w++){var x=p[u[w]];for(var y=0;y<x.length;y++){var z=x[y];q[z]=this.get(z);m[z]=1;}}k.call(l,q);},this);}};a.plugins=new a.resourceManager('plugins/','plugin');var j=a.plugins;j.load=e.override(j.load,function(k){return function(l,m,n){var o={},p=function(q){k.call(this,q,function(r){e.extend(o,r);var s=[];for(var t in r){var u=r[t],v=u&&u.requires;if(v)for(var w=0;w<v.length;w++)if(!o[v[w]])s.push(v[w]);}if(s.length)p.call(this,s);else{for(t in o){u=o[t];if(u.onLoad&&!u.onLoad._called){u.onLoad();u.onLoad._called=1;}}if(m)m.call(n||window,o);}},this);};p.call(this,l);};});j.setLang=function(k,l,m){var n=this.get(k);n.lang[l]=m;};(function(){var k={},l=function(m,n){var o=function(){k[m]=1;n();},p=new h('img');p.on('load',o);p.on('error',o);p.setAttribute('src',m);};a.imageCacher={load:function(m,n){var o=m.length,p=function(){if(--o===0)n();};for(var q=0;q<m.length;q++){var r=m[q];if(k[r])p();else l(r,p);}}};})();a.skins=(function(){var k={},l={},m={},n=function(o,p,q){var r=k[o],s=function(A){for(var B=0;B<A.length;B++)A[B]=a.getUrl(m[o]+A[B]);};if(!l[o]){var t=r.preload;if(t&&t.length>0){s(t);a.imageCacher.load(t,function(){l[o]=1;n(o,p,q);});return;}l[o]=1;}p=r[p];var u=!p||!!p._isLoaded;if(u)q&&q();else{var v=p._pending||(p._pending=[]);v.push(q);if(v.length>1)return;var w=!p.css||!p.css.length,x=!p.js||!p.js.length,y=function(){if(w&&x){p._isLoaded=1;for(var A=0;A<v.length;A++)if(v[A])v[A]();\r
+}};if(!w){s(p.css);for(var z=0;z<p.css.length;z++)a.document.appendStyleSheet(p.css[z]);w=1;}if(!x){s(p.js);a.scriptLoader.load(p.js,function(){x=1;y();});}y();}};return{add:function(o,p){k[o]=p;p.skinPath=m[o]||(m[o]=a.getUrl('skins/'+o+'/'));},load:function(o,p,q){var r=o.skinName,s=o.skinPath;if(k[r]){n(r,p,q);var t=k[r];if(t.init)t.init(o);}else{m[r]=s;a.scriptLoader.load(s+'skin.js',function(){n(r,p,q);var u=k[r];if(u.init)u.init(o);});}}};})();a.themes=new a.resourceManager('themes/','theme');a.ui=function(k){if(k.ui)return k.ui;this._={handlers:{},items:{}};return this;};var k=a.ui;k.prototype={add:function(l,m,n){this._.items[l]={type:m,args:Array.prototype.slice.call(arguments,2)};},create:function(l){var m=this._.items[l],n=m&&this._.handlers[m.type];return n&&n.create.apply(this,m.args);},addHandler:function(l,m){this._.handlers[l]=m;}};(function(){var l=0,m=function(){var x='editor'+ ++l;return a.instances&&a.instances[x]?m():x;},n={},o=function(x){var y=x.config.customConfig;if(!y)return false;var z=n[y]||(n[y]={});if(z.fn){z.fn.call(x,x.config);if(x.config.customConfig==y||!o(x))x.fireOnce('customConfigLoaded');}else a.scriptLoader.load(y,function(){if(a.editorConfig)z.fn=a.editorConfig;else z.fn=function(){};o(x);});return true;},p=function(x,y){x.on('customConfigLoaded',function(){if(y){if(y.on)for(var z in y.on)x.on(z,y.on[z]);e.extend(x.config,y,true);delete x.config.on;}q(x);});if(y&&y.customConfig!=undefined)x.config.customConfig=y.customConfig;if(!o(x))x.fireOnce('customConfigLoaded');},q=function(x){var y=x.config.skin.split(','),z=y[0],A=a.getUrl(y[1]||'skins/'+z+'/');x.skinName=z;x.skinPath=A;x.skinClass='cke_skin_'+z;x.fireOnce('configLoaded');r(x);},r=function(x){a.lang.load(x.config.language,x.config.defaultLanguage,function(y,z){x.langCode=y;x.lang=e.prototypedCopy(z);if(b.gecko&&b.version<10900&&x.lang.dir=='rtl')x.lang.dir='ltr';s(x);});},s=function(x){var y=x.config,z=y.plugins,A=y.extraPlugins,B=y.removePlugins;if(A){var C=new RegExp('(?:^|,)(?:'+A.replace(/\s*,\s*/g,'|')+')(?=,|$)','g');z=z.replace(C,'');z+=','+A;}if(B){C=new RegExp('(?:^|,)(?:'+B.replace(/\s*,\s*/g,'|')+')(?=,|$)','g');z=z.replace(C,'');}j.load(z.split(','),function(D){var E=[],F=[],G=[];x.plugins=D;for(var H in D){var I=D[H],J=I.lang,K=j.getPath(H),L=null;I.path=K;if(J){L=e.indexOf(J,x.langCode)>=0?x.langCode:J[0];if(!I.lang[L])G.push(a.getUrl(K+'lang/'+L+'.js'));else{e.extend(x.lang,I.lang[L]);L=null;}}F.push(L);E.push(I);}a.scriptLoader.load(G,function(){var M=['beforeInit','init','afterInit'];\r
+for(var N=0;N<M.length;N++)for(var O=0;O<E.length;O++){var P=E[O];if(N===0&&F[O]&&P.lang)e.extend(x.lang,P.lang[F[O]]);if(P[M[N]])P[M[N]](x);}x.fire('pluginsLoaded');t(x);});});},t=function(x){a.skins.load(x,'editor',function(){u(x);});},u=function(x){var y=x.config.theme;a.themes.load(y,function(){var z=x.theme=a.themes.get(y);z.path=a.themes.getPath(y);z.build(x);if(x.config.autoUpdateElement)v(x);});},v=function(x){var y=x.element;if(x.elementMode==1&&y.is('textarea')){var z=y.$.form&&new h(y.$.form);if(z){function A(){x.updateElement();};z.on('submit',A);if(!z.$.submit.nodeName)z.$.submit=e.override(z.$.submit,function(B){return function(){x.updateElement();if(B.apply)B.apply(this,arguments);else B();};});x.on('destroy',function(){z.removeListener('submit',A);});}}};function w(){var x,y=this._.commands,z=this.mode;for(var A in y){x=y[A];x[x.modes[z]?'enable':'disable']();}};a.editor.prototype._init=function(){var z=this;var x=h.get(z._.element),y=z._.instanceConfig;delete z._.element;delete z._.instanceConfig;z._.commands={};z._.styles=[];z.element=x;z.name=x&&z.elementMode==1&&(x.getId()||x.getNameAtt())||m();if(z.name in a.instances)throw '[CKEDITOR.editor] The instance "'+z.name+'" already exists.';z.config=e.prototypedCopy(i);z.ui=new k(z);z.focusManager=new a.focusManager(z);a.fire('instanceCreated',null,z);z.on('mode',w,null,null,1);p(z,y);};})();e.extend(a.editor.prototype,{addCommand:function(l,m){return this._.commands[l]=new a.command(this,m);},addCss:function(l){this._.styles.push(l);},destroy:function(l){var m=this;if(!l)m.updateElement();m.theme.destroy(m);m.fire('destroy');a.remove(m);},execCommand:function(l,m){var n=this.getCommand(l),o={name:l,commandData:m,command:n};if(n&&n.state!=0)if(this.fire('beforeCommandExec',o)!==true){o.returnValue=n.exec(o.commandData);if(!n.async&&this.fire('afterCommandExec',o)!==true)return o.returnValue;}return false;},getCommand:function(l){return this._.commands[l];},getData:function(){var n=this;n.fire('beforeGetData');var l=n._.data;if(typeof l!='string'){var m=n.element;if(m&&n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();else l='';}l={dataValue:l};n.fire('getData',l);return l.dataValue;},getSnapshot:function(){var l=this.fire('getSnapshot');if(typeof l!='string'){var m=this.element;if(m&&this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();}return l;},loadSnapshot:function(l){this.fire('loadSnapshot',l);},setData:function(l){var m={dataValue:l};this.fire('setData',m);this._.data=m.dataValue;\r
+this.fire('afterSetData',m);},insertHtml:function(l){this.fire('insertHtml',l);},insertElement:function(l){this.fire('insertElement',l);},checkDirty:function(){return this.mayBeDirty&&this._.previousValue!==this.getSnapshot();},resetDirty:function(){if(this.mayBeDirty)this._.previousValue=this.getSnapshot();},updateElement:function(){var m=this;var l=m.element;if(l&&m.elementMode==1)if(l.is('textarea'))l.setValue(m.getData());else l.setHtml(m.getData());}});a.on('loaded',function(){var l=a.editor._pending;if(l){delete a.editor._pending;for(var m=0;m<l.length;m++)l[m]._init();}});a.htmlParser=function(){this._={htmlPartsRegex:new RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s>]+)\\s*((?:(?:[^\"'>]+)|(?:\"[^\"]*\")|(?:'[^']*'))*)\\/?>))",'g')};};(function(){var l=/([\w:]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,m={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};a.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(n){var A=this;var o,p,q=0,r;while(o=A._.htmlPartsRegex.exec(n)){var s=o.index;if(s>q){var t=n.substring(q,s);if(r)r.push(t);else A.onText(t);}q=A._.htmlPartsRegex.lastIndex;if(p=o[1]){p=p.toLowerCase();if(r&&f.$cdata[p]){A.onCDATA(r.join(''));r=null;}if(!r){A.onTagClose(p);continue;}}if(r){r.push(o[0]);continue;}if(p=o[3]){p=p.toLowerCase();var u={},v,w=o[4],x=!!(w&&w.charAt(w.length-1)=='/');if(w)while(v=l.exec(w)){var y=v[1].toLowerCase(),z=v[2]||v[3]||v[4]||'';if(!z&&m[y])u[y]=y;else u[y]=z;}A.onTagOpen(p,u,x);if(!r&&f.$cdata[p])r=[];continue;}if(p=o[2])A.onComment(p);}if(n.length>q)A.onText(n.substring(q,n.length));}};})();a.htmlParser.comment=function(l){this.value=l;this._={isBlockLike:false};};a.htmlParser.comment.prototype={type:8,writeHtml:function(l,m){var n=this.value;if(m){if(!(n=m.onComment(n)))return;if(typeof n!='string'){n.writeHtml(l,m);return;}}l.comment(n);}};(function(){var l=/[\t\r\n ]{2,}|[\t\r\n]/g;a.htmlParser.text=function(m){this.value=m;this._={isBlockLike:false};};a.htmlParser.text.prototype={type:3,writeHtml:function(m,n){var o=this.value;if(n&&!(o=n.onText(o,this)))return;m.text(o);}};})();(function(){a.htmlParser.cdata=function(l){this.value=l;};a.htmlParser.cdata.prototype={type:3,writeHtml:function(l){l.write(this.value);}};})();a.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false};\r
+};(function(){var l={colgroup:1,dd:1,dt:1,li:1,option:1,p:1,td:1,tfoot:1,th:1,thead:1,tr:1},m=e.extend({table:1,ul:1,ol:1,dl:1},f.table,f.ul,f.ol,f.dl);a.htmlParser.fragment.fromHtml=function(n,o){var p=new a.htmlParser(),q=[],r=new a.htmlParser.fragment(),s=[],t=r,u=false,v;function w(A){if(s.length>0)for(var B=0;B<s.length;B++){var C=s[B],D=C.name,E=f[D],F=t.name&&f[t.name];if((!F||F[D])&&(!A||!E||E[A]||!f[A])){C=C.clone();C.parent=t;t=C;s.splice(B,1);B--;}}};function x(A,B,C){B=B||t||r;if(o&&!B.type){var D,E;if(A.attributes&&(E=A.attributes._cke_real_element_type))D=E;else D=A.name;if(!(D in f.$body)){var F=t;t=B;p.onTagOpen(o,{});B=t;if(C)t=F;}}if(A._.isBlockLike&&A.name!='pre'){var G=A.children.length,H=A.children[G-1],I;if(H&&H.type==3)if(!(I=e.rtrim(H.value)))A.children.length=G-1;else H.value=I;}B.add(A);if(A.returnPoint){t=A.returnPoint;delete A.returnPoint;}};p.onTagOpen=function(A,B,C){var D=new a.htmlParser.element(A,B);if(D.isUnknown&&C)D.isEmpty=true;if(f.$removeEmpty[A]){s.push(D);return;}else if(A=='pre')u=true;else if(A=='br'&&u){t.add(new a.htmlParser.text('\n'));return;}var E=t.name,F=E&&f[E]||(t._.isBlockLike?f.div:f.span);if(!D.isUnknown&&!t.isUnknown&&!F[A]){if(!E)return;var G=false;if(A==E)x(t,t.parent);else{if(m[E]){if(!v)v=t;}else{x(t,t.parent,true);if(!l[E])s.unshift(t);}G=true;}t=t.returnPoint||t.parent;if(G){p.onTagOpen.apply(this,arguments);return;}}w(A);D.parent=t;D.returnPoint=v;v=0;if(D.isEmpty)x(D);else t=D;};p.onTagClose=function(A){var B=0,C=[],D=t;while(D.type&&D.name!=A){if(!D._.isBlockLike){s.unshift(D);B++;}C.push(D);D=D.parent;}if(D.type){for(var E=0;E<C.length;E++){var F=C[E];x(F,F.parent);}t=D;if(t.name=='pre')u=false;x(D,D.parent);if(D==t)t=t.parent;}else{s.splice(0,B);B=0;}for(;B<s.length;B++)if(A==s[B].name){s.splice(B,1);B--;}};p.onText=function(A){if(!t._.hasInlineStarted&&!u){A=e.ltrim(A);if(A.length===0)return;}w();if(o&&!t.type)this.onTagOpen(o,{});if(!u)A=A.replace(/[\t\r\n ]{2,}|[\t\r\n]/g,' ');t.add(new a.htmlParser.text(A));};p.onCDATA=function(A){t.add(new a.htmlParser.cdata(A));};p.onComment=function(A){t.add(new a.htmlParser.comment(A));};p.parse(n);while(t.type){var y=t.parent,z=t;if(o&&!y.type&&!f.$body[z.name]){t=y;p.onTagOpen(o,{});y=t;}y.add(z);t=y;}return r;};a.htmlParser.fragment.prototype={add:function(n){var q=this;var o=q.children.length,p=o>0&&q.children[o-1]||null;if(p){if(n._.isBlockLike&&p.type==3){p.value=e.rtrim(p.value);if(p.value.length===0){q.children.pop();q.add(n);return;}}p.next=n;\r
+}n.previous=p;n.parent=q;q.children.push(n);q._.hasInlineStarted=n.type==3||n.type==1&&!n._.isBlockLike;},writeHtml:function(n,o){for(var p=0,q=this.children.length;p<q;p++)this.children[p].writeHtml(n,o);}};})();a.htmlParser.element=function(l,m){var q=this;q.name=l;q.attributes=m;q.children=[];var n=f,o=!!(n.$block[l]||n.$listItem[l]||n.$tableContent[l]),p=!!n.$empty[l];q.isEmpty=p;q.isUnknown=!n[l];q._={isBlockLike:o,hasInlineStarted:p||!o};};(function(){var l=function(m,n){m=m[0];n=n[0];return m<n?-1:m>n?1:0;};a.htmlParser.element.prototype={type:1,add:a.htmlParser.fragment.prototype.add,clone:function(){return new a.htmlParser.element(this.name,this.attributes);},writeHtml:function(m,n){var o=this.attributes;if(o._cke_replacedata){m.write(o._cke_replacedata);return;}var p=this,q=p.name,r,s;if(n){for(;;){if(!(q=n.onElementName(q)))return;p.name=q;if(!(p=n.onElement(p)))return;if(p.name==q)break;q=p.name;if(!q){a.htmlParser.fragment.prototype.writeHtml.apply(p,arguments);return;}}o=p.attributes;}m.openTag(q,o);if(m.sortAttributes){var t=[];for(r in o){s=o[r];if(n&&(!(r=n.onAttributeName(r))||(s=n.onAttribute(p,r,s))===(false)))continue;t.push([r,s]);}t.sort(l);for(var u=0,v=t.length;u<v;u++){var w=t[u];m.attribute(w[0],w[1]);}}else for(r in o){s=o[r];if(n&&(!(r=n.onAttributeName(r))||(s=n.onAttribute(p,r,s))===(false)))continue;m.attribute(r,s);}m.openTagClose(q,p.isEmpty);if(!p.isEmpty){a.htmlParser.fragment.prototype.writeHtml.apply(p,arguments);m.closeTag(q);}}};})();(function(){a.htmlParser.filter=e.createClass({$:function(q){this._={elementNames:[],attributeNames:[],elements:{$length:0},attributes:{$length:0}};if(q)this.addRules(q,10);},proto:{addRules:function(q,r){var s=this;if(typeof r!='number')r=10;m(s._.elementNames,q.elementNames,r);m(s._.attributeNames,q.attributeNames,r);n(s._.elements,q.elements,r);n(s._.attributes,q.attributes,r);s._.text=o(s._.text,q.text,r)||s._.text;s._.comment=o(s._.comment,q.comment,r)||s._.comment;},onElementName:function(q){return l(q,this._.elementNames);},onAttributeName:function(q){return l(q,this._.attributeNames);},onText:function(q){var r=this._.text;return r?r.filter(q):q;},onComment:function(q){var r=this._.comment;return r?r.filter(q):q;},onElement:function(q){var v=this;var r=[v._.elements[q.name],v._.elements.$],s,t;for(var u=0;u<2;u++){s=r[u];if(s){t=s.filter(q,v);if(t===false)return null;if(t&&t!=q)return v.onElement(t);}}return q;},onAttribute:function(q,r,s){var t=this._.attributes[r];if(t){var u=t.filter(s,q,this);\r
+if(u===false)return false;if(typeof u!='undefined')return u;}return s;}}});function l(q,r){for(var s=0;q&&s<r.length;s++){var t=r[s];q=q.replace(t[0],t[1]);}return q;};function m(q,r,s){var t,u,v=q.length,w=r&&r.length;if(w){for(t=0;t<v&&q[t].pri<s;t++){}for(u=w-1;u>=0;u--){var x=r[u];x.pri=s;q.splice(t,0,x);}}};function n(q,r,s){if(r)for(var t in r){var u=q[t];q[t]=o(u,r[t],s);if(!u)q.$length++;}};function o(q,r,s){if(r){r.pri=s;if(q){if(!q.splice){if(q.pri>s)q=[r,q];else q=[q,r];q.filter=p;}else m(q,r,s);return q;}else{r.filter=r;return r;}}};function p(q){var r=typeof q=='object';for(var s=0;s<this.length;s++){var t=this[s],u=t.apply(window,arguments);if(typeof u!='undefined'){if(u===false)return false;if(r&&u!=q)return u;}}return null;};})();a.htmlParser.basicWriter=e.createClass({$:function(){this._={output:[]};},proto:{openTag:function(l,m){this._.output.push('<',l);},openTagClose:function(l,m){if(m)this._.output.push(' />');else this._.output.push('>');},attribute:function(l,m){this._.output.push(' ',l,'="',m,'"');},closeTag:function(l){this._.output.push('</',l,'>');},text:function(l){this._.output.push(l);},comment:function(l){this._.output.push('<!--',l,'-->');},write:function(l){this._.output.push(l);},reset:function(){this._.output=[];},getHtml:function(l){var m=this._.output.join('');if(l)this.reset();return m;}}});delete a.loadFullCore;a.instances={};a.document=new g(document);a.add=function(l){a.instances[l.name]=l;l.on('focus',function(){if(a.currentInstance!=l){a.currentInstance=l;a.fire('currentInstance');}});l.on('blur',function(){if(a.currentInstance==l){a.currentInstance=null;a.fire('currentInstance');}});};a.remove=function(l){delete a.instances[l.name];};a.TRISTATE_ON=1;a.TRISTATE_OFF=2;a.TRISTATE_DISABLED=0;(function(){var l={address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1},m={body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,caption:1,form:1},n=function(o){var p=o.getChildren();for(var q=0,r=p.count();q<r;q++){var s=p.getItem(q);if(s.type==1&&f.$block[s.getName()])return true;}return false;};d.elementPath=function(o){var u=this;var p=null,q=null,r=[],s=o;while(s){if(s.type==1){if(!u.lastElement)u.lastElement=s;var t=s.getName();if(c&&s.$.scopeName!='HTML')t=s.$.scopeName.toLowerCase()+':'+t;if(!q){if(!p&&l[t])p=s;if(m[t])if(!p&&t=='div'&&!n(s))p=s;else q=s;}r.push(s);if(t=='body')break;}s=s.getParent();}u.block=p;u.blockLimit=q;u.elements=r;};})();d.elementPath.prototype={compare:function(l){var m=this.elements,n=l&&l.elements;\r
+if(!n||m.length!=n.length)return false;for(var o=0;o<m.length;o++)if(!m[o].equals(n[o]))return false;return true;}};d.text=function(l,m){if(typeof l=='string')l=(m?m.$:document).createTextNode(l);this.$=l;};d.text.prototype=new d.node();e.extend(d.text.prototype,{type:3,getLength:function(){return this.$.nodeValue.length;},getText:function(){return this.$.nodeValue;},split:function(l){var q=this;if(c&&l==q.getLength()){var m=q.getDocument().createText('');m.insertAfter(q);return m;}var n=q.getDocument(),o=new d.text(q.$.splitText(l),n);if(b.ie8){var p=new d.text('',n);p.insertAfter(o);p.remove();}return o;},substring:function(l,m){if(typeof m!='number')return this.$.nodeValue.substr(l);else return this.$.nodeValue.substring(l,m);}});d.documentFragment=function(l){l=l||a.document;this.$=l.$.createDocumentFragment();};e.extend(d.documentFragment.prototype,h.prototype,{type:11,insertAfterNode:function(l){l=l.$;l.parentNode.insertBefore(this.$,l.nextSibling);}},true,{append:1,appendBogus:1,getFirst:1,getLast:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1});(function(){function l(p,q){if(this._.end)return null;var r,s=this.range,t,u=this.guard,v=this.type,w=p?'getPreviousSourceNode':'getNextSourceNode';if(!this._.start){this._.start=1;s.trim();if(s.collapsed){this.end();return null;}}if(!p&&!this._.guardLTR){var x=s.endContainer,y=x.getChild(s.endOffset);this._.guardLTR=function(C,D){return(!D||!x.equals(C))&&((!y||!C.equals(y))&&(C.type!=1||C.getName()!='body'));};}if(p&&!this._.guardRTL){var z=s.startContainer,A=s.startOffset>0&&z.getChild(s.startOffset-1);this._.guardRTL=function(C,D){return(!D||!z.equals(C))&&((!A||!C.equals(A))&&(C.type!=1||C.getName()!='body'));};}var B=p?this._.guardRTL:this._.guardLTR;if(u)t=function(C,D){if(B(C,D)===false)return false;return u(C);};else t=B;if(this.current)r=this.current[w](false,v,t);else if(p){r=s.endContainer;if(s.endOffset>0){r=r.getChild(s.endOffset-1);if(t(r)===false)r=null;}else r=t(r)===false?null:r.getPreviousSourceNode(true,v,t);}else{r=s.startContainer;r=r.getChild(s.startOffset);if(r){if(t(r)===false)r=null;}else r=t(s.startContainer)===false?null:s.startContainer.getNextSourceNode(true,v,t);}while(r&&!this._.end){this.current=r;if(!this.evaluator||this.evaluator(r)!==false){if(!q)return r;}else if(q&&this.evaluator)return false;r=r[w](false,v,t);}this.end();return this.current=null;};function m(p){var q,r=null;\r
+while(q=l.call(this,p))r=q;return r;};d.walker=e.createClass({$:function(p){this.range=p;this._={};},proto:{end:function(){this._.end=1;},next:function(){return l.call(this);},previous:function(){return l.call(this,true);},checkForward:function(){return l.call(this,false,true)!==false;},checkBackward:function(){return l.call(this,true,true)!==false;},lastForward:function(){return m.call(this);},lastBackward:function(){return m.call(this,true);},reset:function(){delete this.current;this._={};}}});var n={block:1,'list-item':1,table:1,'table-row-group':1,'table-header-group':1,'table-footer-group':1,'table-row':1,'table-column-group':1,'table-column':1,'table-cell':1,'table-caption':1},o={hr:1};h.prototype.isBlockBoundary=function(p){var q=e.extend({},o,p||{});return n[this.getComputedStyle('display')]||q[this.getName()];};d.walker.blockBoundary=function(p){return function(q,r){return!(q.type==1&&q.isBlockBoundary(p));};};d.walker.listItemBoundary=function(){return this.blockBoundary({br:1});};d.walker.bookmarkContents=function(p){},d.walker.bookmark=function(p,q){function r(s){return s&&s.getName&&s.getName()=='span'&&s.hasAttribute('_fck_bookmark');};return function(s){var t,u;t=s&&!s.getName&&(u=s.getParent())&&(r(u));t=p?t:t||r(s);return q^t;};};d.walker.whitespaces=function(p){return function(q){var r=q&&q.type==3&&!e.trim(q.getText());return p^r;};};})();d.range=function(l){var m=this;m.startContainer=null;m.startOffset=null;m.endContainer=null;m.endOffset=null;m.collapsed=true;m.document=l;};(function(){var l=function(q){q.collapsed=q.startContainer&&q.endContainer&&q.startContainer.equals(q.endContainer)&&q.startOffset==q.endOffset;},m=function(q,r,s){q.optimizeBookmark();var t=q.startContainer,u=q.endContainer,v=q.startOffset,w=q.endOffset,x,y;if(u.type==3)u=u.split(w);else if(u.getChildCount()>0)if(w>=u.getChildCount()){u=u.append(q.document.createText(''));y=true;}else u=u.getChild(w);if(t.type==3){t.split(v);if(t.equals(u))u=t.getNext();}else if(!v){t=t.getFirst().insertBeforeMe(q.document.createText(''));x=true;}else if(v>=t.getChildCount()){t=t.append(q.document.createText(''));x=true;}else t=t.getChild(v).getPrevious();var z=t.getParents(),A=u.getParents(),B,C,D;for(B=0;B<z.length;B++){C=z[B];D=A[B];if(!C.equals(D))break;}var E=s,F,G,H,I;for(var J=B;J<z.length;J++){F=z[J];if(E&&!F.equals(t))G=E.append(F.clone());H=F.getNext();while(H){if(H.equals(A[J])||H.equals(u))break;I=H.getNext();if(r==2)E.append(H.clone(true));else{H.remove();if(r==1)E.append(H);\r
+}H=I;}if(E)E=G;}E=s;for(var K=B;K<A.length;K++){F=A[K];if(r>0&&!F.equals(u))G=E.append(F.clone());if(!z[K]||F.$.parentNode!=z[K].$.parentNode){H=F.getPrevious();while(H){if(H.equals(z[K])||H.equals(t))break;I=H.getPrevious();if(r==2)E.$.insertBefore(H.$.cloneNode(true),E.$.firstChild);else{H.remove();if(r==1)E.$.insertBefore(H.$,E.$.firstChild);}H=I;}}if(E)E=G;}if(r==2){var L=q.startContainer;if(L.type==3){L.$.data+=L.$.nextSibling.data;L.$.parentNode.removeChild(L.$.nextSibling);}var M=q.endContainer;if(M.type==3&&M.$.nextSibling){M.$.data+=M.$.nextSibling.data;M.$.parentNode.removeChild(M.$.nextSibling);}}else{if(C&&D&&(t.$.parentNode!=C.$.parentNode||u.$.parentNode!=D.$.parentNode)){var N=D.getIndex();if(x&&D.$.parentNode==t.$.parentNode)N--;q.setStart(D.getParent(),N);}q.collapse(true);}if(x)t.remove();if(y&&u.$.parentNode)u.remove();},n={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1};function o(q){var r=false,s=d.walker.bookmark(true);return function(t){if(s(t))return true;if(t.type==3){if(e.trim(t.getText()).length)return false;}else if(!n[t.getName()])if(!q&&!c&&t.getName()=='br'&&!r)r=true;else return false;return true;};};function p(q){return q.type!=3&&q.getName() in f.$removeEmpty||!e.trim(q.getText())||q.getParent().hasAttribute('_fck_bookmark');};d.range.prototype={clone:function(){var r=this;var q=new d.range(r.document);q.startContainer=r.startContainer;q.startOffset=r.startOffset;q.endContainer=r.endContainer;q.endOffset=r.endOffset;q.collapsed=r.collapsed;return q;},collapse:function(q){var r=this;if(q){r.endContainer=r.startContainer;r.endOffset=r.startOffset;}else{r.startContainer=r.endContainer;r.startOffset=r.endOffset;}r.collapsed=true;},cloneContents:function(){var q=new d.documentFragment(this.document);if(!this.collapsed)m(this,2,q);return q;},deleteContents:function(){if(this.collapsed)return;m(this,0);},extractContents:function(){var q=new d.documentFragment(this.document);if(!this.collapsed)m(this,1,q);return q;},createBookmark:function(q){var v=this;var r,s,t,u;r=v.document.createElement('span');r.setAttribute('_fck_bookmark',1);r.setStyle('display','none');r.setHtml('&nbsp;');if(q){t='cke_bm_'+e.getNextNumber();r.setAttribute('id',t+'S');}if(!v.collapsed){s=r.clone();s.setHtml('&nbsp;');if(q)s.setAttribute('id',t+'E');u=v.clone();u.collapse();u.insertNode(s);}u=v.clone();u.collapse(true);u.insertNode(r);if(s){v.setStartAfter(r);\r
+v.setEndBefore(s);}else v.moveToPosition(r,4);return{startNode:q?t+'S':r,endNode:q?t+'E':s,serializable:q};},createBookmark2:function(q){var x=this;var r=x.startContainer,s=x.endContainer,t=x.startOffset,u=x.endOffset,v,w;if(!r||!s)return{start:0,end:0};if(q){if(r.type==1){v=r.getChild(t);if(v&&v.type==3&&t>0&&v.getPrevious().type==3){r=v;t=0;}}while(r.type==3&&(w=r.getPrevious())&&(w.type==3)){r=w;t+=w.getLength();}if(!x.isCollapsed){if(s.type==1){v=s.getChild(u);if(v&&v.type==3&&u>0&&v.getPrevious().type==3){s=v;u=0;}}while(s.type==3&&(w=s.getPrevious())&&(w.type==3)){s=w;u+=w.getLength();}}}return{start:r.getAddress(q),end:x.isCollapsed?null:s.getAddress(q),startOffset:t,endOffset:u,normalized:q,is2:true};},moveToBookmark:function(q){var y=this;if(q.is2){var r=y.document.getByAddress(q.start,q.normalized),s=q.startOffset,t=q.end&&y.document.getByAddress(q.end,q.normalized),u=q.endOffset;y.setStart(r,s);if(t)y.setEnd(t,u);else y.collapse(true);}else{var v=q.serializable,w=v?y.document.getById(q.startNode):q.startNode,x=v?y.document.getById(q.endNode):q.endNode;y.setStartBefore(w);w.remove();if(x){y.setEndBefore(x);x.remove();}else y.collapse(true);}},getBoundaryNodes:function(){var v=this;var q=v.startContainer,r=v.endContainer,s=v.startOffset,t=v.endOffset,u;if(q.type==1){u=q.getChildCount();if(u>s)q=q.getChild(s);else if(u<1)q=q.getPreviousSourceNode();else{q=q.$;while(q.lastChild)q=q.lastChild;q=new d.node(q);q=q.getNextSourceNode()||q;}}if(r.type==1){u=r.getChildCount();if(u>t)r=r.getChild(t).getPreviousSourceNode(true);else if(u<1)r=r.getPreviousSourceNode();else{r=r.$;while(r.lastChild)r=r.lastChild;r=new d.node(r);}}if(q.getPosition(r)&2)q=r;return{startNode:q,endNode:r};},getCommonAncestor:function(q,r){var v=this;var s=v.startContainer,t=v.endContainer,u;if(s.equals(t)){if(q&&s.type==1&&v.startOffset==v.endOffset-1)u=s.getChild(v.startOffset);else u=s;}else u=s.getCommonAncestor(t);return r&&!u.is?u.getParent():u;},optimize:function(){var s=this;var q=s.startContainer,r=s.startOffset;if(q.type!=1)if(!r)s.setStartBefore(q);else if(r>=q.getLength())s.setStartAfter(q);q=s.endContainer;r=s.endOffset;if(q.type!=1)if(!r)s.setEndBefore(q);else if(r>=q.getLength())s.setEndAfter(q);},optimizeBookmark:function(){var s=this;var q=s.startContainer,r=s.endContainer;if(q.is&&q.is('span')&&q.hasAttribute('_fck_bookmark'))s.setStartAt(q,3);if(r&&r.is&&r.is('span')&&r.hasAttribute('_fck_bookmark'))s.setEndAt(r,4);},trim:function(q,r){var y=this;var s=y.startContainer,t=y.startOffset,u=y.collapsed;\r
+if((!q||u)&&(s&&s.type==3)){if(!t){t=s.getIndex();s=s.getParent();}else if(t>=s.getLength()){t=s.getIndex()+1;s=s.getParent();}else{var v=s.split(t);t=s.getIndex()+1;s=s.getParent();if(!u&&y.startContainer.equals(y.endContainer))y.setEnd(v,y.endOffset-y.startOffset);}y.setStart(s,t);if(u)y.collapse(true);}var w=y.endContainer,x=y.endOffset;if(!(r||u)&&w&&w.type==3){if(!x){x=w.getIndex();w=w.getParent();}else if(x>=w.getLength()){x=w.getIndex()+1;w=w.getParent();}else{w.split(x);x=w.getIndex()+1;w=w.getParent();}y.setEnd(w,x);}},enlarge:function(q){switch(q){case 1:if(this.collapsed)return;var r=this.getCommonAncestor(),s=this.document.getBody(),t,u,v,w,x,y=false,z,A,B=this.startContainer,C=this.startOffset;if(B.type==3){if(C){B=!e.trim(B.substring(0,C)).length&&B;y=!!B;}if(B)if(!(w=B.getPrevious()))v=B.getParent();}else{if(C)w=B.getChild(C-1)||B.getLast();if(!w)v=B;}while(v||w){if(v&&!w){if(!x&&v.equals(r))x=true;if(!s.contains(v))break;if(!y||v.getComputedStyle('display')!='inline'){y=false;if(x)t=v;else this.setStartBefore(v);}w=v.getPrevious();}while(w){z=false;if(w.type==3){A=w.getText();if(/[^\s\ufeff]/.test(A))w=null;z=/[\s\ufeff]$/.test(A);}else if(w.$.offsetWidth>0&&!w.getAttribute('_fck_bookmark'))if(y&&f.$removeEmpty[w.getName()]){A=w.getText();if(!/[^\s\ufeff]/.test(A))w=null;else{var D=w.$.all||w.$.getElementsByTagName('*');for(var E=0,F;F=D[E++];)if(!f.$removeEmpty[F.nodeName.toLowerCase()]){w=null;break;}}if(w)z=!!A.length;}else w=null;if(z)if(y){if(x)t=v;else if(v)this.setStartBefore(v);}else y=true;if(w){var G=w.getPrevious();if(!v&&!G){v=w;w=null;break;}w=G;}else v=null;}if(v)v=v.getParent();}B=this.endContainer;C=this.endOffset;v=w=null;x=y=false;if(B.type==3){B=!e.trim(B.substring(C)).length&&B;y=!(B&&B.getLength());if(B)if(!(w=B.getNext()))v=B.getParent();}else{w=B.getChild(C);if(!w)v=B;}while(v||w){if(v&&!w){if(!x&&v.equals(r))x=true;if(!s.contains(v))break;if(!y||v.getComputedStyle('display')!='inline'){y=false;if(x)u=v;else if(v)this.setEndAfter(v);}w=v.getNext();}while(w){z=false;if(w.type==3){A=w.getText();if(/[^\s\ufeff]/.test(A))w=null;z=/^[\s\ufeff]/.test(A);}else if(w.$.offsetWidth>0&&!w.getAttribute('_fck_bookmark'))if(y&&f.$removeEmpty[w.getName()]){A=w.getText();if(!/[^\s\ufeff]/.test(A))w=null;else{D=w.$.all||w.$.getElementsByTagName('*');for(E=0;F=D[E++];)if(!f.$removeEmpty[F.nodeName.toLowerCase()]){w=null;break;}}if(w)z=!!A.length;}else w=null;if(z)if(y)if(x)u=v;else this.setEndAfter(v);if(w){G=w.getNext();if(!v&&!G){v=w;\r
+w=null;break;}w=G;}else v=null;}if(v)v=v.getParent();}if(t&&u){r=t.contains(u)?u:t;this.setStartBefore(r);this.setEndAfter(r);}break;case 2:case 3:var H=new d.range(this.document);s=this.document.getBody();H.setStartAt(s,1);H.setEnd(this.startContainer,this.startOffset);var I=new d.walker(H),J,K,L=d.walker.blockBoundary(q==3?{br:1}:null),M=function(O){var P=L(O);if(!P)J=O;return P;},N=function(O){var P=M(O);if(!P&&O.is&&O.is('br'))K=O;return P;};I.guard=M;v=I.lastBackward();J=J||s;this.setStartAt(J,!J.is('br')&&(!v||J.contains(v))?1:4);H=this.clone();H.collapse();H.setEndAt(s,2);I=new d.walker(H);I.guard=q==3?N:M;J=null;v=I.lastForward();J=J||s;this.setEndAt(J,!J.is('br')&&(!v||J.contains(v))?2:3);if(K)this.setEndAfter(K);}},insertNode:function(q){var u=this;u.optimizeBookmark();u.trim(false,true);var r=u.startContainer,s=u.startOffset,t=r.getChild(s);if(t)q.insertBefore(t);else r.append(q);if(q.getParent().equals(u.endContainer))u.endOffset++;u.setStartBefore(q);},moveToPosition:function(q,r){this.setStartAt(q,r);this.collapse(true);},selectNodeContents:function(q){this.setStart(q,0);this.setEnd(q,q.type==3?q.getLength():q.getChildCount());},setStart:function(q,r){var s=this;s.startContainer=q;s.startOffset=r;if(!s.endContainer){s.endContainer=q;s.endOffset=r;}l(s);},setEnd:function(q,r){var s=this;s.endContainer=q;s.endOffset=r;if(!s.startContainer){s.startContainer=q;s.startOffset=r;}l(s);},setStartAfter:function(q){this.setStart(q.getParent(),q.getIndex()+1);},setStartBefore:function(q){this.setStart(q.getParent(),q.getIndex());},setEndAfter:function(q){this.setEnd(q.getParent(),q.getIndex()+1);},setEndBefore:function(q){this.setEnd(q.getParent(),q.getIndex());},setStartAt:function(q,r){var s=this;switch(r){case 1:s.setStart(q,0);break;case 2:if(q.type==3)s.setStart(q,q.getLength());else s.setStart(q,q.getChildCount());break;case 3:s.setStartBefore(q);break;case 4:s.setStartAfter(q);}l(s);},setEndAt:function(q,r){var s=this;switch(r){case 1:s.setEnd(q,0);break;case 2:if(q.type==3)s.setEnd(q,q.getLength());else s.setEnd(q,q.getChildCount());break;case 3:s.setEndBefore(q);break;case 4:s.setEndAfter(q);}l(s);},fixBlock:function(q,r){var u=this;var s=u.createBookmark(),t=u.document.createElement(r);u.collapse(q);u.enlarge(2);u.extractContents().appendTo(t);t.trim();if(!c)t.appendBogus();u.insertNode(t);u.moveToBookmark(s);return t;},splitBlock:function(q){var B=this;var r=new d.elementPath(B.startContainer),s=new d.elementPath(B.endContainer),t=r.blockLimit,u=s.blockLimit,v=r.block,w=s.block,x=null;\r
+if(!t.equals(u))return null;if(q!='br'){if(!v){v=B.fixBlock(true,q);w=new d.elementPath(B.endContainer).block;}if(!w)w=B.fixBlock(false,q);}var y=v&&B.checkStartOfBlock(),z=w&&B.checkEndOfBlock();B.deleteContents();if(v&&v.equals(w))if(z){x=new d.elementPath(B.startContainer);B.moveToPosition(w,4);w=null;}else if(y){x=new d.elementPath(B.startContainer);B.moveToPosition(v,3);v=null;}else{B.setEndAt(v,2);var A=B.extractContents();w=v.clone(false);A.appendTo(w);w.insertAfter(v);B.moveToPosition(v,4);if(!c&&!v.is('ul','ol'))v.appendBogus();}return{previousBlock:v,nextBlock:w,wasStartOfBlock:y,wasEndOfBlock:z,elementPath:x};},checkBoundaryOfElement:function(q,r){var s=this.clone();s[r==1?'setStartAt':'setEndAt'](q,r==1?1:2);var t=new d.walker(s),u=false;t.evaluator=p;return t[r==1?'checkBackward':'checkForward']();},checkStartOfBlock:function(){var w=this;var q=w.startContainer,r=w.startOffset;if(r&&q.type==3){var s=e.ltrim(q.substring(0,r));if(s.length)return false;}w.trim();var t=new d.elementPath(w.startContainer),u=w.clone();u.collapse(true);u.setStartAt(t.block||t.blockLimit,1);var v=new d.walker(u);v.evaluator=o(true);return v.checkBackward();},checkEndOfBlock:function(){var w=this;var q=w.endContainer,r=w.endOffset;if(q.type==3){var s=e.rtrim(q.substring(r));if(s.length)return false;}w.trim();var t=new d.elementPath(w.endContainer),u=w.clone();u.collapse(false);u.setEndAt(t.block||t.blockLimit,2);var v=new d.walker(u);v.evaluator=o(false);return v.checkForward();},moveToElementEditStart:function(q){var r;while(q&&q.type==1){if(q.isEditable())r=q;else if(r)break;q=q.getFirst();}if(r){this.moveToPosition(r,1);return true;}else return false;},getEnclosedNode:function(){var q=this.clone(),r=new d.walker(q),s=d.walker.bookmark(true),t=d.walker.whitespaces(true),u=function(w){return t(w)&&s(w);};q.evaluator=u;var v=r.next();r.reset();return v&&v.equals(r.previous())?v:null;},getTouchedStartNode:function(){var q=this.startContainer;if(this.collapsed||q.type!=1)return q;return q.getChild(this.startOffset)||q;},getTouchedEndNode:function(){var q=this.endContainer;if(this.collapsed||q.type!=1)return q;return q.getChild(this.endOffset-1)||q;}};})();a.POSITION_AFTER_START=1;a.POSITION_BEFORE_END=2;a.POSITION_BEFORE_START=3;a.POSITION_AFTER_END=4;a.ENLARGE_ELEMENT=1;a.ENLARGE_BLOCK_CONTENTS=2;a.ENLARGE_LIST_ITEM_CONTENTS=3;a.START=1;a.END=2;a.STARTEND=3;(function(){var l=c&&b.version<7?a.basePath+'images/spacer.gif':'about:blank',m=h.createFromHtml('<div style="width:0px;height:0px;position:absolute;left:-10000px;background-image:url('+l+')"></div>',a.document);\r
+m.appendTo(a.document.getHead());if(b.hc=m.getComputedStyle('background-image')=='none')b.cssClass+=' cke_hc';m.remove();})();j.load(i.corePlugins.split(','),function(){a.status='loaded';a.fire('loaded');var l=a._.pending;if(l){delete a._.pending;for(var m=0;m<l.length;m++)a.add(l[m]);}});j.add('about',{init:function(l){var m=l.addCommand('about',new a.dialogCommand('about'));m.modes={wysiwyg:1,source:1};m.canUndo=false;l.ui.addButton('About',{label:l.lang.about.title,command:'about'});a.dialog.add('about',this.path+'dialogs/about.js');}});j.add('basicstyles',{requires:['styles','button'],init:function(l){var m=function(p,q,r,s){var t=new a.style(s);l.attachStyleStateChange(t,function(u){l.getCommand(r).setState(u);});l.addCommand(r,new a.styleCommand(t));l.ui.addButton(p,{label:q,command:r});},n=l.config,o=l.lang;m('Bold',o.bold,'bold',n.coreStyles_bold);m('Italic',o.italic,'italic',n.coreStyles_italic);m('Underline',o.underline,'underline',n.coreStyles_underline);m('Strike',o.strike,'strike',n.coreStyles_strike);m('Subscript',o.subscript,'subscript',n.coreStyles_subscript);m('Superscript',o.superscript,'superscript',n.coreStyles_superscript);}});i.coreStyles_bold={element:'strong',overrides:'b'};i.coreStyles_italic={element:'em',overrides:'i'};i.coreStyles_underline={element:'u'};i.coreStyles_strike={element:'strike'};i.coreStyles_subscript={element:'sub'};i.coreStyles_superscript={element:'sup'};(function(){function l(p,q){var r=q.block||q.blockLimit;if(!r||r.getName()=='body')return 2;if(r.getAscendant('blockquote',true))return 1;return 2;};function m(p){var q=p.editor,r=q.getCommand('blockquote');r.state=l(q,p.data.path);r.fire('state');};function n(p){for(var q=0,r=p.getChildCount(),s;q<r&&(s=p.getChild(q));q++)if(s.type==1&&s.isBlockBoundary())return false;return true;};var o={exec:function(p){var q=p.getCommand('blockquote').state,r=p.getSelection(),s=r&&r.getRanges()[0];if(!s)return;var t=r.createBookmarks();if(c){var u=t[0].startNode,v=t[0].endNode,w;if(u&&u.getParent().getName()=='blockquote'){w=u;while(w=w.getNext())if(w.type==1&&w.isBlockBoundary()){u.move(w,true);break;}}if(v&&v.getParent().getName()=='blockquote'){w=v;while(w=w.getPrevious())if(w.type==1&&w.isBlockBoundary()){v.move(w);break;}}}var x=s.createIterator(),y;if(q==2){var z=[];while(y=x.getNextParagraph())z.push(y);if(z.length<1){var A=p.document.createElement(p.config.enterMode==1?'p':'div'),B=t.shift();s.insertNode(A);A.append(new d.text('',p.document));s.moveToBookmark(B);s.selectNodeContents(A);\r
+s.collapse(true);B=s.createBookmark();z.push(A);t.unshift(B);}var C=z[0].getParent(),D=[];for(var E=0;E<z.length;E++){y=z[E];C=C.getCommonAncestor(y.getParent());}var F={table:1,tbody:1,tr:1,ol:1,ul:1};while(F[C.getName()])C=C.getParent();var G=null;while(z.length>0){y=z.shift();while(!y.getParent().equals(C))y=y.getParent();if(!y.equals(G))D.push(y);G=y;}while(D.length>0){y=D.shift();if(y.getName()=='blockquote'){var H=new d.documentFragment(p.document);while(y.getFirst()){H.append(y.getFirst().remove());z.push(H.getLast());}H.replace(y);}else z.push(y);}var I=p.document.createElement('blockquote');I.insertBefore(z[0]);while(z.length>0){y=z.shift();I.append(y);}}else if(q==1){var J=[],K={};while(y=x.getNextParagraph()){var L=null,M=null;while(y.getParent()){if(y.getParent().getName()=='blockquote'){L=y.getParent();M=y;break;}y=y.getParent();}if(L&&M&&!M.getCustomData('blockquote_moveout')){J.push(M);h.setMarker(K,M,'blockquote_moveout',true);}}h.clearAllMarkers(K);var N=[],O=[];K={};while(J.length>0){var P=J.shift();I=P.getParent();if(!P.getPrevious())P.remove().insertBefore(I);else if(!P.getNext())P.remove().insertAfter(I);else{P.breakParent(P.getParent());O.push(P.getNext());}if(!I.getCustomData('blockquote_processed')){O.push(I);h.setMarker(K,I,'blockquote_processed',true);}N.push(P);}h.clearAllMarkers(K);for(E=O.length-1;E>=0;E--){I=O[E];if(n(I))I.remove();}if(p.config.enterMode==2){var Q=true;while(N.length){P=N.shift();if(P.getName()=='div'){H=new d.documentFragment(p.document);var R=Q&&P.getPrevious()&&!(P.getPrevious().type==1&&P.getPrevious().isBlockBoundary());if(R)H.append(p.document.createElement('br'));var S=P.getNext()&&!(P.getNext().type==1&&P.getNext().isBlockBoundary());while(P.getFirst())P.getFirst().remove().appendTo(H);if(S)H.append(p.document.createElement('br'));H.replace(P);Q=false;}}}}r.selectBookmarks(t);p.focus();}};j.add('blockquote',{init:function(p){p.addCommand('blockquote',o);p.ui.addButton('Blockquote',{label:p.lang.blockquote,command:'blockquote'});p.on('selectionChange',m);},requires:['domiterator']});})();j.add('button',{beforeInit:function(l){l.ui.addHandler(1,k.button.handler);}});a.UI_BUTTON=1;k.button=function(l){e.extend(this,l,{title:l.label,className:l.className||l.command&&'cke_button_'+l.command||'',click:l.click||(function(m){m.execCommand(l.command);})});this._={};};k.button.handler={create:function(l){return new k.button(l);}};k.button.prototype={canGroup:true,render:function(l,m){var n=b,o=this._.id='cke_'+e.getNextNumber();\r
+this._.editor=l;var p={id:o,button:this,editor:l,focus:function(){var v=a.document.getById(o);v.focus();},execute:function(){this.button.click(l);}},q=e.addFunction(p.execute,p),r=k.button._.instances.push(p)-1,s='',t=this.command;if(this.modes)l.on('mode',function(){this.setState(this.modes[l.mode]?2:0);},this);else if(t){t=l.getCommand(t);if(t){t.on('state',function(){this.setState(t.state);},this);s+='cke_'+(t.state==1?'on':t.state==0?'disabled':'off');}}if(!t)s+='cke_off';if(this.className)s+=' '+this.className;m.push('<span class="cke_button">','<a id="',o,'" class="',s,'" href="javascript:void(\'',(this.title||'').replace("'",''),'\')" title="',this.title,'" tabindex="-1" hidefocus="true"');if(n.opera||n.gecko&&n.mac)m.push(' onkeypress="return false;"');if(n.gecko)m.push(' onblur="this.style.cssText = this.style.cssText;"');m.push(' onkeydown="return CKEDITOR.ui.button._.keydown(',r,', event);" onfocus="return CKEDITOR.ui.button._.focus(',r,', event);" onclick="CKEDITOR.tools.callFunction(',q,', this); return false;"><span class="cke_icon"');if(this.icon){var u=(this.iconOffset||0)*(-16);m.push(' style="background-image:url(',a.getUrl(this.icon),');background-position:0 '+u+'px;"');}m.push('></span><span class="cke_label">',this.label,'</span>');if(this.hasArrow)m.push('<span class="cke_buttonarrow"></span>');m.push('</a>','</span>');if(this.onRender)this.onRender();return p;},setState:function(l){var q=this;if(q._.state==l)return;var m=a.document.getById(q._.id);if(m){m.setState(l);var n=q.title,o=q._.editor.lang.common.unavailable,p=m.getChild(1);if(l==0)n=o.replace('%1',q.title);p.setHtml(n);}q._.state=l;}};k.button._={instances:[],keydown:function(l,m){var n=k.button._.instances[l];if(n.onkey){m=new d.event(m);return n.onkey(n,m.getKeystroke())!==false;}},focus:function(l,m){var n=k.button._.instances[l],o;if(n.onfocus)o=n.onfocus(n,new d.event(m))!==false;if(b.gecko&&b.version<10900)m.preventBubble();return o;}};k.prototype.addButton=function(l,m){this.add(l,1,m);};(function(){var l=function(q,r){var s=q.document,t=s.getBody(),u=false,v=function(){u=true;};t.on(r,v);s.$.execCommand(r);t.removeListener(r,v);return u;},m=c?function(q,r){return l(q,r);}:function(q,r){try{return q.document.$.execCommand(r);}catch(s){return false;}},n=function(q){this.type=q;this.canUndo=this.type=='cut';};n.prototype={exec:function(q,r){var s=m(q,this.type);if(!s)alert(q.lang.clipboard[this.type+'Error']);return s;}};var o=c?{exec:function(q,r){q.focus();if(!q.fire('beforePaste')&&!l(q,'paste'))q.openDialog('paste');\r
+}}:{exec:function(q){try{if(!q.fire('beforePaste')&&!q.document.$.execCommand('Paste',false,null))throw 0;}catch(r){q.openDialog('paste');}}},p=function(q){switch(q.data.keyCode){case 1000+86:case 2000+45:var r=this;r.fire('saveSnapshot');if(r.fire('beforePaste'))q.cancel();setTimeout(function(){r.fire('saveSnapshot');},0);return;case 1000+88:case 2000+46:r=this;r.fire('saveSnapshot');setTimeout(function(){r.fire('saveSnapshot');},0);}};j.add('clipboard',{init:function(q){function r(t,u,v,w){var x=q.lang[u];q.addCommand(u,v);q.ui.addButton(t,{label:x,command:u});if(q.addMenuItems)q.addMenuItem(u,{label:x,command:u,group:'clipboard',order:w});};r('Cut','cut',new n('cut'),1);r('Copy','copy',new n('copy'),4);r('Paste','paste',o,8);a.dialog.add('paste',a.getUrl(this.path+'dialogs/paste.js'));q.on('key',p,q);if(q.contextMenu){function s(t){return q.document.$.queryCommandEnabled(t)?2:0;};q.contextMenu.addListener(function(){return{cut:s('Cut'),copy:s('Cut'),paste:b.webkit?2:s('Paste')};});}}});})();j.add('colorbutton',{requires:['panelbutton','floatpanel','styles'],init:function(l){var m=l.config,n=l.lang.colorButton,o;if(!b.hc){p('TextColor','fore',n.textColorTitle);p('BGColor','back',n.bgColorTitle);}function p(r,s,t){l.ui.add(r,4,{label:t,title:t,className:'cke_button_'+r.toLowerCase(),modes:{wysiwyg:1},panel:{css:[a.getUrl(l.skinPath+'editor.css')]},onBlock:function(u,v){var w=u.addBlock(v);w.autoSize=true;w.element.addClass('cke_colorblock');w.element.setHtml(q(u,s));var x=w.keys;x[39]='next';x[9]='next';x[37]='prev';x[2000+9]='prev';x[32]='click';}});};function q(r,s){var t=[],u=m.colorButton_colors.split(','),v=e.addFunction(function(z,A){if(z=='?')return;l.focus();r.hide();var B=new a.style(m['colorButton_'+A+'Style'],z&&{color:z});l.fire('saveSnapshot');if(z)B.apply(l.document);else B.remove(l.document);l.fire('saveSnapshot');});t.push('<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="',n.auto,'" onclick="CKEDITOR.tools.callFunction(',v,",null,'",s,"');return false;\" href=\"javascript:void('",n.auto,'\')"><table cellspacing=0 cellpadding=0 width="100%"><tr><td><span class="cke_colorbox" style="background-color:#000"></span></td><td colspan=7 align=center>',n.auto,'</td></tr></table></a><table cellspacing=0 cellpadding=0 width="100%">');for(var w=0;w<u.length;w++){if(w%8===0)t.push('</tr><tr>');var x=u[w],y=l.lang.colors[x]||x;t.push('<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="',y,'" onclick="CKEDITOR.tools.callFunction(',v,",'#",x,"','",s,"'); return false;\" href=\"javascript:void('",y,'\')"><span class="cke_colorbox" style="background-color:#',x,'"></span></a></td>');\r
+}if(m.colorButton_enableMore)t.push('</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="',n.more,'" onclick="CKEDITOR.tools.callFunction(',v,",'?','",s,"');return false;\" href=\"javascript:void('",n.more,"')\">",n.more,'</a></td>');t.push('</tr></table>');return t.join('');};}});i.colorButton_enableMore=false;i.colorButton_colors='000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF';i.colorButton_foreStyle={element:'span',styles:{color:'#(color)'},overrides:[{element:'font',attributes:{color:null}}]};i.colorButton_backStyle={element:'span',styles:{'background-color':'#(color)'}};j.add('contextmenu',{requires:['menu'],beforeInit:function(l){l.contextMenu=new j.contextMenu(l);l.addCommand('contextMenu',{exec:function(){l.contextMenu.show();}});}});j.contextMenu=e.createClass({$:function(l){this.id='cke_'+e.getNextNumber();this.editor=l;this._.listeners=[];this._.functionId=e.addFunction(function(m){this._.panel.hide();l.focus();l.execCommand(m);},this);},_:{onMenu:function(l,m,n,o){var p=this._.menu,q=this.editor;if(p){p.hide();p.removeAll();}else{p=this._.menu=new a.menu(q);p.onClick=e.bind(function(z){var A=true;p.hide();if(c)p.onEscape();if(z.onClick)z.onClick();else if(z.command)q.execCommand(z.command);A=false;},this);p.onEscape=function(){q.focus();if(c)q.getSelection().unlock(true);};}var r=this._.listeners,s=[],t=this.editor.getSelection(),u=t&&t.getStartElement();if(c)t.lock();p.onHide=e.bind(function(){p.onHide=null;if(c)q.getSelection().unlock();this.onHide&&this.onHide();},this);for(var v=0;v<r.length;v++){var w=r[v](u,t);if(w)for(var x in w){var y=this.editor.getMenuItem(x);if(y){y.state=w[x];p.add(y);}}}p.show(l,m||(q.lang.dir=='rtl'?2:1),n,o);}},proto:{addTarget:function(l){l.on('contextmenu',function(m){var n=m.data;n.preventDefault();var o=n.getTarget().getDocument().getDocumentElement(),p=n.$.clientX,q=n.$.clientY;e.setTimeout(function(){this._.onMenu(o,null,p,q);},0,this);},this);},addListener:function(l){this._.listeners.push(l);},show:function(l,m,n,o){this.editor.focus();this._.onMenu(l||a.document.getDocumentElement(),m,n||0,o||0);}}});(function(){var l={toolbarFocus:{exec:function(n){var o=n._.elementsPath.idBase,p=a.document.getById(o+'0');if(p)p.focus();}}},m='<span class="cke_empty">&nbsp;</span>';\r
+j.add('elementspath',{requires:['selection'],init:function(n){var o='cke_path_'+n.name,p,q=function(){if(!p)p=a.document.getById(o);return p;},r='cke_elementspath_'+e.getNextNumber()+'_';n._.elementsPath={idBase:r};n.on('themeSpace',function(s){if(s.data.space=='bottom')s.data.html+='<div id="'+o+'" class="cke_path">'+m+'</div>';});n.on('selectionChange',function(s){var t=b,u=s.data.selection,v=u.getStartElement(),w=[],x=this._.elementsPath.list=[];while(v){var y=x.push(v)-1,z;if(v.getAttribute('_cke_real_element_type'))z=v.getAttribute('_cke_real_element_type');else z=v.getName();var A='';if(t.opera||t.gecko&&t.mac)A+=' onkeypress="return false;"';if(t.gecko)A+=' onblur="this.style.cssText = this.style.cssText;"';w.unshift('<a id="',r,y,'" href="javascript:void(\'',z,'\')" tabindex="-1" title="',n.lang.elementsPath.eleTitle.replace(/%1/,z),'"'+(b.gecko&&b.version<10900?' onfocus="event.preventBubble();"':'')+' hidefocus="true" '+" onkeydown=\"return CKEDITOR._.elementsPath.keydown('",this.name,"',",y,', event);"'+A," onclick=\"return CKEDITOR._.elementsPath.click('",this.name,"',",y,');">',z,'</a>');if(z=='body')break;v=v.getParent();}q().setHtml(w.join('')+m);});n.on('contentDomUnload',function(){q().setHtml(m);});n.addCommand('elementsPathFocus',l.toolbarFocus);}});})();a._.elementsPath={click:function(l,m){var n=a.instances[l];n.focus();var o=n._.elementsPath.list[m];n.getSelection().selectElement(o);return false;},keydown:function(l,m,n){var o=k.button._.instances[m],p=a.instances[l],q=p._.elementsPath.idBase,r;n=new d.event(n);switch(n.getKeystroke()){case 37:case 9:r=a.document.getById(q+(m+1));if(!r)r=a.document.getById(q+'0');r.focus();return false;case 39:case 2000+9:r=a.document.getById(q+(m-1));if(!r)r=a.document.getById(q+(p._.elementsPath.list.length-1));r.focus();return false;case 27:p.focus();return false;case 13:case 32:this.click(l,m);return false;}return true;}};(function(){j.add('enterkey',{requires:['keystrokes','indent'],init:function(s){var t=s.specialKeys;t[13]=o;t[2000+13]=n;}});var l,m=/^h[1-6]$/;function n(s){l=1;return o(s,s.config.shiftEnterMode);};function o(s,t){if(s.mode!='wysiwyg')return false;if(!t)t=s.config.enterMode;setTimeout(function(){s.fire('saveSnapshot');if(t==2||s.getSelection().getStartElement().hasAscendant('pre',true))q(s,t);else p(s,t);l=0;},0);return true;};function p(s,t,u){u=u||r(s);var v=u.document,w=t==3?'div':'p',x=u.splitBlock(w);if(!x)return;var y=x.previousBlock,z=x.nextBlock,A=x.wasStartOfBlock,B=x.wasEndOfBlock,C;\r
+if(z){C=z.getParent();if(C.is('li')){z.breakParent(C);z.move(z.getNext(),true);}}else if(y&&(C=y.getParent())&&(C.is('li'))){y.breakParent(C);u.moveToElementEditStart(y.getNext());y.move(y.getPrevious());}if(!A&&!B){if(z.is('li')&&(C=z.getFirst())&&(C.is&&C.is('ul','ol')))z.insertBefore(v.createText('\xa0'),C);if(z)u.moveToElementEditStart(z);}else{if(A&&B&&y.is('li')){s.execCommand('outdent');return;}var D;if(y){if(!l&&!m.test(y.getName()))D=y.clone();}else if(z)D=z.clone();if(!D)D=v.createElement(w);var E=x.elementPath;if(E)for(var F=0,G=E.elements.length;F<G;F++){var H=E.elements[F];if(H.equals(E.block)||H.equals(E.blockLimit))break;if(f.$removeEmpty[H.getName()]){H=H.clone();D.moveChildren(H);D.append(H);}}if(!c)D.appendBogus();u.insertNode(D);if(c&&A&&(!B||!y.getChildCount())){u.moveToElementEditStart(B?y:D);u.select();}u.moveToElementEditStart(A&&!B?z:D);}if(!c)if(z){var I=v.createElement('span');I.setHtml('&nbsp;');u.insertNode(I);I.scrollIntoView();u.deleteContents();}else D.scrollIntoView();u.select();};function q(s,t){var u=r(s),v=u.document,w=t==3?'div':'p',x=u.checkEndOfBlock(),y=new d.elementPath(s.getSelection().getStartElement()),z=y.block,A=z&&y.block.getName(),B=false;if(!l&&A=='li'){p(s,t,u);return;}if(!l&&x&&m.test(A)){v.createElement('br').insertAfter(z);if(b.gecko)v.createText('').insertAfter(z);u.setStartAt(z.getNext(),c?3:1);}else{var C;B=A=='pre';if(B)C=v.createText(c?'\r':'\n');else C=v.createElement('br');u.deleteContents();u.insertNode(C);if(!c)v.createText('').insertAfter(C);if(x&&!c)C.getParent().appendBogus();if(!c)C.getNext().$.nodeValue='';if(c)u.setStartAt(C,4);else u.setStartAt(C.getNext(),1);if(!c){var D=null;if(!b.gecko){D=v.createElement('span');D.setHtml('&nbsp;');}else D=v.createElement('br');D.insertBefore(C.getNext());D.scrollIntoView();D.remove();}}u.collapse(true);u.select(B);};function r(s){var t=s.getSelection().getRanges();for(var u=t.length-1;u>0;u--)t[u].deleteContents();return t[0];};})();(function(){var l='nbsp,gt,lt,quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro',m='Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml',n='Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv';\r
+function o(p){var q={},r=[],s={nbsp:'\xa0',shy:'­',gt:'>',lt:'<'};p=p.replace(/\b(nbsp|shy|gt|lt|amp)(?:,|$)/g,function(x,y){q[s[y]]='&'+y+';';r.push(s[y]);return '';});p=p.split(',');var t=document.createElement('div'),u;t.innerHTML='&'+p.join(';&')+';';u=t.innerHTML;t=null;for(var v=0;v<u.length;v++){var w=u.charAt(v);q[w]='&'+p[v]+';';r.push(w);}q.regex=r.join('');return q;};j.add('entities',{afterInit:function(p){var q=p.config;if(!q.entities)return;var r=p.dataProcessor,s=r&&r.htmlFilter;if(s){var t=l;if(q.entities_latin)t+=','+m;if(q.entities_greek)t+=','+n;if(q.entities_additional)t+=','+q.entities_additional;var u=o(t),v='['+u.regex+']';delete u.regex;if(q.entities_processNumerical)v='[^ -~]|'+v;v=new RegExp(v,'g');function w(x){return u[x]||'&#'+x.charCodeAt(0)+';';};s.addRules({text:function(x){return x.replace(v,w);}});}}});})();i.entities=true;i.entities_latin=true;i.entities_greek=true;i.entities_processNumerical=false;i.entities_additional='#39';(function(){function l(u,v){var w=[];if(!v)return u;else for(var x in v)w.push(x+'='+encodeURIComponent(v[x]));return u+(u.indexOf('?')!=-1?'&':'?')+w.join('&');};function m(u){u+='';var v=u.charAt(0).toUpperCase();return v+u.substr(1);};function n(u){var B=this;var v=B.getDialog(),w=v.getParentEditor();w._.filebrowserSe=B;var x=w.config['filebrowser'+m(v.getName())+'WindowWidth']||w.config.filebrowserWindowWidth||'80%',y=w.config['filebrowser'+m(v.getName())+'WindowHeight']||w.config.filebrowserWindowHeight||'70%',z=B.filebrowser.params||{};z.CKEditor=w.name;z.CKEditorFuncNum=w._.filebrowserFn;if(!z.langCode)z.langCode=w.langCode;var A=l(B.filebrowser.url,z);w.popup(A,x,y);};function o(u){var x=this;var v=x.getDialog(),w=v.getParentEditor();w._.filebrowserSe=x;if(!v.getContentElement(x['for'][0],x['for'][1]).getInputElement().$.value)return false;if(!v.getContentElement(x['for'][0],x['for'][1]).getAction())return false;return true;};function p(u,v,w){var x=w.params||{};x.CKEditor=u.name;x.CKEditorFuncNum=u._.filebrowserFn;if(!x.langCode)x.langCode=u.langCode;v.action=l(w.url,x);v.filebrowser=w;};function q(u,v,w,x){var y,z;for(var A in x){y=x[A];if(y.type=='hbox'||y.type=='vbox')q(u,v,w,y.children);if(!y.filebrowser)continue;if(typeof y.filebrowser=='string'){var B={action:y.type=='fileButton'?'QuickUpload':'Browse',target:y.filebrowser};y.filebrowser=B;}if(y.filebrowser.action=='Browse'){var C=y.filebrowser.url||u.config['filebrowser'+m(v)+'BrowseUrl']||u.config.filebrowserBrowseUrl;if(C){y.onClick=n;\r
+y.filebrowser.url=C;y.hidden=false;}}else if(y.filebrowser.action=='QuickUpload'&&y['for']){C=y.filebrowser.url||u.config['filebrowser'+m(v)+'UploadUrl']||u.config.filebrowserUploadUrl;if(C){y.onClick=o;y.filebrowser.url=C;y.hidden=false;p(u,w.getContents(y['for'][0]).get(y['for'][1]),y.filebrowser);}}}};function r(u,v){var w=v.getDialog(),x=v.filebrowser.target||null;u=u.replace(/#/g,'%23');if(x){var y=x.split(':'),z=w.getContentElement(y[0],y[1]);if(z){z.setValue(u);w.selectPage(y[0]);}}};function s(u,v,w){if(w.indexOf(';')!==-1){var x=w.split(';');for(var y=0;y<x.length;y++)if(s(u,v,x[y]))return true;return false;}return u.getContents(v).get(w).filebrowser&&u.getContents(v).get(w).filebrowser.url;};function t(u,v){var z=this;var w=z._.filebrowserSe.getDialog(),x=z._.filebrowserSe['for'],y=z._.filebrowserSe.filebrowser.onSelect;if(x)w.getContentElement(x[0],x[1]).reset();if(y&&y.call(z._.filebrowserSe,u,v)===false)return;if(typeof v=='string'&&v)alert(v);if(u)r(u,z._.filebrowserSe);};j.add('filebrowser',{init:function(u,v){u._.filebrowserFn=e.addFunction(t,u);a.on('dialogDefinition',function(w){for(var x in w.data.definition.contents){q(w.editor,w.data.name,w.data.definition,w.data.definition.contents[x].elements);if(w.data.definition.contents[x].hidden&&w.data.definition.contents[x].filebrowser)w.data.definition.contents[x].hidden=!s(w.data.definition,w.data.definition.contents[x].id,w.data.definition.contents[x].filebrowser);}});}});})();j.add('find',{init:function(l){var m=j.find;l.ui.addButton('Find',{label:l.lang.findAndReplace.find,command:'find'});var n=l.addCommand('find',new a.dialogCommand('find'));n.canUndo=false;l.ui.addButton('Replace',{label:l.lang.findAndReplace.replace,command:'replace'});var o=l.addCommand('replace',new a.dialogCommand('replace'));o.canUndo=false;a.dialog.add('find',this.path+'dialogs/find.js');a.dialog.add('replace',this.path+'dialogs/find.js');},requires:['styles']});i.find_highlight={element:'span',styles:{'background-color':'#004',color:'#fff'}};(function(){var l=/\.swf(?:$|\?)/i,m=/^\d+(?:\.\d+)?$/;function n(q){if(m.test(q))return q+'px';return q;};function o(q){var r=q.attributes;return r.type=='application/x-shockwave-flash'||l.test(r.src||'');};function p(q,r){var s=q.createFakeParserElement(r,'cke_flash','flash',true),t=s.attributes.style||'',u=r.attributes.width,v=r.attributes.height;if(typeof u!='undefined')t=s.attributes.style=t+'width:'+n(u)+';';if(typeof v!='undefined')t=s.attributes.style=t+'height:'+n(v)+';';\r
+return s;};j.add('flash',{init:function(q){q.addCommand('flash',new a.dialogCommand('flash'));q.ui.addButton('Flash',{label:q.lang.common.flash,command:'flash'});a.dialog.add('flash',this.path+'dialogs/flash.js');q.addCss('img.cke_flash{background-image: url('+a.getUrl(this.path+'images/placeholder.png')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 80px;'+'height: 80px;'+'}');if(q.addMenuItems)q.addMenuItems({flash:{label:q.lang.flash.properties,command:'flash',group:'flash'}});if(q.contextMenu)q.contextMenu.addListener(function(r,s){if(r&&r.is('img')&&r.getAttribute('_cke_real_element_type')=='flash')return{flash:2};});},afterInit:function(q){var r=q.dataProcessor,s=r&&r.dataFilter;if(s)s.addRules({elements:{'cke:object':function(t){var u=t.attributes,v=u.classid&&String(u.classid).toLowerCase();if(!v){for(var w=0;w<t.children.length;w++)if(t.children[w].name=='embed'){if(!o(t.children[w]))return null;return p(q,t);}return null;}return p(q,t);},'cke:embed':function(t){if(!o(t))return null;return p(q,t);}}},5);},requires:['fakeobjects']});})();e.extend(i,{flashEmbedTagOnly:false,flashAddEmbedTag:true,flashConvertOnEdit:false});(function(){function l(m,n,o,p,q,r,s){var t=m.config,u=q.split(';'),v=[],w={};for(var x=0;x<u.length;x++){var y={},z=u[x].split('/'),A=u[x]=z[0];y[o]=v[x]=z[1]||A;w[A]=new a.style(s,y);}m.ui.addRichCombo(n,{label:p.label,title:p.panelTitle,voiceLabel:p.voiceLabel,className:'cke_'+(o=='size'?'fontSize':'font'),multiSelect:false,panel:{css:[t.contentsCss,a.getUrl(m.skinPath+'editor.css')],voiceLabel:p.panelVoiceLabel},init:function(){this.startGroup(p.panelTitle);for(var B=0;B<u.length;B++){var C=u[B];this.add(C,'<span style="font-'+o+':'+v[B]+'">'+C+'</span>',C);}},onClick:function(B){m.focus();m.fire('saveSnapshot');var C=w[B];if(this.getValue()==B)C.remove(m.document);else C.apply(m.document);m.fire('saveSnapshot');},onRender:function(){m.on('selectionChange',function(B){var C=this.getValue(),D=B.data.path,E=D.elements;for(var F=0,G;F<E.length;F++){G=E[F];for(var H in w)if(w[H].checkElementRemovable(G,true)){if(H!=C)this.setValue(H);return;}}this.setValue('',r);},this);}});};j.add('font',{requires:['richcombo','styles'],init:function(m){var n=m.config;l(m,'Font','family',m.lang.font,n.font_names,n.font_defaultLabel,n.font_style);l(m,'FontSize','size',m.lang.fontSize,n.fontSize_sizes,n.fontSize_defaultLabel,n.fontSize_style);}});})();i.font_names='Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif';\r
+i.font_defaultLabel='';i.font_style={element:'span',styles:{'font-family':'#(family)'},overrides:[{element:'font',attributes:{face:null}}]};i.fontSize_sizes='8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px';i.fontSize_defaultLabel='';i.fontSize_style={element:'span',styles:{'font-size':'#(size)'},overrides:[{element:'font',attributes:{size:null}}]};j.add('format',{requires:['richcombo','styles'],init:function(l){var m=l.config,n=l.lang.format,o=m.format_tags.split(';'),p={};for(var q=0;q<o.length;q++){var r=o[q];p[r]=new a.style(m['format_'+r]);}l.ui.addRichCombo('Format',{label:n.label,title:n.panelTitle,voiceLabel:n.voiceLabel,className:'cke_format',multiSelect:false,panel:{css:[m.contentsCss,a.getUrl(l.skinPath+'editor.css')],voiceLabel:n.panelVoiceLabel},init:function(){this.startGroup(n.panelTitle);for(var s in p){var t=n['tag_'+s];this.add(s,'<'+s+'>'+t+'</'+s+'>',t);}},onClick:function(s){l.focus();l.fire('saveSnapshot');p[s].apply(l.document);l.fire('saveSnapshot');},onRender:function(){l.on('selectionChange',function(s){var t=this.getValue(),u=s.data.path;for(var v in p)if(p[v].checkActive(u)){if(v!=t)this.setValue(v,l.lang.format['tag_'+v]);return;}this.setValue('');},this);}});}});i.format_tags='p;h1;h2;h3;h4;h5;h6;pre;address;div';i.format_p={element:'p'};i.format_div={element:'div'};i.format_pre={element:'pre'};i.format_address={element:'address'};i.format_h1={element:'h1'};i.format_h2={element:'h2'};i.format_h3={element:'h3'};i.format_h4={element:'h4'};i.format_h5={element:'h5'};i.format_h6={element:'h6'};j.add('forms',{init:function(l){var m=l.lang;l.addCss('form{border: 1px dotted #FF0000;padding: 2px;}');var n=function(p,q,r){l.addCommand(q,new a.dialogCommand(q));l.ui.addButton(p,{label:m.common[p.charAt(0).toLowerCase()+p.slice(1)],command:q});a.dialog.add(q,r);},o=this.path+'dialogs/';n('Form','form',o+'form.js');n('Checkbox','checkbox',o+'checkbox.js');n('Radio','radio',o+'radio.js');n('TextField','textfield',o+'textfield.js');n('Textarea','textarea',o+'textarea.js');n('Select','select',o+'select.js');n('Button','button',o+'button.js');n('ImageButton','imagebutton',j.getPath('image')+'dialogs/image.js');n('HiddenField','hiddenfield',o+'hiddenfield.js');if(l.addMenuItems)l.addMenuItems({form:{label:m.form.menu,command:'form',group:'form'},checkbox:{label:m.checkboxAndRadio.checkboxTitle,command:'checkbox',group:'checkbox'},radio:{label:m.checkboxAndRadio.radioTitle,command:'radio',group:'radio'},textfield:{label:m.textfield.title,command:'textfield',group:'textfield'},hiddenfield:{label:m.hidden.title,command:'hiddenfield',group:'hiddenfield'},imagebutton:{label:m.image.titleButton,command:'imagebutton',group:'imagebutton'},button:{label:m.button.title,command:'button',group:'button'},select:{label:m.select.title,command:'select',group:'select'},textarea:{label:m.textarea.title,command:'textarea',group:'textarea'}});\r
+if(l.contextMenu){l.contextMenu.addListener(function(p){if(p&&p.hasAscendant('form'))return{form:2};});l.contextMenu.addListener(function(p){if(p){var q=p.getName();if(q=='select')return{select:2};if(q=='textarea')return{textarea:2};if(q=='input'){var r=p.getAttribute('type');if(r=='text'||r=='password')return{textfield:2};if(r=='button'||r=='submit'||r=='reset')return{button:2};if(r=='checkbox')return{checkbox:2};if(r=='radio')return{radio:2};if(r=='image')return{imagebutton:2};}if(q=='img'&&p.getAttribute('_cke_real_element_type')=='hiddenfield')return{hiddenfield:2};}});}},requires:['image']});if(c)h.prototype.hasAttribute=function(l){var o=this;var m=o.$.attributes.getNamedItem(l);if(o.getName()=='input')switch(l){case 'class':return o.$.className.length>0;case 'checked':return!!o.$.checked;case 'value':var n=o.getAttribute('type');if(n=='checkbox'||n=='radio')return o.$.value!='on';break;default:}return!!(m&&m.specified);};(function(){var l={exec:function(n){n.insertElement(n.document.createElement('hr'));}},m='horizontalrule';j.add(m,{init:function(n){n.addCommand(m,l);n.ui.addButton('HorizontalRule',{label:n.lang.horizontalrule,command:m});}});})();(function(){var l=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,m='{cke_protected}';function n(L,M){var N=L.children,O=N[N.length-1];if(O){if((M||!c)&&(O.type==1&&O.name=='br'))N.pop();if(O.type==3&&l.test(O.value))N.pop();}};function o(L){if(L.children.length<1)return true;var M=L.children[L.children.length-1];return M.type==1&&M.name=='br';};function p(L){n(L,true);if(o(L))if(c)L.add(new a.htmlParser.text('\xa0'));else L.add(new a.htmlParser.element('br',{}));};function q(L){n(L);if(o(L))L.add(new a.htmlParser.text('\xa0'));};var r=f,s=e.extend({},r.$block,r.$listItem,r.$tableContent);for(var t in s)if(!('br' in r[t]))delete s[t];delete s.pre;var u={attributeNames:[[/^on/,'_cke_pa_on']]},v={elements:{}};for(t in s)v.elements[t]=p;var w={elementNames:[[/^cke:/,''],[/^\?xml:namespace$/,'']],attributeNames:[[/^_cke_(saved|pa)_/,''],[/^_cke.*/,'']],elements:{$:function(L){var M=L.attributes;if(M){var N=['name','href','src'],O;for(var P=0;P<N.length;P++){O='_cke_saved_'+N[P];O in M&&delete M[N[P]];}}},embed:function(L){var M=L.parent;if(M&&M.name=='object'){var N=M.attributes.width,O=M.attributes.height;N&&(L.attributes.width=N);O&&(L.attributes.height=O);}},param:function(L){L.children=[];L.isEmpty=true;return L;},a:function(L){if(!(L.children.length||L.attributes.name||L.attributes._cke_saved_name))return false;}},attributes:{'class':function(L,M){return e.ltrim(L.replace(/(?:^|\s+)cke_[^\s]*/g,''))||false;\r
+}},comment:function(L){if(L.substr(0,m.length)==m)return new a.htmlParser.cdata(decodeURIComponent(L.substr(m.length)));return L;}},x={elements:{}};for(t in s)x.elements[t]=q;if(c)w.attributes.style=function(L,M){return L.toLowerCase();};var y=/<(?:a|area|img|input).*?\s((?:href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))/gi;function z(L){return L.replace(y,'$& _cke_saved_$1');};var A=/<(style)(?=[ >])[^>]*>[^<]*<\/\1>/gi,B=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,C=/(<\/?)((?:object|embed|param).*?>)/gi,D=/<cke:param(.*?)\/>/gi;function E(L){return '<cke:encoded>'+encodeURIComponent(L)+'</cke:encoded>';};function F(L){return L.replace(A,E);};function G(L){return L.replace(C,'$1cke:$2');};function H(L){return L.replace(D,'<cke:param$1></cke:param>');};function I(L,M){return decodeURIComponent(M);};function J(L){return L.replace(B,I);};function K(L,M){var N=[],O=/<\!--\{cke_temp\}(\d*?)-->/g,P=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi].concat(M);for(var Q=0;Q<P.length;Q++)L=L.replace(P[Q],function(R){R=R.replace(O,function(S,T){return N[T];});return '<!--{cke_temp}'+(N.push(R)-1)+'-->';});L=L.replace(O,function(R,S){return '<!--'+m+encodeURIComponent(N[S]).replace(/--/g,'%2D%2D')+'-->';});return L;};j.add('htmldataprocessor',{requires:['htmlwriter'],init:function(L){var M=L.dataProcessor=new a.htmlDataProcessor(L);M.writer.forceSimpleAmpersand=L.config.forceSimpleAmpersand;M.dataFilter.addRules(u);M.dataFilter.addRules(v);M.htmlFilter.addRules(w);M.htmlFilter.addRules(x);}});a.htmlDataProcessor=function(L){var M=this;M.editor=L;M.writer=new a.htmlWriter();M.dataFilter=new a.htmlParser.filter();M.htmlFilter=new a.htmlParser.filter();};a.htmlDataProcessor.prototype={toHtml:function(L,M){L=K(L,this.editor.config.protectedSource);L=z(L);if(c)L=F(L);L=G(L);L=H(L);var N=document.createElement('div');N.innerHTML='a'+L;L=N.innerHTML.substr(1);if(c)L=J(L);var O=a.htmlParser.fragment.fromHtml(L,M),P=new a.htmlParser.basicWriter();O.writeHtml(P,this.dataFilter);return P.getHtml(true);},toDataFormat:function(L,M){var N=this.writer,O=a.htmlParser.fragment.fromHtml(L,M);N.reset();O.writeHtml(N,this.htmlFilter);return N.getHtml(true);}};})();i.forceSimpleAmpersand=false;j.add('image',{init:function(l){var m='image';a.dialog.add(m,this.path+'dialogs/image.js');l.addCommand(m,new a.dialogCommand(m));l.ui.addButton('Image',{label:l.lang.common.image,command:m});if(l.addMenuItems)l.addMenuItems({image:{label:l.lang.image.menu,command:'image',group:'image'}});\r
+if(l.contextMenu)l.contextMenu.addListener(function(n,o){if(!n||!n.is('img')||n.getAttribute('_cke_realelement'))return null;return{image:2};});}});i.image_removeLinkByEmptyURL=true;(function(){var l={ol:1,ul:1};function m(r,s){r.getCommand(this.name).setState(s);};function n(r){var C=this;var s=r.data.path.elements,t,u,v=r.editor;for(var w=0;w<s.length;w++){if(s[w].getName()=='li'){u=s[w];continue;}if(l[s[w].getName()]){t=s[w];break;}}if(t)if(C.name=='outdent')return m.call(C,v,2);else{while(u&&(u=u.getPrevious(d.walker.whitespaces(true))))if(u.getName&&u.getName()=='li')return m.call(C,v,2);return m.call(C,v,0);}if(!C.useIndentClasses&&C.name=='indent')return m.call(C,v,2);var x=r.data.path,y=x.block||x.blockLimit;if(!y)return m.call(C,v,0);if(C.useIndentClasses){var z=y.$.className.match(C.classNameRegex),A=0;if(z){z=z[1];A=C.indentClassMap[z];}if(C.name=='outdent'&&!A||C.name=='indent'&&A==v.config.indentClasses.length)return m.call(C,v,0);return m.call(C,v,2);}else{var B=parseInt(y.getStyle(C.indentCssProperty),10);if(isNaN(B))B=0;if(B<=0)return m.call(C,v,0);return m.call(C,v,2);}};function o(r,s,t){var u=s.startContainer,v=s.endContainer;while(u&&!u.getParent().equals(t))u=u.getParent();while(v&&!v.getParent().equals(t))v=v.getParent();if(!u||!v)return;var w=u,x=[],y=false;while(!y){if(w.equals(v))y=true;x.push(w);w=w.getNext();}if(x.length<1)return;var z=t.getParents(true);for(var A=0;A<z.length;A++)if(z[A].getName&&l[z[A].getName()]){t=z[A];break;}var B=this.name=='indent'?1:-1,C=x[0],D=x[x.length-1],E={},F=j.list.listToArray(t,E),G=F[D.getCustomData('listarray_index')].indent;for(A=C.getCustomData('listarray_index');A<=D.getCustomData('listarray_index');A++)F[A].indent+=B;for(A=D.getCustomData('listarray_index')+1;A<F.length&&F[A].indent>G;A++)F[A].indent+=B;var H=j.list.arrayToList(F,E,null,r.config.enterMode,0);if(this.name=='outdent'){var I;if((I=t.getParent())&&(I.is('li'))){var J=H.listNode.getChildren(),K=[],L=J.count(),M;for(A=L-1;A>=0;A--)if((M=J.getItem(A))&&(M.is&&M.is('li')))K.push(M);}}if(H)H.listNode.replace(t);if(K&&K.length)for(A=0;A<K.length;A++){var N=K[A],O=N;while((O=O.getNext())&&(O.is&&O.getName() in l))N.append(O);N.insertAfter(I);}h.clearAllMarkers(E);};function p(r,s){var A=this;var t=s.createIterator(),u=r.config.enterMode;t.enforceRealBlocks=true;t.enlargeBr=u!=2;var v;while(v=t.getNextParagraph())if(A.useIndentClasses){var w=v.$.className.match(A.classNameRegex),x=0;if(w){w=w[1];x=A.indentClassMap[w];}if(A.name=='outdent')x--;\r
+elsex++;x=Math.min(x,r.config.indentClasses.length);x=Math.max(x,0);var y=e.ltrim(v.$.className.replace(A.classNameRegex,''));if(x<1)v.$.className=y;else v.addClass(r.config.indentClasses[x-1]);}else{var z=parseInt(v.getStyle(A.indentCssProperty),10);if(isNaN(z))z=0;z+=(A.name=='indent'?1:-1)*(r.config.indentOffset);z=Math.max(z,0);z=Math.ceil(z/r.config.indentOffset)*r.config.indentOffset;v.setStyle(A.indentCssProperty,z?z+r.config.indentUnit:'');if(v.getAttribute('style')==='')v.removeAttribute('style');}};function q(r,s){var u=this;u.name=s;u.useIndentClasses=r.config.indentClasses&&r.config.indentClasses.length>0;if(u.useIndentClasses){u.classNameRegex=new RegExp('(?:^|\\s+)('+r.config.indentClasses.join('|')+')(?=$|\\s)');u.indentClassMap={};for(var t=0;t<r.config.indentClasses.length;t++)u.indentClassMap[r.config.indentClasses[t]]=t+1;}else u.indentCssProperty=r.config.contentsLangDirection=='ltr'?'margin-left':'margin-right';};q.prototype={exec:function(r){var s=r.getSelection(),t=s&&s.getRanges()[0];if(!s||!t)return;var u=s.createBookmarks(true),v=t.getCommonAncestor();while(v&&!(v.type==1&&l[v.getName()]))v=v.getParent();if(v)o.call(this,r,t,v);else p.call(this,r,t);r.focus();r.forceNextSelectionCheck();s.selectBookmarks(u);}};j.add('indent',{init:function(r){var s=new q(r,'indent'),t=new q(r,'outdent');r.addCommand('indent',s);r.addCommand('outdent',t);r.ui.addButton('Indent',{label:r.lang.indent,command:'indent'});r.ui.addButton('Outdent',{label:r.lang.outdent,command:'outdent'});r.on('selectionChange',e.bind(n,s));r.on('selectionChange',e.bind(n,t));},requires:['domiterator','list']});})();e.extend(i,{indentOffset:40,indentUnit:'px',indentClasses:null});(function(){var l=/(-moz-|-webkit-|start|auto)/i;function m(p,q){var r=q.block||q.blockLimit;if(!r||r.getName()=='body')return 2;var s=r.getComputedStyle('text-align').replace(l,'');if(!s&&this.isDefaultAlign||s==this.value)return 1;return 2;};function n(p){var q=p.editor.getCommand(this.name);q.state=m.call(this,p.editor,p.data.path);q.fire('state');};function o(p,q,r){var u=this;u.name=q;u.value=r;var s=p.config.contentsLangDirection;u.isDefaultAlign=r=='left'&&s=='ltr'||r=='right'&&s=='rtl';var t=p.config.justifyClasses;if(t){switch(r){case 'left':u.cssClassName=t[0];break;case 'center':u.cssClassName=t[1];break;case 'right':u.cssClassName=t[2];break;case 'justify':u.cssClassName=t[3];break;}u.cssClassRegex=new RegExp('(?:^|\\s+)(?:'+t.join('|')+')(?=$|\\s)');}};o.prototype={exec:function(p){var y=this;\r
+var q=p.getSelection();if(!q)return;var r=q.createBookmarks(),s=q.getRanges(),t=y.cssClassName,u,v;for(var w=s.length-1;w>=0;w--){u=s[w].createIterator();while(v=u.getNextParagraph()){v.removeAttribute('align');if(t){var x=v.$.className=e.ltrim(v.$.className.replace(y.cssClassRegex,''));if(y.state==2&&!y.isDefaultAlign)v.addClass(t);else if(!x)v.removeAttribute('class');}else if(y.state==2&&!y.isDefaultAlign)v.setStyle('text-align',y.value);else v.removeStyle('text-align');}}p.focus();p.forceNextSelectionCheck();q.selectBookmarks(r);}};j.add('justify',{init:function(p){var q=new o(p,'justifyleft','left'),r=new o(p,'justifycenter','center'),s=new o(p,'justifyright','right'),t=new o(p,'justifyblock','justify');p.addCommand('justifyleft',q);p.addCommand('justifycenter',r);p.addCommand('justifyright',s);p.addCommand('justifyblock',t);p.ui.addButton('JustifyLeft',{label:p.lang.justify.left,command:'justifyleft'});p.ui.addButton('JustifyCenter',{label:p.lang.justify.center,command:'justifycenter'});p.ui.addButton('JustifyRight',{label:p.lang.justify.right,command:'justifyright'});p.ui.addButton('JustifyBlock',{label:p.lang.justify.block,command:'justifyblock'});p.on('selectionChange',e.bind(n,q));p.on('selectionChange',e.bind(n,s));p.on('selectionChange',e.bind(n,r));p.on('selectionChange',e.bind(n,t));},requires:['domiterator']});})();e.extend(i,{justifyClasses:null});j.add('keystrokes',{beforeInit:function(l){l.keystrokeHandler=new a.keystrokeHandler(l);l.specialKeys={};},init:function(l){var m=l.config.keystrokes,n=l.config.blockedKeystrokes,o=l.keystrokeHandler.keystrokes,p=l.keystrokeHandler.blockedKeystrokes;for(var q=0;q<m.length;q++)o[m[q][0]]=m[q][1];for(q=0;q<n.length;q++)p[n[q]]=1;}});a.keystrokeHandler=function(l){var m=this;if(l.keystrokeHandler)return l.keystrokeHandler;m.keystrokes={};m.blockedKeystrokes={};m._={editor:l};return m;};(function(){var l,m=function(o){o=o.data;var p=o.getKeystroke(),q=this.keystrokes[p],r=this._.editor;l=r.fire('key',{keyCode:p})===true;if(!l){if(q){var s={from:'keystrokeHandler'};l=r.execCommand(q,s)!==false;}if(!l){var t=r.specialKeys[p];l=t&&t(r)===true;if(!l)l=!!this.blockedKeystrokes[p];}}if(l)o.preventDefault(true);return!l;},n=function(o){if(l){l=false;o.data.preventDefault(true);}};a.keystrokeHandler.prototype={attach:function(o){o.on('keydown',m,this);if(b.opera||b.gecko&&b.mac)o.on('keypress',n,this);}};})();i.blockedKeystrokes=[1000+66,1000+73,1000+85];i.keystrokes=[[4000+121,'toolbarFocus'],[4000+122,'elementsPathFocus'],[2000+121,'contextMenu'],[1000+90,'undo'],[1000+89,'redo'],[1000+2000+90,'redo'],[1000+76,'link'],[1000+66,'bold'],[1000+73,'italic'],[1000+85,'underline'],[4000+109,'toolbarCollapse']];\r
+j.add('link',{init:function(l){l.addCommand('link',new a.dialogCommand('link'));l.addCommand('anchor',new a.dialogCommand('anchor'));l.addCommand('unlink',new a.unlinkCommand());l.ui.addButton('Link',{label:l.lang.link.toolbar,command:'link'});l.ui.addButton('Unlink',{label:l.lang.unlink,command:'unlink'});l.ui.addButton('Anchor',{label:l.lang.anchor.toolbar,command:'anchor'});a.dialog.add('link',this.path+'dialogs/link.js');a.dialog.add('anchor',this.path+'dialogs/anchor.js');l.addCss('img.cke_anchor{background-image: url('+a.getUrl(this.path+'images/anchor.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 18px;'+'height: 18px;'+'}\n'+'a.cke_anchor'+'{'+'background-image: url('+a.getUrl(this.path+'images/anchor.gif')+');'+'background-position: 0 center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'padding-left: 18px;'+'}');l.on('selectionChange',function(m){var n=l.getCommand('unlink'),o=m.data.path.lastElement.getAscendant('a',true);if(o&&o.getName()=='a'&&o.getAttribute('href'))n.setState(2);else n.setState(0);});if(l.addMenuItems)l.addMenuItems({anchor:{label:l.lang.anchor.menu,command:'anchor',group:'anchor'},link:{label:l.lang.link.menu,command:'link',group:'link',order:1},unlink:{label:l.lang.unlink,command:'unlink',group:'link',order:5}});if(l.contextMenu)l.contextMenu.addListener(function(m,n){if(!m)return null;var o=m.is('img')&&m.getAttribute('_cke_real_element_type')=='anchor';if(!o){if(!(m=m.getAscendant('a',true)))return null;o=m.getAttribute('name')&&!m.getAttribute('href');}return o?{anchor:2}:{link:2,unlink:2};});},afterInit:function(l){var m=l.dataProcessor,n=m&&m.dataFilter;if(n)n.addRules({elements:{a:function(o){var p=o.attributes;if(p.name&&!p.href)return l.createFakeParserElement(o,'cke_anchor','anchor');}}});},requires:['fakeobjects']});a.unlinkCommand=function(){};a.unlinkCommand.prototype={exec:function(l){var m=l.getSelection(),n=m.createBookmarks(),o=m.getRanges(),p,q;for(var r=0;r<o.length;r++){p=o[r].getCommonAncestor(true);q=p.getAscendant('a',true);if(!q)continue;o[r].selectNodeContents(q);}m.selectRanges(o);l.document.$.execCommand('unlink',false,null);m.selectBookmarks(n);}};e.extend(i,{linkShowAdvancedTab:true,linkShowTargetTab:true});(function(){var l={ol:1,ul:1},m=/^[\n\r\t ]*$/;j.list={listToArray:function(t,u,v,w,x){if(!l[t.getName()])return[];if(!w)w=0;if(!v)v=[];for(var y=0,z=t.getChildCount();y<z;y++){var A=t.getChild(y);if(A.$.nodeName.toLowerCase()!='li')continue;\r
+var B={parent:t,indent:w,contents:[]};if(!x){B.grandparent=t.getParent();if(B.grandparent&&B.grandparent.$.nodeName.toLowerCase()=='li')B.grandparent=B.grandparent.getParent();}else B.grandparent=x;if(u)h.setMarker(u,A,'listarray_index',v.length);v.push(B);for(var C=0,D=A.getChildCount();C<D;C++){var E=A.getChild(C);if(E.type==1&&l[E.getName()])j.list.listToArray(E,u,v,w+1,B.grandparent);else B.contents.push(E);}}return v;},arrayToList:function(t,u,v,w){if(!v)v=0;if(!t||t.length<v+1)return null;var x=t[v].parent.getDocument(),y=new d.documentFragment(x),z=null,A=v,B=Math.max(t[v].indent,0),C=null,D=w==1?'p':'div';for(;;){var E=t[A];if(E.indent==B){if(!z||t[A].parent.getName()!=z.getName()){z=t[A].parent.clone(false,true);y.append(z);}C=z.append(x.createElement('li'));for(var F=0;F<E.contents.length;F++)C.append(E.contents[F].clone(true,true));A++;}else if(E.indent==Math.max(B,0)+1){var G=j.list.arrayToList(t,null,A,w);C.append(G.listNode);A=G.nextIndex;}else if(E.indent==-1&&!v&&E.grandparent){C;if(l[E.grandparent.getName()])C=x.createElement('li');else if(w!=2&&E.grandparent.getName()!='td')C=x.createElement(D);else C=new d.documentFragment(x);for(F=0;F<E.contents.length;F++)C.append(E.contents[F].clone(true,true));if(C.type==11&&A!=t.length-1){if(C.getLast()&&C.getLast().type==1&&C.getLast().getAttribute('type')=='_moz')C.getLast().remove();C.appendBogus();}if(C.type==1&&C.getName()==D&&C.$.firstChild){C.trim();var H=C.getFirst();if(H.type==1&&H.isBlockBoundary()){var I=new d.documentFragment(x);C.moveChildren(I);C=I;}}var J=C.$.nodeName.toLowerCase();if(!c&&(J=='div'||J=='p'))C.appendBogus();y.append(C);z=null;A++;}else return null;if(t.length<=A||Math.max(t[A].indent,0)<B)break;}if(u){var K=y.getFirst();while(K){if(K.type==1)h.clearMarkers(u,K);K=K.getNextSourceNode();}}return{listNode:y,nextIndex:A};}};function n(t,u){t.getCommand(this.name).setState(u);};function o(t){var u=t.data.path,v=u.blockLimit,w=u.elements,x;for(var y=0;y<w.length&&(x=w[y])&&(!x.equals(v));y++)if(l[w[y].getName()])return n.call(this,t.editor,this.type==w[y].getName()?1:2);return n.call(this,t.editor,2);};function p(t,u,v,w){var x=j.list.listToArray(u.root,v),y=[];for(var z=0;z<u.contents.length;z++){var A=u.contents[z];A=A.getAscendant('li',true);if(!A||A.getCustomData('list_item_processed'))continue;y.push(A);h.setMarker(v,A,'list_item_processed',true);}var B=u.root.getDocument().createElement(this.type);for(z=0;z<y.length;z++){var C=y[z].getCustomData('listarray_index');x[C].parent=B;\r
+}var D=j.list.arrayToList(x,v,null,t.config.enterMode),E,F=D.listNode.getChildCount();for(z=0;z<F&&(E=D.listNode.getChild(z));z++)if(E.getName()==this.type)w.push(E);D.listNode.replace(u.root);};function q(t,u,v){var w=u.contents,x=u.root.getDocument(),y=[];if(w.length==1&&w[0].equals(u.root)){var z=x.createElement('div');w[0].moveChildren&&w[0].moveChildren(z);w[0].append(z);w[0]=z;}var A=u.contents[0].getParent();for(var B=0;B<w.length;B++)A=A.getCommonAncestor(w[B].getParent());for(B=0;B<w.length;B++){var C=w[B],D;while(D=C.getParent()){if(D.equals(A)){y.push(C);break;}C=D;}}if(y.length<1)return;var E=y[y.length-1].getNext(),F=x.createElement(this.type);v.push(F);while(y.length){var G=y.shift(),H=x.createElement('li');G.moveChildren(H);G.remove();H.appendTo(F);if(!c)H.appendBogus();}if(E)F.insertBefore(E);else F.appendTo(A);};function r(t,u,v){var w=j.list.listToArray(u.root,v),x=[];for(var y=0;y<u.contents.length;y++){var z=u.contents[y];z=z.getAscendant('li',true);if(!z||z.getCustomData('list_item_processed'))continue;x.push(z);h.setMarker(v,z,'list_item_processed',true);}var A=null;for(y=0;y<x.length;y++){var B=x[y].getCustomData('listarray_index');w[B].indent=-1;A=B;}for(y=A+1;y<w.length;y++)if(w[y].indent>w[y-1].indent+1){var C=w[y-1].indent+1-w[y].indent,D=w[y].indent;while(w[y]&&w[y].indent>=D){w[y].indent+=C;y++;}y--;}var E=j.list.arrayToList(w,v,null,t.config.enterMode),F=E.listNode,G,H;function I(K){if((G=F[K?'getFirst':'getLast']())&&(!(G.is&&G.isBlockBoundary())&&(H=u.root[K?'getPrevious':'getNext'](d.walker.whitespaces(true)))&&(!(H.is&&H.isBlockBoundary({br:1})))))t.document.createElement('br')[K?'insertBefore':'insertAfter'](G);};I(true);I();var J=u.root.getParent();F.replace(u.root);};function s(t,u){this.name=t;this.type=u;};s.prototype={exec:function(t){t.focus();var u=t.document,v=t.getSelection(),w=v&&v.getRanges();if(!w||w.length<1)return;if(this.state==2){var x=u.getBody();x.trim();if(!x.getFirst()){var y=u.createElement(t.config.enterMode==1?'p':t.config.enterMode==3?'div':'br');y.appendTo(x);w=[new d.range(u)];if(y.is('br')){w[0].setStartBefore(y);w[0].setEndAfter(y);}else w[0].selectNodeContents(y);v.selectRanges(w);}else{var z=w.length==1&&w[0],A=z&&z.getEnclosedNode();if(A&&A.is&&this.type==A.getName())n.call(this,t,1);}}var B=v.createBookmarks(true),C=[],D={};while(w.length>0){z=w.shift();var E=z.getBoundaryNodes(),F=E.startNode,G=E.endNode;if(F.type==1&&F.getName()=='td')z.setStartAt(E.startNode,1);if(G.type==1&&G.getName()=='td')z.setEndAt(E.endNode,2);\r
+var H=z.createIterator(),I;H.forceBrBreak=this.state==2;while(I=H.getNextParagraph()){var J=new d.elementPath(I),K=null,L=false,M=J.blockLimit,N;for(var O=0;O<J.elements.length&&(N=J.elements[O])&&(!N.equals(M));O++)if(l[N.getName()]){M.removeCustomData('list_group_object');var P=N.getCustomData('list_group_object');if(P)P.contents.push(I);else{P={root:N,contents:[I]};C.push(P);h.setMarker(D,N,'list_group_object',P);}L=true;break;}if(L)continue;var Q=M;if(Q.getCustomData('list_group_object'))Q.getCustomData('list_group_object').contents.push(I);else{P={root:Q,contents:[I]};h.setMarker(D,Q,'list_group_object',P);C.push(P);}}}var R=[];while(C.length>0){P=C.shift();if(this.state==2){if(l[P.root.getName()])p.call(this,t,P,D,R);else q.call(this,t,P,R);}else if(this.state==1&&l[P.root.getName()])r.call(this,t,P,D);}for(O=0;O<R.length;O++){K=R[O];var S,T=this;(S=function(U){var V=K[U?'getPrevious':'getNext'](d.walker.whitespaces(true));if(V&&V.getName&&V.getName()==T.type){V.remove();V.moveChildren(K,U?true:false);}})();S(true);}h.clearAllMarkers(D);v.selectBookmarks(B);t.focus();}};j.add('list',{init:function(t){var u=new s('numberedlist','ol'),v=new s('bulletedlist','ul');t.addCommand('numberedlist',u);t.addCommand('bulletedlist',v);t.ui.addButton('NumberedList',{label:t.lang.numberedlist,command:'numberedlist'});t.ui.addButton('BulletedList',{label:t.lang.bulletedlist,command:'bulletedlist'});t.on('selectionChange',e.bind(o,u));t.on('selectionChange',e.bind(o,v));},requires:['domiterator']});})();(function(){function l(q){if(!q||q.type!=1||q.getName()!='form')return[];var r=[],s=['style','className'];for(var t=0;t<s.length;t++){var u=s[t],v=q.$.elements.namedItem(u);if(v){var w=new h(v);r.push([w,w.nextSibling]);w.remove();}}return r;};function m(q,r){if(!q||q.type!=1||q.getName()!='form')return;if(r.length>0)for(var s=r.length-1;s>=0;s--){var t=r[s][0],u=r[s][1];if(u)t.insertBefore(u);else t.appendTo(q);}};function n(q,r){var s=l(q),t={},u=q.$;if(!r){t['class']=u.className||'';u.className='';}t.inline=u.style.cssText||'';if(!r)u.style.cssText='position: static; overflow: visible';m(s);return t;};function o(q,r){var s=l(q),t=q.$;if('class' in r)t.className=r['class'];if('inline' in r)t.style.cssText=r.inline;m(s);};function p(q,r){return function(){var s=q.getViewPaneSize();r.resize(s.width,s.height,null,true);};};j.add('maximize',{init:function(q){var r=q.lang,s=a.document,t=s.getWindow(),u,v,w,x=p(t,q),y=2;q.addCommand('maximize',{modes:{wysiwyg:1,source:1},exec:function(){var I=this;\r
+var z=q.container.getChild([0,0]),A=q.getThemeSpace('contents');if(q.mode=='wysiwyg'){u=q.getSelection().getRanges();v=t.getScrollPosition();}else{var B=q.textarea.$;u=!c&&[B.selectionStart,B.selectionEnd];v=[B.scrollLeft,B.scrollTop];}if(I.state==2){t.on('resize',x);w=t.getScrollPosition();var C=q.container;while(C=C.getParent()){C.setCustomData('maximize_saved_styles',n(C));C.setStyle('z-index',q.config.baseFloatZIndex-1);}A.setCustomData('maximize_saved_styles',n(A,true));z.setCustomData('maximize_saved_styles',n(z,true));if(c)s.$.documentElement.style.overflow=s.getBody().$.style.overflow='hidden';else s.getBody().setStyles({overflow:'hidden',width:'0px',height:'0px'});t.$.scrollTo(0,0);var D=t.getViewPaneSize();z.setStyle('position','absolute');z.$.offsetLeft;z.setStyles({'z-index':q.config.baseFloatZIndex-1,left:'0px',top:'0px'});q.resize(D.width,D.height,null,true);var E=z.getDocumentPosition();z.setStyles({left:-1*E.x+'px',top:-1*E.y+'px'});z.addClass('cke_maximized');}else if(I.state==1){t.removeListener('resize',x);var F=[A,z];for(var G=0;G<F.length;G++){o(F[G],F[G].getCustomData('maximize_saved_styles'));F[G].removeCustomData('maximize_saved_styles');}C=q.container;while(C=C.getParent()){o(C,C.getCustomData('maximize_saved_styles'));C.removeCustomData('maximize_saved_styles');}t.$.scrollTo(w.x,w.y);z.removeClass('cke_maximized');q.fire('resize');}I.toggleState();if(q.mode=='wysiwyg'){q.getSelection().selectRanges(u);var H=q.getSelection().getStartElement();if(H)H.scrollIntoView(true);else t.$.scrollTo(v.x,v.y);}else{if(u){B.selectionStart=u[0];B.selectionEnd=u[1];}B.scrollLeft=v[0];B.scrollTop=v[1];}u=v=null;y=I.state;},canUndo:false});q.ui.addButton('Maximize',{label:r.maximize,command:'maximize'});q.on('mode',function(){q.getCommand('maximize').setState(y);},null,null,100);}});})();j.add('newpage',{init:function(l){l.addCommand('newpage',{modes:{wysiwyg:1,source:1},exec:function(m){var n=this;function o(){setTimeout(function(){m.fire('afterCommandExec',{name:n.name,command:n});},500);};if(m.mode=='wysiwyg')m.on('contentDom',function(p){p.removeListener();o();});m.setData(m.config.newpage_html);m.focus();if(m.mode=='source')o();},async:true});l.ui.addButton('NewPage',{label:l.lang.newPage,command:'newpage'});}});i.newpage_html='';j.add('pagebreak',{init:function(l){l.addCommand('pagebreak',j.pagebreakCmd);l.ui.addButton('PageBreak',{label:l.lang.pagebreak,command:'pagebreak'});l.addCss('img.cke_pagebreak{background-image: url('+a.getUrl(this.path+'images/pagebreak.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'clear: both;'+'display: block;'+'float: none;'+'width: 100%;'+'border-top: #999999 1px dotted;'+'border-bottom: #999999 1px dotted;'+'height: 5px;'+'}');\r
+},afterInit:function(l){var m=l.dataProcessor,n=m&&m.dataFilter;if(n)n.addRules({elements:{div:function(o){var p=o.attributes.style,q=p&&o.children.length==1&&o.children[0],r=q&&q.name=='span'&&q.attributes.style;if(r&&/page-break-after\s*:\s*always/i.test(p)&&/display\s*:\s*none/i.test(r))return l.createFakeParserElement(o,'cke_pagebreak','div');}}});},requires:['fakeobjects']});j.pagebreakCmd={exec:function(l){var m=h.createFromHtml('<div style="page-break-after: always;"><span style="display: none;">&nbsp;</span></div>');m=l.createFakeElement(m,'cke_pagebreak','div');var n=l.getSelection().getRanges();for(var o,p=0;p<n.length;p++){o=n[p];if(p>0)m=m.clone(true);o.splitBlock('p');o.insertNode(m);}}};j.add('pastefromword',{init:function(l){l.addCommand('pastefromword',new a.dialogCommand('pastefromword'));l.ui.addButton('PasteFromWord',{label:l.lang.pastefromword.toolbar,command:'pastefromword'});a.dialog.add('pastefromword',this.path+'dialogs/pastefromword.js');}});i.pasteFromWordIgnoreFontFace=true;i.pasteFromWordRemoveStyle=false;i.pasteFromWordKeepsStructure=false;(function(){var l={exec:function(n){if(a.getClipboardData()===false||!window.clipboardData){n.openDialog('pastetext');return;}n.insertText(window.clipboardData.getData('Text'));}};j.add('pastetext',{init:function(n){var o='pastetext',p=n.addCommand(o,l);n.ui.addButton('PasteText',{label:n.lang.pasteText.button,command:o});a.dialog.add(o,a.getUrl(this.path+'dialogs/pastetext.js'));if(n.config.forcePasteAsPlainText)n.on('beforePaste',function(q){if(n.mode=='wysiwyg'){setTimeout(function(){p.exec();},0);q.cancel();}},null,null,20);},requires:['clipboard']});var m;a.getClipboardData=function(){if(!c)return false;var n=a.document,o=n.getBody();if(!m){m=n.createElement('div',{attributes:{id:'cke_hiddenDiv'},styles:{position:'absolute',visibility:'hidden',overflow:'hidden',width:'1px',height:'1px'}});m.setHtml('');m.appendTo(o);}var p=false,q=function(){p=true;};o.on('paste',q);var r=o.$.createTextRange();r.moveToElementText(m.$);r.execCommand('Paste');var s=m.getHtml();m.setHtml('');o.removeListener('paste',q);return p&&s;};})();a.editor.prototype.insertText=function(l){l=e.htmlEncode(l);l=l.replace(/(?:\r\n)|\n|\r/g,'<br>');this.insertHtml(l);};i.forcePasteAsPlainText=false;j.add('popup');e.extend(a.editor.prototype,{popup:function(l,m,n){m=m||'80%';n=n||'70%';if(typeof m=='string'&&m.length>1&&m.substr(m.length-1,1)=='%')m=parseInt(window.screen.width*parseInt(m,10)/100,10);if(typeof n=='string'&&n.length>1&&n.substr(n.length-1,1)=='%')n=parseInt(window.screen.height*parseInt(n,10)/100,10);\r
+if(m<640)m=640;if(n<420)n=420;var o=parseInt((window.screen.height-n)/(2),10),p=parseInt((window.screen.width-m)/(2),10),q='location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,width='+m+',height='+n+',top='+o+',left='+p,r=window.open('',null,q,true);if(!r)return false;try{r.moveTo(p,o);r.resizeTo(m,n);r.focus();r.location.href=l;}catch(s){r=window.open(l,null,q,true);}return true;}});(function(){var l={modes:{wysiwyg:1,source:1},canUndo:false,exec:function(n){var o,p=c&&document.domain!=window.location.hostname;if(n.config.fullPage)o=n.getData();else{var q='<body ',r=a.document.getBody(),s=n.config.baseHref.length>0?'<base href="'+n.config.baseHref+'" _cktemp="true"></base>':'';if(r.getAttribute('id'))q+='id="'+r.getAttribute('id')+'" ';if(r.getAttribute('class'))q+='class="'+r.getAttribute('class')+'" ';q+='>';o=n.config.docType+'<html dir="'+n.config.contentsLangDirection+'">'+'<head>'+s+'<title>'+n.lang.preview+'</title>'+'<link href="'+n.config.contentsCss+'" type="text/css" rel="stylesheet" _cktemp="true"/>'+'</head>'+q+n.getData()+'</body></html>';}var t=640,u=420,v=80;try{var w=window.screen;t=Math.round(w.width*0.8);u=Math.round(w.height*0.7);v=Math.round(w.width*0.1);}catch(z){}var x='';if(p){window._cke_htmlToLoad=o;x='javascript:void( (function(){document.open();document.domain="'+document.domain+'";'+'document.write( window.opener._cke_htmlToLoad );'+'document.close();'+'window.opener._cke_htmlToLoad = null;'+'})() )';}var y=window.open(x,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+t+',height='+u+',left='+v);if(!p){y.document.write(o);y.document.close();}}},m='preview';j.add(m,{init:function(n){n.addCommand(m,l);n.ui.addButton('Preview',{label:n.lang.preview,command:m});}});})();j.add('print',{init:function(l){var m='print',n=l.addCommand(m,j.print);l.ui.addButton('Print',{label:l.lang.print,command:m});}});j.print={exec:function(l){if(b.opera)return;else if(b.gecko)l.window.$.print();else l.document.$.execCommand('Print');},canUndo:false,modes:{wysiwyg:!b.opera}};j.add('removeformat',{requires:['selection'],init:function(l){l.addCommand('removeFormat',j.removeformat.commands.removeformat);l.ui.addButton('RemoveFormat',{label:l.lang.removeFormat,command:'removeFormat'});}});j.removeformat={commands:{removeformat:{exec:function(l){var m=l._.removeFormatRegex||(l._.removeFormatRegex=new RegExp('^(?:'+l.config.removeFormatTags.replace(/,/g,'|')+')$','i')),n=l._.removeAttributes||(l._.removeAttributes=l.config.removeFormatAttributes.split(',')),o=l.getSelection().getRanges();\r
+for(var p=0,q;q=o[p];p++){if(q.collapsed)continue;q.enlarge(1);var r=q.createBookmark(),s=r.startNode,t=r.endNode,u=function(x){var y=new d.elementPath(x),z=y.elements;for(var A=1,B;B=z[A];A++){if(B.equals(y.block)||B.equals(y.blockLimit))break;if(m.test(B.getName()))x.breakParent(B);}};u(s);u(t);var v=s.getNextSourceNode(true,1);while(v){if(v.equals(t))break;var w=v.getNextSourceNode(false,1);if(v.getName()!='img'||!v.getAttribute('_cke_protected_html'))if(m.test(v.getName()))v.remove(true);else v.removeAttributes(n);v=w;}q.moveToBookmark(r);}l.getSelection().selectRanges(o);}}}};i.removeFormatTags='b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var';i.removeFormatAttributes='class,style,lang,width,height,align,hspace,valign';j.add('resize',{init:function(l){var m=l.config;if(m.resize_enabled){var n=null,o,p;function q(t){var u=t.data.$.screenX-o.x,v=t.data.$.screenY-o.y,w=p.width+u*(l.lang.dir=='rtl'?-1:1),x=p.height+v;l.resize(Math.max(m.resize_minWidth,Math.min(w,m.resize_maxWidth)),Math.max(m.resize_minHeight,Math.min(x,m.resize_maxHeight)));};function r(t){a.document.removeListener('mousemove',q);a.document.removeListener('mouseup',r);if(l.document){l.document.removeListener('mousemove',q);l.document.removeListener('mouseup',r);}};var s=e.addFunction(function(t){if(!n)n=l.getResizable();p={width:n.$.offsetWidth||0,height:n.$.offsetHeight||0};o={x:t.screenX,y:t.screenY};a.document.on('mousemove',q);a.document.on('mouseup',r);if(l.document){l.document.on('mousemove',q);l.document.on('mouseup',r);}});l.on('themeSpace',function(t){if(t.data.space=='bottom')t.data.html+='<div class="cke_resizer" title="'+e.htmlEncode(l.lang.resize)+'"'+' onmousedown="CKEDITOR.tools.callFunction('+s+', event)"'+'></div>';},l,null,100);}}});i.resize_minWidth=750;i.resize_minHeight=250;i.resize_maxWidth=3000;i.resize_maxHeight=3000;i.resize_enabled=true;(function(){var l={modes:{wysiwyg:1,source:1},exec:function(n){var o=n.element.$.form;if(o)try{o.submit();}catch(p){if(o.submit.click)o.submit.click();}}},m='save';j.add(m,{init:function(n){var o=n.addCommand(m,l);o.modes={wysiwyg:!!n.element.$.form};n.ui.addButton('Save',{label:n.lang.save,command:m});}});})();(function(){var l='scaytcheck',m='',n=function(){var r=this,s=function(){var v={};v.srcNodeRef=r.document.getWindow().$.frameElement;v.assocApp='CKEDITOR.'+a.version+'@'+a.revision;v.customerid=r.config.scayt_customerid||'1:11111111111111111111111111111111111111';v.customDictionaryName=r.config.scayt_customDictionaryName;\r
+v.userDictionaryName=r.config.scayt_userDictionaryName;v.defLang=r.scayt_defLang;if(a._scaytParams)for(var w in a._scaytParams)v[w]=a._scaytParams[w];var x=new window.scayt(v),y=o.instances[r.name];if(y){x.sLang=y.sLang;x.option(y.option());x.paused=y.paused;}o.instances[r.name]=x;try{x.setDisabled(x.paused===false);}catch(z){}r.fire('showScaytState');};r.on('contentDom',s);r.on('contentDomUnload',function(){var v=a.document.getElementsByTag('script'),w=/^dojoIoScript(\d+)$/i,x=/^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i;for(var y=0;y<v.count();y++){var z=v.getItem(y),A=z.getId(),B=z.getAttribute('src');if(A&&B&&A.match(w)&&B.match(x))z.remove();}});r.on('beforeCommandExec',function(v){if((v.data.name=='source'||v.data.name=='newpage')&&(r.mode=='wysiwyg')){var w=o.getScayt(r);if(w){w.paused=!w.disabled;w.destroy();delete o.instances[r.name];}}});r.on('afterSetData',function(){if(o.isScaytEnabled(r))o.getScayt(r).refresh();});r.on('insertElement',function(){var v=o.getScayt(r);if(o.isScaytEnabled(r)){if(c)r.getSelection().unlock(true);try{v.refresh();}catch(w){}}},this,null,50);r.on('scaytDialog',function(v){v.data.djConfig=window.djConfig;v.data.scayt_control=o.getScayt(r);v.data.tab=m;v.data.scayt=window.scayt;});var t=r.dataProcessor,u=t&&t.htmlFilter;if(u)u.addRules({elements:{span:function(v){if(v.attributes.scayt_word&&v.attributes.scaytid){delete v.name;return v;}}}});if(r.document)s();};j.scayt={engineLoaded:false,instances:{},getScayt:function(r){return this.instances[r.name];},isScaytReady:function(r){return this.engineLoaded===true&&'undefined'!==typeof window.scayt&&this.getScayt(r);},isScaytEnabled:function(r){var s=this.getScayt(r);return s?s.disabled===false:false;},loadEngine:function(r){if(this.engineLoaded===true)return n.apply(r);else if(this.engineLoaded==-1)return a.on('scaytReady',function(){n.apply(r);});a.on('scaytReady',n,r);a.on('scaytReady',function(){this.engineLoaded=true;},this,null,0);this.engineLoaded=-1;var s=document.location.protocol;s=s.search(/https?:/)!=-1?s:'http:';var t='svc.spellchecker.net/spellcheck/lf/scayt/scayt1.js',u=r.config.scayt_srcUrl||s+'//'+t,v=o.parseUrl(u).path+'/';a._djScaytConfig={baseUrl:v,addOnLoad:[function(){a.fireOnce('scaytReady');}],isDebug:false};a.document.getHead().append(a.document.createElement('script',{attributes:{type:'text/javascript',src:u}}));return null;},parseUrl:function(r){var s;if(r.match&&(s=r.match(/(.*)[\/\\](.*?\.\w+)$/)))return{path:s[1],file:s[2]};\r
+else return r;}};var o=j.scayt,p=function(r,s,t,u,v,w,x){r.addCommand(u,v);r.addMenuItem(u,{label:t,command:u,group:w,order:x});},q={preserveState:true,exec:function(r){if(o.isScaytReady(r)){var s=o.isScaytEnabled(r);this.setState(s?2:1);var t=o.getScayt(r);t.setDisabled(s);}else if(!r.config.scayt_autoStartup&&o.engineLoaded>=0){this.setState(0);r.on('showScaytState',function(){this.removeListener();this.setState(o.isScaytEnabled(r)?1:2);},this);o.loadEngine(r);}}};j.add('scayt',{requires:['menubutton'],beforeInit:function(r){r.config.menu_groups='scayt_suggest,scayt_moresuggest,scayt_control,'+r.config.menu_groups;},init:function(r){var s={},t={},u=r.addCommand(l,q);a.dialog.add(l,a.getUrl(this.path+'dialogs/options.js'));var v='scaytButton';r.addMenuGroup(v);r.addMenuItems({scaytToggle:{label:r.lang.scayt.enable,command:l,group:v},scaytOptions:{label:r.lang.scayt.options,group:v,onClick:function(){m='options';r.openDialog(l);}},scaytLangs:{label:r.lang.scayt.langs,group:v,onClick:function(){m='langs';r.openDialog(l);}},scaytAbout:{label:r.lang.scayt.about,group:v,onClick:function(){m='about';r.openDialog(l);}}});r.ui.add('Scayt',5,{label:r.lang.scayt.title,title:r.lang.scayt.title,className:'cke_button_scayt',onRender:function(){u.on('state',function(){this.setState(u.state);},this);},onMenu:function(){var x=o.isScaytEnabled(r);r.getMenuItem('scaytToggle').label=r.lang.scayt[x?'disable':'enable'];return{scaytToggle:2,scaytOptions:x?2:0,scaytLangs:x?2:0,scaytAbout:x?2:0};}});if(r.contextMenu&&r.addMenuItems)r.contextMenu.addListener(function(x){if(!(o.isScaytEnabled(r)&&x))return null;var y=o.getScayt(r),z=y.getWord(x.$);if(!z)return null;var A=y.getLang(),B={},C=window.scayt.getSuggestion(z,A);if(!C||!C.length)return null;for(i in s){delete r._.menuItems[i];delete r._.commands[i];}for(i in t){delete r._.menuItems[i];delete r._.commands[i];}s={};t={};var D=false;for(var E=0,F=C.length;E<F;E+=1){var G='scayt_suggestion_'+C[E].replace(' ','_'),H=(function(L,M){return{exec:function(){y.replace(L,M);}};})(x.$,C[E]);if(E<r.config.scayt_maxSuggestions){p(r,'button_'+G,C[E],G,H,'scayt_suggest',E+1);B[G]=2;t[G]=2;}else{p(r,'button_'+G,C[E],G,H,'scayt_moresuggest',E+1);s[G]=2;D=true;}}if(D)r.addMenuItem('scayt_moresuggest',{label:r.lang.scayt.moreSuggestions,group:'scayt_moresuggest',order:10,getItems:function(){return s;}});var I={exec:function(){y.ignore(x.$);}},J={exec:function(){y.ignoreAll(x.$);}},K={exec:function(){window.scayt.addWordToUserDictionary(x.$);}};\r
+p(r,'ignore',r.lang.scayt.ignore,'scayt_ignore',I,'scayt_control',1);p(r,'ignore_all',r.lang.scayt.ignoreAll,'scayt_ignore_all',J,'scayt_control',2);p(r,'add_word',r.lang.scayt.addWord,'scayt_add_word',K,'scayt_control',3);t.scayt_moresuggest=2;t.scayt_ignore=2;t.scayt_ignore_all=2;t.scayt_add_word=2;if(y.fireOnContextMenu)y.fireOnContextMenu(r);return t;});if(r.config.scayt_autoStartup){var w=function(){r.removeListener('showScaytState',w);u.setState(o.isScaytEnabled(r)?1:2);};r.on('showScaytState',w);o.loadEngine(r);}}});})();i.scayt_maxSuggestions=5;i.scayt_autoStartup=false;j.add('smiley',{requires:['dialog'],init:function(l){l.addCommand('smiley',new a.dialogCommand('smiley'));l.ui.addButton('Smiley',{label:l.lang.smiley.toolbar,command:'smiley'});a.dialog.add('smiley',this.path+'dialogs/smiley.js');}});i.smiley_path=a.basePath+'plugins/smiley/images/';i.smiley_images=['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'];i.smiley_descriptions=[':)',':(',';)',':D',':/',':P','','','','','','','',';(','','','','','',':kiss',''];(function(){var l='.%2 p,.%2 div,.%2 pre,.%2 address,.%2 blockquote,.%2 h1,.%2 h2,.%2 h3,.%2 h4,.%2 h5,.%2 h6{background-repeat: no-repeat;border: 1px dotted gray;padding-top: 8px;padding-left: 8px;}.%2 p{%1p.png);}.%2 div{%1div.png);}.%2 pre{%1pre.png);}.%2 address{%1address.png);}.%2 blockquote{%1blockquote.png);}.%2 h1{%1h1.png);}.%2 h2{%1h2.png);}.%2 h3{%1h3.png);}.%2 h4{%1h4.png);}.%2 h5{%1h5.png);}.%2 h6{%1h6.png);}',m=/%1/g,n=/%2/g,o={preserveState:true,exec:function(p){this.toggleState();this.refresh(p);},refresh:function(p){var q=this.state==1?'addClass':'removeClass';p.document.getBody()[q]('cke_show_blocks');}};j.add('showblocks',{requires:['wysiwygarea'],init:function(p){var q=p.addCommand('showblocks',o);q.canUndo=false;if(p.config.startupOutlineBlocks)q.setState(1);p.addCss(l.replace(m,'background-image: url('+a.getUrl(this.path)+'images/block_').replace(n,'cke_show_blocks '));p.ui.addButton('ShowBlocks',{label:p.lang.showBlocks,command:'showblocks'});p.on('mode',function(){if(q.state!=0)q.refresh(p);});p.on('contentDom',function(){if(q.state!=0)q.refresh(p);});}});})();i.startupOutlineBlocks=false;\r
+j.add('sourcearea',{requires:['editingblock'],init:function(l){var m=j.sourcearea;l.on('editingBlockReady',function(){var n,o;l.addMode('source',{load:function(p,q){if(c&&b.version<8)p.setStyle('position','relative');l.textarea=n=new h('textarea');n.setAttributes({dir:'ltr',tabIndex:-1});n.addClass('cke_source');var r={width:b.ie7Compat?'99%':'100%',height:'100%',resize:'none',outline:'none','text-align':'left'};if(c){if(!b.ie8Compat){o=function(){n.hide();n.setStyle('height',p.$.clientHeight+'px');n.show();};l.on('resize',o);r.height=p.$.clientHeight+'px';}}else n.on('mousedown',function(t){t=t.data.$;if(t.stopPropagation)t.stopPropagation();});p.setHtml('');p.append(n);n.setStyles(r);l.mayBeDirty=true;this.loadData(q);var s=l.keystrokeHandler;if(s)s.attach(n);setTimeout(function(){l.mode='source';l.fire('mode');},b.gecko||b.webkit?100:0);},loadData:function(p){n.setValue(p);},getData:function(){return n.getValue();},getSnapshotData:function(){return n.getValue();},unload:function(p){l.textarea=n=null;if(o)l.removeListener('resize',o);if(c&&b.version<8)p.removeStyle('position');},focus:function(){n.focus();}});});l.addCommand('source',m.commands.source);if(l.ui.addButton)l.ui.addButton('Source',{label:l.lang.source,command:'source'});l.on('mode',function(){l.getCommand('source').setState(l.mode=='source'?1:2);});}});j.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},exec:function(l){if(l.mode=='wysiwyg')l.fire('saveSnapshot');l.getCommand('source').setState(0);l.setMode(l.mode=='source'?'wysiwyg':'source');},canUndo:false}}};(function(){j.add('stylescombo',{requires:['richcombo','styles'],init:function(o){var p=o.config,q=o.lang.stylesCombo,r=this.path,s;o.ui.addRichCombo('Styles',{label:q.label,title:q.panelTitle,voiceLabel:q.voiceLabel,className:'cke_styles',multiSelect:true,panel:{css:[p.contentsCss,a.getUrl(o.skinPath+'editor.css')],voiceLabel:q.panelVoiceLabel},init:function(){var t=this,u=p.stylesCombo_stylesSet.split(':',2),v=u[1]||a.getUrl(r+'styles/'+u[0]+'.js');u=u[0];a.loadStylesSet(u,v,function(w){var x,y,z=[];s={};for(var A=0;A<w.length;A++){var B=w[A];y=B.name;x=s[y]=new a.style(B);x._name=y;z.push(x);}z.sort(n);var C;for(A=0;A<z.length;A++){x=z[A];y=x._name;var D=x.type;if(D!=C){t.startGroup(q['panelTitle'+String(D)]);C=D;}t.add(y,x.type==3?y:m(x._.definition),y);}t.commit();t.onOpen();});},onClick:function(t){o.focus();o.fire('saveSnapshot');var u=s[t],v=o.getSelection();if(u.type==3){var w=v.getSelectedElement();if(w)u.applyToObject(w);\r
+return;}var x=new d.elementPath(v.getStartElement());if(u.type==2&&u.checkActive(x))u.remove(o.document);else u.apply(o.document);o.fire('saveSnapshot');},onRender:function(){o.on('selectionChange',function(t){var u=this.getValue(),v=t.data.path,w=v.elements;for(var x=0,y;x<w.length;x++){y=w[x];for(var z in s)if(s[z].checkElementRemovable(y,true)){if(z!=u)this.setValue(z);return;}}this.setValue('');},this);},onOpen:function(){var B=this;if(c)o.focus();var t=o.getSelection(),u=t.getSelectedElement(),v=u&&u.getName(),w=new d.elementPath(u||t.getStartElement()),x=[0,0,0,0];B.showAll();B.unmarkAll();for(var y in s){var z=s[y],A=z.type;if(A==3){if(u&&z.element==v){if(z.checkElementRemovable(u,true))B.mark(y);x[A]++;}else B.hideItem(y);}else{if(z.checkActive(w))B.mark(y);x[A]++;}}if(!x[1])B.hideGroup(q['panelTitle'+String(1)]);if(!x[2])B.hideGroup(q['panelTitle'+String(2)]);if(!x[3])B.hideGroup(q['panelTitle'+String(3)]);}});}});var l={};a.addStylesSet=function(o,p){l[o]=p;};a.loadStylesSet=function(o,p,q){var r=l[o];if(r){q(r);return;}a.scriptLoader.load(p,function(){q(l[o]);});};function m(o){var p=[],q=o.element;if(q=='bdo')q='span';p=['<',q];var r=o.attributes;if(r)for(var s in r)p.push(' ',s,'="',r[s],'"');var t=a.style.getStyleText(o);if(t)p.push(' style="',t,'"');p.push('>',o.name,'</',q,'>');return p.join('');};function n(o,p){var q=o.type,r=p.type;return q==r?0:q==3?-1:r==3?1:r==1?1:-1;};})();i.stylesCombo_stylesSet='default';j.add('table',{init:function(l){var m=j.table,n=l.lang.table;l.addCommand('table',new a.dialogCommand('table'));l.addCommand('tableProperties',new a.dialogCommand('tableProperties'));l.ui.addButton('Table',{label:n.toolbar,command:'table'});a.dialog.add('table',this.path+'dialogs/table.js');a.dialog.add('tableProperties',this.path+'dialogs/table.js');if(l.addMenuItems)l.addMenuItems({table:{label:n.menu,command:'tableProperties',group:'table',order:5},tabledelete:{label:n.deleteTable,command:'tableDelete',group:'table',order:1}});if(l.contextMenu)l.contextMenu.addListener(function(o,p){if(!o)return null;var q=o.is('table')||o.hasAscendant('table');if(q)return{tabledelete:2,table:2};return null;});}});(function(){function l(y,z){if(c)y.removeAttribute(z);else delete y[z];};var m=/^(?:td|th)$/;function n(y){var z=y.createBookmarks(),A=y.getRanges(),B=[],C={};function D(L){if(B.length>0)return;if(L.type==1&&m.test(L.getName())&&!L.getCustomData('selected_cell')){h.setMarker(C,L,'selected_cell',true);B.push(L);}};for(var E=0;E<A.length;\r
+E++){var F=A[E];if(F.collapsed){var G=F.getCommonAncestor(),H=G.getAscendant('td',true)||G.getAscendant('th',true);if(H)B.push(H);}else{var I=new d.walker(F),J;I.guard=D;while(J=I.next()){var K=J.getParent();if(K&&m.test(K.getName())&&!K.getCustomData('selected_cell')){h.setMarker(C,K,'selected_cell',true);B.push(K);}}}}h.clearAllMarkers(C);y.selectBookmarks(z);return B;};function o(y){var z=new h(y),A=(z.getName()=='table'?y:z.getAscendant('table')).$,B=A.rows,C=-1,D=[];for(var E=0;E<B.length;E++){C++;if(!D[C])D[C]=[];var F=-1;for(var G=0;G<B[E].cells.length;G++){var H=B[E].cells[G];F++;while(D[C][F])F++;var I=isNaN(H.colSpan)?1:H.colSpan,J=isNaN(H.rowSpan)?1:H.rowSpan;for(var K=0;K<J;K++){if(!D[C+K])D[C+K]=[];for(var L=0;L<I;L++)D[C+K][F+L]=B[E].cells[G];}F+=I-1;}}return D;};function p(y,z){var A=c?'_cke_rowspan':'rowSpan';for(var B=0;B<y.length;B++)for(var C=0;C<y[B].length;C++){var D=y[B][C];if(D.parentNode)D.parentNode.removeChild(D);D.colSpan=D[A]=1;}var E=0;for(B=0;B<y.length;B++)for(C=0;C<y[B].length;C++){D=y[B][C];if(!D)continue;if(C>E)E=C;if(D._cke_colScanned)continue;if(y[B][C-1]==D)D.colSpan++;if(y[B][C+1]!=D)D._cke_colScanned=1;}for(B=0;B<=E;B++)for(C=0;C<y.length;C++){if(!y[C])continue;D=y[C][B];if(!D||D._cke_rowScanned)continue;if(y[C-1]&&y[C-1][B]==D)D[A]++;if(!y[C+1]||y[C+1][B]!=D)D._cke_rowScanned=1;}for(B=0;B<y.length;B++)for(C=0;C<y[B].length;C++){D=y[B][C];l(D,'_cke_colScanned');l(D,'_cke_rowScanned');}for(B=0;B<y.length;B++){var F=z.ownerDocument.createElement('tr');for(C=0;C<y[B].length;){D=y[B][C];if(y[B-1]&&y[B-1][C]==D){C+=D.colSpan;continue;}F.appendChild(D);if(A!='rowSpan'){D.rowSpan=D[A];D.removeAttribute(A);}C+=D.colSpan;if(D.colSpan==1)D.removeAttribute('colSpan');if(D.rowSpan==1)D.removeAttribute('rowSpan');}if(c)z.rows[B].replaceNode(F);else{var G=new h(z.rows[B]),H=new h(F);G.setHtml('');H.moveChildren(G);}}};function q(y){var z=y.cells;for(var A=0;A<z.length;A++){z[A].innerHTML='';if(!c)new h(z[A]).appendBogus();}};function r(y,z){var A=y.getStartElement().getAscendant('tr');if(!A)return;var B=A.clone(true);B.insertBefore(A);q(z?B.$:A.$);};function s(y){if(y instanceof d.selection){var z=n(y),A=[];for(var B=0;B<z.length;B++){var C=z[B].getParent();A[C.$.rowIndex]=C;}for(B=A.length;B>=0;B--)if(A[B])s(A[B]);}else if(y instanceof h){var D=y.getAscendant('table');if(D.$.rows.length==1)D.remove();else y.remove();}};function t(y,z){var A=y.getStartElement(),B=A.getAscendant('td',true)||A.getAscendant('th',true);if(!B)return;var C=B.getAscendant('table'),D=B.$.cellIndex;\r
+for(var E=0;E<C.$.rows.length;E++){var F=C.$.rows[E];if(F.cells.length<D+1)continue;B=new h(F.cells[D].cloneNode(false));if(!c)B.appendBogus();var G=new h(F.cells[D]);if(z)B.insertBefore(G);else B.insertAfter(G);}};function u(y){if(y instanceof d.selection){var z=n(y);for(var A=z.length;A>=0;A--)if(z[A])u(z[A]);}else if(y instanceof h){var B=y.getAscendant('table'),C=y.$.cellIndex;for(A=B.$.rows.length-1;A>=0;A--){var D=new h(B.$.rows[A]);if(!C&&D.$.cells.length==1){s(D);continue;}if(D.$.cells[C])D.$.removeChild(D.$.cells[C]);}}};function v(y,z){var A=y.getStartElement(),B=A.getAscendant('td',true)||A.getAscendant('th',true);if(!B)return;var C=B.clone();if(!c)C.appendBogus();if(z)C.insertBefore(B);else C.insertAfter(B);};function w(y){if(y instanceof d.selection){var z=n(y);for(var A=z.length-1;A>=0;A--)w(z[A]);}else if(y instanceof h)if(y.getParent().getChildCount()==1)y.getParent().remove();else y.remove();};var x={thead:1,tbody:1,tfoot:1,td:1,tr:1,th:1};j.tabletools={init:function(y){var z=y.lang.table;y.addCommand('cellProperties',new a.dialogCommand('cellProperties'));a.dialog.add('cellProperties',this.path+'dialogs/tableCell.js');y.addCommand('tableDelete',{exec:function(A){var B=A.getSelection(),C=B&&B.getStartElement(),D=C&&C.getAscendant('table',true);if(!D)return;B.selectElement(D);var E=B.getRanges()[0];E.collapse();B.selectRanges([E]);if(D.getParent().getChildCount()==1)D.getParent().remove();else D.remove();}});y.addCommand('rowDelete',{exec:function(A){var B=A.getSelection();s(B);}});y.addCommand('rowInsertBefore',{exec:function(A){var B=A.getSelection();r(B,true);}});y.addCommand('rowInsertAfter',{exec:function(A){var B=A.getSelection();r(B);}});y.addCommand('columnDelete',{exec:function(A){var B=A.getSelection();u(B);}});y.addCommand('columnInsertBefore',{exec:function(A){var B=A.getSelection();t(B,true);}});y.addCommand('columnInsertAfter',{exec:function(A){var B=A.getSelection();t(B);}});y.addCommand('cellDelete',{exec:function(A){var B=A.getSelection();w(B);}});y.addCommand('cellInsertBefore',{exec:function(A){var B=A.getSelection();v(B,true);}});y.addCommand('cellInsertAfter',{exec:function(A){var B=A.getSelection();v(B);}});if(y.addMenuItems)y.addMenuItems({tablecell:{label:z.cell.menu,group:'tablecell',order:1,getItems:function(){var A=n(y.getSelection());return{tablecell_insertBefore:2,tablecell_insertAfter:2,tablecell_delete:2,tablecell_properties:A.length>0?2:0};}},tablecell_insertBefore:{label:z.cell.insertBefore,group:'tablecell',command:'cellInsertBefore',order:5},tablecell_insertAfter:{label:z.cell.insertAfter,group:'tablecell',command:'cellInsertAfter',order:10},tablecell_delete:{label:z.cell.deleteCell,group:'tablecell',command:'cellDelete',order:15},tablecell_properties:{label:z.cell.title,group:'tablecellproperties',command:'cellProperties',order:20},tablerow:{label:z.row.menu,group:'tablerow',order:1,getItems:function(){return{tablerow_insertBefore:2,tablerow_insertAfter:2,tablerow_delete:2};\r
+}},tablerow_insertBefore:{label:z.row.insertBefore,group:'tablerow',command:'rowInsertBefore',order:5},tablerow_insertAfter:{label:z.row.insertAfter,group:'tablerow',command:'rowInsertAfter',order:10},tablerow_delete:{label:z.row.deleteRow,group:'tablerow',command:'rowDelete',order:15},tablecolumn:{label:z.column.menu,group:'tablecolumn',order:1,getItems:function(){return{tablecolumn_insertBefore:2,tablecolumn_insertAfter:2,tablecolumn_delete:2};}},tablecolumn_insertBefore:{label:z.column.insertBefore,group:'tablecolumn',command:'columnInsertBefore',order:5},tablecolumn_insertAfter:{label:z.column.insertAfter,group:'tablecolumn',command:'columnInsertAfter',order:10},tablecolumn_delete:{label:z.column.deleteColumn,group:'tablecolumn',command:'columnDelete',order:15}});if(y.contextMenu)y.contextMenu.addListener(function(A,B){if(!A)return null;while(A){if(A.getName() in x)return{tablecell:2,tablerow:2,tablecolumn:2};A=A.getParent();}return null;});},getSelectedCells:n};j.add('tabletools',j.tabletools);})();j.add('specialchar',{init:function(l){var m='specialchar';a.dialog.add(m,this.path+'dialogs/specialchar.js');l.addCommand(m,new a.dialogCommand(m));l.ui.addButton('SpecialChar',{label:l.lang.specialChar.toolbar,command:m});}});(function(){var l={exec:function(n){n.container.focusNext(true);}},m={exec:function(n){n.container.focusPrevious(true);}};j.add('tab',{requires:['keystrokes'],init:function(n){var o=n.keystrokeHandler.keystrokes;o[9]='tab';o[2000+9]='shiftTab';var p=n.config.tabSpaces,q='';while(p--)q+='\xa0';n.addCommand('tab',{exec:function(r){if(!r.fire('tab'))if(q.length>0)r.insertHtml(q);else return r.execCommand('blur');return true;}});n.addCommand('shiftTab',{exec:function(r){if(!r.fire('shiftTab'))return r.execCommand('blurBack');return true;}});n.addCommand('blur',l);n.addCommand('blurBack',m);}});})();h.prototype.focusNext=function(l){var u=this;var m=u.$,n=u.getTabIndex(),o,p,q,r,s,t;if(n<=0){s=u.getNextSourceNode(l,1);while(s){if(s.isVisible()&&s.getTabIndex()===0){q=s;break;}s=s.getNextSourceNode(false,1);}}else{s=u.getDocument().getBody().getFirst();while(s=s.getNextSourceNode(false,1)){if(!o)if(!p&&s.equals(u)){p=true;if(l){if(!(s=s.getNextSourceNode(true,1)))break;o=1;}}else if(p&&!u.contains(s))o=1;if(!s.isVisible()||(t=s.getTabIndex())<(0))continue;if(o&&t==n){q=s;break;}if(t>n&&(!q||!r||t<r)){q=s;r=t;}else if(!q&&t===0){q=s;r=t;}}}if(q)q.focus();};h.prototype.focusPrevious=function(l){var u=this;var m=u.$,n=u.getTabIndex(),o,p,q,r=0,s,t=u.getDocument().getBody().getLast();\r
+while(t=t.getPreviousSourceNode(false,1)){if(!o)if(!p&&t.equals(u)){p=true;if(l){if(!(t=t.getPreviousSourceNode(true,1)))break;o=1;}}else if(p&&!u.contains(t))o=1;if(!t.isVisible()||(s=t.getTabIndex())<(0))continue;if(n<=0){if(o&&s===0){q=t;break;}if(s>r){q=t;r=s;}}else{if(o&&s==n){q=t;break;}if(s<n&&(!q||s>r)){q=t;r=s;}}}if(q)q.focus();};i.tabSpaces=0;(function(){j.add('templates',{requires:['dialog'],init:function(n){a.dialog.add('templates',a.getUrl(this.path+'dialogs/templates.js'));n.addCommand('templates',new a.dialogCommand('templates'));n.ui.addButton('Templates',{label:n.lang.templates.button,command:'templates'});}});var l={},m={};a.addTemplates=function(n,o){l[n]=o;};a.getTemplates=function(n){return l[n];};a.loadTemplates=function(n,o){var p=[];for(var q=0;q<n.length;q++)if(!m[n[q]]){p.push(n[q]);m[n[q]]=1;}if(p.length>0)a.scriptLoader.load(p,o);else setTimeout(o,0);};})();i.templates='default';i.templates_files=[a.getUrl('plugins/templates/templates/default.js')];i.templates_replaceContent=true;(function(){var l=function(){this.toolbars=[];this.focusCommandExecuted=false;};l.prototype.focus=function(){for(var n=0,o;o=this.toolbars[n++];)for(var p=0,q;q=o.items[p++];)if(q.focus){q.focus();return;}};var m={toolbarFocus:{modes:{wysiwyg:1,source:1},exec:function(n){if(n.toolbox){n.toolbox.focusCommandExecuted=true;if(c)setTimeout(function(){n.toolbox.focus();},100);else n.toolbox.focus();}}}};j.add('toolbar',{init:function(n){var o=function(p,q){switch(q){case 39:case 9:while((p=p.next||p.toolbar.next&&p.toolbar.next.items[0])&&(!p.focus)){}if(p)p.focus();else n.toolbox.focus();return false;case 37:case 2000+9:while((p=p.previous||p.toolbar.previous&&p.toolbar.previous.items[p.toolbar.previous.items.length-1])&&(!p.focus)){}if(p)p.focus();else{var r=n.toolbox.toolbars[n.toolbox.toolbars.length-1].items;r[r.length-1].focus();}return false;case 27:n.focus();return false;case 13:case 32:p.execute();return false;}return true;};n.on('themeSpace',function(p){if(p.data.space==n.config.toolbarLocation){n.toolbox=new l();var q=['<div class="cke_toolbox"'],r=n.config.toolbarStartupExpanded,s;q.push(r?'>':' style="display:none">');var t=n.toolbox.toolbars,u=n.config.toolbar instanceof Array?n.config.toolbar:n.config['toolbar_'+n.config.toolbar];for(var v=0;v<u.length;v++){var w=u[v];if(!w)continue;var x='cke_'+e.getNextNumber(),y={id:x,items:[]};if(s){q.push('</div>');s=0;}if(w==='/'){q.push('<div class="cke_break"></div>');continue;}q.push('<span id="',x,'" class="cke_toolbar"><span class="cke_toolbar_start"></span>');\r
+var z=t.push(y)-1;if(z>0){y.previous=t[z-1];y.previous.next=y;}for(var A=0;A<w.length;A++){var B,C=w[A];if(C=='-')B=k.separator;else B=n.ui.create(C);if(B){if(B.canGroup){if(!s){q.push('<span class="cke_toolgroup">');s=1;}}else if(s){q.push('</span>');s=0;}var D=B.render(n,q);z=y.items.push(D)-1;if(z>0){D.previous=y.items[z-1];D.previous.next=D;}D.toolbar=y;D.onkey=o;D.onfocus=function(){if(!n.toolbox.focusCommandExecuted)n.focus();};}}if(s){q.push('</span>');s=0;}q.push('<span class="cke_toolbar_end"></span></span>');}q.push('</div>');if(n.config.toolbarCanCollapse){var E=e.addFunction(function(){n.execCommand('toolbarCollapse');}),F='cke_'+e.getNextNumber();n.addCommand('toolbarCollapse',{exec:function(G){var H=a.document.getById(F),I=H.getPrevious(),J=G.getThemeSpace('contents'),K=I.getParent(),L=parseInt(J.$.style.height,10),M=K.$.offsetHeight;if(I.isVisible()){I.hide();H.addClass('cke_toolbox_collapser_min');}else{I.show();H.removeClass('cke_toolbox_collapser_min');}var N=K.$.offsetHeight-M;J.setStyle('height',L-N+'px');},modes:{wysiwyg:1,source:1}});q.push('<a id="'+F+'" class="cke_toolbox_collapser');if(!r)q.push(' cke_toolbox_collapser_min');q.push('" onclick="CKEDITOR.tools.callFunction('+E+')"></a>');}p.data.html+=q.join('');}});n.addCommand('toolbarFocus',m.toolbarFocus);}});})();k.separator={render:function(l,m){m.push('<span class="cke_separator"></span>');return{};}};i.toolbarLocation='top';i.toolbar_Basic=[['Bold','Italic','-','NumberedList','BulletedList','-','Link','Unlink','-','About']];i.toolbar_Full=[['Source','-','Save','NewPage','Preview','-','Templates'],['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print','SpellChecker','Scayt'],['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],'/',['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],['Link','Unlink','Anchor'],['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],'/',['Styles','Format','Font','FontSize'],['TextColor','BGColor'],['Maximize','ShowBlocks','-','About']];i.toolbar='Full';i.toolbarCanCollapse=true;i.toolbarStartupExpanded=true;(function(){j.add('undo',{requires:['selection','wysiwygarea'],init:function(n){var o=new m(n),p=n.addCommand('undo',{exec:function(){if(o.undo()){n.selectionChange();\r
+this.fire('afterUndo');}},state:0,canUndo:false}),q=n.addCommand('redo',{exec:function(){if(o.redo()){n.selectionChange();this.fire('afterRedo');}},state:0,canUndo:false});o.onChange=function(){p.setState(o.undoable()?2:0);q.setState(o.redoable()?2:0);};function r(s){if(o.enabled&&s.data.command.canUndo!==false)o.save();};n.on('beforeCommandExec',r);n.on('afterCommandExec',r);n.on('saveSnapshot',function(){o.save();});n.on('contentDom',function(){n.document.on('keydown',function(s){if(!s.data.$.ctrlKey&&!s.data.$.metaKey)o.type(s);});});n.on('beforeModeUnload',function(){n.mode=='wysiwyg'&&o.save(true);});n.on('mode',function(){o.enabled=n.mode=='wysiwyg';o.onChange();});n.ui.addButton('Undo',{label:n.lang.undo,command:'undo'});n.ui.addButton('Redo',{label:n.lang.redo,command:'redo'});n.resetUndo=function(){o.reset();n.fire('saveSnapshot');};}});function l(n){var p=this;var o=n.getSelection();p.contents=n.getSnapshot();p.bookmarks=o&&o.createBookmarks2(true);if(c)p.contents=p.contents.replace(/\s+_cke_expando=".*?"/g,'');};l.prototype={equals:function(n,o){if(this.contents!=n.contents)return false;if(o)return true;var p=this.bookmarks,q=n.bookmarks;if(p||q){if(!p||!q||p.length!=q.length)return false;for(var r=0;r<p.length;r++){var s=p[r],t=q[r];if(s.startOffset!=t.startOffset||s.endOffset!=t.endOffset||!e.arrayCompare(s.start,t.start)||!e.arrayCompare(s.end,t.end))return false;}}return true;}};function m(n){this.editor=n;this.reset();};m.prototype={type:function(n){var o=n&&n.data.getKeystroke(),p={8:1,46:1},q=o in p,r=this.lastKeystroke in p,s=q&&o==this.lastKeystroke,t={37:1,38:1,39:1,40:1},u=o in t,v=this.lastKeystroke in t,w=!q&&!u,x=q&&!s,y=!this.typing||w&&(r||v);if(y||x){var z=new l(this.editor);e.setTimeout(function(){var B=this;var A=B.editor.getSnapshot();if(c)A=A.replace(/\s+_cke_expando=".*?"/g,'');if(z.contents!=A){if(!B.save(false,z,false))B.snapshots.splice(B.index+1,B.snapshots.length-B.index-1);B.hasUndo=true;B.hasRedo=false;B.typesCount=1;B.modifiersCount=1;B.onChange();}},0,this);}this.lastKeystroke=o;if(q){this.typesCount=0;this.modifiersCount++;if(this.modifiersCount>25){this.save();this.modifiersCount=1;}}else if(!u){this.modifiersCount=0;this.typesCount++;if(this.typesCount>25){this.save();this.typesCount=1;}}this.typing=true;},reset:function(){var n=this;n.lastKeystroke=0;n.snapshots=[];n.index=-1;n.limit=n.editor.config.undoStackSize;n.currentImage=null;n.hasUndo=false;n.hasRedo=false;n.resetType();},resetType:function(){var n=this;\r
+n.typing=false;delete n.lastKeystroke;n.typesCount=0;n.modifiersCount=0;},fireChange:function(){var n=this;n.hasUndo=!!n.getNextImage(true);n.hasRedo=!!n.getNextImage(false);n.resetType();n.onChange();},save:function(n,o,p){var r=this;var q=r.snapshots;if(!o)o=new l(r.editor);if(r.currentImage&&o.equals(r.currentImage,n))return false;q.splice(r.index+1,q.length-r.index-1);if(q.length==r.limit)q.shift();r.index=q.push(o)-1;r.currentImage=o;if(p!==false)r.fireChange();return true;},restoreImage:function(n){var p=this;p.editor.loadSnapshot(n.contents);if(n.bookmarks)p.editor.getSelection().selectBookmarks(n.bookmarks);else if(c){var o=p.editor.document.getBody().$.createTextRange();o.collapse(true);o.select();}p.index=n.index;p.currentImage=n;p.fireChange();},getNextImage:function(n){var s=this;var o=s.snapshots,p=s.currentImage,q,r;if(p)if(n)for(r=s.index-1;r>=0;r--){q=o[r];if(!p.equals(q,true)){q.index=r;return q;}}else for(r=s.index+1;r<o.length;r++){q=o[r];if(!p.equals(q,true)){q.index=r;return q;}}return null;},redoable:function(){return this.enabled&&this.hasRedo;},undoable:function(){return this.enabled&&this.hasUndo;},undo:function(){var o=this;if(o.undoable()){o.save(true);var n=o.getNextImage(true);if(n)return o.restoreImage(n),true;}return false;},redo:function(){var o=this;if(o.redoable()){o.save(true);if(o.redoable()){var n=o.getNextImage(false);if(n)return o.restoreImage(n),true;}}return false;}};})();i.undoStackSize=20;(function(){var l={table:1,pre:1},m=/\s*<(p|div|address|h\d|center)[^>]*>\s*(?:<br[^>]*>|&nbsp;|&#160;)\s*(:?<\/\1>)?\s*$/gi;function n(q){var v=this;if(v.mode=='wysiwyg'){v.focus();var r=v.getSelection(),s=q.data;if(v.dataProcessor)s=v.dataProcessor.toHtml(s);if(c){var t=r.isLocked;if(t)r.unlock();var u=r.getNative();if(u.type=='Control')u.clear();u.createRange().pasteHTML(s);if(t)v.getSelection().lock();}else v.document.$.execCommand('inserthtml',false,s);}};function o(q){if(this.mode=='wysiwyg'){this.focus();this.fire('saveSnapshot');var r=q.data,s=r.getName(),t=f.$block[s],u=this.getSelection(),v=u.getRanges(),w=u.isLocked;if(w)u.unlock();var x,y,z,A;for(var B=v.length-1;B>=0;B--){x=v[B];x.deleteContents();y=!B&&r||r.clone(true);var C,D;if(this.config.enterMode!=2&&t)while((C=x.getCommonAncestor(false,true))&&((D=f[C.getName()])&&(!(D&&D[s]))))x.splitBlock();x.insertNode(y);if(!z)z=y;}x.moveToPosition(z,4);var E=z.getNextSourceNode(true);if(E&&E.type==1)x.moveToElementEditStart(E);u.selectRanges([x]);if(w)this.getSelection().lock();\r
+e.setTimeout(function(){this.fire('saveSnapshot');},0,this);}};function p(q){var r=q.editor,s=q.data.path,t=s.blockLimit,u=q.data.selection,v=u.getRanges()[0],w=r.document.getBody(),x=r.config.enterMode;if(x!=2&&v.collapsed&&t.getName()=='body'&&!s.block){var y=u.createBookmarks(),z=v.fixBlock(true,r.config.enterMode==3?'div':'p');if(c){var A=z.getElementsByTag('br'),B;for(var C=0;C<A.count();C++)if((B=A.getItem(C))&&(B.hasAttribute('_cke_bogus')))B.remove();}u.selectBookmarks(y);var D=z.getChildren(),E=D.count(),F,G=d.walker.whitespaces(true),H=z.getPrevious(G),I=z.getNext(G),J;if(H&&H.getName&&!(H.getName() in l))J=H;else if(I&&I.getName&&!(I.getName() in l))J=I;if((!E||(F=D.getItem(0))&&(F.is&&F.is('br')))&&(J&&v.moveToElementEditStart(J))){z.remove();v.select();}}var K=w.getLast(d.walker.whitespaces(true));if(K&&K.getName&&K.getName() in l){var L=r.document.createElement(c&&x!=2?'<br _cke_bogus="true" />':'br');w.append(L);}};j.add('wysiwygarea',{requires:['editingblock'],init:function(q){var r=q.config.enterMode!=2?q.config.enterMode==3?'div':'p':false;q.on('editingBlockReady',function(){var s,t,u,v,w,x,y,z=b.isCustomDomain(),A=function(){if(u)u.remove();if(t)t.remove();x=0;var D='void( '+(b.gecko?'setTimeout':'')+'( function(){'+'document.open();'+(c&&z?'document.domain="'+document.domain+'";':'')+'document.write( window.parent[ "_cke_htmlToLoad_'+q.name+'" ] );'+'document.close();'+'window.parent[ "_cke_htmlToLoad_'+q.name+'" ] = null;'+'}'+(b.gecko?', 0 )':')()')+' )';if(b.opera)D='void(0);';u=h.createFromHtml('<iframe style="width:100%;height:100%" frameBorder="0" tabIndex="-1" allowTransparency="true" src="javascript:'+encodeURIComponent(D)+'"'+'></iframe>');var E=q.lang.editorTitle.replace('%1',q.name);if(b.gecko){u.on('load',function(F){F.removeListener();C(u.$.contentWindow);});s.setAttributes({role:'region',title:E});u.setAttributes({role:'region',title:' '});}else if(b.webkit){u.setAttribute('title',E);u.setAttribute('name',E);}else if(c){t=h.createFromHtml('<fieldset style="height:100%'+(c&&b.quirks?';position:relative':'')+'">'+'<legend style="display:block;width:0;height:0;overflow:hidden;'+(c&&b.quirks?'position:absolute':'')+'">'+e.htmlEncode(E)+'</legend>'+'</fieldset>',a.document);u.appendTo(t);t.appendTo(s);}if(!c)s.append(u);},B='<script id="cke_actscrpt" type="text/javascript">window.onload = function(){window.parent.CKEDITOR._["contentDomReady'+q.name+'"]( window );'+'}'+'</script>',C=function(D){if(x)return;x=1;var E=D.document,F=E.body,G=E.getElementById('cke_actscrpt');\r
+G.parentNode.removeChild(G);delete a._['contentDomReady'+q.name];F.spellcheck=!q.config.disableNativeSpellChecker;if(c){F.hideFocus=true;F.disabled=true;F.contentEditable=true;F.removeAttribute('disabled');}else E.designMode='on';try{E.execCommand('enableObjectResizing',false,!q.config.disableObjectResizing);}catch(M){}try{E.execCommand('enableInlineTableEditing',false,!q.config.disableNativeTableHandles);}catch(N){}D=q.window=new d.window(D);E=q.document=new g(E);var H=E.getBody().getFirst();if(b.gecko&&H&&H.is&&H.is('br')&&H.hasAttribute('_moz_editor_bogus_node')){var I=E.$.createEvent('KeyEvents');I.initKeyEvent('keypress',true,true,D.$,false,false,false,false,0,32);E.$.dispatchEvent(I);var J=E.getBody().getFirst();if(q.config.enterMode==2)E.createElement('br',{attributes:{_moz_dirty:''}}).replace(J);else J.remove();}if(!(c||b.opera))E.on('mousedown',function(O){var P=O.data.getTarget();if(P.is('img','hr','input','textarea','select'))q.getSelection().selectElement(P);});if(b.webkit){E.on('click',function(O){if(O.data.getTarget().is('input','select'))O.data.preventDefault();});E.on('mouseup',function(O){if(O.data.getTarget().is('input','textarea'))O.data.preventDefault();});}var K=c||b.safari?D:E;K.on('blur',function(){q.focusManager.blur();});K.on('focus',function(){q.focusManager.focus();});var L=q.keystrokeHandler;if(L)L.attach(E);if(q.contextMenu)q.contextMenu.addTarget(E);setTimeout(function(){q.fire('contentDom');if(y){q.mode='wysiwyg';q.fire('mode');y=false;}v=false;if(w){q.focus();w=false;}if(c)setTimeout(function(){if(q.document){var O=q.document.$.body;O.runtimeStyle.marginBottom='0px';O.runtimeStyle.marginBottom='';}},1000);},0);};q.addMode('wysiwyg',{load:function(D,E,F){s=D;if(c&&b.quirks)D.setStyle('position','relative');q.mayBeDirty=true;y=true;if(F)this.loadSnapshotData(E);else this.loadData(E);},loadData:function(D){v=true;if(q.dataProcessor)D=q.dataProcessor.toHtml(D,r);D=q.config.docType+'<html dir="'+q.config.contentsLangDirection+'">'+'<head>'+'<link href="'+q.config.contentsCss+'" type="text/css" rel="stylesheet" _fcktemp="true"/>'+'<style type="text/css" _fcktemp="true">'+q._.styles.join('\n')+'</style>'+'</head>'+'<body>'+D+'</body>'+'</html>'+B;window['_cke_htmlToLoad_'+q.name]=D;a._['contentDomReady'+q.name]=C;A();if(b.opera){var E=u.$.contentWindow.document;E.open();E.write(D);E.close();}},getData:function(){var D=u.getFrameDocument().getBody().getHtml();if(q.dataProcessor)D=q.dataProcessor.toDataFormat(D,r);if(q.config.ignoreEmptyParagraph)D=D.replace(m,'');\r
+return D;},getSnapshotData:function(){return u.getFrameDocument().getBody().getHtml();},loadSnapshotData:function(D){u.getFrameDocument().getBody().setHtml(D);},unload:function(D){q.window=q.document=u=s=w=null;q.fire('contentDomUnload');},focus:function(){if(v)w=true;else if(q.window){q.window.focus();q.selectionChange();}}});q.on('insertHtml',n,null,null,20);q.on('insertElement',o,null,null,20);q.on('selectionChange',p,null,null,1);});}});})();i.disableObjectResizing=false;i.disableNativeTableHandles=true;i.disableNativeSpellChecker=true;i.ignoreEmptyParagraph=true;j.add('wsc',{init:function(l){var m='checkspell',n=l.addCommand(m,new a.dialogCommand(m));n.modes={wysiwyg:!b.opera&&document.domain==window.location.hostname};l.ui.addButton('SpellChecker',{label:l.lang.spellCheck.toolbar,command:m});a.dialog.add(m,this.path+'dialogs/wsc.js');}});i.wsc_customerId=i.wsc_customerId||'1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk';i.wsc_customLoaderScript=i.wsc_customLoaderScript||null;j.add('styles',{requires:['selection']});a.editor.prototype.attachStyleStateChange=function(l,m){var n=this._.styleStateChangeCallbacks;if(!n){n=this._.styleStateChangeCallbacks=[];this.on('selectionChange',function(o){for(var p=0;p<n.length;p++){var q=n[p],r=q.style.checkActive(o.data.path)?1:2;if(q.state!==r){q.fn.call(this,r);q.state!==r;}}});}n.push({style:l,fn:m});};a.STYLE_BLOCK=1;a.STYLE_INLINE=2;a.STYLE_OBJECT=3;(function(){var l={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1},m={a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,ul:1},n=/\s*(?:;\s*|$)/;a.style=function(L,M){if(M){L=e.clone(L);G(L.attributes,M);G(L.styles,M);}var N=this.element=(L.element||'*').toLowerCase();this.type=N=='#'||l[N]?1:m[N]?3:2;this._={definition:L};};a.style.prototype={apply:function(L){K.call(this,L,false);},remove:function(L){K.call(this,L,true);},applyToRange:function(L){var M=this;return(M.applyToRange=M.type==2?o:M.type==1?q:null).call(M,L);},removeFromRange:function(L){return(this.removeFromRange=this.type==2?p:null).call(this,L);},applyToObject:function(L){E(L,this);},checkActive:function(L){switch(this.type){case 1:return this.checkElementRemovable(L.block||L.blockLimit,true);case 2:var M=L.elements;for(var N=0,O;N<M.length;N++){O=M[N];if(O==L.block||O==L.blockLimit)continue;if(this.checkElementRemovable(O,true))return true;}}return false;},checkElementRemovable:function(L,M){if(!L)return false;var N=this._.definition,O;if(L.getName()==this.element){if(!M&&!L.hasAttributes())return true;\r
+O=H(N);if(O._length){for(var P in O){if(P=='_length')continue;var Q=L.getAttribute(P);if(O[P]==(P=='style'?J(Q,false):Q)){if(!M)return true;}else if(M)return false;}if(M)return true;}else return true;}var R=I(this)[L.getName()];if(R){if(!(O=R.attributes))return true;for(var S=0;S<O.length;S++){P=O[S][0];var T=L.getAttribute(P);if(T){var U=O[S][1];if(U===null||typeof U=='string'&&T==U||U.test(T))return true;}}}return false;}};a.style.getStyleText=function(L){var M=L._ST;if(M)return M;M=L.styles;var N=L.attributes&&L.attributes.style||'';if(N.length)N=N.replace(n,';');for(var O in M)N+=O+':'+M[O]+';';if(N.length)N=J(N);return L._ST=N;};function o(L){var al=this;var M=L.document;if(L.collapsed){var N=D(al,M);L.insertNode(N);L.moveToPosition(N,2);return;}var O=al.element,P=al._.definition,Q,R=f[O]||(Q=true,f.span),S=L.createBookmark();L.enlarge(1);L.trim();var T=L.getBoundaryNodes(),U=T.startNode,V=T.endNode.getNextSourceNode(true);if(!V){var W;V=W=M.createText('');V.insertAfter(L.endContainer);}var X=V.getParent();if(X&&X.getAttribute('_fck_bookmark'))V=X;if(V.equals(U)){V=V.getNextSourceNode(true);if(!V){V=W=M.createText('');V.insertAfter(U);}}var Y=U,Z,aa;while(Y){var ab=false;if(Y.equals(V)){Y=null;ab=true;}else{var ac=Y.type,ad=ac==1?Y.getName():null;if(ad&&Y.getAttribute('_fck_bookmark')){Y=Y.getNextSourceNode(true);continue;}if(!ad||R[ad]&&(Y.getPosition(V)|4|0|8)==(4+0+8)){var ae=Y.getParent();if(ae&&((ae.getDtd()||f.span)[O]||Q)){if(!Z&&(!ad||!f.$removeEmpty[ad]||(Y.getPosition(V)|4|0|8)==(4+0+8))){Z=new d.range(M);Z.setStartBefore(Y);}if(ac==3||ac==1&&!Y.getChildCount()){var af=Y,ag;while(!af.$.nextSibling&&(ag=af.getParent(),R[ag.getName()])&&((ag.getPosition(U)|2|0|8)==(2+0+8)))af=ag;Z.setEndAfter(af);if(!af.$.nextSibling)ab=true;if(!aa)aa=ac!=3||/[^\s\ufeff]/.test(Y.getText());}}else ab=true;}else ab=true;Y=Y.getNextSourceNode();}if(ab&&aa&&Z&&!Z.collapsed){var ah=D(al,M),ai=Z.getCommonAncestor();while(ah&&ai){if(ai.getName()==O){for(var aj in P.attributes)if(ah.getAttribute(aj)==ai.getAttribute(aj))ah.removeAttribute(aj);for(var ak in P.styles)if(ah.getStyle(ak)==ai.getStyle(ak))ah.removeStyle(ak);if(!ah.hasAttributes()){ah=null;break;}}ai=ai.getParent();}if(ah){Z.extractContents().appendTo(ah);y(al,ah);Z.insertNode(ah);B(ah);if(!c)ah.$.normalize();}Z=null;}}W&&W.remove();L.moveToBookmark(S);};function p(L){L.enlarge(1);var M=L.createBookmark(),N=M.startNode;if(L.collapsed){var O=new d.elementPath(N.getParent()),P;for(var Q=0,R;Q<O.elements.length&&(R=O.elements[Q]);\r
+Q++){if(R==O.block||R==O.blockLimit)break;if(this.checkElementRemovable(R)){var S=L.checkBoundaryOfElement(R,2),T=!S&&L.checkBoundaryOfElement(R,1);if(T||S){P=R;P.match=T?'start':'end';}else{B(R);x(this,R);}}}if(P){var U=N;for(Q=0;true;Q++){var V=O.elements[Q];if(V.equals(P))break;else if(V.match)continue;else V=V.clone();V.append(U);U=V;}U[P.match=='start'?'insertBefore':'insertAfter'](P);}}else{var W=M.endNode,X=this;function Y(){var ab=new d.elementPath(N.getParent()),ac=new d.elementPath(W.getParent()),ad=null,ae=null;for(var af=0;af<ab.elements.length;af++){var ag=ab.elements[af];if(ag==ab.block||ag==ab.blockLimit)break;if(X.checkElementRemovable(ag))ad=ag;}for(af=0;af<ac.elements.length;af++){ag=ac.elements[af];if(ag==ac.block||ag==ac.blockLimit)break;if(X.checkElementRemovable(ag))ae=ag;}if(ae)W.breakParent(ae);if(ad)N.breakParent(ad);};Y();var Z=N.getNext();while(!Z.equals(W)){var aa=Z.getNextSourceNode();if(Z.type==1&&this.checkElementRemovable(Z)){if(Z.getName()==this.element)x(this,Z);else z(Z,I(this)[Z.getName()]);if(aa.type==1&&aa.contains(N)){Y();aa=N.getNext();}}Z=aa;}}L.moveToBookmark(M);};function q(L){var M=L.createBookmark(true),N=L.createIterator();N.enforceRealBlocks=true;var O,P=L.document,Q;while(O=N.getNextParagraph()){var R=D(this,P);r(O,R);}L.moveToBookmark(M);};function r(L,M){var N=M.is('pre'),O=L.is('pre'),P=N&&!O,Q=!N&&O;if(P)M=w(L,M);else if(Q)M=v(t(L),M);else L.moveChildren(M);M.replace(L);if(N)s(M);};function s(L){var M;if(!((M=L.getPreviousSourceNode(true,1))&&(M.is&&M.is('pre'))))return;var N=u(M.getHtml(),/\n$/,'')+'\n\n'+u(L.getHtml(),/^\n/,'');if(c)L.$.outerHTML='<pre>'+N+'</pre>';else L.setHtml(N);M.remove();};function t(L){var M=/(\S\s*)\n(?:\s|(<span[^>]+_fck_bookmark.*?\/span>))*\n(?!$)/gi,N=L.getName(),O=u(L.getOuterHtml(),M,function(Q,R,S){return R+'</pre>'+S+'<pre>';}),P=[];O.replace(/<pre>([\s\S]*?)<\/pre>/gi,function(Q,R){P.push(R);});return P;};function u(L,M,N){var O='',P='';L=L.replace(/(^<span[^>]+_fck_bookmark.*?\/span>)|(<span[^>]+_fck_bookmark.*?\/span>$)/gi,function(Q,R,S){R&&(O=R);S&&(P=S);return '';});return O+L.replace(M,N)+P;};function v(L,M){var N=new d.documentFragment(M.getDocument());for(var O=0;O<L.length;O++){var P=L[O];P=P.replace(/(\r\n|\r)/g,'\n');P=u(P,/^[ \t]*\n/,'');P=u(P,/\n$/,'');P=u(P,/^[ \t]+|[ \t]+$/g,function(R,S,T){if(R.length==1)return '&nbsp;';else if(!S)return e.repeat('&nbsp;',R.length-1)+' ';else return ' '+e.repeat('&nbsp;',R.length-1);});P=P.replace(/\n/g,'<br>');P=P.replace(/[ \t]{2,}/g,function(R){return e.repeat('&nbsp;',R.length-1)+' ';\r
+});var Q=M.clone();Q.setHtml(P);N.append(Q);}return N;};function w(L,M){var N=L.getHtml();N=u(N,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,'');N=N.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,'$1');N=N.replace(/([ \t\n\r]+|&nbsp;)/g,' ');N=N.replace(/<br\b[^>]*>/gi,'\n');if(c){var O=L.getDocument().createElement('div');O.append(M);M.$.outerHTML='<pre>'+N+'</pre>';M=O.getFirst().remove();}else M.setHtml(N);return M;};function x(L,M){var N=L._.definition,O=N.attributes,P=N.styles,Q=I(L);function R(){for(var T in O){if(T=='class'&&M.getAttribute(T)!=O[T])continue;M.removeAttribute(T);}};R();for(var S in P)M.removeStyle(S);O=Q[M.getName()];if(O)R();A(M);};function y(L,M){var N=L._.definition,O=N.attributes,P=N.styles,Q=I(L),R=M.getElementsByTag(L.element);for(var S=R.count();--S>=0;)x(L,R.getItem(S));for(var T in Q)if(T!=L.element){R=M.getElementsByTag(T);for(S=R.count()-1;S>=0;S--){var U=R.getItem(S);z(U,Q[T]);}}};function z(L,M){var N=M&&M.attributes;if(N)for(var O=0;O<N.length;O++){var P=N[O][0],Q;if(Q=L.getAttribute(P)){var R=N[O][1];if(R===null||R.test&&R.test(Q)||typeof R=='string'&&Q==R)L.removeAttribute(P);}}A(L);};function A(L){if(!L.hasAttributes()){var M=L.getFirst(),N=L.getLast();L.remove(true);if(M){B(M);if(N&&!M.equals(N))B(N);}}};function B(L){if(!L||L.type!=1||!f.$removeEmpty[L.getName()])return;C(L,L.getNext(),true);C(L,L.getPrevious());};function C(L,M,N){if(M&&M.type==1){var O=M.getAttribute('_fck_bookmark');if(O)M=N?M.getNext():M.getPrevious();if(M&&M.type==1&&L.isIdentical(M)){var P=N?L.getLast():L.getFirst();if(O)(N?M.getPrevious():M.getNext()).move(L,!N);M.moveChildren(L,!N);M.remove();if(P)B(P);}}};function D(L,M){var N,O=L._.definition,P=L.element;if(P=='*')P='span';N=new h(P,M);return E(N,L);};function E(L,M){var N=M._.definition,O=N.attributes,P=a.style.getStyleText(N);if(O)for(var Q in O)L.setAttribute(Q,O[Q]);if(P)L.setAttribute('style',P);return L;};var F=/#\((.+?)\)/g;function G(L,M){for(var N in L)L[N]=L[N].replace(F,function(O,P){return M[P];});};function H(L){var M=L._AC;if(M)return M;M={};var N=0,O=L.attributes;if(O)for(var P in O){N++;M[P]=O[P];}var Q=a.style.getStyleText(L);if(Q){if(!M.style)N++;M.style=Q;}M._length=N;return L._AC=M;};function I(L){if(L._.overrides)return L._.overrides;var M=L._.overrides={},N=L._.definition.overrides;if(N){if(!e.isArray(N))N=[N];for(var O=0;O<N.length;O++){var P=N[O],Q,R,S;if(typeof P=='string')Q=P.toLowerCase();else{Q=P.element?P.element.toLowerCase():L.element;S=P.attributes;}R=M[Q]||(M[Q]={});if(S){var T=R.attributes=R.attributes||[];\r
+for(var U in S)T.push([U.toLowerCase(),S[U]]);}}}return M;};function J(L,M){var N;if(M!==false){var O=new h('span');O.setAttribute('style',L);N=O.getAttribute('style');}else N=L;return N.replace(/\s*([;:])\s*/,'$1').replace(/([^\s;])$/,'$1;').toLowerCase();};function K(L,M){var N=L.getSelection(),O=N.getRanges(),P=M?this.removeFromRange:this.applyToRange;for(var Q=0;Q<O.length;Q++)P.call(this,O[Q]);N.selectRanges(O);};})();a.styleCommand=function(l){this.style=l;};a.styleCommand.prototype.exec=function(l){var n=this;l.focus();var m=l.document;if(m)if(n.state==2)n.style.apply(m);else if(n.state==1)n.style.remove(m);return!!m;};j.add('domiterator');(function(){var l=function(n){var o=this;if(arguments.length<1)return;o.range=n;o.forceBrBreak=false;o.enlargeBr=true;o.enforceRealBlocks=false;o._||(o._={});},m=/^[\r\n\t ]+$/;l.prototype={getNextParagraph:function(n){var O=this;var o,p,q,r,s;if(!O._.lastNode){p=O.range.clone();p.enlarge(O.forceBrBreak||!O.enlargeBr?3:2);var t=new d.walker(p),u=d.walker.bookmark(true,true);t.evaluator=u;O._.nextNode=t.next();t=new d.walker(p);t.evaluator=u;var v=t.previous();O._.lastNode=v.getNextSourceNode(true);if(O._.lastNode&&O._.lastNode.type==3&&!e.trim(O._.lastNode.getText())&&O._.lastNode.getParent().isBlockBoundary()){var w=new d.range(p.document);w.moveToPosition(O._.lastNode,4);if(w.checkEndOfBlock()){var x=new d.elementPath(w.endContainer),y=x.block||x.blockLimit;O._.lastNode=y.getNextSourceNode(true);}}if(!O._.lastNode){O._.lastNode=O._.docEndMarker=p.document.createText('');O._.lastNode.insertAfter(v);}p=null;}var z=O._.nextNode;v=O._.lastNode;O._.nextNode=null;while(z){var A=false,B=z.type!=1,C=false;if(!B){var D=z.getName();if(z.isBlockBoundary(O.forceBrBreak&&{br:1})){if(D=='br')B=true;else if(!p&&!z.getChildCount()&&D!='hr'){o=z;q=z.equals(v);break;}if(p){p.setEndAt(z,3);if(D!='br')O._.nextNode=z;}A=true;}else{if(z.getFirst()){if(!p){p=new d.range(O.range.document);p.setStartAt(z,3);}z=z.getFirst();continue;}B=true;}}else if(z.type==3)if(m.test(z.getText()))B=false;if(B&&!p){p=new d.range(O.range.document);p.setStartAt(z,3);}q=(!A||B)&&(z.equals(v));if(p&&!A)while(!z.getNext()&&!q){var E=z.getParent();if(E.isBlockBoundary(O.forceBrBreak&&{br:1})){A=true;q=q||E.equals(v);break;}z=E;B=true;q=z.equals(v);C=true;}if(B)p.setEndAt(z,4);z=z.getNextSourceNode(C,null,v);q=!z;if((A||q)&&(p)){var F=p.getBoundaryNodes(),G=new d.elementPath(p.startContainer),H=new d.elementPath(p.endContainer);if(F.startNode.equals(F.endNode)&&F.startNode.getParent().equals(G.blockLimit)&&F.startNode.type==1&&F.startNode.getAttribute('_fck_bookmark')){p=null;\r
+O._.nextNode=null;}else break;}if(q)break;}if(!o){if(!p){O._.docEndMarker&&O._.docEndMarker.remove();O._.nextNode=null;return null;}G=new d.elementPath(p.startContainer);var I=G.blockLimit,J={div:1,th:1,td:1};o=G.block;if(!o&&!O.enforceRealBlocks&&J[I.getName()]&&p.checkStartOfBlock()&&p.checkEndOfBlock())o=I;else if(!o||O.enforceRealBlocks&&o.getName()=='li'){o=O.range.document.createElement(n||'p');p.extractContents().appendTo(o);o.trim();p.insertNode(o);r=s=true;}else if(o.getName()!='li'){if(!p.checkStartOfBlock()||!p.checkEndOfBlock()){o=o.clone(false);p.extractContents().appendTo(o);o.trim();var K=p.splitBlock();r=!K.wasStartOfBlock;s=!K.wasEndOfBlock;p.insertNode(o);}}else if(!q)O._.nextNode=o.equals(v)?null:p.getBoundaryNodes().endNode.getNextSourceNode(true,null,v);}if(r){var L=o.getPrevious();if(L&&L.type==1)if(L.getName()=='br')L.remove();else if(L.getLast()&&L.getLast().$.nodeName.toLowerCase()=='br')L.getLast().remove();}if(s){var M=d.walker.bookmark(false,true),N=o.getLast();if(N&&N.type==1&&N.getName()=='br')if(c||N.getPrevious(M)||N.getNext(M))N.remove();}if(!O._.nextNode)O._.nextNode=q||o.equals(v)?null:o.getNextSourceNode(true,null,v);return o;}};d.range.prototype.createIterator=function(){return new l(this);};})();j.add('panelbutton',{requires:['button'],beforeInit:function(l){l.ui.addHandler(4,k.panelButton.handler);}});a.UI_PANELBUTTON=4;(function(){var l=function(m){var o=this;var n=o._;if(n.state==0)return;o.createPanel(m);if(n.on){n.panel.hide();return;}n.panel.showBlock(o._.id,o.document.getById(o._.id),4);};k.panelButton=e.createClass({base:k.button,$:function(m){var o=this;var n=m.panel;delete m.panel;o.base(m);o.document=n&&n.parent&&n.parent.getDocument()||a.document;o.hasArrow=true;o.click=l;o._={panelDefinition:n};},statics:{handler:{create:function(m){return new k.panelButton(m);}}},proto:{createPanel:function(m){var n=this._;if(n.panel)return;var o=this._.panelDefinition||{},p=o.parent||a.document.getBody(),q=this._.panel=new k.floatPanel(m,p,o),r=this;q.onShow=function(){if(r.className)this.element.getFirst().addClass(r.className+'_panel');n.oldState=r._.state;r.setState(1);n.on=1;if(r.onOpen)r.onOpen();};q.onHide=function(){if(r.className)this.element.getFirst().removeClass(r.className+'_panel');r.setState(n.oldState);n.on=0;if(r.onClose)r.onClose();};q.onEscape=function(){q.hide();r.document.getById(n.id).focus();};if(this.onBlock)this.onBlock(q,n.id);q.getBlock(n.id).onHide=function(){n.on=0;r.setState(2);};}}});})();j.add('floatpanel',{requires:['panel']});\r
+(function(){var l={},m=false;function n(o,p,q,r,s){var t=p.getUniqueId()+'-'+q.getUniqueId()+'-'+o.skinName+'-'+o.lang.dir+(o.uiColor&&'-'+o.uiColor||'')+(r.css&&'-'+r.css||'')+(s&&'-'+s||''),u=l[t];if(!u){u=l[t]=new k.panel(p,r);u.element=q.append(h.createFromHtml(u.renderHtml(o),p));u.element.setStyles({display:'none',position:'absolute'});}return u;};k.floatPanel=e.createClass({$:function(o,p,q,r){q.forceIFrame=true;var s=p.getDocument(),t=n(o,s,p,q,r||0),u=t.element,v=u.getFirst().getFirst();this.element=u;this._={panel:t,parentElement:p,definition:q,document:s,iframe:v,children:[],dir:o.lang.dir};},proto:{addBlock:function(o,p){return this._.panel.addBlock(o,p);},addListBlock:function(o,p){return this._.panel.addListBlock(o,p);},getBlock:function(o){return this._.panel.getBlock(o);},showBlock:function(o,p,q,r,s){var t=this._.panel,u=t.showBlock(o);this.allowBlur(false);m=true;var v=this.element,w=this._.iframe,x=this._.definition,y=p.getDocumentPosition(v.getDocument()),z=this._.dir=='rtl',A=y.x+(r||0),B=y.y+(s||0);if(z&&(q==1||q==4)||!z&&(q==2||q==3))A+=p.$.offsetWidth-1;if(q==3||q==4)B+=p.$.offsetHeight-1;this._.panel._.offsetParentId=p.getId();v.setStyles({top:B+'px',left:'-3000px',visibility:'hidden',opacity:'0',display:''});if(!this._.blurSet){var C=c?w:new d.window(w.$.contentWindow);a.event.useCapture=true;C.on('blur',function(D){var G=this;if(c&&!G.allowBlur())return;var E=D.data.getTarget(),F=E.getWindow&&E.getWindow();if(F&&F.equals(C))return;if(G.visible&&!G._.activeChild&&!m)G.hide();},this);C.on('focus',function(){this._.focused=true;this.hideChild();this.allowBlur(true);},this);a.event.useCapture=false;this._.blurSet=1;}t.onEscape=e.bind(function(){this.onEscape&&this.onEscape();},this);e.setTimeout(function(){if(z)A-=v.$.offsetWidth;v.setStyles({left:A+'px',visibility:'',opacity:'1'});if(u.autoSize){function D(){var E=v.getFirst(),F=u.element.$.scrollHeight;if(c&&b.quirks&&F>0)F+=(E.$.offsetHeight||0)-(E.$.clientHeight||0);E.setStyle('height',F+'px');t._.currentBlock.element.setStyle('display','none').removeStyle('display');};if(t.isLoaded)D();else t.onLoad=D;}else v.getFirst().removeStyle('height');e.setTimeout(function(){if(x.voiceLabel)if(b.gecko){var E=w.getParent();E.setAttribute('role','region');E.setAttribute('title',x.voiceLabel);w.setAttribute('role','region');w.setAttribute('title',' ');}if(c&&b.quirks)w.focus();else w.$.contentWindow.focus();if(c&&!b.quirks)this.allowBlur(true);},0,this);},0,this);this.visible=1;if(this.onShow)this.onShow.call(this);\r
+m=false;},hide:function(){var o=this;if(o.visible&&(!o.onHide||o.onHide.call(o)!==true)){o.hideChild();o.element.setStyle('display','none');o.visible=0;}},allowBlur:function(o){var p=this._.panel;if(o!=undefined)p.allowBlur=o;return p.allowBlur;},showAsChild:function(o,p,q,r,s,t){if(this._.activeChild==o&&o._.panel._.offsetParentId==q.getId())return;this.hideChild();o.onHide=e.bind(function(){e.setTimeout(function(){if(!this._.focused)this.hide();},0,this);},this);this._.activeChild=o;this._.focused=false;o.showBlock(p,q,r,s,t);if(b.ie7Compat||b.ie8&&b.ie6Compat)setTimeout(function(){o.element.getChild(0).$.style.cssText+='';},100);},hideChild:function(){var o=this._.activeChild;if(o){delete o.onHide;delete this._.activeChild;o.hide();}}}});})();j.add('menu',{beforeInit:function(l){var m=l.config.menu_groups.split(','),n={};for(var o=0;o<m.length;o++)n[m[o]]=o+1;l._.menuGroups=n;l._.menuItems={};},requires:['floatpanel']});e.extend(a.editor.prototype,{addMenuGroup:function(l,m){this._.menuGroups[l]=m||100;},addMenuItem:function(l,m){if(this._.menuGroups[m.group])this._.menuItems[l]=new a.menuItem(this,l,m);},addMenuItems:function(l){for(var m in l)this.addMenuItem(m,l[m]);},getMenuItem:function(l){return this._.menuItems[l];}});(function(){a.menu=e.createClass({$:function(m,n){var o=this;o.id='cke_'+e.getNextNumber();o.editor=m;o.items=[];o._.level=n||1;},_:{showSubMenu:function(m){var s=this;var n=s._.subMenu,o=s.items[m],p=o.getItems&&o.getItems();if(!p){s._.panel.hideChild();return;}if(n)n.removeAll();else{n=s._.subMenu=new a.menu(s.editor,s._.level+1);n.parent=s;n.onClick=e.bind(s.onClick,s);}for(var q in p)n.add(s.editor.getMenuItem(q));var r=s._.panel.getBlock(s.id).element.getDocument().getById(s.id+String(m));n.show(r,2);}},proto:{add:function(m){if(!m.order)m.order=this.items.length;this.items.push(m);},removeAll:function(){this.items=[];},show:function(m,n,o,p){var q=this.items,r=this.editor,s=this._.panel,t=this._.element;if(!s){s=this._.panel=new k.floatPanel(this.editor,a.document.getBody(),{css:[a.getUrl(r.skinPath+'editor.css')],level:this._.level-1,className:r.skinClass+' cke_contextmenu'},this._.level);s.onEscape=e.bind(function(){this.onEscape&&this.onEscape();this.hide();},this);s.onHide=e.bind(function(){this.onHide&&this.onHide();},this);var u=s.addBlock(this.id);u.autoSize=true;var v=u.keys;v[40]='next';v[9]='next';v[38]='prev';v[2000+9]='prev';v[32]='click';v[39]='click';t=this._.element=u.element;t.addClass(r.skinClass);var w=t.getDocument();\r
+w.getBody().setStyle('overflow','hidden');w.getElementsByTag('html').getItem(0).setStyle('overflow','hidden');this._.itemOverFn=e.addFunction(function(C){var D=this;clearTimeout(D._.showSubTimeout);D._.showSubTimeout=e.setTimeout(D._.showSubMenu,r.config.menu_subMenuDelay,D,[C]);},this);this._.itemOutFn=e.addFunction(function(C){clearTimeout(this._.showSubTimeout);},this);this._.itemClickFn=e.addFunction(function(C){var E=this;var D=E.items[C];if(D.state==0){E.hide();return;}if(D.getItems)E._.showSubMenu(C);else E.onClick&&E.onClick(D);},this);}l(q);var x=['<div class="cke_menu">'],y=q.length,z=y&&q[0].group;for(var A=0;A<y;A++){var B=q[A];if(z!=B.group){x.push('<div class="cke_menuseparator"></div>');z=B.group;}B.render(this,A,x);}x.push('</div>');t.setHtml(x.join(''));if(this.parent)this.parent._.panel.showAsChild(s,this.id,m,n,o,p);else s.showBlock(this.id,m,n,o,p);},hide:function(){this._.panel&&this._.panel.hide();}}});function l(m){m.sort(function(n,o){if(n.group<o.group)return-1;else if(n.group>o.group)return 1;return n.order<o.order?-1:n.order>o.order?1:0;});};})();a.menuItem=e.createClass({$:function(l,m,n){var o=this;e.extend(o,n,{order:0,className:'cke_button_'+m});o.group=l._.menuGroups[o.group];o.editor=l;o.name=m;},proto:{render:function(l,m,n){var t=this;var o=l.id+String(m),p=typeof t.state=='undefined'?2:t.state,q=' cke_'+(p==1?'on':p==0?'disabled':'off'),r=t.label;if(p==0)r=t.editor.lang.common.unavailable.replace('%1',r);if(t.className)q+=' '+t.className;n.push('<span class="cke_menuitem"><a id="',o,'" class="',q,'" href="javascript:void(\'',(t.label||'').replace("'",''),'\')" title="',t.label,'" tabindex="-1"_cke_focus=1 hidefocus="true"');if(b.opera||b.gecko&&b.mac)n.push(' onkeypress="return false;"');if(b.gecko)n.push(' onblur="this.style.cssText = this.style.cssText;"');var s=(t.iconOffset||0)*(-16);n.push(' onmouseover="CKEDITOR.tools.callFunction(',l._.itemOverFn,',',m,');" onmouseout="CKEDITOR.tools.callFunction(',l._.itemOutFn,',',m,');" onclick="CKEDITOR.tools.callFunction(',l._.itemClickFn,',',m,'); return false;"><span class="cke_icon_wrapper"><span class="cke_icon"'+(t.icon?' style="background-image:url('+a.getUrl(t.icon)+');background-position:0 '+s+'px;"></span>':'')+'></span></span>'+'<span class="cke_label">');if(t.getItems)n.push('<span class="cke_menuarrow"></span>');n.push(r,'</span></a></span>');}}});i.menu_subMenuDelay=400;i.menu_groups='clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea';\r
+(function(){function l(){var v=this;try{var s=v.getSelection();if(!s)return;var t=s.getStartElement(),u=new d.elementPath(t);if(!u.compare(v._.selectionPreviousPath)){v._.selectionPreviousPath=u;v.fire('selectionChange',{selection:s,path:u,element:t});}}catch(w){}};var m,n;function o(){n=true;if(m)return;p.call(this);m=e.setTimeout(p,200,this);};function p(){m=null;if(n){e.setTimeout(l,0,this);n=false;}};var q={exec:function(s){switch(s.mode){case 'wysiwyg':s.document.$.execCommand('SelectAll',false,null);break;case 'source':}},canUndo:false};j.add('selection',{init:function(s){s.on('contentDom',function(){var t=s.document;if(c){var u,v;t.on('focusin',function(){if(u){try{u.select();}catch(y){}u=null;}});s.window.on('focus',function(){v=true;x();});s.document.on('beforedeactivate',function(){v=false;s.document.$.execCommand('Unselect');});t.on('mousedown',w);t.on('mouseup',function(){v=true;setTimeout(function(){x(true);},0);});t.on('keydown',w);t.on('keyup',function(){v=true;x();});t.on('selectionchange',x);function w(){v=false;};function x(y){if(v){var z=s.document,A=z&&z.$.selection;if(y&&A&&A.type=='None')if(!z.$.queryCommandEnabled('InsertImage')){e.setTimeout(x,50,this,true);return;}u=A&&A.createRange();o.call(s);}};}else{t.on('mouseup',o,s);t.on('keyup',o,s);}});s.addCommand('selectAll',q);s.ui.addButton('SelectAll',{label:s.lang.selectAll,command:'selectAll'});s.selectionChange=o;}});a.editor.prototype.getSelection=function(){return this.document&&this.document.getSelection();};a.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath;};g.prototype.getSelection=function(){var s=new d.selection(this);return!s||s.isInvalid?null:s;};a.SELECTION_NONE=1;a.SELECTION_TEXT=2;a.SELECTION_ELEMENT=3;d.selection=function(s){var v=this;var t=s.getCustomData('cke_locked_selection');if(t)return t;v.document=s;v.isLocked=false;v._={cache:{}};if(c){var u=v.getNative().createRange();if(!u||u.item&&u.item(0).ownerDocument!=v.document.$||u.parentElement&&u.parentElement().ownerDocument!=v.document.$)v.isInvalid=true;}return v;};var r={img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,th:1,thead:1,tfoot:1};d.selection.prototype={getNative:c?function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.$.selection);}:function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.getWindow().$.getSelection());},getType:c?function(){var s=this._.cache;\r
+if(s.type)return s.type;var t=1;try{var u=this.getNative(),v=u.type;if(v=='Text')t=2;if(v=='Control')t=3;if(u.createRange().parentElement)t=2;}catch(w){}return s.type=t;}:function(){var s=this._.cache;if(s.type)return s.type;var t=2,u=this.getNative();if(!u)t=1;else if(u.rangeCount==1){var v=u.getRangeAt(0),w=v.startContainer;if(w==v.endContainer&&w.nodeType==1&&v.endOffset-v.startOffset==1&&r[w.childNodes[v.startOffset].nodeName.toLowerCase()])t=3;}return s.type=t;},getRanges:c?(function(){var s=function(t,u){t=t.duplicate();t.collapse(u);var v=t.parentElement(),w=v.childNodes,x;for(var y=0;y<w.length;y++){var z=w[y];if(z.nodeType==1){x=t.duplicate();x.moveToElementText(z);x.collapse();var A=x.compareEndPoints('StartToStart',t);if(A>0)break;else if(A===0)return{container:v,offset:y};x=null;}}if(!x){x=t.duplicate();x.moveToElementText(v);x.collapse(false);}x.setEndPoint('StartToStart',t);var B=x.text.replace(/(\r\n|\r)/g,'\n').length;while(B>0)B-=w[--y].nodeValue.length;if(B===0)return{container:v,offset:y};else return{container:w[y],offset:-B};};return function(){var E=this;var t=E._.cache;if(t.ranges)return t.ranges;var u=E.getNative(),v=u&&u.createRange(),w=E.getType(),x;if(!u)return[];if(w==2){x=new d.range(E.document);var y=s(v,true);x.setStart(new d.node(y.container),y.offset);y=s(v);x.setEnd(new d.node(y.container),y.offset);return t.ranges=[x];}else if(w==3){var z=E._.cache.ranges=[];for(var A=0;A<v.length;A++){var B=v.item(A),C=B.parentNode,D=0;x=new d.range(E.document);for(;D<C.childNodes.length&&C.childNodes[D]!=B;D++){}x.setStart(new d.node(C),D);x.setEnd(new d.node(C),D+1);z.push(x);}return z;}return t.ranges=[];};})():function(){var s=this._.cache;if(s.ranges)return s.ranges;var t=[],u=this.getNative();if(!u)return[];for(var v=0;v<u.rangeCount;v++){var w=u.getRangeAt(v),x=new d.range(this.document);x.setStart(new d.node(w.startContainer),w.startOffset);x.setEnd(new d.node(w.endContainer),w.endOffset);t.push(x);}return s.ranges=t;},getStartElement:function(){var z=this;var s=z._.cache;if(s.startElement!==undefined)return s.startElement;var t,u=z.getNative();switch(z.getType()){case 3:return z.getSelectedElement();case 2:var v=z.getRanges()[0];if(v)if(!v.collapsed){v.optimize();for(;;){var w=v.startContainer,x=v.startOffset;if(x==(w.getChildCount?w.getChildCount():w.getLength()))v.setStartAfter(w);else break;}t=v.startContainer;if(t.type!=1)return t.getParent();t=t.getChild(v.startOffset);if(!t||t.type!=1)return v.startContainer;var y=t.getFirst();\r
+while(y&&y.type==1){t=y;y=y.getFirst();}return t;}if(c){v=u.createRange();v.collapse(true);t=v.parentElement();}else{t=u.anchorNode;if(t.nodeType!=1)t=t.parentNode;}}return s.startElement=t?new h(t):null;},getSelectedElement:function(){var s=this._.cache;if(s.selectedElement!==undefined)return s.selectedElement;var t;if(this.getType()==3){var u=this.getNative();if(c)try{t=u.createRange().item(0);}catch(w){}else{var v=u.getRangeAt(0);t=v.startContainer.childNodes[v.startOffset];}}return s.selectedElement=t?new h(t):null;},lock:function(){var s=this;s.getRanges();s.getStartElement();s.getSelectedElement();s._.cache.nativeSel={};s.isLocked=true;s.document.setCustomData('cke_locked_selection',s);},unlock:function(s){var x=this;var t=x.document,u=t.getCustomData('cke_locked_selection');if(u){t.setCustomData('cke_locked_selection',null);if(s){var v=u.getSelectedElement(),w=!v&&u.getRanges();x.isLocked=false;x.reset();t.getBody().focus();if(v)x.selectElement(v);else x.selectRanges(w);}}if(!u||!s){x.isLocked=false;x.reset();}},reset:function(){this._.cache={};},selectElement:function(s){var v=this;if(v.isLocked){var t=new d.range(v.document);t.setStartBefore(s);t.setEndAfter(s);v._.cache.selectedElement=s;v._.cache.startElement=s;v._.cache.ranges=[t];v._.cache.type=3;return;}if(c){v.getNative().empty();try{t=v.document.$.body.createControlRange();t.addElement(s.$);t.select();}catch(w){t=v.document.$.body.createTextRange();t.moveToElementText(s.$);t.select();}v.reset();}else{t=v.document.$.createRange();t.selectNode(s.$);var u=v.getNative();u.removeAllRanges();u.addRange(t);v.reset();}},selectRanges:function(s){var y=this;if(y.isLocked){y._.cache.selectedElement=null;y._.cache.startElement=s[0].getTouchedStartNode();y._.cache.ranges=s;y._.cache.type=2;return;}if(c){if(s[0])s[0].select();y.reset();}else{var t=y.getNative();t.removeAllRanges();for(var u=0;u<s.length;u++){var v=s[u],w=y.document.$.createRange(),x=v.startContainer;if(v.collapsed&&b.gecko&&b.version<10900&&x.type==1&&!x.getChildCount())x.appendText('');w.setStart(x.$,v.startOffset);w.setEnd(v.endContainer.$,v.endOffset);t.addRange(w);}y.reset();}},createBookmarks:function(s){var t=[],u=this.getRanges(),v=u.length,w;for(var x=0;x<v;x++){t.push(w=u[x].createBookmark(s,true));s=w.serializable;var y=s?this.document.getById(w.startNode):w.startNode,z=s?this.document.getById(w.endNode):w.endNode;for(var A=x+1;A<v;A++){var B=u[A],C=B.startContainer,D=B.endContainer;C.equals(y.getParent())&&B.startOffset++;C.equals(z.getParent())&&B.startOffset++;\r
+D.equals(y.getParent())&&B.endOffset++;D.equals(z.getParent())&&B.endOffset++;}}return t;},createBookmarks2:function(s){var t=[],u=this.getRanges();for(var v=0;v<u.length;v++)t.push(u[v].createBookmark2(s));return t;},selectBookmarks:function(s){var t=[];for(var u=0;u<s.length;u++){var v=new d.range(this.document);v.moveToBookmark(s[u]);t.push(v);}this.selectRanges(t);return this;}};})();d.range.prototype.select=c?function(l){var u=this;var m=u.collapsed,n,o,p=u.createBookmark(),q=p.startNode,r;if(!m)r=p.endNode;var s=u.document.$.body.createTextRange();s.moveToElementText(q.$);s.moveStart('character',1);if(r){var t=u.document.$.body.createTextRange();t.moveToElementText(r.$);s.setEndPoint('EndToEnd',t);s.moveEnd('character',-1);}else{n=l||!q.hasPrevious()||q.getPrevious().is&&q.getPrevious().is('br');o=u.document.createElement('span');o.setHtml('&#65279;');o.insertBefore(q);if(n)u.document.createText('').insertBefore(q);}u.setStartBefore(q);q.remove();if(m){if(n){s.moveStart('character',-1);s.select();u.document.$.selection.clear();}else s.select();o.remove();}else{u.setEndBefore(r);r.remove();s.select();}}:function(){var o=this;var l=o.startContainer;if(o.collapsed&&l.type==1&&!l.getChildCount())l.append(new d.text(''));var m=o.document.$.createRange();m.setStart(l.$,o.startOffset);try{m.setEnd(o.endContainer.$,o.endOffset);}catch(p){if(p.toString().indexOf('NS_ERROR_ILLEGAL_VALUE')>=0){o.collapse(true);m.setEnd(o.endContainer.$,o.endOffset);}else throw p;}var n=o.document.getSelection().getNative();n.removeAllRanges();n.addRange(m);};(function(){var l={elements:{$:function(m){var n=m.attributes._cke_realelement,o=n&&new a.htmlParser.fragment.fromHtml(decodeURIComponent(n)),p=o&&o.children[0];if(p){var q=m.attributes.style;if(q){var r=/(?:^|\s)width\s*:\s*(\d+)/.exec(q),s=r&&r[1];r=/(?:^|\s)height\s*:\s*(\d+)/.exec(q);var t=r&&r[1];if(s)p.attributes.width=s;if(t)p.attributes.height=t;}}return p;}}};j.add('fakeobjects',{requires:['htmlwriter'],afterInit:function(m){var n=m.dataProcessor,o=n&&n.htmlFilter;if(o)o.addRules(l);}});})();a.editor.prototype.createFakeElement=function(l,m,n,o){var p=this.lang.fakeobjects,q={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(l.getOuterHtml()),alt:p[n]||p.unknown};if(n)q._cke_real_element_type=n;if(o)q._cke_resizable=o;return this.document.createElement('img',{attributes:q});};a.editor.prototype.createFakeParserElement=function(l,m,n,o){var p=new a.htmlParser.basicWriter();l.writeHtml(p);\r
+var q=p.getHtml(),r=this.lang.fakeobjects,s={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(q),alt:r[n]||r.unknown};if(n)s._cke_real_element_type=n;if(o)s._cke_resizable=o;return new a.htmlParser.element('img',s);};a.editor.prototype.restoreRealElement=function(l){var m=decodeURIComponent(l.getAttribute('_cke_realelement'));return h.createFromHtml(m,this.document);};j.add('richcombo',{requires:['floatpanel','listblock','button'],beforeInit:function(l){l.ui.addHandler(3,k.richCombo.handler);}});a.UI_RICHCOMBO=3;k.richCombo=e.createClass({$:function(l){var n=this;e.extend(n,l,{title:l.label,modes:{wysiwyg:1}});var m=n.panel||{};delete n.panel;n.id=e.getNextNumber();n.document=m&&m.parent&&m.parent.getDocument()||a.document;m.className=(m.className||'')+(' cke_rcombopanel');n._={panelDefinition:m,items:{},state:2};},statics:{handler:{create:function(l){return new k.richCombo(l);}}},proto:{renderHtml:function(l){var m=[];this.render(l,m);return m.join('');},render:function(l,m){var n='cke_'+this.id,o=e.addFunction(function(r){var u=this;var s=u._;if(s.state==0)return;u.createPanel(l);if(s.on){s.panel.hide();return;}if(!s.committed){s.list.commit();s.committed=1;}var t=u.getValue();if(t)s.list.mark(t);else s.list.unmarkAll();s.panel.showBlock(u.id,new h(r),4);},this),p={id:n,combo:this,focus:function(){var r=a.document.getById(n).getChild(1);r.focus();},execute:o};l.on('mode',function(){this.setState(this.modes[l.mode]?2:0);},this);var q=e.addFunction(function(r,s){r=new d.event(r);var t=r.getKeystroke();switch(t){case 13:case 32:case 40:e.callFunction(o,s);break;default:p.onkey(p,t);}r.preventDefault();});m.push('<span class="cke_rcombo">','<span id=',n);if(this.className)m.push(' class="',this.className,' cke_off"');m.push('><span class=cke_label>',this.label,'</span><a hidefocus=true title="',this.title,'" tabindex="-1" href="javascript:void(\'',this.label,"')\"");if(b.opera||b.gecko&&b.mac)m.push(' onkeypress="return false;"');if(b.gecko)m.push(' onblur="this.style.cssText = this.style.cssText;"');m.push(' onkeydown="CKEDITOR.tools.callFunction( ',q,', event, this );" onclick="CKEDITOR.tools.callFunction(',o,', this); return false;"><span><span class="cke_accessibility">'+(this.voiceLabel?this.voiceLabel+' ':'')+'</span>'+'<span id="'+n+'_text" class="cke_text cke_inline_label">'+this.label+'</span>'+'</span>'+'<span class=cke_openbutton></span>'+'</a>'+'</span>'+'</span>');if(this.onRender)this.onRender();return p;},createPanel:function(l){if(this._.panel)return;\r
+var m=this._.panelDefinition,n=m.parent||a.document.getBody(),o=new k.floatPanel(l,n,m),p=o.addListBlock(this.id,this.multiSelect),q=this;o.onShow=function(){if(q.className)this.element.getFirst().addClass(q.className+'_panel');q.setState(1);p.focus(!q.multiSelect&&q.getValue());q._.on=1;if(q.onOpen)q.onOpen();};o.onHide=function(){if(q.className)this.element.getFirst().removeClass(q.className+'_panel');q.setState(2);q._.on=0;if(q.onClose)q.onClose();};o.onEscape=function(){o.hide();q.document.getById('cke_'+q.id).getFirst().getNext().focus();};p.onClick=function(r,s){q.document.getWindow().focus();if(q.onClick)q.onClick.call(q,r,s);if(s)q.setValue(r,q._.items[r]);else q.setValue('');o.hide();};this._.panel=o;this._.list=p;o.getBlock(this.id).onHide=function(){q._.on=0;q.setState(2);};if(this.init)this.init();},setValue:function(l,m){var o=this;o._.value=l;var n=o.document.getById('cke_'+o.id+'_text');if(!l){m=o.label;n.addClass('cke_inline_label');}else n.removeClass('cke_inline_label');n.setHtml(typeof m!='undefined'?m:l);},getValue:function(){return this._.value||'';},unmarkAll:function(){this._.list.unmarkAll();},mark:function(l){this._.list.mark(l);},hideItem:function(l){this._.list.hideItem(l);},hideGroup:function(l){this._.list.hideGroup(l);},showAll:function(){this._.list.showAll();},add:function(l,m,n){this._.items[l]=n||l;this._.list.add(l,m,n);},startGroup:function(l){this._.list.startGroup(l);},commit:function(){this._.list.commit();},setState:function(l){var m=this;if(m._.state==l)return;m.document.getById('cke_'+m.id).setState(l);m._.state=l;}}});k.prototype.addRichCombo=function(l,m){this.add(l,3,m);};j.add('htmlwriter');a.htmlWriter=e.createClass({base:a.htmlParser.basicWriter,$:function(){var n=this;n.base();n.indentationChars='\t';n.selfClosingEnd=' />';n.lineBreakChars='\n';n.forceSimpleAmpersand=false;n.sortAttributes=true;n._.indent=false;n._.indentation='';n._.rules={};var l=f;for(var m in e.extend({},l.$block,l.$listItem,l.$tableContent))n.setRules(m,{indent:true,breakBeforeOpen:true,breakAfterOpen:true,breakBeforeClose:!l[m]['#'],breakAfterClose:true});n.setRules('br',{breakAfterOpen:true});n.setRules('pre',{indent:false});},proto:{openTag:function(l,m){var o=this;var n=o._.rules[l];if(o._.indent)o.indentation();else if(n&&n.breakBeforeOpen){o.lineBreak();o.indentation();}o._.output.push('<',l);},openTagClose:function(l,m){var o=this;var n=o._.rules[l];if(m)o._.output.push(o.selfClosingEnd);else{o._.output.push('>');if(n&&n.indent)o._.indentation+=o.indentationChars;\r
+}if(n&&n.breakAfterOpen)o.lineBreak();},attribute:function(l,m){if(this.forceSimpleAmpersand)m=m.replace(/&amp;/,'&');this._.output.push(' ',l,'="',m,'"');},closeTag:function(l){var n=this;var m=n._.rules[l];if(m&&m.indent)n._.indentation=n._.indentation.substr(n.indentationChars.length);if(n._.indent)n.indentation();else if(m&&m.breakBeforeClose){n.lineBreak();n.indentation();}n._.output.push('</',l,'>');if(m&&m.breakAfterClose)n.lineBreak();},text:function(l){if(this._.indent){this.indentation();l=e.ltrim(l);}this._.output.push(l);},comment:function(l){if(this._.indent)this.indentation();this._.output.push('<!--',l,'-->');},lineBreak:function(){var l=this;if(l._.output.length>0)l._.output.push(l.lineBreakChars);l._.indent=true;},indentation:function(){this._.output.push(this._.indentation);this._.indent=false;},setRules:function(l,m){this._.rules[l]=m;}}});j.add('menubutton',{requires:['button','contextmenu'],beforeInit:function(l){l.ui.addHandler(5,k.menuButton.handler);}});a.UI_MENUBUTTON=5;(function(){var l=function(m){var n=this._;if(n.state===0)return;n.previousState=n.state;var o=n.menu;if(!o){o=n.menu=new j.contextMenu(m);o.onHide=e.bind(function(){this.setState(n.previousState);},this);if(this.onMenu)o.addListener(this.onMenu);}if(n.on){o.hide();return;}this.setState(1);o.show(a.document.getById(this._.id),4);};k.menuButton=e.createClass({base:k.button,$:function(m){var n=m.panel;delete m.panel;this.base(m);this.hasArrow=true;this.click=l;},statics:{handler:{create:function(m){return new k.menuButton(m);}}}});})();j.add('dialog',{requires:['dialogui']});a.DIALOG_RESIZE_NONE=0;a.DIALOG_RESIZE_WIDTH=1;a.DIALOG_RESIZE_HEIGHT=2;a.DIALOG_RESIZE_BOTH=3;(function(){function l(J){return!!this._.tabs[J][0].$.offsetHeight;};function m(){var N=this;var J=N._.currentTabId,K=N._.tabIdList.length,L=e.indexOf(N._.tabIdList,J)+K;for(var M=L-1;M>L-K;M--)if(l.call(N,N._.tabIdList[M%K]))return N._.tabIdList[M%K];return null;};function n(){var N=this;var J=N._.currentTabId,K=N._.tabIdList.length,L=e.indexOf(N._.tabIdList,J);for(var M=L+1;M<L+K;M++)if(l.call(N,N._.tabIdList[M%K]))return N._.tabIdList[M%K];return null;};var o={};a.dialog=function(J,K){var L=a.dialog._.dialogDefinitions[K];if(!L){console.log('Error: The dialog "'+K+'" is not defined.');return;}L=e.extend(L(J),q);L=e.clone(L);L=new u(this,L);this.definition=L=a.fire('dialogDefinition',{name:K,definition:L},J).definition;var M=a.document,N=J.theme.buildDialog(J);this._={editor:J,element:N.element,name:K,contentSize:{width:0,height:0},size:{width:0,height:0},updateSize:false,contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:false,focusList:[],currentFocusIndex:0,hasFocus:false};\r
+this.parts=N.parts;this.parts.dialog.setStyles({position:b.ie6Compat?'absolute':'fixed',top:0,left:0,visibility:'hidden'});a.event.call(this);if(L.onLoad)this.on('load',L.onLoad);if(L.onShow)this.on('show',L.onShow);if(L.onHide)this.on('hide',L.onHide);if(L.onOk)this.on('ok',function(X){if(L.onOk.call(this,X)===false)X.data.hide=false;});if(L.onCancel)this.on('cancel',function(X){if(L.onCancel.call(this,X)===false)X.data.hide=false;});var O=this,P=function(X){var Y=O._.contents,Z=false;for(var aa in Y)for(var ab in Y[aa]){Z=X.call(this,Y[aa][ab]);if(Z)return;}};this.on('ok',function(X){P(function(Y){if(Y.validate){var Z=Y.validate(this);if(typeof Z=='string'){alert(Z);Z=false;}if(Z===false){if(Y.select)Y.select();else Y.focus();X.data.hide=false;X.stop();return true;}}});},this,null,0);this.on('cancel',function(X){P(function(Y){if(Y.isChanged()){if(!confirm(J.lang.common.confirmCancel))X.data.hide=false;return true;}});},this,null,0);this.parts.close.on('click',function(X){if(this.fire('cancel',{hide:true}).hide!==false)this.hide();},this);function Q(X){var Y=O._.focusList,Z=X?1:-1;if(Y.length<1)return;var aa=(O._.currentFocusIndex+Z+Y.length)%(Y.length);while(!Y[aa].isFocusable()){aa=(aa+Z+Y.length)%(Y.length);if(aa==O._.currentFocusIndex)break;}Y[aa].focus();};function R(X){if(O!=a.dialog._.currentTop)return;var Y=X.data.getKeystroke(),Z=false;if(Y==9||Y==2000+9){var aa=Y==2000+9;if(O._.tabBarMode){var ab=aa?m.call(O):n.call(O);O.selectPage(ab);O._.tabs[ab][0].focus();}else Q(!aa);Z=true;}else if(Y==4000+121&&!O._.tabBarMode){O._.tabBarMode=true;O._.tabs[O._.currentTabId][0].focus();Z=true;}else if((Y==37||Y==39)&&(O._.tabBarMode)){ab=Y==37?m.call(O):n.call(O);O.selectPage(ab);O._.tabs[ab][0].focus();Z=true;}if(Z){X.stop();X.data.preventDefault();}};this.on('show',function(){a.document.on('keydown',R,this,null,0);if(b.ie6Compat){var X=z.getChild(0).getFrameDocument();X.on('keydown',R,this,null,0);}});this.on('hide',function(){a.document.removeListener('keydown',R);});this.on('iframeAdded',function(X){var Y=new g(X.data.iframe.$.contentWindow.document);Y.on('keydown',R,this,null,0);});this.on('show',function(){var aa=this;if(!aa._.hasFocus){aa._.currentFocusIndex=-1;Q(true);if(aa._.editor.mode=='wysiwyg'&&c){var X=J.document.$.selection,Y=X.createRange();if(Y)if(Y.parentElement&&Y.parentElement().ownerDocument==J.document.$||Y.item&&Y.item(0).ownerDocument==J.document.$){var Z=document.body.createTextRange();Z.moveToElementText(aa.getElement().getFirst().$);\r
+Z.collapse(true);Z.select();}}}},this,null,4294967295);if(b.ie6Compat)this.on('load',function(X){var Y=this.getElement(),Z=Y.getFirst();Z.remove();Z.appendTo(Y);},this);w(this);x(this);new d.text(L.title,a.document).appendTo(this.parts.title);for(var S=0;S<L.contents.length;S++)this.addPage(L.contents[S]);var T=/cke_dialog_tab(\s|$|_)/,U=/cke_dialog_tab(\s|$)/;this.parts.tabs.on('click',function(X){var ac=this;var Y=X.data.getTarget(),Z=Y,aa,ab;if(!(T.test(Y.$.className)||Y.getName()=='a'))return;aa=Y.$.id.substr(0,Y.$.id.lastIndexOf('_'));ac.selectPage(aa);if(ac._.tabBarMode){ac._.tabBarMode=false;ac._.currentFocusIndex=-1;Q(true);}X.data.preventDefault();},this);var V=[],W=a.dialog._.uiElementBuilders.hbox.build(this,{type:'hbox',className:'cke_dialog_footer_buttons',widths:[],children:L.buttons},V).getChild();this.parts.footer.setHtml(V.join(''));for(S=0;S<W.length;S++)this._.buttons[W[S].id]=W[S];a.skins.load(J,'dialog');};function p(J,K,L){this.element=K;this.focusIndex=L;this.isFocusable=function(){return true;};this.focus=function(){J._.currentFocusIndex=this.focusIndex;this.element.focus();};K.on('keydown',function(M){if(M.data.getKeystroke() in {32:1,13:1})this.fire('click');});K.on('focus',function(){this.fire('mouseover');});K.on('blur',function(){this.fire('mouseout');});};a.dialog.prototype={resize:(function(){return function(J,K){var L=this;if(L._.contentSize&&L._.contentSize.width==J&&L._.contentSize.height==K)return;a.dialog.fire('resize',{dialog:L,skin:L._.editor.skinName,width:J,height:K},L._.editor);L._.contentSize={width:J,height:K};L._.updateSize=true;};})(),getSize:function(){var L=this;if(!L._.updateSize)return L._.size;var J=L._.element.getFirst(),K=L._.size={width:J.$.offsetWidth||0,height:J.$.offsetHeight||0};L._.updateSize=!K.width||!K.height;return K;},move:(function(){var J;return function(K,L){var O=this;var M=O._.element.getFirst();if(J===undefined)J=M.getComputedStyle('position')=='fixed';if(J&&O._.position&&O._.position.x==K&&O._.position.y==L)return;O._.position={x:K,y:L};if(!J){var N=a.document.getWindow().getScrollPosition();K+=N.x;L+=N.y;}M.setStyles({left:(K>0?K:0)+('px'),top:(L>0?L:0)+('px')});};})(),getPosition:function(){return e.extend({},this._.position);},show:function(){if(this._.editor.mode=='wysiwyg'&&c)this._.editor.getSelection().lock();var J=this._.element,K=this.definition;if(!(J.getParent()&&J.getParent().equals(a.document.getBody())))J.appendTo(a.document.getBody());else return;if(b.gecko&&b.version<10900){var L=this.parts.dialog;\r
+L.setStyle('position','absolute');setTimeout(function(){L.setStyle('position','fixed');},0);}this.resize(K.minWidth,K.minHeight);this.selectPage(this.definition.contents[0].id);this.reset();if(a.dialog._.currentZIndex===null)a.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex;this._.element.getFirst().setStyle('z-index',a.dialog._.currentZIndex+=10);if(a.dialog._.currentTop===null){a.dialog._.currentTop=this;this._.parentDialog=null;A(this._.editor);a.document.on('keydown',D);a.document.on('keyup',E);}else{this._.parentDialog=a.dialog._.currentTop;var M=this._.parentDialog.getElement().getFirst();M.$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2);a.dialog._.currentTop=this;}F(this,this,'\x1b',null,function(){this.getButton('cancel')&&this.getButton('cancel').click();});this._.hasFocus=false;e.setTimeout(function(){var N=a.document.getWindow().getViewPaneSize(),O=this.getSize();this.move((N.width-K.minWidth)/(2),(N.height-O.height)/(2));this.parts.dialog.setStyle('visibility','');this.fireOnce('load',{});this.fire('show',{});this.foreach(function(P){P.setInitValue&&P.setInitValue();});},100,this);},foreach:function(J){var M=this;for(var K in M._.contents)for(var L in M._.contents[K])J(M._.contents[K][L]);return M;},reset:(function(){var J=function(K){if(K.reset)K.reset();};return function(){this.foreach(J);return this;};})(),setupContent:function(){var J=arguments;this.foreach(function(K){if(K.setup)K.setup.apply(K,J);});},commitContent:function(){var J=arguments;this.foreach(function(K){if(K.commit)K.commit.apply(K,J);});},hide:function(){this.fire('hide',{});var J=this._.element;if(!J.getParent())return;J.remove();this.parts.dialog.setStyle('visibility','hidden');G(this);if(!this._.parentDialog)B();else{var K=this._.parentDialog.getElement().getFirst();K.setStyle('z-index',parseInt(K.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2));}a.dialog._.currentTop=this._.parentDialog;if(!this._.parentDialog){a.dialog._.currentZIndex=null;a.document.removeListener('keydown',D);a.document.removeListener('keyup',E);var L=this._.editor;L.focus();if(L.mode=='wysiwyg'&&c)L.getSelection().unlock(true);}else a.dialog._.currentZIndex-=10;this.foreach(function(M){M.resetInitValue&&M.resetInitValue();});},addPage:function(J){var T=this;var K=[],L=J.label?' title="'+e.htmlEncode(J.label)+'"':'',M=J.elements,N=a.dialog._.uiElementBuilders.vbox.build(T,{type:'vbox',className:'cke_dialog_page_contents',children:J.elements,expand:!!J.expand,padding:J.padding,style:J.style||'width: 100%; height: 100%;'},K),O=h.createFromHtml(K.join('')),P=h.createFromHtml(['<a class="cke_dialog_tab"',T._.pageCount>0?' cke_last':'cke_first',L,!!J.hidden?' style="display:none"':'',' id="',J.id+'_',e.getNextNumber(),'" href="javascript:void(0)"',' hidefocus="true">',J.label,'</a>'].join(''));\r
+if(T._.pageCount===0)T.parts.dialog.addClass('cke_single_page');else T.parts.dialog.removeClass('cke_single_page');T._.tabs[J.id]=[P,O];T._.tabIdList.push(J.id);T._.pageCount++;T._.lastTab=P;var Q=T._.contents[J.id]={},R,S=N.getChild();while(R=S.shift()){Q[R.id]=R;if(typeof R.getChild=='function')S.push.apply(S,R.getChild());}O.setAttribute('name',J.id);O.appendTo(T.parts.contents);P.unselectable();T.parts.tabs.append(P);if(J.accessKey){F(T,T,'CTRL+'+J.accessKey,I,H);T._.accessKeyMap['CTRL+'+J.accessKey]=J.id;}},selectPage:function(J){var O=this;for(var K in O._.tabs){var L=O._.tabs[K][0],M=O._.tabs[K][1];if(K!=J){L.removeClass('cke_dialog_tab_selected');M.hide();}}var N=O._.tabs[J];N[0].addClass('cke_dialog_tab_selected');N[1].show();O._.currentTabId=J;O._.currentTabIndex=e.indexOf(O._.tabIdList,J);},hidePage:function(J){var K=this._.tabs[J]&&this._.tabs[J][0];if(!K)return;K.hide();},showPage:function(J){var K=this._.tabs[J]&&this._.tabs[J][0];if(!K)return;K.show();},getElement:function(){return this._.element;},getName:function(){return this._.name;},getContentElement:function(J,K){return this._.contents[J][K];},getValueOf:function(J,K){return this.getContentElement(J,K).getValue();},setValueOf:function(J,K,L){return this.getContentElement(J,K).setValue(L);},getButton:function(J){return this._.buttons[J];},click:function(J){return this._.buttons[J].click();},disableButton:function(J){return this._.buttons[J].disable();},enableButton:function(J){return this._.buttons[J].enable();},getPageCount:function(){return this._.pageCount;},getParentEditor:function(){return this._.editor;},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement();},addFocusable:function(J,K){var M=this;if(typeof K=='undefined'){K=M._.focusList.length;M._.focusList.push(new p(M,J,K));}else{M._.focusList.splice(K,0,new p(M,J,K));for(var L=K+1;L<M._.focusList.length;L++)M._.focusList[L].focusIndex++;}}};e.extend(a.dialog,{add:function(J,K){if(!this._.dialogDefinitions[J]||typeof K=='function')this._.dialogDefinitions[J]=K;},exists:function(J){return!!this._.dialogDefinitions[J];},getCurrent:function(){return a.dialog._.currentTop;},okButton:(function(){var J=function(K,L){L=L||{};return e.extend({id:'ok',type:'button',label:K.lang.common.ok,'class':'cke_dialog_ui_button_ok',onClick:function(M){var N=M.data.dialog;if(N.fire('ok',{hide:true}).hide!==false)N.hide();}},L,true);};J.type='button';J.override=function(K){return e.extend(function(L){return J(L,K);\r
+},{type:'button'},true);};return J;})(),cancelButton:(function(){var J=function(K,L){L=L||{};return e.extend({id:'cancel',type:'button',label:K.lang.common.cancel,'class':'cke_dialog_ui_button_cancel',onClick:function(M){var N=M.data.dialog;if(N.fire('cancel',{hide:true}).hide!==false)N.hide();}},L,true);};J.type='button';J.override=function(K){return e.extend(function(L){return J(L,K);},{type:'button'},true);};return J;})(),addUIElement:function(J,K){this._.uiElementBuilders[J]=K;}});a.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};a.event.implementOn(a.dialog);a.event.implementOn(a.dialog.prototype,true);var q={resizable:0,minWidth:600,minHeight:400,buttons:[a.dialog.okButton,a.dialog.cancelButton]},r=function(J,K,L){for(var M=0,N;N=J[M];M++){if(N.id==K)return N;if(L&&N[L]){var O=r(N[L],K,L);if(O)return O;}}return null;},s=function(J,K,L,M,N){if(L){for(var O=0,P;P=J[O];O++){if(P.id==L){J.splice(O,0,K);return K;}if(M&&P[M]){var Q=s(P[M],K,L,M,true);if(Q)return Q;}}if(N)return null;}J.push(K);return K;},t=function(J,K,L){for(var M=0,N;N=J[M];M++){if(N.id==K)return J.splice(M,1);if(L&&N[L]){var O=t(N[L],K,L);if(O)return O;}}return null;},u=function(J,K){this.dialog=J;var L=K.contents;for(var M=0,N;N=L[M];M++)L[M]=new v(J,N);e.extend(this,K);};u.prototype={getContents:function(J){return r(this.contents,J);},getButton:function(J){return r(this.buttons,J);},addContents:function(J,K){return s(this.contents,J,K);},addButton:function(J,K){return s(this.buttons,J,K);},removeContents:function(J){t(this.contents,J);},removeButton:function(J){t(this.buttons,J);}};function v(J,K){this._={dialog:J};e.extend(this,K);};v.prototype={get:function(J){return r(this.elements,J,'children');},add:function(J,K){return s(this.elements,J,K,'children');},remove:function(J){t(this.elements,J,'children');}};function w(J){var K=null,L=null,M=J.getElement().getFirst(),N=J.getParentEditor(),O=N.config.dialog_magnetDistance,P=o[N.skinName].margins||[0,0,0,0];function Q(S){var T=J.getSize(),U=a.document.getWindow().getViewPaneSize(),V=S.data.$.screenX,W=S.data.$.screenY,X=V-K.x,Y=W-K.y,Z,aa;K={x:V,y:W};L.x+=X;L.y+=Y;if(L.x+P[3]<O)Z=-P[3];else if(L.x-P[1]>U.width-T.width-O)Z=U.width-T.width+P[1];else Z=L.x;if(L.y+P[0]<O)aa=-P[0];else if(L.y-P[2]>U.height-T.height-O)aa=U.height-T.height+P[2];else aa=L.y;J.move(Z,aa);S.data.preventDefault();};function R(S){a.document.removeListener('mousemove',Q);a.document.removeListener('mouseup',R);if(b.ie6Compat){var T=z.getChild(0).getFrameDocument();\r
+T.removeListener('mousemove',Q);T.removeListener('mouseup',R);}};J.parts.title.on('mousedown',function(S){J._.updateSize=true;K={x:S.data.$.screenX,y:S.data.$.screenY};a.document.on('mousemove',Q);a.document.on('mouseup',R);L=J.getPosition();if(b.ie6Compat){var T=z.getChild(0).getFrameDocument();T.on('mousemove',Q);T.on('mouseup',R);}S.data.preventDefault();},J);};function x(J){var K=J.definition,L=K.minWidth||0,M=K.minHeight||0,N=K.resizable,O=o[J.getParentEditor().skinName].margins||[0,0,0,0];function P(aa,ab){aa.y+=ab;};function Q(aa,ab){aa.x2+=ab;};function R(aa,ab){aa.y2+=ab;};function S(aa,ab){aa.x+=ab;};var T=null,U=null,V=J._.editor.config.magnetDistance,W=['tl','t','tr','l','r','bl','b','br'];function X(aa){var ab=aa.listenerData.part,ac=J.getSize();U=J.getPosition();e.extend(U,{x2:U.x+ac.width,y2:U.y+ac.height});T={x:aa.data.$.screenX,y:aa.data.$.screenY};a.document.on('mousemove',Y,J,{part:ab});a.document.on('mouseup',Z,J,{part:ab});if(b.ie6Compat){var ad=z.getChild(0).getFrameDocument();ad.on('mousemove',Y,J,{part:ab});ad.on('mouseup',Z,J,{part:ab});}aa.data.preventDefault();};function Y(aa){var ab=aa.data.$.screenX,ac=aa.data.$.screenY,ad=ab-T.x,ae=ac-T.y,af=a.document.getWindow().getViewPaneSize(),ag=aa.listenerData.part;if(ag.search('t')!=-1)P(U,ae);if(ag.search('l')!=-1)S(U,ad);if(ag.search('b')!=-1)R(U,ae);if(ag.search('r')!=-1)Q(U,ad);T={x:ab,y:ac};var ah,ai,aj,ak;if(U.x+O[3]<V)ah=-O[3];else if(ag.search('l')!=-1&&U.x2-U.x<L+V)ah=U.x2-L;else ah=U.x;if(U.y+O[0]<V)ai=-O[0];else if(ag.search('t')!=-1&&U.y2-U.y<M+V)ai=U.y2-M;else ai=U.y;if(U.x2-O[1]>af.width-V)aj=af.width+O[1];else if(ag.search('r')!=-1&&U.x2-U.x<L+V)aj=U.x+L;else aj=U.x2;if(U.y2-O[2]>af.height-V)ak=af.height+O[2];else if(ag.search('b')!=-1&&U.y2-U.y<M+V)ak=U.y+M;else ak=U.y2;J.move(ah,ai);J.resize(aj-ah,ak-ai);aa.data.preventDefault();};function Z(aa){a.document.removeListener('mouseup',Z);a.document.removeListener('mousemove',Y);if(b.ie6Compat){var ab=z.getChild(0).getFrameDocument();ab.removeListener('mouseup',Z);ab.removeListener('mousemove',Y);}};};var y,z,A=function(J){var K=a.document.getWindow();if(!z){var L=['<div style="position: ',b.ie6Compat?'absolute':'fixed','; z-index: ',J.config.baseFloatZIndex,'; top: 0px; left: 0px; ','background-color: ',J.config.dialog_backgroundCoverColor,'" id="cke_dialog_background_cover">'];if(b.ie6Compat){var M=b.isCustomDomain();L.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:');L.push(M?"void((function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})())':"''");\r
+L.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>');}L.push('</div>');z=h.createFromHtml(L.join(''));}var N=z,O=function(){var R=K.getViewPaneSize();N.setStyles({width:R.width+'px',height:R.height+'px'});},P=function(){var R=K.getScrollPosition(),S=a.dialog._.currentTop;N.setStyles({left:R.x+'px',top:R.y+'px'});do{var T=S.getPosition();S.move(T.x,T.y);}while(S=S._.parentDialog)};y=O;K.on('resize',O);O();if(b.ie6Compat){var Q=function(){P();arguments.callee.prevScrollHandler.apply(this,arguments);};K.$.setTimeout(function(){Q.prevScrollHandler=window.onscroll||(function(){});window.onscroll=Q;},0);P();}N.setOpacity(J.config.dialog_backgroundCoverOpacity);N.appendTo(a.document.getBody());},B=function(){if(!z)return;var J=a.document.getWindow();z.remove();J.removeListener('resize',y);if(b.ie6Compat)J.$.setTimeout(function(){var K=window.onscroll&&window.onscroll.prevScrollHandler;window.onscroll=K||null;},0);y=null;},C={},D=function(J){var K=J.data.$.ctrlKey||J.data.$.metaKey,L=J.data.$.altKey,M=J.data.$.shiftKey,N=String.fromCharCode(J.data.$.keyCode),O=C[(K?'CTRL+':'')+(L?'ALT+':'')+(M?'SHIFT+':'')+N];if(!O||!O.length)return;O=O[O.length-1];O.keydown&&O.keydown.call(O.uiElement,O.dialog,O.key);J.data.preventDefault();},E=function(J){var K=J.data.$.ctrlKey||J.data.$.metaKey,L=J.data.$.altKey,M=J.data.$.shiftKey,N=String.fromCharCode(J.data.$.keyCode),O=C[(K?'CTRL+':'')+(L?'ALT+':'')+(M?'SHIFT+':'')+N];if(!O||!O.length)return;O=O[O.length-1];O.keyup&&O.keyup.call(O.uiElement,O.dialog,O.key);J.data.preventDefault();},F=function(J,K,L,M,N){var O=C[L]||(C[L]=[]);O.push({uiElement:J,dialog:K,key:L,keyup:N||J.accessKeyUp,keydown:M||J.accessKeyDown});},G=function(J){for(var K in C){var L=C[K];for(var M=L.length-1;M>=0;M--)if(L[M].dialog==J||L[M].uiElement==J)L.splice(M,1);if(L.length===0)delete C[K];}},H=function(J,K){if(J._.accessKeyMap[K])J.selectPage(J._.accessKeyMap[K]);},I=function(J,K){};(function(){k.dialog={uiElement:function(J,K,L,M,N,O,P){if(arguments.length<4)return;var Q=(M.call?M(K):M)||('div'),R=['<',Q,' '],S=(N&&N.call?N(K):N)||({}),T=(O&&O.call?O(K):O)||({}),U=(P&&P.call?P(J,K):P)||(''),V=this.domId=T.id||e.getNextNumber()+'_uiElement',W=this.id=K.id,X;T.id=V;var Y={};if(K.type)Y['cke_dialog_ui_'+K.type]=1;if(K.className)Y[K.className]=1;var Z=T['class']&&T['class'].split?T['class'].split(' '):[];for(X=0;X<Z.length;X++)if(Z[X])Y[Z[X]]=1;var aa=[];for(X in Y)aa.push(X);\r
+T['class']=aa.join(' ');if(K.title)T.title=K.title;var ab=(K.style||'').split(';');for(X in S)ab.push(X+':'+S[X]);if(K.hidden)ab.push('display:none');for(X=ab.length-1;X>=0;X--)if(ab[X]==='')ab.splice(X,1);if(ab.length>0)T.style=(T.style?T.style+'; ':'')+(ab.join('; '));for(X in T)R.push(X+'="'+e.htmlEncode(T[X])+'" ');R.push('>',U,'</',Q,'>');L.push(R.join(''));(this._||(this._={})).dialog=J;if(typeof K.isChanged=='boolean')this.isChanged=function(){return K.isChanged;};if(typeof K.isChanged=='function')this.isChanged=K.isChanged;a.event.implementOn(this);this.registerEvents(K);if(this.accessKeyUp&&this.accessKeyDown&&K.accessKey)F(this,J,'CTRL+'+K.accessKey);var ac=this;J.on('load',function(){if(ac.getInputElement())ac.getInputElement().on('focus',function(){J._.tabBarMode=false;J._.hasFocus=true;ac.fire('focus');},ac);});if(this.keyboardFocusable){this.focusIndex=J._.focusList.push(this)-1;this.on('focus',function(){J._.currentFocusIndex=ac.focusIndex;});}e.extend(this,K);},hbox:function(J,K,L,M,N){if(arguments.length<4)return;this._||(this._={});var O=this._.children=K,P=N&&N.widths||null,Q=N&&N.height||null,R={},S,T=function(){var U=['<tbody><tr class="cke_dialog_ui_hbox">'];for(S=0;S<L.length;S++){var V='cke_dialog_ui_hbox_child',W=[];if(S===0)V='cke_dialog_ui_hbox_first';if(S==L.length-1)V='cke_dialog_ui_hbox_last';U.push('<td class="',V,'" ');if(P){if(P[S])W.push('width:'+e.cssLength(P[S]));}else W.push('width:'+Math.floor(100/L.length)+'%');if(Q)W.push('height:'+e.cssLength(Q));if(N&&N.padding!=undefined)W.push('padding:'+e.cssLength(N.padding));if(W.length>0)U.push('style="'+W.join('; ')+'" ');U.push('>',L[S],'</td>');}U.push('</tr></tbody>');return U.join('');};k.dialog.uiElement.call(this,J,N||{type:'hbox'},M,'table',R,N&&N.align&&{align:N.align}||null,T);},vbox:function(J,K,L,M,N){if(arguments.length<3)return;this._||(this._={});var O=this._.children=K,P=N&&N.width||null,Q=N&&N.heights||null,R=function(){var S=['<table cellspacing="0" border="0" '];S.push('style="');if(N&&N.expand)S.push('height:100%;');S.push('width:'+e.cssLength(P||'100%'),';');S.push('"');S.push('align="',e.htmlEncode(N&&N.align||(J.getParentEditor().lang.dir=='ltr'?'left':'right')),'" ');S.push('><tbody>');for(var T=0;T<L.length;T++){var U=[];S.push('<tr><td ');if(P)U.push('width:'+e.cssLength(P||'100%'));if(Q)U.push('height:'+e.cssLength(Q[T]));else if(N&&N.expand)U.push('height:'+Math.floor(100/L.length)+'%');if(N&&N.padding!=undefined)U.push('padding:'+e.cssLength(N.padding));\r
+if(U.length>0)S.push('style="',U.join('; '),'" ');S.push(' class="cke_dialog_ui_vbox_child">',L[T],'</td></tr>');}S.push('</tbody></table>');return S.join('');};k.dialog.uiElement.call(this,J,N||{type:'vbox'},M,'div',null,null,R);}};})();k.dialog.uiElement.prototype={getElement:function(){return a.document.getById(this.domId);},getInputElement:function(){return this.getElement();},getDialog:function(){return this._.dialog;},setValue:function(J){this.getInputElement().setValue(J);this.fire('change',{value:J});return this;},getValue:function(){return this.getInputElement().getValue();},isChanged:function(){return false;},selectParentTab:function(){var M=this;var J=M.getInputElement(),K=J,L;while((K=K.getParent())&&(K.$.className.search('cke_dialog_page_contents')==-1)){}if(!K)return M;L=K.getAttribute('name');if(M._.dialog._.currentTabId!=L)M._.dialog.selectPage(L);return M;},focus:function(){this.selectParentTab().getInputElement().focus();return this;},registerEvents:function(J){var K=/^on([A-Z]\w+)/,L,M=function(O,P,Q,R){P.on('load',function(){O.getInputElement().on(Q,R,O);});};for(var N in J){if(!(L=N.match(K)))continue;if(this.eventProcessors[N])this.eventProcessors[N].call(this,this._.dialog,J[N]);else M(this,this._.dialog,L[1].toLowerCase(),J[N]);}return this;},eventProcessors:{onLoad:function(J,K){J.on('load',K,this);},onShow:function(J,K){J.on('show',K,this);},onHide:function(J,K){J.on('hide',K,this);}},accessKeyDown:function(J,K){this.focus();},accessKeyUp:function(J,K){},disable:function(){var J=this.getInputElement();J.setAttribute('disabled','true');J.addClass('cke_disabled');},enable:function(){var J=this.getInputElement();J.removeAttribute('disabled');J.removeClass('cke_disabled');},isEnabled:function(){return!this.getInputElement().getAttribute('disabled');},isVisible:function(){return!!this.getInputElement().$.offsetHeight;},isFocusable:function(){if(!this.isEnabled()||!this.isVisible())return false;return true;}};k.dialog.hbox.prototype=e.extend(new k.dialog.uiElement(),{getChild:function(J){var K=this;if(arguments.length<1)return K._.children.concat();if(!J.splice)J=[J];if(J.length<2)return K._.children[J[0]];else return K._.children[J[0]]&&K._.children[J[0]].getChild?K._.children[J[0]].getChild(J.slice(1,J.length)):null;}},true);k.dialog.vbox.prototype=new k.dialog.hbox();(function(){var J={build:function(K,L,M){var N=L.children,O,P=[],Q=[];for(var R=0;R<N.length&&(O=N[R]);R++){var S=[];P.push(S);Q.push(a.dialog._.uiElementBuilders[O.type].build(K,O,S));\r
+}return new k.dialog[L.type](K,Q,P,M,L);}};a.dialog.addUIElement('hbox',J);a.dialog.addUIElement('vbox',J);})();a.dialogCommand=function(J){this.dialogName=J;};a.dialogCommand.prototype={exec:function(J){J.openDialog(this.dialogName);},canUndo:false};(function(){var J=/^([a]|[^a])+$/,K=/^\d*$/,L=/^\d*(?:\.\d+)?$/;a.VALIDATE_OR=1;a.VALIDATE_AND=2;a.dialog.validate={functions:function(){return function(){var S=this;var M=S&&S.getValue?S.getValue():arguments[0],N=undefined,O=2,P=[],Q;for(Q=0;Q<arguments.length;Q++)if(typeof arguments[Q]=='function')P.push(arguments[Q]);else break;if(Q<arguments.length&&typeof arguments[Q]=='string'){N=arguments[Q];Q++;}if(Q<arguments.length&&typeof arguments[Q]=='number')O=arguments[Q];var R=O==2?true:false;for(Q=0;Q<P.length;Q++)if(O==2)R=R&&P[Q](M);else R=R||P[Q](M);if(!R){if(N!==undefined)alert(N);if(S&&(S.select||S.focus))S.select||S.focus();return false;}return true;};},regex:function(M,N){return function(){var P=this;var O=P&&P.getValue?P.getValue():arguments[0];if(!M.test(O)){if(N!==undefined)alert(N);if(P&&(P.select||P.focus))if(P.select)P.select();else P.focus();return false;}return true;};},notEmpty:function(M){return this.regex(J,M);},integer:function(M){return this.regex(K,M);},number:function(M){return this.regex(L,M);},equals:function(M,N){return this.functions(function(O){return O==M;},N);},notEqual:function(M,N){return this.functions(function(O){return O!=M;},N);}};})();a.skins.add=(function(){var J=a.skins.add;return function(K,L){o[K]={margins:L.margins};return J.apply(this,arguments);};})();})();e.extend(a.editor.prototype,{openDialog:function(l){var m=a.dialog._.dialogDefinitions[l];if(typeof m=='function'){var n=this._.storedDialogs||(this._.storedDialogs={}),o=n[l]||(n[l]=new a.dialog(this,l));o.show();return o;}else if(m=='failed')throw new Error('[CKEDITOR.dialog.openDialog] Dialog "'+l+'" failed when loading definition.');var p=a.document.getBody(),q=p.$.style.cursor,r=this;p.setStyle('cursor','wait');a.scriptLoader.load(a.getUrl(m),function(){if(typeof a.dialog._.dialogDefinitions[l]!='function')a.dialog._.dialogDefinitions[l]='failed';r.openDialog(l);p.setStyle('cursor',q);});return null;}});i.dialog_backgroundCoverColor='white';i.dialog_backgroundCoverOpacity=0.5;i.dialog_magnetDistance=20;(function(){var l=function(n,o){return n._.modes&&n._.modes[o||n.mode];},m;j.add('editingblock',{init:function(n){if(!n.config.editingBlock)return;n.on('themeSpace',function(o){if(o.data.space=='contents')o.data.html+='<br>';\r
+});n.on('themeLoaded',function(){n.fireOnce('editingBlockReady');});n.on('uiReady',function(){n.setMode(n.config.startupMode);});n.on('afterSetData',function(){if(!m){function o(){m=true;l(n).loadData(n.getData());m=false;};if(n.mode)o();else n.on('mode',function(){o();n.removeListener('mode',arguments.callee);});}});n.on('beforeGetData',function(){if(!m&&n.mode){m=true;n.setData(l(n).getData());m=false;}});n.on('getSnapshot',function(o){if(n.mode)o.data=l(n).getSnapshotData();});n.on('loadSnapshot',function(o){if(n.mode)l(n).loadSnapshotData(o.data);});n.on('mode',function(o){o.removeListener();var p=n.container;if(b.webkit&&b.version<528){var q=n.config.tabIndex||n.element.getAttribute('tabindex')||0;p=p.append(h.createFromHtml('<input tabindex="'+q+'"'+' style="position:absolute; left:-10000">'));}p.on('focus',function(){n.focus();});if(n.config.startupFocus)n.focus();setTimeout(function(){n.fireOnce('instanceReady');a.fire('instanceReady',null,n);});});}});a.editor.prototype.mode='';a.editor.prototype.addMode=function(n,o){o.name=n;(this._.modes||(this._.modes={}))[n]=o;};a.editor.prototype.setMode=function(n){var o,p=this.getThemeSpace('contents'),q=this.checkDirty();if(this.mode){if(n==this.mode)return;this.fire('beforeModeUnload');var r=l(this);o=r.getData();r.unload(p);this.mode='';}p.setHtml('');var s=l(this,n);if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode "'+n+'".';if(!q)this.on('mode',function(){this.resetDirty();this.removeListener('mode',arguments.callee);});s.load(p,typeof o!='string'?this.getData():o);};a.editor.prototype.focus=function(){var n=l(this);if(n)n.focus();};})();i.startupMode='wysiwyg';i.startupFocus=false;i.editingBlock=true;j.add('panel',{beforeInit:function(l){l.ui.addHandler(2,k.panel.handler);}});a.UI_PANEL=2;k.panel=function(l,m){var n=this;if(m)e.extend(n,m);e.extend(n,{className:'',css:[]});n.id=e.getNextNumber();n.document=l;n._={blocks:{}};};k.panel.handler={create:function(l){return new k.panel(l);}};k.panel.prototype={renderHtml:function(l){var m=[];this.render(l,m);return m.join('');},render:function(l,m){var o=this;var n='cke_'+o.id;m.push('<div class="',l.skinClass,'" lang="',l.langCode,'" style="display:none;z-index:'+(l.config.baseFloatZIndex+1)+'">'+'<div'+' id=',n,' dir=',l.lang.dir,' class="cke_panel cke_',l.lang.dir);if(o.className)m.push(' ',o.className);m.push('">');if(o.forceIFrame||o.css.length){m.push('<iframe id="',n,'_frame" frameborder="0" src="javascript:void(');m.push(b.isCustomDomain()?"(function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})()':'0');\r
+m.push(')"></iframe>');}m.push('</div></div>');return n;},getHolderElement:function(){var l=this._.holder;if(!l){if(this.forceIFrame||this.css.length){var m=this.document.getById('cke_'+this.id+'_frame'),n=m.getParent(),o=n.getAttribute('dir'),p=n.getParent().getAttribute('class'),q=n.getParent().getAttribute('lang'),r=m.getFrameDocument();r.$.open();if(b.isCustomDomain())r.$.domain=document.domain;var s=e.addFunction(e.bind(function(u){this.isLoaded=true;if(this.onLoad)this.onLoad();},this));r.$.write('<!DOCTYPE html><html dir="'+o+'" class="'+p+'_container" lang="'+q+'">'+'<head>'+'<style>.'+p+'_container{visibility:hidden}</style>'+'</head>'+'<body class="cke_'+o+' cke_panel_frame '+b.cssClass+'" style="margin:0;padding:0"'+' onload="( window.CKEDITOR || window.parent.CKEDITOR ).tools.callFunction('+s+');">'+'</body>'+'<link type="text/css" rel=stylesheet href="'+this.css.join('"><link type="text/css" rel="stylesheet" href="')+'">'+'</html>');r.$.close();var t=r.getWindow();t.$.CKEDITOR=a;r.on('keydown',function(u){var w=this;var v=u.data.getKeystroke();if(w._.onKeyDown&&w._.onKeyDown(v)===false){u.data.preventDefault();return;}if(v==27)w.onEscape&&w.onEscape();},this);l=r.getBody();}else l=this.document.getById('cke_'+this.id);this._.holder=l;}return l;},addBlock:function(l,m){var n=this;m=n._.blocks[l]=m||new k.panel.block(n.getHolderElement());if(!n._.currentBlock)n.showBlock(l);return m;},getBlock:function(l){return this._.blocks[l];},showBlock:function(l){var p=this;var m=p._.blocks,n=m[l],o=p._.currentBlock;if(o)o.hide();p._.currentBlock=n;n._.focusIndex=-1;p._.onKeyDown=n.onKeyDown&&e.bind(n.onKeyDown,n);n.show();return n;}};k.panel.block=e.createClass({$:function(l){this.element=l.append(l.getDocument().createElement('div',{attributes:{'class':'cke_panel_block'},styles:{display:'none'}}));this.keys={};this._.focusIndex=-1;},_:{},proto:{show:function(){this.element.setStyle('display','');},hide:function(){var l=this;if(!l.onHide||l.onHide.call(l)!==true)l.element.setStyle('display','none');},onKeyDown:function(l){var q=this;var m=q.keys[l];switch(m){case 'next':var n=q._.focusIndex,o=q.element.getElementsByTag('a'),p;while(p=o.getItem(++n))if(p.getAttribute('_cke_focus')&&p.$.offsetWidth){q._.focusIndex=n;p.focus();break;}return false;case 'prev':n=q._.focusIndex;o=q.element.getElementsByTag('a');while(n>0&&(p=o.getItem(--n)))if(p.getAttribute('_cke_focus')&&p.$.offsetWidth){q._.focusIndex=n;p.focus();break;}return false;case 'click':n=q._.focusIndex;\r
+p=n>=0&&q.element.getElementsByTag('a').getItem(n);if(p)p.$.click?p.$.click():p.$.onclick();return false;}return true;}}});j.add('listblock',{requires:['panel'],onLoad:function(){k.panel.prototype.addListBlock=function(l,m){return this.addBlock(l,new k.listBlock(this.getHolderElement(),m));};k.listBlock=e.createClass({base:k.panel.block,$:function(l,m){var o=this;o.base(l);o.multiSelect=!!m;var n=o.keys;n[40]='next';n[9]='next';n[38]='prev';n[2000+9]='prev';n[32]='click';o._.pendingHtml=[];o._.items={};o._.groups={};},_:{close:function(){if(this._.started){this._.pendingHtml.push('</ul>');delete this._.started;}},getClick:function(){if(!this._.click)this._.click=e.addFunction(function(l){var n=this;var m=true;if(n.multiSelect)m=n.toggle(l);else n.mark(l);if(n.onClick)n.onClick(l,m);},this);return this._.click;}},proto:{add:function(l,m,n){var q=this;var o=q._.pendingHtml,p='cke_'+e.getNextNumber();if(!q._.started){o.push('<ul class=cke_panel_list>');q._.started=1;}q._.items[l]=p;o.push('<li id=',p,' class=cke_panel_listItem><a _cke_focus=1 hidefocus=true title="',n||l,'" href="javascript:void(\'',l,'\')" onclick="CKEDITOR.tools.callFunction(',q._.getClick(),",'",l,"'); return false;\">",m||l,'</a></li>');},startGroup:function(l){this._.close();var m='cke_'+e.getNextNumber();this._.groups[l]=m;this._.pendingHtml.push('<h1 id=',m,' class=cke_panel_grouptitle>',l,'</h1>');},commit:function(){var l=this;l._.close();l.element.appendHtml(l._.pendingHtml.join(''));l._.pendingHtml=[];},toggle:function(l){var m=this.isMarked(l);if(m)this.unmark(l);else this.mark(l);return!m;},hideGroup:function(l){var m=this.element.getDocument().getById(this._.groups[l]),n=m&&m.getNext();if(m){m.setStyle('display','none');if(n&&n.getName()=='ul')n.setStyle('display','none');}},hideItem:function(l){this.element.getDocument().getById(this._.items[l]).setStyle('display','none');},showAll:function(){var l=this._.items,m=this._.groups,n=this.element.getDocument();for(var o in l)n.getById(l[o]).setStyle('display','');for(var p in m){var q=n.getById(m[p]),r=q.getNext();q.setStyle('display','');if(r&&r.getName()=='ul')r.setStyle('display','');}},mark:function(l){var m=this;if(!m.multiSelect)m.unmarkAll();m.element.getDocument().getById(m._.items[l]).addClass('cke_selected');},unmark:function(l){this.element.getDocument().getById(this._.items[l]).removeClass('cke_selected');},unmarkAll:function(){var l=this._.items,m=this.element.getDocument();for(var n in l)m.getById(l[n]).removeClass('cke_selected');\r
+},isMarked:function(l){return this.element.getDocument().getById(this._.items[l]).hasClass('cke_selected');},focus:function(l){this._.focusIndex=-1;if(l){var m=this.element.getDocument().getById(this._.items[l]).getFirst(),n=this.element.getElementsByTag('a'),o,p=-1;while(o=n.getItem(++p))if(o.equals(m)){this._.focusIndex=p;break;}setTimeout(function(){m.focus();},0);}}}});}});j.add('dialogui');(function(){var l=function(s){var v=this;v._||(v._={});v._['default']=v._.initValue=s['default']||'';var t=[v._];for(var u=1;u<arguments.length;u++)t.push(arguments[u]);t.push(true);e.extend.apply(e,t);return v._;},m={build:function(s,t,u){return new k.dialog.textInput(s,t,u);}},n={build:function(s,t,u){return new k.dialog[t.type](s,t,u);}},o={isChanged:function(){return this.getValue()!=this.getInitValue();},reset:function(){this.setValue(this.getInitValue());},setInitValue:function(){this._.initValue=this.getValue();},resetInitValue:function(){this._.initValue=this._['default'];},getInitValue:function(){return this._.initValue;}},p=e.extend({},k.dialog.uiElement.prototype.eventProcessors,{onChange:function(s,t){if(!this._.domOnChangeRegistered){s.on('load',function(){this.getInputElement().on('change',function(){this.fire('change',{value:this.getValue()});},this);},this);this._.domOnChangeRegistered=true;}this.on('change',t);}},true),q=/^on([A-Z]\w+)/,r=function(s){for(var t in s)if(q.test(t)||t=='title'||t=='type')delete s[t];return s;};e.extend(k.dialog,{labeledElement:function(s,t,u,v){if(arguments.length<4)return;var w=l.call(this,t);w.labelId=e.getNextNumber()+'_label';var x=this._.children=[],y=function(){var z=[];if(t.labelLayout!='horizontal')z.push('<div class="cke_dialog_ui_labeled_label" id="',w.labelId,'" >',t.label,'</div>','<div class="cke_dialog_ui_labeled_content">',v(s,t),'</div>');else{var A={type:'hbox',widths:t.widths,padding:0,children:[{type:'html',html:'<span class="cke_dialog_ui_labeled_label" id="'+w.labelId+'">'+e.htmlEncode(t.label)+'</span>'},{type:'html',html:'<span class="cke_dialog_ui_labeled_content">'+v(s,t)+'</span>'}]};a.dialog._.uiElementBuilders.hbox.build(s,A,z);}return z.join('');};k.dialog.uiElement.call(this,s,t,u,'div',null,null,y);},textInput:function(s,t,u){if(arguments.length<3)return;l.call(this,t);var v=this._.inputId=e.getNextNumber()+'_textInput',w={'class':'cke_dialog_ui_input_'+t.type,id:v,type:'text'},x;if(t.validate)this.validate=t.validate;if(t.maxLength)w.maxlength=t.maxLength;if(t.size)w.size=t.size;var y=this,z=false;\r
+s.on('load',function(){y.getInputElement().on('keydown',function(B){if(B.data.getKeystroke()==13)z=true;});y.getInputElement().on('keyup',function(B){if(B.data.getKeystroke()==13&&z){s.getButton('ok')&&s.getButton('ok').click();z=false;}},null,null,1000);});var A=function(){var B=['<div class="cke_dialog_ui_input_',t.type,'"'];if(t.width)B.push('style="width:'+t.width+'" ');B.push('><input ');for(var C in w)B.push(C+'="'+w[C]+'" ');B.push(' /></div>');return B.join('');};k.dialog.labeledElement.call(this,s,t,u,A);},textarea:function(s,t,u){if(arguments.length<3)return;l.call(this,t);var v=this,w=this._.inputId=e.getNextNumber()+'_textarea',x={};if(t.validate)this.validate=t.validate;x.rows=t.rows||5;x.cols=t.cols||20;var y=function(){var z=['<div class="cke_dialog_ui_input_textarea"><textarea class="cke_dialog_ui_input_textarea" id="',w,'" '];for(var A in x)z.push(A+'="'+e.htmlEncode(x[A])+'" ');z.push('>',e.htmlEncode(v._['default']),'</textarea></div>');return z.join('');};k.dialog.labeledElement.call(this,s,t,u,y);},checkbox:function(s,t,u){if(arguments.length<3)return;var v=l.call(this,t,{'default':!!t['default']});if(t.validate)this.validate=t.validate;var w=function(){var x=e.extend({},t,{id:t.id?t.id+'_checkbox':e.getNextNumber()+'_checkbox'},true),y=[],z={'class':'cke_dialog_ui_checkbox_input',type:'checkbox'};r(x);if(t['default'])z.checked='checked';v.checkbox=new k.dialog.uiElement(s,x,y,'input',null,z);y.push(' <label for="',z.id,'">',e.htmlEncode(t.label),'</label>');return y.join('');};k.dialog.uiElement.call(this,s,t,u,'span',null,null,w);},radio:function(s,t,u){if(arguments.length<3)return;l.call(this,t);if(!this._['default'])this._['default']=this._.initValue=t.items[0][1];if(t.validate)this.validate=t.valdiate;var v=[],w=this,x=function(){var y=[],z=[],A={'class':'cke_dialog_ui_radio_item'},B=t.id?t.id+'_radio':e.getNextNumber()+'_radio';for(var C=0;C<t.items.length;C++){var D=t.items[C],E=D[2]!==undefined?D[2]:D[0],F=D[1]!==undefined?D[1]:D[0],G=e.extend({},t,{id:e.getNextNumber()+'_radio_input',title:null,type:null},true),H=e.extend({},G,{id:null,title:E},true),I={type:'radio','class':'cke_dialog_ui_radio_input',name:B,value:F},J=[];if(w._['default']==F)I.checked='checked';r(G);r(H);v.push(new k.dialog.uiElement(s,G,J,'input',null,I));J.push(' ');new k.dialog.uiElement(s,H,J,'label',null,{'for':I.id},D[0]);y.push(J.join(''));}new k.dialog.hbox(s,[],y,z);return z.join('');};k.dialog.labeledElement.call(this,s,t,u,x);this._.children=v;},button:function(s,t,u){if(!arguments.length)return;\r
+if(typeof t=='function')t=t(s.getParentEditor());l.call(this,t,{disabled:t.disabled||false});a.event.implementOn(this);var v=this;s.on('load',function(x){var y=this.getElement();(function(){y.on('click',function(z){v.fire('click',{dialog:v.getDialog()});z.data.preventDefault();});})();y.unselectable();},this);var w=e.extend({},t);delete w.style;k.dialog.uiElement.call(this,s,w,u,'a',null,{style:t.style,href:'javascript:void(0)',title:t.label,hidefocus:'true','class':t['class']},'<span class="cke_dialog_ui_button">'+e.htmlEncode(t.label)+'</span>');},select:function(s,t,u){if(arguments.length<3)return;var v=l.call(this,t);if(t.validate)this.validate=t.validate;var w=function(){var x=e.extend({},t,{id:t.id?t.id+'_select':e.getNextNumber()+'_select'},true),y=[],z=[],A={'class':'cke_dialog_ui_input_select'};if(t.size!=undefined)A.size=t.size;if(t.multiple!=undefined)A.multiple=t.multiple;r(x);for(var B=0,C;B<t.items.length&&(C=t.items[B]);B++)z.push('<option value="',e.htmlEncode(C[1]!==undefined?C[1]:C[0]),'" /> ',e.htmlEncode(C[0]));v.select=new k.dialog.uiElement(s,x,y,'select',null,A,z.join(''));return y.join('');};k.dialog.labeledElement.call(this,s,t,u,w);},file:function(s,t,u){if(arguments.length<3)return;if(t['default']===undefined)t['default']='';var v=e.extend(l.call(this,t),{definition:t,buttons:[]});if(t.validate)this.validate=t.validate;var w=function(){v.frameId=e.getNextNumber()+'_fileInput';var x=c&&document.domain!=window.location.hostname,y=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" id="',v.frameId,'" title="',t.label,'" src="javascript:void('];y.push(x?"(function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})()':'0');y.push(')"></iframe>');return y.join('');};s.on('load',function(){var x=a.document.getById(v.frameId),y=x.getParent();y.addClass('cke_dialog_ui_input_file');});k.dialog.labeledElement.call(this,s,t,u,w);},fileButton:function(s,t,u){if(arguments.length<3)return;var v=l.call(this,t),w=this;if(t.validate)this.validate=t.validate;var x=e.extend({},t),y=x.onClick;x.className=(x.className?x.className+' ':'')+('cke_dialog_ui_button');x.onClick=function(z){var A=t['for'];if(!y||y.call(this,z)!==false){s.getContentElement(A[0],A[1]).submit();this.disable();}};s.on('load',function(){s.getContentElement(t['for'][0],t['for'][1])._.buttons.push(w);});k.dialog.button.call(this,s,x,u);},html:(function(){var s=/^\s*<[\w:]+\s+([^>]*)?>/,t=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,u=/\/$/;\r
+return function(v,w,x){if(arguments.length<3)return;var y=[],z,A=w.html,B,C;if(A.charAt(0)!='<')A='<span>'+A+'</span>';if(w.focus){var D=this.focus;this.focus=function(){D.call(this);w.focus.call(this);this.fire('focus');};if(w.isFocusable){var E=this.isFocusable;this.isFocusable=E;}this.keyboardFocusable=true;}k.dialog.uiElement.call(this,v,w,y,'span',null,null,'');z=y.join('');B=z.match(s);C=A.match(t)||['','',''];if(u.test(C[1])){C[1]=C[1].slice(0,-1);C[2]='/'+C[2];}x.push([C[1],' ',B[1]||'',C[2]].join(''));};})()},true);k.dialog.html.prototype=new k.dialog.uiElement();k.dialog.labeledElement.prototype=e.extend(new k.dialog.uiElement(),{setLabel:function(s){var t=a.document.getById(this._.labelId);if(t.getChildCount()<1)new d.text(s,a.document).appendTo(t);else t.getChild(0).$.nodeValue=s;return this;},getLabel:function(){var s=a.document.getById(this._.labelId);if(!s||s.getChildCount()<1)return '';else return s.getChild(0).getText();},eventProcessors:p},true);k.dialog.button.prototype=e.extend(new k.dialog.uiElement(),{click:function(){var s=this;if(!s._.disabled)return s.fire('click',{dialog:s._.dialog});s.getElement().$.blur();return false;},enable:function(){this._.disabled=false;var s=this.getElement();s&&s.removeClass('disabled');},disable:function(){this._.disabled=true;this.getElement().addClass('disabled');},isVisible:function(){return!!this.getElement().$.firstChild.offsetHeight;},isEnabled:function(){return!this._.disabled;},eventProcessors:e.extend({},k.dialog.uiElement.prototype.eventProcessors,{onClick:function(s,t){this.on('click',t);}},true),accessKeyUp:function(){this.click();},accessKeyDown:function(){this.focus();},keyboardFocusable:true},true);k.dialog.textInput.prototype=e.extend(new k.dialog.labeledElement(),{getInputElement:function(){return a.document.getById(this._.inputId);},focus:function(){var s=this.selectParentTab();setTimeout(function(){var t=s.getInputElement();t&&t.$.focus();},0);},select:function(){var s=this.selectParentTab();setTimeout(function(){var t=s.getInputElement();if(t){t.$.focus();t.$.select();}},0);},accessKeyUp:function(){this.select();},setValue:function(s){s=s||'';return k.dialog.uiElement.prototype.setValue.call(this,s);},keyboardFocusable:true},o,true);k.dialog.textarea.prototype=new k.dialog.textInput();k.dialog.select.prototype=e.extend(new k.dialog.labeledElement(),{getInputElement:function(){return this._.select.getElement();},add:function(s,t,u){var v=new h('option',this.getDialog().getParentEditor().document),w=this.getInputElement().$;\r
+v.$.text=s;v.$.value=t===undefined||t===null?s:t;if(u===undefined||u===null){if(c)w.add(v.$);else w.add(v.$,null);}else w.add(v.$,u);return this;},remove:function(s){var t=this.getInputElement().$;t.remove(s);return this;},clear:function(){var s=this.getInputElement().$;while(s.length>0)s.remove(0);return this;},keyboardFocusable:true},o,true);k.dialog.checkbox.prototype=e.extend(new k.dialog.uiElement(),{getInputElement:function(){return this._.checkbox.getElement();},setValue:function(s){this.getInputElement().$.checked=s;this.fire('change',{value:s});},getValue:function(){return this.getInputElement().$.checked;},accessKeyUp:function(){this.setValue(!this.getValue());},eventProcessors:{onChange:function(s,t){if(!c)return p.onChange.apply(this,arguments);else{s.on('load',function(){var u=this._.checkbox.getElement();u.on('propertychange',function(v){v=v.data.$;if(v.propertyName=='checked')this.fire('change',{value:u.$.checked});},this);},this);this.on('change',t);}return null;}},keyboardFocusable:true},o,true);k.dialog.radio.prototype=e.extend(new k.dialog.uiElement(),{setValue:function(s){var t=this._.children,u;for(var v=0;v<t.length&&(u=t[v]);v++)u.getElement().$.checked=u.getValue()==s;this.fire('change',{value:s});},getValue:function(){var s=this._.children;for(var t=0;t<s.length;t++)if(s[t].getElement().$.checked)return s[t].getValue();return null;},accessKeyUp:function(){var s=this._.children,t;for(t=0;t<s.length;t++)if(s[t].getElement().$.checked){s[t].getElement().focus();return;}s[0].getElement().focus();},eventProcessors:{onChange:function(s,t){if(!c)return p.onChange.apply(this,arguments);else{s.on('load',function(){var u=this._.children,v=this;for(var w=0;w<u.length;w++){var x=u[w].getElement();x.on('propertychange',function(y){y=y.data.$;if(y.propertyName=='checked'&&this.$.checked)v.fire('change',{value:this.getAttribute('value')});});}},this);this.on('change',t);}return null;}},keyboardFocusable:true},o,true);k.dialog.file.prototype=e.extend(new k.dialog.labeledElement(),o,{getInputElement:function(){var s=a.document.getById(this._.frameId).getFrameDocument();return s.$.forms.length>0?new h(s.$.forms[0].elements[0]):this.getElement();},submit:function(){this.getInputElement().getParent().$.submit();return this;},getAction:function(s){return this.getInputElement().getParent().$.action;},reset:function(){var s=a.document.getById(this._.frameId),t=s.getFrameDocument(),u=this._.definition,v=this._.buttons;function w(){t.$.open();if(b.isCustomDomain())t.$.domain=document.domain;\r
+var x='';if(u.size)x=u.size-(c?7:0);t.$.write(['<html><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">','<form enctype="multipart/form-data" method="POST" action="',e.htmlEncode(u.action),'">','<input type="file" name="',e.htmlEncode(u.id||'cke_upload'),'" size="',e.htmlEncode(x>0?x:''),'" />','</form>','</body></html>'].join(''));t.$.close();for(var y=0;y<v.length;y++)v[y].enable();};if(b.gecko)setTimeout(w,500);else w();},getValue:function(){return '';},eventProcessors:p,keyboardFocusable:true},true);k.dialog.fileButton.prototype=new k.dialog.button();a.dialog.addUIElement('text',m);a.dialog.addUIElement('password',m);a.dialog.addUIElement('textarea',n);a.dialog.addUIElement('checkbox',n);a.dialog.addUIElement('radio',n);a.dialog.addUIElement('button',n);a.dialog.addUIElement('select',n);a.dialog.addUIElement('file',n);a.dialog.addUIElement('fileButton',n);a.dialog.addUIElement('html',n);})();a.skins.add('kama',(function(){var l=[];if(c&&b.version<7)l.push('icons.png','images/sprites_ie6.png','images/dialog_sides.gif');return{preload:l,editor:{css:['editor.css']},dialog:{css:['dialog.css']},templates:{css:['templates.css']},margins:[0,0,0,0],init:function(m){if(m.config.width&&!isNaN(m.config.width))m.config.width-=12;var n;function o(q){if(!n)return null;var r=n.append('style'),s='/* UI Color Support */.cke_skin_kama .cke_menuitem .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_label,.cke_skin_kama .cke_menuitem a:focus .cke_label,.cke_skin_kama .cke_menuitem a:active .cke_label{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label{\tbackground-color: transparent !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuseparator{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover,.cke_skin_kama .cke_menuitem a:focus,.cke_skin_kama .cke_menuitem a:active{\tbackground-color: $color !important;}';\r
+r.setAttribute('type','text/css');var t=/\$color/g;if(b.webkit){s=s.split('}').slice(0,-1);for(var u in s)s[u]=s[u].split('{');}return(o=function(v){if(b.webkit)for(var w in s)r.$.sheet.addRule(s[w][0],s[w][1].replace(t,v));else{var x=s.replace(t,v);if(c)r.$.styleSheet.cssText=x;else r.setHtml(x);}})(q);};e.extend(m,{uiColor:null,getUiColor:function(){return this.uiColor;},setUiColor:function(q){var r=a.document.getHead().append('style'),s='#cke_'+m.name.replace('.','\\.'),t=[s+' .cke_wrapper',s+'_dialog .cke_dialog_contents',s+'_dialog a.cke_dialog_tab',s+'_dialog .cke_dialog_footer'].join(','),u='background-color: $color !important;';r.setAttribute('type','text/css');return(this.setUiColor=function(v){var w=u.replace('$color',v);m.uiColor=v;if(c)r.$.styleSheet.cssText=t+'{'+w+'}';else if(b.webkit)r.$.sheet.addRule(t,w);else r.setHtml(t+'{'+w+'}');o(v);})(q);}});if(a.menu){var p=a.menu.prototype.show;a.menu.prototype.show=function(){p.apply(this,arguments);if(!n&&m==this.editor){n=this._.element.getDocument().getHead();o(m.getUiColor());}};}if(m.config.uiColor)m.setUiColor(m.config.uiColor);}};})());if(a.dialog)a.dialog.on('resize',function(l){var m=l.data,n=m.width,o=m.height,p=m.dialog,q=p.parts.contents,r=!b.quirks;if(m.skin!='kama')return;q.setStyles(c||b.gecko&&b.version<10900?{width:n+'px',height:o+'px'}:{'min-width':n+'px','min-height':o+'px'});if(!c)return;setTimeout(function(){var s=q.getParent(),t=s.getParent(),u=t.getChild(2);u.setStyle('width',s.$.offsetWidth+'px');u=t.getChild(7);u.setStyle('width',s.$.offsetWidth-28+'px');u=t.getChild(4);u.setStyle('height',s.$.offsetHeight-31-14+'px');u=t.getChild(5);u.setStyle('height',s.$.offsetHeight-31-14+'px');},100);});a.themes.add('default',(function(){return{build:function(l,m){var n=l.name,o=l.element,p=l.elementMode;if(!o||p==0)return;if(p==1)o.hide();var q=l.fire('themeSpace',{space:'top',html:''}).html,r=l.fire('themeSpace',{space:'contents',html:''}).html,s=l.fireOnce('themeSpace',{space:'bottom',html:''}).html,t=r&&l.config.height,u=l.config.tabIndex||l.element.getAttribute('tabindex')||0;if(!r)t='auto';else if(!isNaN(t))t+='px';var v='',w=l.config.width;if(w){if(!isNaN(w))w+='px';v+='width: '+w+';';}var x=h.createFromHtml(['<span id="cke_',n,'" onmousedown="return false;" class="',l.skinClass,'" dir="',l.lang.dir,'" title="',b.gecko?' ':'','" lang="',l.langCode,'" tabindex="'+u+'"'+(v?' style="'+v+'"':'')+'>'+'<span class="',b.cssClass,'"><span class="cke_wrapper cke_',l.lang.dir,'"><table class="cke_editor" border="0" cellspacing="0" cellpadding="0"><tbody><tr',q?'':' style="display:none"','><td id="cke_top_',n,'" class="cke_top">',q,'</td></tr><tr',r?'':' style="display:none"','><td id="cke_contents_',n,'" class="cke_contents" style="height:',t,'">',r,'</td></tr><tr',s?'':' style="display:none"','><td id="cke_bottom_',n,'" class="cke_bottom">',s,'</td></tr></tbody></table><style>.',l.skinClass,'{visibility:hidden;}</style></span></span></span>'].join(''));\r
+x.getChild([0,0,0,0,0]).unselectable();x.getChild([0,0,0,0,2]).unselectable();if(p==1)x.insertAfter(o);else o.append(x);l.container=x;l.fireOnce('themeLoaded');l.fireOnce('uiReady');},buildDialog:function(l){var m=e.getNextNumber(),n=h.createFromHtml(['<div id="cke_'+l.name.replace('.','\\.')+'_dialog" class="cke_skin_',l.skinName,'" dir="',l.lang.dir,'" lang="',l.langCode,'"><div class="cke_dialog',' '+b.cssClass,' cke_',l.lang.dir,'" style="position:absolute"><div class="%body"><div id="%title#" class="%title"></div><div id="%close_button#" class="%close_button"><span>X</span></div><div id="%tabs#" class="%tabs"></div><div id="%contents#" class="%contents"></div><div id="%footer#" class="%footer"></div></div><div id="%tl#" class="%tl"></div><div id="%tc#" class="%tc"></div><div id="%tr#" class="%tr"></div><div id="%ml#" class="%ml"></div><div id="%mr#" class="%mr"></div><div id="%bl#" class="%bl"></div><div id="%bc#" class="%bc"></div><div id="%br#" class="%br"></div></div>',c?'':'<style>.cke_dialog{visibility:hidden;}</style>','</div>'].join('').replace(/#/g,'_'+m).replace(/%/g,'cke_dialog_')),o=n.getChild([0,0]);o.getChild(0).unselectable();o.getChild(1).unselectable();return{element:n,parts:{dialog:n.getChild(0),title:o.getChild(0),close:o.getChild(1),tabs:o.getChild(2),contents:o.getChild(3),footer:o.getChild(4)}};},destroy:function(l){var m=l.container;if(c){m.setStyle('display','none');var n=document.body.createTextRange();n.moveToElementText(m.$);try{n.select();}catch(o){}}if(m)m.remove();if(l.elementMode==1){l.element.show();delete l.element;}}};})());a.editor.prototype.getThemeSpace=function(l){var m='cke_'+l,n=this._[m]||(this._[m]=a.document.getById(m+'_'+this.name));return n;};a.editor.prototype.resize=function(l,m,n,o){var p=/^\d+$/;if(p.test(l))l+='px';var q=a.document.getById('cke_contents_'+this.name),r=o?q.getAscendant('table').getParent():q.getAscendant('table').getParent().getParent().getParent();b.webkit&&r.setStyle('display','none');r.setStyle('width',l);if(b.webkit){r.$.offsetWidth;r.setStyle('display','');}var s=n?0:(r.$.offsetHeight||0)-(q.$.clientHeight||0);q.setStyle('height',Math.max(m-s,0)+'px');this.fire('resize');};a.editor.prototype.getResizable=function(){return this.container.getChild([0,0]);};})();\r
diff --git a/ckeditor.pack b/ckeditor.pack
new file mode 100644 (file)
index 0000000..c09d621
--- /dev/null
@@ -0,0 +1,199 @@
+/*\r
+ * CKPackager - Sample Package file\r
+ */\r
+\r
+header :\r
+       '/*'                                                                                                                                                    + '\n' +\r
+       'Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.'   + '\n' +\r
+       'For licensing, see LICENSE.html or http://ckeditor.com/license'                                + '\n' +\r
+       '*/'                                                                                                                                                    + '\n' +\r
+       '\n',\r
+\r
+noCheck : false,\r
+\r
+constants :\r
+       {\r
+               'CKEDITOR.ELEMENT_MODE_NONE' : 0,\r
+               'CKEDITOR.ELEMENT_MODE_REPLACE' : 1,\r
+               'CKEDITOR.ELEMENT_MODE_APPENDTO' : 2,\r
+               'CKEDITOR.CTRL' : 1000,\r
+               'CKEDITOR.SHIFT' : 2000,\r
+               'CKEDITOR.ALT' : 4000,\r
+               'CKEDITOR.NODE_ELEMENT' : 1,\r
+               'CKEDITOR.NODE_TEXT' : 3,\r
+               'CKEDITOR.NODE_COMMENT' : 8,\r
+               'CKEDITOR.NODE_DOCUMENT_FRAGMENT' : 11,\r
+               'CKEDITOR.POSITION_IDENTICAL' : 0,\r
+               'CKEDITOR.POSITION_DISCONNECTED' : 1,\r
+               'CKEDITOR.POSITION_FOLLOWING' : 2,\r
+               'CKEDITOR.POSITION_PRECEDING' : 4,\r
+               'CKEDITOR.POSITION_IS_CONTAINED' : 8,\r
+               'CKEDITOR.POSITION_CONTAINS' : 16,\r
+               'CKEDITOR.ENTER_P' : 1,\r
+               'CKEDITOR.ENTER_BR' : 2,\r
+               'CKEDITOR.ENTER_DIV' : 3,\r
+               'CKEDITOR.TRISTATE_ON' : 1,\r
+               'CKEDITOR.TRISTATE_OFF' : 2,\r
+               'CKEDITOR.TRISTATE_DISABLED' : 0,\r
+               'CKEDITOR.POSITION_AFTER_START' : 1,\r
+               'CKEDITOR.POSITION_BEFORE_END' : 2,\r
+               'CKEDITOR.POSITION_BEFORE_START' : 3,\r
+               'CKEDITOR.POSITION_AFTER_END' : 4,\r
+               'CKEDITOR.ENLARGE_ELEMENT' : 1,\r
+               'CKEDITOR.ENLARGE_BLOCK_CONTENTS' : 2,\r
+               'CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS' : 3,\r
+               'CKEDITOR.START' : 1,\r
+               'CKEDITOR.END' : 2,\r
+               'CKEDITOR.STARTEND' : 3,\r
+               'CKEDITOR.UI_BUTTON' : 1,\r
+               'CKEDITOR.STYLE_BLOCK' : 1,\r
+               'CKEDITOR.STYLE_INLINE' : 2,\r
+               'CKEDITOR.STYLE_OBJECT' : 3,\r
+               'CKEDITOR.UI_PANELBUTTON' : 4,\r
+               'CKEDITOR.SELECTION_NONE' : 1,\r
+               'CKEDITOR.SELECTION_TEXT' : 2,\r
+               'CKEDITOR.SELECTION_ELEMENT' : 3,\r
+               'CKEDITOR.UI_RICHCOMBO' : 3,\r
+               'CKEDITOR.UI_MENUBUTTON' : 5,\r
+               'CKEDITOR.DIALOG_RESIZE_NONE' : 0,\r
+               'CKEDITOR.DIALOG_RESIZE_WIDTH' : 1,\r
+               'CKEDITOR.DIALOG_RESIZE_HEIGHT' : 2,\r
+               'CKEDITOR.DIALOG_RESIZE_BOTH' : 3,\r
+               'CKEDITOR.VALIDATE_OR' : 1,\r
+               'CKEDITOR.VALIDATE_AND' : 2,\r
+               'CKEDITOR.UI_PANEL' : 2\r
+       },\r
+\r
+packages :\r
+       [\r
+               {\r
+                       output : 'ckeditor_basic.js',\r
+                       wrap : true,\r
+                       files :\r
+                               [\r
+                                       '_source/core/ckeditor_base.js',\r
+                                       '_source/core/event.js',\r
+                                       '_source/core/editor_basic.js',\r
+                                       '_source/core/env.js',\r
+                                       '_source/core/ckeditor_basic.js'\r
+                               ]\r
+               },\r
+\r
+               {\r
+                       output : 'ckeditor.js',\r
+                       wrap : true,\r
+                       files :\r
+                               [\r
+                                       '_source/core/ckeditor_base.js',\r
+                                       '_source/core/event.js',\r
+                                       '_source/core/editor_basic.js',\r
+                                       '_source/core/env.js',\r
+                                       '_source/core/ckeditor_basic.js',\r
+                                       '_source/core/dom.js',\r
+                                       '_source/core/tools.js',\r
+                                       '_source/core/dtd.js',\r
+                                       '_source/core/dom/event.js',\r
+                                       '_source/core/dom/domobject.js',\r
+                                       '_source/core/dom/window.js',\r
+                                       '_source/core/dom/document.js',\r
+                                       '_source/core/dom/node.js',\r
+                                       '_source/core/dom/nodelist.js',\r
+                                       '_source/core/dom/element.js',\r
+                                       '_source/core/command.js',\r
+                                       '_source/core/config.js',\r
+                                       '_source/core/focusmanager.js',\r
+                                       '_source/core/lang.js',\r
+                                       '_source/core/scriptloader.js',\r
+                                       '_source/core/resourcemanager.js',\r
+                                       '_source/core/plugins.js',\r
+                                       '_source/core/imagecacher.js',\r
+                                       '_source/core/skins.js',\r
+                                       '_source/core/themes.js',\r
+                                       '_source/core/ui.js',\r
+                                       '_source/core/editor.js',\r
+                                       '_source/core/htmlparser.js',\r
+                                       '_source/core/htmlparser/comment.js',\r
+                                       '_source/core/htmlparser/text.js',\r
+                                       '_source/core/htmlparser/cdata.js',\r
+                                       '_source/core/htmlparser/fragment.js',\r
+                                       '_source/core/htmlparser/element.js',\r
+                                       '_source/core/htmlparser/filter.js',\r
+                                       '_source/core/htmlparser/basicwriter.js',\r
+                                       '_source/core/ckeditor.js',\r
+                                       '_source/core/dom/elementpath.js',\r
+                                       '_source/core/dom/text.js',\r
+                                       '_source/core/dom/documentfragment.js',\r
+                                       '_source/core/dom/walker.js',\r
+                                       '_source/core/dom/range.js',\r
+                                       '_source/core/_bootstrap.js',\r
+//                                     '_source/lang/en.js',\r
+                                       '_source/plugins/about/plugin.js',\r
+                                       '_source/plugins/basicstyles/plugin.js',\r
+                                       '_source/plugins/blockquote/plugin.js',\r
+                                       '_source/plugins/button/plugin.js',\r
+                                       '_source/plugins/clipboard/plugin.js',\r
+                                       '_source/plugins/colorbutton/plugin.js',\r
+                                       '_source/plugins/contextmenu/plugin.js',\r
+                                       '_source/plugins/elementspath/plugin.js',\r
+                                       '_source/plugins/enterkey/plugin.js',\r
+                                       '_source/plugins/entities/plugin.js',\r
+                                       '_source/plugins/filebrowser/plugin.js',\r
+                                       '_source/plugins/find/plugin.js',\r
+                                       '_source/plugins/flash/plugin.js',\r
+                                       '_source/plugins/font/plugin.js',\r
+                                       '_source/plugins/format/plugin.js',\r
+                                       '_source/plugins/forms/plugin.js',\r
+                                       '_source/plugins/horizontalrule/plugin.js',\r
+                                       '_source/plugins/htmldataprocessor/plugin.js',\r
+                                       '_source/plugins/image/plugin.js',\r
+                                       '_source/plugins/indent/plugin.js',\r
+                                       '_source/plugins/justify/plugin.js',\r
+                                       '_source/plugins/keystrokes/plugin.js',\r
+                                       '_source/plugins/link/plugin.js',\r
+                                       '_source/plugins/list/plugin.js',\r
+                                       '_source/plugins/maximize/plugin.js',\r
+                                       '_source/plugins/newpage/plugin.js',\r
+                                       '_source/plugins/pagebreak/plugin.js',\r
+                                       '_source/plugins/pastefromword/plugin.js',\r
+                                       '_source/plugins/pastetext/plugin.js',\r
+                                       '_source/plugins/popup/plugin.js',\r
+                                       '_source/plugins/preview/plugin.js',\r
+                                       '_source/plugins/print/plugin.js',\r
+                                       '_source/plugins/removeformat/plugin.js',\r
+                                       '_source/plugins/resize/plugin.js',\r
+                                       '_source/plugins/save/plugin.js',\r
+                                       '_source/plugins/scayt/plugin.js',\r
+                                       '_source/plugins/smiley/plugin.js',\r
+                                       '_source/plugins/showblocks/plugin.js',\r
+                                       '_source/plugins/sourcearea/plugin.js',\r
+                                       '_source/plugins/stylescombo/plugin.js',\r
+                                       '_source/plugins/table/plugin.js',\r
+                                       '_source/plugins/tabletools/plugin.js',\r
+                                       '_source/plugins/specialchar/plugin.js',\r
+                                       '_source/plugins/tab/plugin.js',\r
+                                       '_source/plugins/templates/plugin.js',\r
+                                       '_source/plugins/toolbar/plugin.js',\r
+                                       '_source/plugins/undo/plugin.js',\r
+                                       '_source/plugins/wysiwygarea/plugin.js',\r
+                                       '_source/plugins/wsc/plugin.js',\r
+                                       '_source/plugins/styles/plugin.js',\r
+                                       '_source/plugins/domiterator/plugin.js',\r
+                                       '_source/plugins/panelbutton/plugin.js',\r
+                                       '_source/plugins/floatpanel/plugin.js',\r
+                                       '_source/plugins/menu/plugin.js',\r
+                                       '_source/plugins/selection/plugin.js',\r
+                                       '_source/plugins/fakeobjects/plugin.js',\r
+                                       '_source/plugins/richcombo/plugin.js',\r
+                                       '_source/plugins/htmlwriter/plugin.js',\r
+                                       '_source/plugins/menubutton/plugin.js',\r
+                                       '_source/plugins/dialog/plugin.js',\r
+                                       '_source/plugins/editingblock/plugin.js',\r
+                                       '_source/plugins/panel/plugin.js',\r
+                                       '_source/plugins/listblock/plugin.js',\r
+                                       '_source/plugins/dialogui/plugin.js',\r
+                                       '_source/skins/kama/skin.js',\r
+                                       '_source/themes/default/theme.js'\r
+                               ]\r
+               }\r
+\r
+       ]\r
diff --git a/ckeditor_basic.js b/ckeditor_basic.js
new file mode 100644 (file)
index 0000000..59c8759
--- /dev/null
@@ -0,0 +1,8 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'97KD',version:'3.0',revision:'4148',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();var a=CKEDITOR;if(!a.event){a.event=function(){};a.event.implementOn=function(b,c){var d=a.event.prototype;for(var e in d)if(b[e]==undefined)b[e]=d[e];};a.event.prototype=(function(){var b=function(d){var e=d.getPrivate&&d.getPrivate()||d._||(d._={});return e.events||(e.events={});},c=function(d){this.name=d;this.listeners=[];};c.prototype={getListenerIndex:function(d){for(var e=0,f=this.listeners;e<f.length;e++)if(f[e].fn==d)return e;return-1;}};return{on:function(d,e,f,g,h){var i=b(this),j=i[d]||(i[d]=new c(d));if(j.getListenerIndex(e)<0){var k=j.listeners;if(!f)f=this;if(isNaN(h))h=10;var l=this,m=function(o,p,q,r){var s={name:d,sender:this,editor:o,data:p,listenerData:g,stop:q,cancel:r,removeListener:function(){l.removeListener(d,e);}};e.call(f,s);return s.data;};m.fn=e;m.priority=h;for(var n=k.length-1;n>=0;n--)if(k[n].priority<=h){k.splice(n+1,0,m);return;}k.unshift(m);}},fire:(function(){var d=false,e=function(){d=true;},f=false,g=function(){f=true;};return function(h,i,j){var k=b(this)[h],l=d,m=f;d=f=false;if(k){var n=k.listeners;if(n.length){n=n.slice(0);for(var o=0;o<n.length;o++){var p=n[o].call(this,j,i,e,g);if(typeof p!='undefined')i=p;if(d||f)break;}}}var q=f||(typeof i=='undefined'?false:i);d=l;f=m;return q;};})(),fireOnce:function(d,e,f){var g=this.fire(d,e,f);delete b(this)[d];return g;},removeListener:function(d,e){var f=b(this)[d];if(f){var g=f.getListenerIndex(e);if(g>=0)f.listeners.splice(g,1);}},hasListeners:function(d){var e=b(this)[d];return e&&e.listeners.length>0;}};})();}if(!a.editor){a.ELEMENT_MODE_NONE=0;a.ELEMENT_MODE_REPLACE=1;a.ELEMENT_MODE_APPENDTO=2;a.editor=function(b,c,d){var e=this;e._={instanceConfig:b,element:c};\r
+e.elementMode=d||0;a.event.call(e);e._init();};a.editor.replace=function(b,c){var d=b;if(typeof d!='object'){d=document.getElementById(b);if(!d){var e=0,f=document.getElementsByName(b);while((d=f[e++])&&(d.tagName.toLowerCase()!='textarea')){}}if(!d)throw '[CKEDITOR.editor.replace] The element with id or name "'+b+'" was not found.';}d.style.visibility='hidden';return new a.editor(c,d,1);};a.editor.appendTo=function(b,c){if(typeof b!='object'){b=document.getElementById(b);if(!b)throw '[CKEDITOR.editor.appendTo] The element with id "'+b+'" was not found.';}return new a.editor(c,b,2);};a.editor.prototype={_init:function(){var b=a.editor._pending||(a.editor._pending=[]);b.push(this);},fire:function(b,c){return a.event.prototype.fire.call(this,b,c,this);},fireOnce:function(b,c){return a.event.prototype.fireOnce.call(this,b,c,this);}};a.event.implementOn(a.editor.prototype,true);}if(!a.env)a.env=(function(){var b=navigator.userAgent.toLowerCase(),c=window.opera,d={ie:/*@cc_on!@*/false,opera:!!c&&c.version,webkit:b.indexOf(' applewebkit/')>-1,air:b.indexOf(' adobeair/')>-1,mac:b.indexOf('macintosh')>-1,quirks:document.compatMode=='BackCompat',isCustomDomain:function(){return this.ie&&document.domain!=window.location.hostname;}};d.gecko=navigator.product=='Gecko'&&!d.webkit&&!d.opera;var e=0;if(d.ie){e=parseFloat(b.match(/msie (\d+)/)[1]);d.ie8=!!document.documentMode;d.ie8Compat=document.documentMode==8;d.ie7Compat=e==7&&!document.documentMode||document.documentMode==7;d.ie6Compat=e<7||d.quirks;}if(d.gecko){var f=b.match(/rv:([\d\.]+)/);if(f){f=f[1].split('.');e=f[0]*10000+(f[1]||0)*(100)+ +(f[2]||0);}}if(d.opera)e=parseFloat(c.version());if(d.air)e=parseFloat(b.match(/ adobeair\/(\d+)/)[1]);if(d.webkit)e=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]);d.version=e;d.isCompatible=d.ie&&e>=6||d.gecko&&e>=10801||d.opera&&e>=9.5||d.air&&e>=1||d.webkit&&e>=522||false;d.cssClass='cke_browser_'+(d.ie?'ie':d.gecko?'gecko':d.opera?'opera':d.air?'air':d.webkit?'webkit':'unknown');if(d.quirks)d.cssClass+=' cke_browser_quirks';if(d.ie){d.cssClass+=' cke_browser_ie'+(d.version<7?'6':d.version>=8?'8':'7');if(d.quirks)d.cssClass+=' cke_browser_iequirks';}if(d.gecko&&e<10900)d.cssClass+=' cke_browser_gecko18';return d;})();var b=a.env;var c=b.ie;if(a.status=='unloaded')(function(){a.event.implementOn(a);a.loadFullCore=function(){if(a.status!='basic_ready'){a.loadFullCore._load=true;return;}delete a.loadFullCore;var e=document.createElement('script');e.type='text/javascript';\r
+e.src=a.basePath+'ckeditor.js';document.getElementsByTagName('head')[0].appendChild(e);};a.loadFullCoreTimeout=0;a.replaceClass='ckeditor';a.replaceByClassEnabled=true;var d=function(e,f,g){if(b.isCompatible){if(a.loadFullCore)a.loadFullCore();var h=g(e,f);a.add(h);return h;}return null;};a.replace=function(e,f){return d(e,f,a.editor.replace);};a.appendTo=function(e,f){return d(e,f,a.editor.appendTo);};a.add=function(e){var f=this._.pending||(this._.pending=[]);f.push(e);};a.replaceAll=function(){var e=document.getElementsByTagName('textarea');for(var f=0;f<e.length;f++){var g=null,h=e[f],i=h.name;if(!h.name&&!h.id)continue;if(typeof arguments[0]=='string'){var j=new RegExp('(?:^| )'+arguments[0]+'(?:$| )');if(!j.test(h.className))continue;}else if(typeof arguments[0]=='function'){g={};if(arguments[0](h,g)===false)continue;}this.replace(h,g);}};(function(){var e=function(){var f=a.loadFullCore,g=a.loadFullCoreTimeout;if(a.replaceByClassEnabled)a.replaceAll(a.replaceClass);a.status='basic_ready';if(f&&f._load)f();else if(g)setTimeout(function(){if(a.loadFullCore)a.loadFullCore();},g*1000);};if(window.addEventListener)window.addEventListener('load',e,false);else if(window.attachEvent)window.attachEvent('onload',e);})();a.status='basic_loaded';})();})();\r
diff --git a/ckeditor_basic_source.js b/ckeditor_basic_source.js
new file mode 100644 (file)
index 0000000..babf660
--- /dev/null
@@ -0,0 +1,20 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+// Compressed version of core/ckeditor_base.js. See original for instructions.\r
+/*jsl:ignore*/\r
+if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.0',revision:'4148',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();\r
+/*jsl:end*/\r
+\r
+// Uncomment the following line to have a new timestamp generated for each\r
+// request, having clear cache load of the editor code.\r
+// CKEDITOR.timestamp = ( new Date() ).valueOf();\r
+\r
+// Set the script name to be loaded by the loader.\r
+CKEDITOR._autoLoad = 'core/ckeditor_basic';\r
+\r
+// Include the loader script.\r
+document.write(\r
+       '<script type="text/javascript" src="' + CKEDITOR.getUrl( '_source/core/loader.js' ) + '"></script>' );\r
diff --git a/ckeditor_source.js b/ckeditor_source.js
new file mode 100644 (file)
index 0000000..9b718f9
--- /dev/null
@@ -0,0 +1,25 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+// Compressed version of core/ckeditor_base.js. See original for instructions.\r
+/*jsl:ignore*/\r
+if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.0',revision:'4148',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();\r
+/*jsl:end*/\r
+\r
+// Uncomment the following line to have a new timestamp generated for each\r
+// request, having clear cache load of the editor code.\r
+// CKEDITOR.timestamp = ( new Date() ).valueOf();\r
+\r
+if ( CKEDITOR.loader )\r
+       CKEDITOR.loader.load( 'core/ckeditor' );\r
+else\r
+{\r
+       // Set the script name to be loaded by the loader.\r
+       CKEDITOR._autoLoad = 'core/ckeditor';\r
+\r
+       // Include the loader script.\r
+       document.write(\r
+               '<script type="text/javascript" src="' + CKEDITOR.getUrl( '_source/core/loader.js' ) + '"></script>' );\r
+}\r
diff --git a/config.js b/config.js
new file mode 100644 (file)
index 0000000..d9cc8b3
--- /dev/null
+++ b/config.js
@@ -0,0 +1,11 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.editorConfig = function( config )\r
+{\r
+       // Define changes to default configuration here. For example:\r
+       // config.language = 'fr';\r
+       // config.uiColor = '#AADC6E';\r
+};\r
diff --git a/contents.css b/contents.css
new file mode 100644 (file)
index 0000000..a4efda1
--- /dev/null
@@ -0,0 +1,35 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+body\r
+{\r
+       /* Font */\r
+       font-family: Arial, Verdana, sans-serif;\r
+       font-size: 12px;\r
+\r
+       /* Text color */\r
+       color: #222;\r
+\r
+       /* Remove the background color to make it transparent */\r
+       background-color: #fff;\r
+}\r
+\r
+html\r
+{\r
+       /* #3658: [IE6] Editor document has horizontal scrollbar on long lines\r
+       To prevent this misbehavior, we show the scrollbar always */\r
+       _overflow-y: scroll\r
+}\r
+\r
+img:-moz-broken\r
+{\r
+       -moz-force-broken-image-icon : 1;\r
+       width : 24px;\r
+       height : 24px;\r
+}\r
+img, input, textarea\r
+{\r
+       cursor: default;\r
+}\r
diff --git a/images/spacer.gif b/images/spacer.gif
new file mode 100644 (file)
index 0000000..5bfd67a
Binary files /dev/null and b/images/spacer.gif differ
diff --git a/lang/_languages.js b/lang/_languages.js
new file mode 100644 (file)
index 0000000..349b5af
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+var CKEDITOR_LANGS=(function(){var b={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','fr-ca':'French (Canada)',gl:'Galician',gu:'Gujarati',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',is:'Icelandic',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'},c=[];for(var d in b)c.push({code:d,name:b[d]});c.sort(function(e,f){return e.name<f.name?-1:1;});return c;})();\r
diff --git a/lang/_translationstatus.txt b/lang/_translationstatus.txt
new file mode 100644 (file)
index 0000000..33a770a
--- /dev/null
@@ -0,0 +1,59 @@
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+\r
+af.js      Found: 312 Missing: 123\r
+ar.js      Found: 329 Missing: 106\r
+bg.js      Found: 305 Missing: 130\r
+bn.js      Found: 307 Missing: 128\r
+bs.js      Found: 210 Missing: 225\r
+ca.js      Found: 435 Missing: 0\r
+cs.js      Found: 327 Missing: 108\r
+da.js      Found: 326 Missing: 109\r
+de.js      Found: 435 Missing: 0\r
+el.js      Found: 311 Missing: 124\r
+en-au.js   Found: 395 Missing: 40\r
+en-ca.js   Found: 395 Missing: 40\r
+en-uk.js   Found: 395 Missing: 40\r
+eo.js      Found: 282 Missing: 153\r
+es.js      Found: 435 Missing: 0\r
+et.js      Found: 326 Missing: 109\r
+eu.js      Found: 435 Missing: 0\r
+fa.js      Found: 327 Missing: 108\r
+fi.js      Found: 325 Missing: 110\r
+fo.js      Found: 326 Missing: 109\r
+fr-ca.js   Found: 327 Missing: 108\r
+fr.js      Found: 434 Missing: 1\r
+gl.js      Found: 308 Missing: 127\r
+gu.js      Found: 326 Missing: 109\r
+he.js      Found: 332 Missing: 103\r
+hi.js      Found: 327 Missing: 108\r
+hr.js      Found: 435 Missing: 0\r
+hu.js      Found: 326 Missing: 109\r
+is.js      Found: 332 Missing: 103\r
+it.js      Found: 434 Missing: 1\r
+ja.js      Found: 434 Missing: 1\r
+km.js      Found: 299 Missing: 136\r
+ko.js      Found: 318 Missing: 117\r
+lt.js      Found: 331 Missing: 104\r
+lv.js      Found: 308 Missing: 127\r
+mn.js      Found: 326 Missing: 109\r
+ms.js      Found: 287 Missing: 148\r
+nb.js      Found: 325 Missing: 110\r
+nl.js      Found: 327 Missing: 108\r
+no.js      Found: 325 Missing: 110\r
+pl.js      Found: 435 Missing: 0\r
+pt-br.js   Found: 434 Missing: 1\r
+pt.js      Found: 307 Missing: 128\r
+ro.js      Found: 326 Missing: 109\r
+ru.js      Found: 332 Missing: 103\r
+sk.js      Found: 327 Missing: 108\r
+sl.js      Found: 325 Missing: 110\r
+sr-latn.js Found: 301 Missing: 134\r
+sr.js      Found: 301 Missing: 134\r
+sv.js      Found: 324 Missing: 111\r
+th.js      Found: 312 Missing: 123\r
+tr.js      Found: 332 Missing: 103\r
+uk.js      Found: 435 Missing: 0\r
+vi.js      Found: 435 Missing: 0\r
+zh-cn.js   Found: 435 Missing: 0\r
+zh.js      Found: 435 Missing: 0\r
diff --git a/lang/af.js b/lang/af.js
new file mode 100644 (file)
index 0000000..9b20a0f
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.af={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Source',newPage:'Nuwe Bladsy',save:'Bewaar',preview:'Voorskou',cut:'Uitsny ',copy:'Kopieer',paste:'Byvoeg',print:'Druk',underline:'Onderstreep',bold:'Vet',italic:'Skuins',selectAll:'Selekteer alles',removeFormat:'Formaat verweider',strike:'Gestreik',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Horisontale lyn byvoeg',pagebreak:'Bladsy breek byvoeg',unlink:'Skakel verweider',undo:'Ont-skep',redo:'Her-skep',common:{browseServer:'Server deurblaai',url:'URL',protocol:'Protokol',upload:'Oplaai',uploadSubmit:'Stuur dit na die Server',image:'Beeld',flash:'Flash',form:'Form',checkbox:'HakBox',radio:'PuntBox',textField:'Byvoegbare karakter strook',textarea:'Byvoegbare karakter area',hiddenField:'Blinde strook',button:'Knop',select:'Opklapbare keuse strook',imageButton:'Beeld knop',notSet:'<geen instelling>',id:'Id',name:'Naam',langDir:'Taal rigting',langDirLtr:'Links na regs (LTR)',langDirRtl:'Regs na links (RTL)',langCode:'Taal kode',longDescr:'Lang beskreiwing URL',cssClass:'Skakel Tiepe',advisoryTitle:'Voorbeveelings Titel',cssStyle:'Styl',ok:'OK',cancel:'Kanseleer',generalTab:'General',advancedTab:'Ingewikkeld',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Spesiaale Karakter byvoeg',title:'Kies spesiale karakter'},link:{toolbar:'Skakel byvoeg/verander',menu:'Verander skakel',title:'Skakel',info:'Skakel informasie',target:'Mikpunt',upload:'Oplaai',advanced:'Ingewikkeld',type:'Skakel soort',toAnchor:'Skakel na plekhouers in text',toEmail:'E-Mail',target:'Mikpunt',targetNotSet:'<geen instelling>',targetFrame:'<raam>',targetPopup:'<popup venster>',targetNew:'Nuwe Venster (_blank)',targetTop:'Boonste Venster (_top)',targetSelf:'Selfde Venster (_self)',targetParent:'Vorige Venster (_parent)',targetFrameName:'Mikpunt Venster Naam',targetPopupName:'Popup Venster Naam',popupFeatures:'Popup Venster Geaartheid',popupResizable:'Resizable',popupStatusBar:'Status Balk',popupLocationBar:'Adres Balk',popupToolbar:'Gereedskap Balk',popupMenuBar:'Menu Balk',popupFullScreen:'Voll Skerm (IE)',popupScrollBars:'Gleibalkstuk',popupDependent:'Afhanklik (Netscape)',popupWidth:'Weite',popupLeft:'Links Posisie',popupHeight:'Hoogde',popupTop:'Bo Posisie',id:'Id',langDir:'Taal rigting',langDirNotSet:'<geen instelling>',langDirLTR:'Links na regs (LTR)',langDirRTL:'Regs na links (RTL)',acccessKey:'Toegang sleutel',name:'Naam',langCode:'Taal rigting',tabIndex:'Tab Index',advisoryTitle:'Voorbeveelings Titel',advisoryContentType:'Voorbeveelings inhoud soort',cssClasses:'Skakel Tiepe',charset:'Geskakelde voorbeeld karakterstel',styles:'Styl',selectAnchor:"Kies 'n plekhouer",anchorName:'Volgens plekhouer naam',anchorId:'Volgens element Id',emailAddress:'E-Mail Adres',emailSubject:'Boodskap Opskrif',emailBody:'Boodskap Inhoud',noAnchors:'(Geen plekhouers beskikbaar in dokument}',noUrl:'Voeg asseblief die URL in',noEmail:'Voeg asseblief die e-mail adres in'},anchor:{toolbar:'Plekhouer byvoeg/verander',menu:'Plekhouer eienskappe',title:'Plekhouer eienskappe',name:'Plekhouer Naam',errorName:'Voltooi die plekhouer naam asseblief'},findAndReplace:{title:'Find and Replace',find:'Vind',replace:'Vervang',findWhat:'Soek wat:',replaceWith:'Vervang met:',notFoundMsg:'Die gespesifiseerde karakters word nie gevind nie.',matchCase:'Vergelyk karakter skryfweise',matchWord:'Vergelyk komplete woord',matchCyclic:'Match cyclic',replaceAll:'Vervang alles',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabel',title:'Tabel eienskappe',menu:'Tabel eienskappe',deleteTable:'Tabel verweider',rows:'Reie',columns:'Kolome',border:'Kant groote',align:'Parideering',alignNotSet:'<geen instelling>',alignLeft:'Links',alignCenter:'Middel',alignRight:'Regs',width:'Weite',widthPx:'pixels',widthPc:'percent',height:'Hoogde',cellSpace:'Cell spasieering',cellPad:'Cell buffer',caption:'Beskreiwing',summary:'Opsomming',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Cell verweider',merge:'Cell verenig',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Ry',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Ry verweider'},column:{menu:'Kolom',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Kolom verweider'}},button:{title:'Knop eienskappe',text:'Karakters (Waarde)',type:'Soort',typeBtn:'Knop',typeSbm:'Indien',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'HakBox eienskappe',radioTitle:'PuntBox eienskappe',value:'Waarde',selected:'Uitgekies'},form:{title:'Form eienskappe',menu:'Form eienskappe',action:'Aksie',method:'Metode',encoding:'Encoding',target:'Mikpunt',targetNotSet:'<geen instelling>',targetNew:'Nuwe Venster (_blank)',targetTop:'Boonste Venster (_top)',targetSelf:'Selfde Venster (_self)',targetParent:'Vorige Venster (_parent)'},select:{title:'Opklapbare keuse strook eienskappe',selectInfo:'Info',opAvail:'Beskikbare Opsies',value:'Waarde',size:'Grote',lines:'lyne',chkMulti:'Laat meerere keuses toe',opText:'Karakters',opValue:'Waarde',btnAdd:'Byvoeg',btnModify:'Verander',btnUp:'Op',btnDown:'Af',btnSetValue:'Stel as uitgekiesde waarde',btnDelete:'Verweider'},textarea:{title:'Karakter area eienskappe',cols:'Kolom',rows:'Reie'},textfield:{title:'Karakter strook eienskappe',name:'Naam',value:'Waarde',charWidth:'Karakter weite',maxChars:'Maximale karakters',type:'Soort',typeText:'Karakters',typePass:'Wagwoord'},hidden:{title:'Blinde strook eienskappe',name:'Naam',value:'Waarde'},image:{title:'Beeld eienskappe',titleButton:'Beeld knop eienskappe',menu:'Beeld eienskappe',infoTab:'Beeld informasie',btnUpload:'Stuur dit na die Server',url:'URL',upload:'Uplaai',alt:'Alternatiewe beskrywing',width:'Weidte',height:'Hoogde',lockRatio:'Behou preporsie',resetSize:'Herstel groote',border:'Kant',hSpace:'HSpasie',vSpace:'VSpasie',align:'Paradeer',alignLeft:'Links',alignAbsBottom:'Abs Onder',alignAbsMiddle:'Abs Middel',alignBaseline:'Baseline',alignBottom:'Onder',alignMiddle:'Middel',alignRight:'Regs',alignTextTop:'Text Bo',alignTop:'Bo',preview:'Voorskou',alertUrl:'Voeg asseblief Beeld URL in.',linkTab:'Skakel',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash eienskappe',propertiesTab:'Properties',title:'Flash eienskappe',chkPlay:'Automaties Speel',chkLoop:'Herhaling',chkMenu:'Laat Flash Menu toe',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Wys alles',scaleNoBorder:'Geen kante',scaleFit:'Presiese pas',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Paradeer',alignLeft:'Links',alignAbsBottom:'Abs Onder',alignAbsMiddle:'Abs Middel',alignBaseline:'Baseline',alignBottom:'Onder',alignMiddle:'Middel',alignRight:'Regs',alignTextTop:'Text Bo',alignTop:'Bo',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Agtergrond kleur',width:'Weidte',height:'Hoogde',hSpace:'HSpasie',vSpace:'VSpasie',validateSrc:'Voeg asseblief die URL in',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Spelling nagaan',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Nie in woordeboek nie',changeTo:'Verander na',btnIgnore:'Ignoreer',btnIgnoreAll:'Ignoreer na-volgende',btnReplace:'Vervang',btnReplaceAll:'vervang na-volgende',btnUndo:'Ont-skep',noSuggestions:'- Geen voorstel -',progress:'Spelling word beproef...',noMispell:'Spellproef kompleet: Geen foute',noChanges:'Spellproef kompleet: Geen woord veranderings',oneChange:'Spellproef kompleet: Een woord verander',manyChanges:'Spellproef kompleet: %1 woorde verander',ieSpellDownload:'Geen Spellproefer geinstaleer nie. Wil U dit aflaai?'},smiley:{toolbar:'Smiley',title:'Voeg Smiley by'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Genommerde lys',bulletedlist:'Gepunkte lys',indent:'Paradeering verleng',outdent:'Paradeering verkort',justify:{left:'Links rig',center:'Rig Middel',right:'Regs rig',block:'Blok paradeer'},blockquote:'Blockquote',clipboard:{title:'Byvoeg',cutError:'U browser se sekuriteit instelling behinder die uitsny aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+X).',copyError:'U browser se sekuriteit instelling behinder die kopieerings aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+C).',pasteMsg:'Voeg asseblief die inhoud in die gegewe box by met sleutel kombenasie(<STRONG>Ctrl+V</STRONG>) en druk <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Van Word af byvoeg',title:'Van Word af byvoeg',advice:'Voeg asseblief die inhoud in die gegewe box by met sleutel kombenasie(<STRONG>Ctrl+V</STRONG>) en druk <STRONG>OK</STRONG>.',ignoreFontFace:'Ignoreer karakter soort defenisies',removeStyle:'Verweider Styl defenisies'},pasteText:{button:'Voeg slegs karakters by',title:'Voeg slegs karakters by'},templates:{button:'Templates',title:'Inhoud Templates',insertOption:'Vervang bestaande inhoud',selectPromptMsg:'Kies die template om te gebruik in die editor<br>(Inhoud word vervang!):',emptyListMsg:'(Geen templates gedefinieerd)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styl',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Karakter formaat',voiceLabel:'Format',panelTitle:'Karakter formaat',panelVoiceLabel:'Select a paragraph format',tag_p:'Normaal',tag_pre:'Geformateerd',tag_address:'Adres',tag_h1:'Opskrif 1',tag_h2:'Opskrif 2',tag_h3:'Opskrif 3',tag_h4:'Opskrif 4',tag_h5:'Opskrif 5',tag_h6:'Opskrif 6',tag_div:'Normaal (DIV)'},font:{label:'Karakters',voiceLabel:'Font',panelTitle:'Karakters',panelVoiceLabel:'Select a font'},fontSize:{label:'Karakter grote',voiceLabel:'Font Size',panelTitle:'Karakter grote',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Karakter kleur',bgColorTitle:'Agtergrond kleur',auto:'Automaties',more:'Meer Kleure...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/ar.js b/lang/ar.js
new file mode 100644 (file)
index 0000000..04be830
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.ar={dir:'rtl',editorTitle:'Rich text editor, %1',source:'شفرة المصدر',newPage:'صفحة جديدة',save:'حفظ',preview:'معاينة الصفحة',cut:'قص',copy:'نسخ',paste:'لصق',print:'طباعة',underline:'تسطير',bold:'غامق',italic:'مائل',selectAll:'تحديد الكل',removeFormat:'إزالة التنسيقات',strike:'يتوسطه خط',subscript:'منخفض',superscript:'مرتفع',horizontalrule:'إدراج خط فاصل',pagebreak:'إدخال صفحة جديدة',unlink:'إزالة رابط',undo:'تراجع',redo:'إعادة',common:{browseServer:'تصفح الخادم',url:'موقع الصورة',protocol:'البروتوكول',upload:'رفع',uploadSubmit:'أرسلها للخادم',image:'صورة',flash:'فلاش',form:'نموذج',checkbox:'خانة إختيار',radio:'زر خيار',textField:'مربع نص',textarea:'ناحية نص',hiddenField:'إدراج حقل خفي',button:'زر ضغط',select:'قائمة منسدلة',imageButton:'زر صورة',notSet:'<بدون تحديد>',id:'الرقم',name:'الاسم',langDir:'إتجاه النص',langDirLtr:'اليسار لليمين (LTR)',langDirRtl:'اليمين لليسار (RTL)',langCode:'رمز اللغة',longDescr:'عنوان الوصف المفصّل',cssClass:'فئات التنسيق',advisoryTitle:'تلميح الشاشة',cssStyle:'نمط',ok:'موافق',cancel:'إلغاء الأمر',generalTab:'عام',advancedTab:'متقدم',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'إدراج  رموز..ِ',title:'إدراج رمز'},link:{toolbar:'إدراج/تحرير رابط',menu:'تحرير رابط',title:'إرتباط تشعبي',info:'معلومات الرابط',target:'الهدف',upload:'رفع',advanced:'متقدم',type:'نوع الربط',toAnchor:'مكان في هذا المستند',toEmail:'بريد إلكتروني',target:'الهدف',targetNotSet:'<بدون تحديد>',targetFrame:'<إطار>',targetPopup:'<نافذة منبثقة>',targetNew:'إطار جديد (_blank)',targetTop:'صفحة كاملة (_top)',targetSelf:'نفس الإطار (_self)',targetParent:'الإطار الأصل (_parent)',targetFrameName:'اسم الإطار الهدف',targetPopupName:'تسمية النافذة المنبثقة',popupFeatures:'خصائص النافذة المنبثقة',popupResizable:'Resizable',popupStatusBar:'شريط الحالة السفلي',popupLocationBar:'شريط العنوان',popupToolbar:'شريط الأدوات',popupMenuBar:'القوائم الرئيسية',popupFullScreen:'ملئ الشاشة (IE)',popupScrollBars:'أشرطة التمرير',popupDependent:'تابع (Netscape)',popupWidth:'العرض',popupLeft:'التمركز لليسار',popupHeight:'الإرتفاع',popupTop:'التمركز للأعلى',id:'Id',langDir:'إتجاه النص',langDirNotSet:'<بدون تحديد>',langDirLTR:'اليسار لليمين (LTR)',langDirRTL:'اليمين لليسار (RTL)',acccessKey:'مفاتيح الإختصار',name:'الاسم',langCode:'إتجاه النص',tabIndex:'الترتيب',advisoryTitle:'تلميح الشاشة',advisoryContentType:'نوع التلميح',cssClasses:'فئات التنسيق',charset:'ترميز المادة المطلوبة',styles:'نمط',selectAnchor:'اختر علامة مرجعية',anchorName:'حسب اسم العلامة',anchorId:'حسب تعريف العنصر',emailAddress:'عنوان بريد إلكتروني',emailSubject:'موضوع الرسالة',emailBody:'محتوى الرسالة',noAnchors:'(لا يوجد علامات مرجعية في هذا المستند)',noUrl:'فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط',noEmail:'فضلاً أدخل عنوان البريد الإلكتروني'},anchor:{toolbar:'إدراج/تحرير إشارة مرجعية',menu:'خصائص الإشارة المرجعية',title:'خصائص الإشارة المرجعية',name:'اسم الإشارة المرجعية',errorName:'الرجاء كتابة اسم الإشارة المرجعية'},findAndReplace:{title:'بحث واستبدال',find:'بحث',replace:'إستبدال',findWhat:'البحث عن:',replaceWith:'إستبدال بـ:',notFoundMsg:'لم يتم العثور على النص المحدد.',matchCase:'مطابقة حالة الأحرف',matchWord:'الكلمة بالكامل فقط',matchCyclic:'Match cyclic',replaceAll:'إستبدال الكل',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'جدول',title:'إدراج جدول',menu:'إدراج جدول',deleteTable:'حذف الجدول',rows:'صفوف',columns:'أعمدة',border:'سمك الحدود',align:'المحاذاة',alignNotSet:'<بدون تحديد>',alignLeft:'يسار',alignCenter:'وسط',alignRight:'يمين',width:'العرض',widthPx:'بكسل',widthPc:'بالمئة',height:'الإرتفاع',cellSpace:'تباعد الخلايا',cellPad:'المسافة البادئة',caption:'الوصف',summary:'الخلاصة',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'خلية',insertBefore:'إدراج خلية قبل',insertAfter:'إدراج خلية بعد',deleteCell:'حذف خلايا',merge:'دمج خلايا',mergeRight:'دمج لليمين',mergeDown:'دمج للأسفل',splitHorizontal:'تقسيم الخلية أفقياً',splitVertical:'تقسيم الخلية عمودياً',title:'خصائص الخلية',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'صف',insertBefore:'إدراج صف قبل',insertAfter:'إدراج صف بعد',deleteRow:'حذف صفوف'},column:{menu:'عمود',insertBefore:'إدراج عمود قبل',insertAfter:'إدراج عمود بعد',deleteColumn:'حذف أعمدة'}},button:{title:'خصائص زر الضغط',text:'القيمة/التسمية',type:'نوع الزر',typeBtn:'زر',typeSbm:'إرسال',typeRst:'إعادة تعيين'},checkboxAndRadio:{checkboxTitle:'خصائص خانة الإختيار',radioTitle:'خصائص زر الخيار',value:'القيمة',selected:'محدد'},form:{title:'خصائص النموذج',menu:'خصائص النموذج',action:'اسم الملف',method:'الأسلوب',encoding:'Encoding',target:'الهدف',targetNotSet:'<بدون تحديد>',targetNew:'إطار جديد (_blank)',targetTop:'صفحة كاملة (_top)',targetSelf:'نفس الإطار (_self)',targetParent:'الإطار الأصل (_parent)'},select:{title:'خصائص القائمة المنسدلة',selectInfo:'معلومات',opAvail:'الخيارات المتاحة',value:'القيمة',size:'الحجم',lines:'الأسطر',chkMulti:'السماح بتحديدات متعددة',opText:'النص',opValue:'القيمة',btnAdd:'إضافة',btnModify:'تعديل',btnUp:'تحريك لأعلى',btnDown:'تحريك لأسفل',btnSetValue:'إجعلها محددة',btnDelete:'إزالة'},textarea:{title:'خصائص ناحية النص',cols:'الأعمدة',rows:'الصفوف'},textfield:{title:'خصائص مربع النص',name:'الاسم',value:'القيمة',charWidth:'العرض بالأحرف',maxChars:'عدد الحروف الأقصى',type:'نوع المحتوى',typeText:'نص',typePass:'كلمة مرور'},hidden:{title:'خصائص الحقل الخفي',name:'الاسم',value:'القيمة'},image:{title:'خصائص الصورة',titleButton:'خصائص زر الصورة',menu:'خصائص الصورة',infoTab:'معلومات الصورة',btnUpload:'أرسلها للخادم',url:'موقع الصورة',upload:'رفع',alt:'الوصف',width:'العرض',height:'الإرتفاع',lockRatio:'تناسق الحجم',resetSize:'إستعادة الحجم الأصلي',border:'سمك الحدود',hSpace:'تباعد أفقي',vSpace:'تباعد عمودي',align:'محاذاة',alignLeft:'يسار',alignAbsBottom:'أسفل النص',alignAbsMiddle:'وسط السطر',alignBaseline:'على السطر',alignBottom:'أسفل',alignMiddle:'وسط',alignRight:'يمين',alignTextTop:'أعلى النص',alignTop:'أعلى',preview:'معاينة',alertUrl:'فضلاً أكتب الموقع الذي توجد عليه هذه الصورة.',linkTab:'الرابط',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'خصائص فيلم الفلاش',propertiesTab:'Properties',title:'خصائص فيلم الفلاش',chkPlay:'تشغيل تلقائي',chkLoop:'تكرار',chkMenu:'تمكين قائمة فيلم الفلاش',chkFull:'Allow Fullscreen',scale:'الحجم',scaleAll:'إظهار الكل',scaleNoBorder:'بلا حدود',scaleFit:'ضبط تام',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'محاذاة',alignLeft:'يسار',alignAbsBottom:'أسفل النص',alignAbsMiddle:'وسط السطر',alignBaseline:'على السطر',alignBottom:'أسفل',alignMiddle:'وسط',alignRight:'يمين',alignTextTop:'أعلى النص',alignTop:'أعلى',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'لون الخلفية',width:'العرض',height:'الإرتفاع',hSpace:'تباعد أفقي',vSpace:'تباعد عمودي',validateSrc:'فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'تدقيق إملائي',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'ليست في القاموس',changeTo:'التغيير إلى',btnIgnore:'تجاهل',btnIgnoreAll:'تجاهل الكل',btnReplace:'تغيير',btnReplaceAll:'تغيير الكل',btnUndo:'تراجع',noSuggestions:'- لا توجد إقتراحات -',progress:'جاري التدقيق إملائياً',noMispell:'تم إكمال التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية',noChanges:'تم إكمال التدقيق الإملائي: لم يتم تغيير أي كلمة',oneChange:'تم إكمال التدقيق الإملائي: تم تغيير كلمة واحدة فقط',manyChanges:'تم إكمال التدقيق الإملائي: تم تغيير %1 كلماتكلمة',ieSpellDownload:'المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟'},smiley:{toolbar:'ابتسامات',title:'إدراج إبتسامات '},elementsPath:{eleTitle:'%1 element'},numberedlist:'تعداد رقمي',bulletedlist:'تعداد نقطي',indent:'زيادة المسافة البادئة',outdent:'إنقاص المسافة البادئة',justify:{left:'محاذاة إلى اليسار',center:'توسيط',right:'محاذاة إلى اليمين',block:'ضبط'},blockquote:'اقتباس',clipboard:{title:'لصق',cutError:'الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+X).',copyError:'الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+C).',pasteMsg:'الصق داخل الصندوق بإستخدام زرّي (<STRONG>Ctrl+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر  <STRONG>موافق</STRONG>.',securityMsg:'نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذا وجب عليك لصق المحتوى مرة أخرى في هذه النافذة.'},pastefromword:{toolbar:'لصق من وورد',title:'لصق من وورد',advice:'الصق داخل الصندوق بإستخدام زرّي (<STRONG>Ctrl+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر  <STRONG>موافق</STRONG>.',ignoreFontFace:'تجاهل تعريفات أسماء الخطوط',removeStyle:'إزالة تعريفات الأنماط'},pasteText:{button:'لصق كنص بسيط',title:'لصق كنص بسيط'},templates:{button:'القوالب',title:'قوالب المحتوى',insertOption:'استبدال المحتوى',selectPromptMsg:'اختر القالب الذي تود وضعه في المحرر <br>(سيتم فقدان المحتوى الحالي):',emptyListMsg:'(لم يتم تعريف أي قالب)'},showBlocks:'مخطط تفصيلي',stylesCombo:{label:'نمط',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'تنسيق',voiceLabel:'Format',panelTitle:'تنسيق',panelVoiceLabel:'Select a paragraph format',tag_p:'عادي',tag_pre:'منسّق',tag_address:'دوس',tag_h1:'العنوان 1',tag_h2:'العنوان  2',tag_h3:'العنوان  3',tag_h4:'العنوان  4',tag_h5:'العنوان  5',tag_h6:'العنوان  6',tag_div:'Normal (DIV)'},font:{label:'خط',voiceLabel:'Font',panelTitle:'خط',panelVoiceLabel:'Select a font'},fontSize:{label:'حجم الخط',voiceLabel:'Font Size',panelTitle:'حجم الخط',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'لون النص',bgColorTitle:'لون الخلفية',auto:'تلقائي',more:'ألوان إضافية...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'حول CKEditor',dlgTitle:'حول rotidEKC',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/bg.js b/lang/bg.js
new file mode 100644 (file)
index 0000000..7096b04
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.bg={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Код',newPage:'Нова страница',save:'Запази',preview:'Предварителен изглед',cut:'Изрежи',copy:'Запамети',paste:'Вмъкни',print:'Печат',underline:'Подчертан',bold:'Удебелен',italic:'Курсив',selectAll:'Селектирай всичко',removeFormat:'Изтрий форматирането',strike:'Зачертан',subscript:'Индекс за база',superscript:'Индекс за степен',horizontalrule:'Вмъкни хоризонтална линия',pagebreak:'Вмъкни нов ред',unlink:'Изтрий връзка',undo:'Отмени',redo:'Повтори',common:{browseServer:'Разгледай сървъра',url:'Пълен път (URL)',protocol:'Протокол',upload:'Качи',uploadSubmit:'Прати към сървъра',image:'Изображение',flash:'Flash',form:'Формуляр',checkbox:'Поле за отметка',radio:'Поле за опция',textField:'Текстово поле',textarea:'Текстова област',hiddenField:'Скрито поле',button:'Бутон',select:'Падащо меню с опции',imageButton:'Бутон-изображение',notSet:'<не е настроен>',id:'Идентификатор',name:'Име',langDir:'посока на речта',langDirLtr:'От ляво на дясно',langDirRtl:'От дясно на ляво',langCode:'Код на езика',longDescr:'Описание на връзката',cssClass:'Клас от стиловите таблици',advisoryTitle:'Препоръчително заглавие',cssStyle:'Стил',ok:'ОК',cancel:'Отказ',generalTab:'General',advancedTab:'Подробности...',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Вмъкни специален символ',title:'Изберете специален символ'},link:{toolbar:'Добави/Редактирай връзка',menu:'Редактирай връзка',title:'Връзка',info:'Информация за връзката',target:'Цел',upload:'Качи',advanced:'Подробности...',type:'Вид на връзката',toAnchor:'Котва в текущата страница',toEmail:'Е-поща',target:'Цел',targetNotSet:'<не е настроен>',targetFrame:'<рамка>',targetPopup:'<дъщерен прозорец>',targetNew:'Нов прозорец (_blank)',targetTop:'Целия прозорец (_top)',targetSelf:'Активния прозорец (_self)',targetParent:'Родителски прозорец (_parent)',targetFrameName:'Име на целевия прозорец',targetPopupName:'Име на дъщерния прозорец',popupFeatures:'Параметри на дъщерния прозорец',popupResizable:'Resizable',popupStatusBar:'Поле за статус',popupLocationBar:'Поле за адрес',popupToolbar:'Панел с бутони',popupMenuBar:'Меню',popupFullScreen:'Голям екран (MS IE)',popupScrollBars:'Плъзгач',popupDependent:'Зависим (Netscape)',popupWidth:'Ширина',popupLeft:'Координати - X',popupHeight:'Височина',popupTop:'Координати - Y',id:'Id',langDir:'посока на речта',langDirNotSet:'<не е настроен>',langDirLTR:'От ляво на дясно',langDirRTL:'От дясно на ляво',acccessKey:'Бърз клавиш',name:'Име',langCode:'посока на речта',tabIndex:'Ред на достъп',advisoryTitle:'Препоръчително заглавие',advisoryContentType:'Препоръчителен тип на съдържанието',cssClasses:'Клас от стиловите таблици',charset:'Тип на свързания ресурс',styles:'Стил',selectAnchor:'Изберете котва',anchorName:'По име на котвата',anchorId:'По идентификатор на елемент',emailAddress:'Адрес за е-поща',emailSubject:'Тема на писмото',emailBody:'Текст на писмото',noAnchors:'(Няма котви в текущия документ)',noUrl:'Моля, напишете пълния път (URL)',noEmail:'Моля, напишете адреса за е-поща'},anchor:{toolbar:'Добави/Редактирай котва',menu:'Параметри на котвата',title:'Параметри на котвата',name:'Име на котвата',errorName:'Моля, въведете име на котвата'},findAndReplace:{title:'Find and Replace',find:'Търси',replace:'Замести',findWhat:'Търси:',replaceWith:'Замести с:',notFoundMsg:'Указания текст не беше намерен.',matchCase:'Със същия регистър',matchWord:'Търси същата дума',matchCyclic:'Match cyclic',replaceAll:'Замести всички',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Таблица',title:'Параметри на таблицата',menu:'Параметри на таблицата',deleteTable:'Изтрий таблицата',rows:'Редове',columns:'Колони',border:'Размер на рамката',align:'Подравняване',alignNotSet:'<Не е избрано>',alignLeft:'Ляво',alignCenter:'Център',alignRight:'Дясно',width:'Ширина',widthPx:'пиксели',widthPc:'проценти',height:'Височина',cellSpace:'Разстояние между клетките',cellPad:'Отстъп на съдържанието в клетките',caption:'Заглавие',summary:'Резюме',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Изтрий клетките',merge:'Обедини клетките',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Изтрий редовете'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Изтрий колоните'}},button:{title:'Параметри на бутона',text:'Текст (Стойност)',type:'Тип',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Параметри на полето за отметка',radioTitle:'Параметри на полето за опция',value:'Стойност',selected:'Отметнато'},form:{title:'Параметри на формуляра',menu:'Параметри на формуляра',action:'Действие',method:'Метод',encoding:'Encoding',target:'Цел',targetNotSet:'<не е настроен>',targetNew:'Нов прозорец (_blank)',targetTop:'Целия прозорец (_top)',targetSelf:'Активния прозорец (_self)',targetParent:'Родителски прозорец (_parent)'},select:{title:'Параметри на падащото меню с опции',selectInfo:'Информация',opAvail:'Възможни опции',value:'Стойност',size:'Размер',lines:'линии',chkMulti:'Разрешено множествено селектиране',opText:'Текст',opValue:'Стойност',btnAdd:'Добави',btnModify:'Промени',btnUp:'Нагоре',btnDown:'Надолу',btnSetValue:'Настрой като избрана стойност',btnDelete:'Изтрий'},textarea:{title:'Параметри на текстовата област',cols:'Колони',rows:'Редове'},textfield:{title:'Параметри на текстовото-поле',name:'Име',value:'Стойност',charWidth:'Ширина на символите',maxChars:'Максимум символи',type:'Тип',typeText:'Текст',typePass:'Парола'},hidden:{title:'Параметри на скритото поле',name:'Име',value:'Стойност'},image:{title:'Параметри на изображението',titleButton:'Параметри на бутона-изображение',menu:'Параметри на изображението',infoTab:'Информация за изображението',btnUpload:'Прати към сървъра',url:'Пълен път (URL)',upload:'Качи',alt:'Алтернативен текст',width:'Ширина',height:'Височина',lockRatio:'Запази пропорцията',resetSize:'Възстанови размера',border:'Рамка',hSpace:'Хоризонтален отстъп',vSpace:'Вертикален отстъп',align:'Подравняване',alignLeft:'Ляво',alignAbsBottom:'Най-долу',alignAbsMiddle:'Точно по средата',alignBaseline:'По базовата линия',alignBottom:'Долу',alignMiddle:'По средата',alignRight:'Дясно',alignTextTop:'Върху текста',alignTop:'Отгоре',preview:'Изглед',alertUrl:'Моля, въведете пълния път до изображението',linkTab:'Връзка',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Параметри на Flash обекта',propertiesTab:'Properties',title:'Параметри на Flash обекта',chkPlay:'Автоматично стартиране',chkLoop:'Ново стартиране след завършването',chkMenu:'Разрешено Flash меню',chkFull:'Allow Fullscreen',scale:'Оразмеряване',scaleAll:'Покажи целия обект',scaleNoBorder:'Без рамка',scaleFit:'Според мястото',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Подравняване',alignLeft:'Ляво',alignAbsBottom:'Най-долу',alignAbsMiddle:'Точно по средата',alignBaseline:'По базовата линия',alignBottom:'Долу',alignMiddle:'По средата',alignRight:'Дясно',alignTextTop:'Върху текста',alignTop:'Отгоре',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Цвят на фона',width:'Ширина',height:'Височина',hSpace:'Хоризонтален отстъп',vSpace:'Вертикален отстъп',validateSrc:'Моля, напишете пълния път (URL)',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Провери правописа',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Липсва в речника',changeTo:'Промени на',btnIgnore:'Игнорирай',btnIgnoreAll:'Игнорирай всички',btnReplace:'Замести',btnReplaceAll:'Замести всички',btnUndo:'Отмени',noSuggestions:'- Няма предложения -',progress:'Извършване на проверката за правопис...',noMispell:'Проверката за правопис завършена: не са открити правописни грешки',noChanges:'Проверката за правопис завършена: няма променени думи',oneChange:'Проверката за правопис завършена: една дума е променена',manyChanges:'Проверката за правопис завършена: %1 думи са променени',ieSpellDownload:'Инструментът за проверка на правопис не е инсталиран. Желаете ли да го инсталирате ?'},smiley:{toolbar:'Усмивка',title:'Добави усмивка'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Нумериран списък',bulletedlist:'Ненумериран списък',indent:'Увеличи отстъпа',outdent:'Намали отстъпа',justify:{left:'Подравняване в ляво',center:'Подравнявне в средата',right:'Подравняване в дясно',block:'Двустранно подравняване'},blockquote:'Blockquote',clipboard:{title:'Вмъкни',cutError:'Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни изрязването. За целта използвайте клавиатурата (Ctrl+X).',copyError:'Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl+C).',pasteMsg:'Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl+V</STRONG>) и натиснете <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Вмъкни от MS Word',title:'Вмъкни от MS Word',advice:'Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl+V</STRONG>) и натиснете <STRONG>OK</STRONG>.',ignoreFontFace:'Игнорирай шрифтовите дефиниции',removeStyle:'Изтрий стиловите дефиниции'},pasteText:{button:'Вмъкни като чист текст',title:'Вмъкни като чист текст'},templates:{button:'Шаблони',title:'Шаблони',insertOption:'Replace actual contents',selectPromptMsg:'Изберете шаблон <br>(текущото съдържание на редактора ще бъде загубено):',emptyListMsg:'(Няма дефинирани шаблони)'},showBlocks:'Show Blocks',stylesCombo:{label:'Стил',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Формат',voiceLabel:'Format',panelTitle:'Формат',panelVoiceLabel:'Select a paragraph format',tag_p:'Нормален',tag_pre:'Форматиран',tag_address:'Адрес',tag_h1:'Заглавие 1',tag_h2:'Заглавие 2',tag_h3:'Заглавие 3',tag_h4:'Заглавие 4',tag_h5:'Заглавие 5',tag_h6:'Заглавие 6',tag_div:'Параграф (DIV)'},font:{label:'Шрифт',voiceLabel:'Font',panelTitle:'Шрифт',panelVoiceLabel:'Select a font'},fontSize:{label:'Размер',voiceLabel:'Font Size',panelTitle:'Размер',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Цвят на текста',bgColorTitle:'Цвят на фона',auto:'По подразбиране',more:'Други цветове...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/bn.js b/lang/bn.js
new file mode 100644 (file)
index 0000000..44319da
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.bn={dir:'ltr',editorTitle:'Rich text editor, %1',source:'সোর্স',newPage:'নতুন পেজ',save:'সংরক্ষন কর',preview:'প্রিভিউ',cut:'কাট',copy:'কপি',paste:'পেস্ট',print:'প্রিন্ট',underline:'আন্ডারলাইন',bold:'বোল্ড',italic:'ইটালিক',selectAll:'সব সিলেক্ট কর',removeFormat:'ফরমেট সরাও',strike:'স্ট্রাইক থ্রু',subscript:'অধোলেখ',superscript:'অভিলেখ',horizontalrule:'রেখা যুক্ত কর',pagebreak:'পেজ ব্রেক',unlink:'লিংক সরাও',undo:'আনডু',redo:'রি-ডু',common:{browseServer:'ব্রাউজ সার্ভার',url:'URL',protocol:'প্রোটোকল',upload:'আপলোড',uploadSubmit:'ইহাকে সার্ভারে প্রেরন কর',image:'ছবির লেবেল যুক্ত কর',flash:'ফ্লাশ লেবেল যুক্ত কর',form:'ফর্ম',checkbox:'চেক বাক্স',radio:'রেডিও বাটন',textField:'টেক্সট ফীল্ড',textarea:'টেক্সট এরিয়া',hiddenField:'গুপ্ত ফীল্ড',button:'বাটন',select:'বাছাই ফীল্ড',imageButton:'ছবির বাটন',notSet:'<সেট নেই>',id:'আইডি',name:'নাম',langDir:'ভাষা লেখার দিক',langDirLtr:'বাম থেকে ডান (LTR)',langDirRtl:'ডান থেকে বাম (RTL)',langCode:'ভাষা কোড',longDescr:'URL এর লম্বা বর্ণনা',cssClass:'স্টাইল-শীট ক্লাস',advisoryTitle:'পরামর্শ শীর্ষক',cssStyle:'স্টাইল',ok:'ওকে',cancel:'বাতিল',generalTab:'General',advancedTab:'এডভান্সড',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'বিশেষ অক্ষর যুক্ত কর',title:'বিশেষ ক্যারেক্টার বাছাই কর'},link:{toolbar:'লিংক যুক্ত কর',menu:'লিংক সম্পাদন',title:'লিংক',info:'লিংক তথ্য',target:'টার্গেট',upload:'আপলোড',advanced:'এডভান্সড',type:'লিংক প্রকার',toAnchor:'এই পেজে নোঙর কর',toEmail:'ইমেইল',target:'টার্গেট',targetNotSet:'<সেট নেই>',targetFrame:'<ফ্রেম>',targetPopup:'<পপআপ উইন্ডো>',targetNew:'নতুন উইন্ডো (_blank)',targetTop:'শীর্ষ উইন্ডো (_top)',targetSelf:'এই উইন্ডো (_self)',targetParent:'মূল উইন্ডো (_parent)',targetFrameName:'টার্গেট ফ্রেমের নাম',targetPopupName:'পপআপ উইন্ডোর নাম',popupFeatures:'পপআপ উইন্ডো ফীচার সমূহ',popupResizable:'Resizable',popupStatusBar:'স্ট্যাটাস বার',popupLocationBar:'লোকেশন বার',popupToolbar:'টুল বার',popupMenuBar:'মেন্যু বার',popupFullScreen:'পূর্ণ পর্দা জুড়ে (IE)',popupScrollBars:'স্ক্রল বার',popupDependent:'ডিপেন্ডেন্ট (Netscape)',popupWidth:'প্রস্থ',popupLeft:'বামের পজিশন',popupHeight:'দৈর্ঘ্য',popupTop:'ডানের পজিশন',id:'Id',langDir:'ভাষা লেখার দিক',langDirNotSet:'<সেট নেই>',langDirLTR:'বাম থেকে ডান (LTR)',langDirRTL:'ডান থেকে বাম (RTL)',acccessKey:'এক্সেস কী',name:'নাম',langCode:'ভাষা লেখার দিক',tabIndex:'ট্যাব ইন্ডেক্স',advisoryTitle:'পরামর্শ শীর্ষক',advisoryContentType:'পরামর্শ কন্টেন্টের প্রকার',cssClasses:'স্টাইল-শীট ক্লাস',charset:'লিংক রিসোর্স ক্যারেক্টর সেট',styles:'স্টাইল',selectAnchor:'নোঙর বাছাই',anchorName:'নোঙরের নাম দিয়ে',anchorId:'নোঙরের আইডি দিয়ে',emailAddress:'ইমেইল ঠিকানা',emailSubject:'মেসেজের বিষয়',emailBody:'মেসেজের দেহ',noAnchors:'(No anchors available in the document)',noUrl:'অনুগ্রহ করে URL লিংক টাইপ করুন',noEmail:'অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন'},anchor:{toolbar:'নোঙ্গর',menu:'নোঙর প্রোপার্টি',title:'নোঙর প্রোপার্টি',name:'নোঙরের নাম',errorName:'নোঙরের নাম টাইপ করুন'},findAndReplace:{title:'Find and Replace',find:'খোজো',replace:'রিপ্লেস',findWhat:'যা খুঁজতে হবে:',replaceWith:'যার সাথে বদলাতে হবে:',notFoundMsg:'আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি',matchCase:'কেস মিলাও',matchWord:'পুরা শব্দ মেলাও',matchCyclic:'Match cyclic',replaceAll:'সব বদলে দাও',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'টেবিলের লেবেল যুক্ত কর',title:'টেবিল প্রোপার্টি',menu:'টেবিল প্রোপার্টি',deleteTable:'টেবিল ডিলীট কর',rows:'রো',columns:'কলাম',border:'বর্ডার সাইজ',align:'এলাইনমেন্ট',alignNotSet:'<সেট নেই>',alignLeft:'বামে',alignCenter:'মাঝখানে',alignRight:'ডানে',width:'প্রস্থ',widthPx:'পিক্সেল',widthPc:'শতকরা',height:'দৈর্ঘ্য',cellSpace:'সেল স্পেস',cellPad:'সেল প্যাডিং',caption:'শীর্ষক',summary:'সারাংশ',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'সেল',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'সেল মুছে দাও',merge:'সেল জোড়া দাও',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'রো',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'রো মুছে দাও'},column:{menu:'কলাম',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'কলাম মুছে দাও'}},button:{title:'বাটন প্রোপার্টি',text:'টেক্সট (ভ্যালু)',type:'প্রকার',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'চেক বক্স প্রোপার্টি',radioTitle:'রেডিও বাটন প্রোপার্টি',value:'ভ্যালু',selected:'সিলেক্টেড'},form:{title:'ফর্ম প্রোপার্টি',menu:'ফর্ম প্রোপার্টি',action:'একশ্যন',method:'পদ্ধতি',encoding:'Encoding',target:'টার্গেট',targetNotSet:'<সেট নেই>',targetNew:'নতুন উইন্ডো (_blank)',targetTop:'শীর্ষ উইন্ডো (_top)',targetSelf:'এই উইন্ডো (_self)',targetParent:'মূল উইন্ডো (_parent)'},select:{title:'বাছাই ফীল্ড প্রোপার্টি',selectInfo:'তথ্য',opAvail:'অন্যান্য বিকল্প',value:'ভ্যালু',size:'সাইজ',lines:'লাইন সমূহ',chkMulti:'একাধিক সিলেকশন এলাউ কর',opText:'টেক্সট',opValue:'ভ্যালু',btnAdd:'যুক্ত',btnModify:'বদলে দাও',btnUp:'উপর',btnDown:'নীচে',btnSetValue:'বাছাই করা ভ্যালু হিসেবে সেট কর',btnDelete:'ডিলীট'},textarea:{title:'টেক্সট এরিয়া প্রোপার্টি',cols:'কলাম',rows:'রো'},textfield:{title:'টেক্সট ফীল্ড প্রোপার্টি',name:'নাম',value:'ভ্যালু',charWidth:'ক্যারেক্টার প্রশস্ততা',maxChars:'সর্বাধিক ক্যারেক্টার',type:'টাইপ',typeText:'টেক্সট',typePass:'পাসওয়ার্ড'},hidden:{title:'গুপ্ত ফীল্ড প্রোপার্টি',name:'নাম',value:'ভ্যালু'},image:{title:'ছবির প্রোপার্টি',titleButton:'ছবি বাটন প্রোপার্টি',menu:'ছবির প্রোপার্টি',infoTab:'ছবির তথ্য',btnUpload:'ইহাকে সার্ভারে প্রেরন কর',url:'URL',upload:'আপলোড',alt:'বিকল্প টেক্সট',width:'প্রস্থ',height:'দৈর্ঘ্য',lockRatio:'অনুপাত লক কর',resetSize:'সাইজ পূর্বাবস্থায় ফিরিয়ে দাও',border:'বর্ডার',hSpace:'হরাইজন্টাল স্পেস',vSpace:'ভার্টিকেল স্পেস',align:'এলাইন',alignLeft:'বামে',alignAbsBottom:'Abs নীচে',alignAbsMiddle:'Abs উপর',alignBaseline:'মূল রেখা',alignBottom:'নীচে',alignMiddle:'মধ্য',alignRight:'ডানে',alignTextTop:'টেক্সট উপর',alignTop:'উপর',preview:'প্রীভিউ',alertUrl:'অনুগ্রহক করে ছবির URL টাইপ করুন',linkTab:'লিংক',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'ফ্লাশ প্রোপার্টি',propertiesTab:'Properties',title:'ফ্ল্যাশ প্রোপার্টি',chkPlay:'অটো প্লে',chkLoop:'লূপ',chkMenu:'ফ্ল্যাশ মেনু এনাবল কর',chkFull:'Allow Fullscreen',scale:'স্কেল',scaleAll:'সব দেখাও',scaleNoBorder:'কোনো বর্ডার নেই',scaleFit:'নিখুঁত ফিট',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'এলাইন',alignLeft:'বামে',alignAbsBottom:'Abs নীচে',alignAbsMiddle:'Abs উপর',alignBaseline:'মূল রেখা',alignBottom:'নীচে',alignMiddle:'মধ্য',alignRight:'ডানে',alignTextTop:'টেক্সট উপর',alignTop:'উপর',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'বেকগ্রাউন্ড রং',width:'প্রস্থ',height:'দৈর্ঘ্য',hSpace:'হরাইজন্টাল স্পেস',vSpace:'ভার্টিকেল স্পেস',validateSrc:'অনুগ্রহ করে URL লিংক টাইপ করুন',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'বানান চেক',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'শব্দকোষে নেই',changeTo:'এতে বদলাও',btnIgnore:'ইগনোর কর',btnIgnoreAll:'সব ইগনোর কর',btnReplace:'বদলে দাও',btnReplaceAll:'সব বদলে দাও',btnUndo:'আন্ডু',noSuggestions:'- কোন সাজেশন নেই -',progress:'বানান পরীক্ষা চলছে...',noMispell:'বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি',noChanges:'বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি',oneChange:'বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে',manyChanges:'বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে',ieSpellDownload:'বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?'},smiley:{toolbar:'স্মাইলী',title:'স্মাইলী যুক্ত কর'},elementsPath:{eleTitle:'%1 element'},numberedlist:'সাংখ্যিক লিস্টের লেবেল',bulletedlist:'বুলেট লিস্ট লেবেল',indent:'ইনডেন্ট বাড়াও',outdent:'ইনডেন্ট কমাও',justify:{left:'বা দিকে ঘেঁষা',center:'মাঝ বরাবর ঘেষা',right:'ডান দিকে ঘেঁষা',block:'ব্লক জাস্টিফাই'},blockquote:'Blockquote',clipboard:{title:'পেস্ট',cutError:'আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+X)।',copyError:'আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+C)।',pasteMsg:'অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'পেস্ট (শব্দ)',title:'পেস্ট (শব্দ)',advice:'অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন',ignoreFontFace:'ফন্ট ফেস ডেফিনেশন ইগনোর করুন',removeStyle:'স্টাইল ডেফিনেশন সরিয়ে দিন'},pasteText:{button:'সাদা টেক্সট হিসেবে পেস্ট কর',title:'সাদা টেক্সট হিসেবে পেস্ট কর'},templates:{button:'টেমপ্লেট',title:'কনটেন্ট টেমপ্লেট',insertOption:'Replace actual contents',selectPromptMsg:'অনুগ্রহ করে এডিটরে ওপেন করার জন্য টেমপ্লেট বাছাই করুন<br>(আসল কনটেন্ট হারিয়ে যাবে):',emptyListMsg:'(কোন টেমপ্লেট ডিফাইন করা নেই)'},showBlocks:'Show Blocks',stylesCombo:{label:'স্টাইল',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'ফন্ট ফরমেট',voiceLabel:'Format',panelTitle:'ফন্ট ফরমেট',panelVoiceLabel:'Select a paragraph format',tag_p:'সাধারণ',tag_pre:'ফর্মেটেড',tag_address:'ঠিকানা',tag_h1:'শীর্ষক ১',tag_h2:'শীর্ষক ২',tag_h3:'শীর্ষক ৩',tag_h4:'শীর্ষক ৪',tag_h5:'শীর্ষক ৫',tag_h6:'শীর্ষক ৬',tag_div:'শীর্ষক (DIV)'},font:{label:'ফন্ট',voiceLabel:'Font',panelTitle:'ফন্ট',panelVoiceLabel:'Select a font'},fontSize:{label:'সাইজ',voiceLabel:'Font Size',panelTitle:'সাইজ',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'টেক্স্ট রং',bgColorTitle:'বেকগ্রাউন্ড রং',auto:'অটোমেটিক',more:'আরও রং...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/bs.js b/lang/bs.js
new file mode 100644 (file)
index 0000000..cff5e69
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.bs={dir:'ltr',editorTitle:'Rich text editor, %1',source:'HTML kôd',newPage:'Novi dokument',save:'Snimi',preview:'Prikaži',cut:'Izreži',copy:'Kopiraj',paste:'Zalijepi',print:'Štampaj',underline:'Podvuci',bold:'Boldiraj',italic:'Ukosi',selectAll:'Selektuj sve',removeFormat:'Poništi format',strike:'Precrtaj',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Ubaci horizontalnu liniju',pagebreak:'Insert Page Break for Printing',unlink:'Izbriši link',undo:'Vrati',redo:'Ponovi',common:{browseServer:'Browse Server',url:'URL',protocol:'Protokol',upload:'Šalji',uploadSubmit:'Šalji na server',image:'Slika',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<nije podešeno>',id:'Id',name:'Naziv',langDir:'Smjer pisanja',langDirLtr:'S lijeva na desno (LTR)',langDirRtl:'S desna na lijevo (RTL)',langCode:'Jezièni kôd',longDescr:'Dugaèki opis URL-a',cssClass:'Klase CSS stilova',advisoryTitle:'Advisory title',cssStyle:'Stil',ok:'OK',cancel:'Odustani',generalTab:'General',advancedTab:'Naprednije',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Ubaci specijalni karater',title:'Izaberi specijalni karakter'},link:{toolbar:'Ubaci/Izmjeni link',menu:'Izmjeni link',title:'Link',info:'Link info',target:'Prozor',upload:'Šalji',advanced:'Naprednije',type:'Tip linka',toAnchor:'Sidro na ovoj stranici',toEmail:'E-Mail',target:'Prozor',targetNotSet:'<nije podešeno>',targetFrame:'<frejm>',targetPopup:'<popup prozor>',targetNew:'Novi prozor (_blank)',targetTop:'Najgornji prozor (_top)',targetSelf:'Isti prozor (_self)',targetParent:'Glavni prozor (_parent)',targetFrameName:'Target Frame Name',targetPopupName:'Naziv popup prozora',popupFeatures:'Moguænosti popup prozora',popupResizable:'Resizable',popupStatusBar:'Statusna traka',popupLocationBar:'Traka za lokaciju',popupToolbar:'Traka sa alatima',popupMenuBar:'Izborna traka',popupFullScreen:'Cijeli ekran (IE)',popupScrollBars:'Scroll traka',popupDependent:'Ovisno (Netscape)',popupWidth:'Širina',popupLeft:'Lijeva pozicija',popupHeight:'Visina',popupTop:'Gornja pozicija',id:'Id',langDir:'Smjer pisanja',langDirNotSet:'<nije podešeno>',langDirLTR:'S lijeva na desno (LTR)',langDirRTL:'S desna na lijevo (RTL)',acccessKey:'Pristupna tipka',name:'Naziv',langCode:'Smjer pisanja',tabIndex:'Tab indeks',advisoryTitle:'Advisory title',advisoryContentType:'Advisory vrsta sadržaja',cssClasses:'Klase CSS stilova',charset:'Linked Resource Charset',styles:'Stil',selectAnchor:'Izaberi sidro',anchorName:'Po nazivu sidra',anchorId:'Po Id-u elementa',emailAddress:'E-Mail Adresa',emailSubject:'Subjekt poruke',emailBody:'Poruka',noAnchors:'(Nema dostupnih sidra na stranici)',noUrl:'Molimo ukucajte URL link',noEmail:'Molimo ukucajte e-mail adresu'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name'},findAndReplace:{title:'Find and Replace',find:'Naði',replace:'Zamjeni',findWhat:'Naði šta:',replaceWith:'Zamjeni sa:',notFoundMsg:'Traženi tekst nije pronaðen.',matchCase:'Uporeðuj velika/mala slova',matchWord:'Uporeðuj samo cijelu rijeè',matchCyclic:'Match cyclic',replaceAll:'Zamjeni sve',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabela',title:'Svojstva tabele',menu:'Svojstva tabele',deleteTable:'Delete Table',rows:'Redova',columns:'Kolona',border:'Okvir',align:'Poravnanje',alignNotSet:'<Nije podešeno>',alignLeft:'Lijevo',alignCenter:'Centar',alignRight:'Desno',width:'Širina',widthPx:'piksela',widthPc:'posto',height:'Visina',cellSpace:'Razmak æelija',cellPad:'Uvod æelija',caption:'Naslov',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Briši æelije',merge:'Spoji æelije',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Briši redove'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Briši kolone'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding',target:'Prozor',targetNotSet:'<nije podešeno>',targetNew:'Novi prozor (_blank)',targetTop:'Najgornji prozor (_top)',targetSelf:'Isti prozor (_self)',targetParent:'Glavni prozor (_parent)'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Svojstva slike',titleButton:'Image Button Properties',menu:'Svojstva slike',infoTab:'Info slike',btnUpload:'Šalji na server',url:'URL',upload:'Šalji',alt:'Tekst na slici',width:'Širina',height:'Visina',lockRatio:'Zakljuèaj odnos',resetSize:'Resetuj dimenzije',border:'Okvir',hSpace:'HSpace',vSpace:'VSpace',align:'Poravnanje',alignLeft:'Lijevo',alignAbsBottom:'Abs dole',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignBottom:'Dno',alignMiddle:'Sredina',alignRight:'Desno',alignTextTop:'Vrh teksta',alignTop:'Vrh',preview:'Prikaz',alertUrl:'Molimo ukucajte URL od slike.',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Poravnanje',alignLeft:'Lijevo',alignAbsBottom:'Abs dole',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignBottom:'Dno',alignMiddle:'Sredina',alignRight:'Desno',alignTextTop:'Vrh teksta',alignTop:'Vrh',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Boja pozadine',width:'Širina',height:'Visina',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Molimo ukucajte URL link',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smješko',title:'Ubaci smješka'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Numerisana lista',bulletedlist:'Lista',indent:'Poveæaj uvod',outdent:'Smanji uvod',justify:{left:'Lijevo poravnanje',center:'Centralno poravnanje',right:'Desno poravnanje',block:'Puno poravnanje'},blockquote:'Blockquote',clipboard:{title:'Zalijepi',cutError:'Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl+X).',copyError:'Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl+C).',pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Zalijepi iz Word-a',title:'Zalijepi iz Word-a',advice:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.',ignoreFontFace:'Ignore Font Face definitions',removeStyle:'Remove Styles definitions'},pasteText:{button:'Zalijepi kao obièan tekst',title:'Zalijepi kao obièan tekst'},templates:{button:'Templates',title:'Content Templates',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stil',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Format',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font',panelVoiceLabel:'Select a font'},fontSize:{label:'Velièina',voiceLabel:'Font Size',panelTitle:'Velièina',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Boja teksta',bgColorTitle:'Boja pozadine',auto:'Automatska',more:'Više boja...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/ca.js b/lang/ca.js
new file mode 100644 (file)
index 0000000..7dbcc1b
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.ca={dir:'ltr',editorTitle:'Editor de text enriquit, %1',source:'Codi font',newPage:'Nova Pàgina',save:'Desa',preview:'Visualització prèvia',cut:'Retalla',copy:'Copia',paste:'Enganxa',print:'Imprimeix',underline:'Subratllat',bold:'Negreta',italic:'Cursiva',selectAll:'Selecciona-ho tot',removeFormat:'Elimina Format',strike:'Barrat',subscript:'Subíndex',superscript:'Superíndex',horizontalrule:'Insereix línia horitzontal',pagebreak:'Insereix salt de pàgina',unlink:"Elimina l'enllaç",undo:'Desfés',redo:'Refés',common:{browseServer:'Veure servidor',url:'URL',protocol:'Protocol',upload:'Puja',uploadSubmit:'Envia-la al servidor',image:'Imatge',flash:'Flash',form:'Formulari',checkbox:'Casella de verificació',radio:"Botó d'opció",textField:'Camp de text',textarea:'Àrea de text',hiddenField:'Camp ocult',button:'Botó',select:'Camp de selecció',imageButton:"Botó d'imatge",notSet:'<no definit>',id:'Id',name:'Nom',langDir:"Direcció de l'idioma",langDirLtr:"D'esquerra a dreta (LTR)",langDirRtl:'De dreta a esquerra (RTL)',langCode:"Codi d'idioma",longDescr:'Descripció llarga de la URL',cssClass:"Classes del full d'estil",advisoryTitle:'Títol consultiu',cssStyle:'Estil',ok:"D'acord",cancel:'Cancel·la',generalTab:'General',advancedTab:'Avançat',validateNumberFailed:'Aquest valor no és un número.',confirmNewPage:'Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?',confirmCancel:"Algunes opcions s'han canviat. Esteu segur que voleu tancar la finestra de diàleg?",unavailable:'%1<span class="cke_accessibility">, no disponible</span>'},specialChar:{toolbar:'Insereix caràcter especial',title:'Selecciona el caràcter especial'},link:{toolbar:'Insereix/Edita enllaç',menu:"Edita l'enllaç",title:'Enllaç',info:"Informació de l'enllaç",target:'Destí',upload:'Puja',advanced:'Avançat',type:"Tipus d'enllaç",toAnchor:'Àncora en aquesta pàgina',toEmail:'Correu electrònic',target:'Destí',targetNotSet:'<no definit>',targetFrame:'<marc>',targetPopup:'<finestra emergent>',targetNew:'Nova finestra (_blank)',targetTop:'Finestra Major (_top)',targetSelf:'Mateixa finestra (_self)',targetParent:'Finestra pare (_parent)',targetFrameName:'Nom del marc de destí',targetPopupName:'Nom finestra popup',popupFeatures:'Característiques finestra popup',popupResizable:'Redimensionable',popupStatusBar:"Barra d'estat",popupLocationBar:"Barra d'adreça",popupToolbar:"Barra d'eines",popupMenuBar:'Barra de menú',popupFullScreen:'Pantalla completa (IE)',popupScrollBars:"Barres d'scroll",popupDependent:'Depenent (Netscape)',popupWidth:'Amplada',popupLeft:'Posició esquerra',popupHeight:'Alçada',popupTop:'Posició dalt',id:'Id',langDir:"Direcció de l'idioma",langDirNotSet:'<no definit>',langDirLTR:"D'esquerra a dreta (LTR)",langDirRTL:'De dreta a esquerra (RTL)',acccessKey:"Clau d'accés",name:'Nom',langCode:"Direcció de l'idioma",tabIndex:'Index de Tab',advisoryTitle:'Títol consultiu',advisoryContentType:'Tipus de contingut consultiu',cssClasses:"Classes del full d'estil",charset:'Conjunt de caràcters font enllaçat',styles:'Estil',selectAnchor:'Selecciona una àncora',anchorName:"Per nom d'àncora",anchorId:"Per Id d'element",emailAddress:'Adreça de correu electrònic',emailSubject:'Assumpte del missatge',emailBody:'Cos del missatge',noAnchors:'(No hi ha àncores disponibles en aquest document)',noUrl:"Si us plau, escrigui l'enllaç URL",noEmail:"Si us plau, escrigui l'adreça correu electrònic"},anchor:{toolbar:'Insereix/Edita àncora',menu:"Propietats de l'àncora",title:"Propietats de l'àncora",name:"Nom de l'àncora",errorName:"Si us plau, escriviu el nom de l'ancora"},findAndReplace:{title:'Cerca i reemplaça',find:'Cerca',replace:'Reemplaça',findWhat:'Cerca:',replaceWith:'Remplaça amb:',notFoundMsg:"El text especificat no s'ha trobat.",matchCase:'Distingeix majúscules/minúscules',matchWord:'Només paraules completes',matchCyclic:'Match cyclic',replaceAll:'Reemplaça-ho tot',replaceSuccessMsg:'%1 ocurrència/es reemplaçada/es.'},table:{toolbar:'Taula',title:'Propietats de la taula',menu:'Propietats de la taula',deleteTable:'Suprimeix la taula',rows:'Files',columns:'Columnes',border:'Mida vora',align:'Alineació',alignNotSet:'<No Definit>',alignLeft:'Esquerra',alignCenter:'Centre',alignRight:'Dreta',width:'Amplada',widthPx:'píxels',widthPc:'percentatge',height:'Alçada',cellSpace:'Espaiat de cel·les',cellPad:'Encoixinament de cel·les',caption:'Títol',summary:'Resum',headers:'Capçaleres',headersNone:'Cap',headersColumn:'Primera columna',headersRow:'Primera fila',headersBoth:'Ambdues',invalidRows:'El nombre de files ha de ser un nombre major que 0.',invalidCols:'El nombre de columnes ha de ser un nombre major que 0.',invalidBorder:'El gruix de la vora ha de ser un nombre.',invalidWidth:"L'amplada de la taula  ha de ser un nombre.",invalidHeight:"L'alçada de la taula  ha de ser un nombre.",invalidCellSpacing:"L'espaiat de cel·la  ha de ser un nombre.",invalidCellPadding:"L'encoixinament de cel·la  ha de ser un nombre.",cell:{menu:'Cel·la',insertBefore:'Insereix cel·la abans de',insertAfter:'Insereix cel·la darrera',deleteCell:'Suprimeix les cel·les',merge:'Fusiona les cel·les',mergeRight:'Fusiona cap a la dreta',mergeDown:'Fusiona cap avall',splitHorizontal:'Divideix la cel·la horitzontalment',splitVertical:'Divideix la cel·la verticalment',title:'Propertiat de la cel·la',cellType:'Tipus de cel·la',rowSpan:'Expansió de files',colSpan:'Expansió de columnes',wordWrap:'Ajustar al contingut',hAlign:'Aliniació Horizontal',vAlign:'Aliniació Vertical',alignTop:'A dalt',alignMiddle:'Al mig',alignBottom:'A baix',alignBaseline:'A la línia base',bgColor:'Color de fons',borderColor:'Color de la vora',data:'Data',header:'Capçalera',yes:'Sí',no:'No',invalidWidth:"L'amplada de cel·la ha de ser un nombre.",invalidHeight:"L'alçada de cel·la ha de ser un nombre.",invalidRowSpan:"L'expansió de files ha de ser un nombre enter.",invalidColSpan:"L'expansió de columnes ha de ser un nombre enter."},row:{menu:'Fila',insertBefore:'Insereix fila abans de',insertAfter:'Insereix fila darrera',deleteRow:'Suprimeix una fila'},column:{menu:'Columna',insertBefore:'Insereix columna abans de',insertAfter:'Insereix columna darrera',deleteColumn:'Suprimeix una columna'}},button:{title:'Propietats del botó',text:'Text (Valor)',type:'Tipus',typeBtn:'Botó',typeSbm:'Transmet formulari',typeRst:'Reinicia formulari'},checkboxAndRadio:{checkboxTitle:'Propietats de la casella de verificació',radioTitle:"Propietats del botó d'opció",value:'Valor',selected:'Seleccionat'},form:{title:'Propietats del formulari',menu:'Propietats del formulari',action:'Acció',method:'Mètode',encoding:'Codificació',target:'Destí',targetNotSet:'<no definit>',targetNew:'Nova finestra (_blank)',targetTop:'Finestra Major (_top)',targetSelf:'Mateixa finestra (_self)',targetParent:'Finestra pare (_parent)'},select:{title:'Propietats del camp de selecció',selectInfo:'Info',opAvail:'Opcions disponibles',value:'Valor',size:'Mida',lines:'Línies',chkMulti:'Permet múltiples seleccions',opText:'Text',opValue:'Valor',btnAdd:'Afegeix',btnModify:'Modifica',btnUp:'Amunt',btnDown:'Avall',btnSetValue:'Selecciona per defecte',btnDelete:'Elimina'},textarea:{title:"Propietats de l'àrea de text",cols:'Columnes',rows:'Files'},textfield:{title:'Propietats del camp de text',name:'Nom',value:'Valor',charWidth:'Amplada',maxChars:'Nombre màxim de caràcters',type:'Tipus',typeText:'Text',typePass:'Contrasenya'},hidden:{title:'Propietats del camp ocult',name:'Nom',value:'Valor'},image:{title:'Propietats de la imatge',titleButton:"Propietats del botó d'imatge",menu:'Propietats de la imatge',infoTab:'Informació de la imatge',btnUpload:'Envia-la al servidor',url:'URL',upload:'Puja',alt:'Text alternatiu',width:'Amplada',height:'Alçada',lockRatio:'Bloqueja les proporcions',resetSize:'Restaura la mida',border:'Vora',hSpace:'Espaiat horit.',vSpace:'Espaiat vert.',align:'Alineació',alignLeft:"Ajusta a l'esquerra",alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignBottom:'Bottom',alignMiddle:'Middle',alignRight:'Ajusta a la dreta',alignTextTop:'Text Top',alignTop:'Top',preview:'Vista prèvia',alertUrl:'Si us plau, escriviu la URL de la imatge',linkTab:'Enllaç',button2Img:"Voleu transformar el botó d'imatge seleccionat en una simple imatge?",img2Button:"Voleu transformar la imatge seleccionada en un botó d'imatge?"},flash:{properties:'Propietats del Flash',propertiesTab:'Propietats',title:'Propietats del Flash',chkPlay:'Reprodució automàtica',chkLoop:'Bucle',chkMenu:'Habilita menú Flash',chkFull:'Permetre la pantalla completa',scale:'Escala',scaleAll:'Mostra-ho tot',scaleNoBorder:'Sense vores',scaleFit:'Mida exacta',access:'Accés a scripts',accessAlways:'Sempre',accessSameDomain:'El mateix domini',accessNever:'Mai',align:'Alineació',alignLeft:"Ajusta a l'esquerra",alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignBottom:'Bottom',alignMiddle:'Middle',alignRight:'Ajusta a la dreta',alignTextTop:'Text Top',alignTop:'Top',quality:'Qualitat',qualityBest:'La millor',qualityHigh:'Alta',qualityAutoHigh:'Alta automàtica',qualityMedium:'Mitjana',qualityAutoLow:'Baixa automàtica',qualityLow:'Baixa',windowModeWindow:'Finestra',windowModeOpaque:'Opaca',windowModeTransparent:'Transparent',windowMode:'Mode de la finestra',flashvars:'Variables de Flash',bgcolor:'Color de Fons',width:'Amplada',height:'Alçada',hSpace:'Espaiat horit.',vSpace:'Espaiat vert.',validateSrc:"Si us plau, escrigui l'enllaç URL",validateWidth:"L'amplada ha de ser un nombre.",validateHeight:"L'alçada ha de ser un nombre.",validateHSpace:"L'espaiat horitzonatal ha de ser un nombre.",validateVSpace:"L'espaiat vertical ha de ser un nombre."},spellCheck:{toolbar:"Revisa l'ortografia",title:"Comprova l'ortografia",notAvailable:'El servei no es troba disponible ara.',errorLoading:'Error carregant el servidor: %s.',notInDic:'No és al diccionari',changeTo:'Reemplaça amb',btnIgnore:'Ignora',btnIgnoreAll:'Ignora-les totes',btnReplace:'Canvia',btnReplaceAll:'Canvia-les totes',btnUndo:'Desfés',noSuggestions:'Cap suggeriment',progress:'Verificació ortogràfica en curs...',noMispell:'Verificació ortogràfica acabada: no hi ha cap paraula mal escrita',noChanges:"Verificació ortogràfica: no s'ha canviat cap paraula",oneChange:"Verificació ortogràfica: s'ha canviat una paraula",manyChanges:"Verificació ortogràfica: s'han canviat %1 paraules",ieSpellDownload:'Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?'},smiley:{toolbar:'Icona',title:'Insereix una icona'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Llista numerada',bulletedlist:'Llista de pics',indent:'Augmenta el sagnat',outdent:'Redueix el sagnat',justify:{left:"Alinia a l'esquerra",center:'Centrat',right:'Alinia a la dreta',block:'Justificat'},blockquote:'Bloc de cita',clipboard:{title:'Enganxa',cutError:'La seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).',copyError:'La seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).',pasteMsg:'Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.',securityMsg:"A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir al porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra."},pastefromword:{toolbar:'Enganxa des del Word',title:'Enganxa des del Word',advice:'Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.',ignoreFontFace:'Ignora definicions de font',removeStyle:"Elimina definicions d'estil"},pasteText:{button:'Enganxa com a text no formatat',title:'Enganxa com a text no formatat'},templates:{button:'Plantilles',title:'Contingut plantilles',insertOption:'Reemplaça el contingut actual',selectPromptMsg:"Si us plau, seleccioneu la plantilla per obrir a l'editor<br>(el contingut actual no serà enregistrat):",emptyListMsg:'(No hi ha plantilles definides)'},showBlocks:'Mostra els blocs',stylesCombo:{label:'Estil',voiceLabel:'Estils',panelVoiceLabel:'Seleccioneu un estil',panelTitle1:'Estils de bloc',panelTitle2:'Estils incrustats',panelTitle3:"Estils d'objecte"},format:{label:'Format',voiceLabel:'Format',panelTitle:'Format',panelVoiceLabel:'Seleccioneu un format de paràgraf',tag_p:'Normal',tag_pre:'Formatejat',tag_address:'Adreça',tag_h1:'Encapçalament 1',tag_h2:'Encapçalament 2',tag_h3:'Encapçalament 3',tag_h4:'Encapçalament 4',tag_h5:'Encapçalament 5',tag_h6:'Encapçalament 6',tag_div:'Normal (DIV)'},font:{label:'Tipus de lletra',voiceLabel:'Tipus de lletra',panelTitle:'Tipus de lletra',panelVoiceLabel:'Seleccioneu un tipus de lletra'},fontSize:{label:'Mida',voiceLabel:'Mida de la lletra',panelTitle:'Mida',panelVoiceLabel:'Seleccioneu una mida de lletra'},colorButton:{textColorTitle:'Color de Text',bgColorTitle:'Color de Fons',auto:'Automàtic',more:'Més colors...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:"Habilitat l'SCAYT",disable:'Deshabilita SCAYT',about:"Quant a l'SCAYT",toggle:"Commuta l'SCAYT",options:'Opcions',langs:'Idiomes',moreSuggestions:'Més suggerències',ignore:'Ignora',ignoreAll:"Ignora'ls tots",addWord:'Afegeix una paraula',emptyDic:"El nom del diccionari no hauria d'estar buit.",optionsTab:'Opcions',languagesTab:'Idiomes',dictionariesTab:'Diccionaris',aboutTab:'Quant a'},about:{title:'Quan al CKEditor',dlgTitle:'Quan al CKEditor',moreInfo:'Per informació sobre llicències visiteu el web:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximiza',fakeobjects:{anchor:'Àncora',flash:'Animació Flash',div:'Salt de pàgina',unknown:'Objecte desconegut'},resize:'Arrossegueu per redimensionar'};\r
diff --git a/lang/cs.js b/lang/cs.js
new file mode 100644 (file)
index 0000000..b9517b1
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.cs={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Zdroj',newPage:'Nová stránka',save:'Uložit',preview:'Náhled',cut:'Vyjmout',copy:'Kopírovat',paste:'Vložit',print:'Tisk',underline:'Podtržené',bold:'Tučné',italic:'Kurzíva',selectAll:'Vybrat vše',removeFormat:'Odstranit formátování',strike:'Přeškrtnuté',subscript:'Dolní index',superscript:'Horní index',horizontalrule:'Vložit vodorovnou linku',pagebreak:'Vložit konec stránky',unlink:'Odstranit odkaz',undo:'Zpět',redo:'Znovu',common:{browseServer:'Vybrat na serveru',url:'URL',protocol:'Protokol',upload:'Odeslat',uploadSubmit:'Odeslat na server',image:'Obrázek',flash:'Flash',form:'Formulář',checkbox:'Zaškrtávací políčko',radio:'Přepínač',textField:'Textové pole',textarea:'Textová oblast',hiddenField:'Skryté pole',button:'Tlačítko',select:'Seznam',imageButton:'Obrázkové tlačítko',notSet:'<nenastaveno>',id:'Id',name:'Jméno',langDir:'Orientace jazyka',langDirLtr:'Zleva do prava (LTR)',langDirRtl:'Zprava do leva (RTL)',langCode:'Kód jazyka',longDescr:'Dlouhý popis URL',cssClass:'Třída stylu',advisoryTitle:'Pomocný titulek',cssStyle:'Styl',ok:'OK',cancel:'Storno',generalTab:'Obecné',advancedTab:'Rozšířené',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Vložit speciální znaky',title:'Výběr speciálního znaku'},link:{toolbar:'Vložit/změnit odkaz',menu:'Změnit odkaz',title:'Odkaz',info:'Informace o odkazu',target:'Cíl',upload:'Odeslat',advanced:'Rozšířené',type:'Typ odkazu',toAnchor:'Kotva v této stránce',toEmail:'E-Mail',target:'Cíl',targetNotSet:'<nenastaveno>',targetFrame:'<rámec>',targetPopup:'<vyskakovací okno>',targetNew:'Nové okno (_blank)',targetTop:'Hlavní okno (_top)',targetSelf:'Stejné okno (_self)',targetParent:'Rodičovské okno (_parent)',targetFrameName:'Název cílového rámu',targetPopupName:'Název vyskakovacího okna',popupFeatures:'Vlastnosti vyskakovacího okna',popupResizable:'Resizable',popupStatusBar:'Stavový řádek',popupLocationBar:'Panel umístění',popupToolbar:'Panel nástrojů',popupMenuBar:'Panel nabídky',popupFullScreen:'Celá obrazovka (IE)',popupScrollBars:'Posuvníky',popupDependent:'Závislost (Netscape)',popupWidth:'Šířka',popupLeft:'Levý okraj',popupHeight:'Výška',popupTop:'Horní okraj',id:'Id',langDir:'Orientace jazyka',langDirNotSet:'<nenastaveno>',langDirLTR:'Zleva do prava (LTR)',langDirRTL:'Zprava do leva (RTL)',acccessKey:'Přístupový klíč',name:'Jméno',langCode:'Orientace jazyka',tabIndex:'Pořadí prvku',advisoryTitle:'Pomocný titulek',advisoryContentType:'Pomocný typ obsahu',cssClasses:'Třída stylu',charset:'Přiřazená znaková sada',styles:'Styl',selectAnchor:'Vybrat kotvu',anchorName:'Podle jména kotvy',anchorId:'Podle Id objektu',emailAddress:'E-Mailová adresa',emailSubject:'Předmět zprávy',emailBody:'Tělo zprávy',noAnchors:'(Ve stránce není definována žádná kotva!)',noUrl:'Zadejte prosím URL odkazu',noEmail:'Zadejte prosím e-mailovou adresu'},anchor:{toolbar:'Vložít/změnit záložku',menu:'Vlastnosti záložky',title:'Vlastnosti záložky',name:'Název záložky',errorName:'Zadejte prosím název záložky'},findAndReplace:{title:'Najít a nahradit',find:'Hledat',replace:'Nahradit',findWhat:'Co hledat:',replaceWith:'Čím nahradit:',notFoundMsg:'Hledaný text nebyl nalezen.',matchCase:'Rozlišovat velikost písma',matchWord:'Pouze celá slova',matchCyclic:'Match cyclic',replaceAll:'Nahradit vše',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabulka',title:'Vlastnosti tabulky',menu:'Vlastnosti tabulky',deleteTable:'Smazat tabulku',rows:'Řádky',columns:'Sloupce',border:'Ohraničení',align:'Zarovnání',alignNotSet:'<nenastaveno>',alignLeft:'Vlevo',alignCenter:'Na střed',alignRight:'Vpravo',width:'Šířka',widthPx:'bodů',widthPc:'procent',height:'Výška',cellSpace:'Vzdálenost buněk',cellPad:'Odsazení obsahu',caption:'Popis',summary:'Souhrn',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Buňka',insertBefore:'Vložit buňku před',insertAfter:'Vložit buňku za',deleteCell:'Smazat buňky',merge:'Sloučit buňky',mergeRight:'Sloučit doprava',mergeDown:'Sloučit dolů',splitHorizontal:'Rozdělit buňky vodorovně',splitVertical:'Rozdělit buňky svisle',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Řádek',insertBefore:'Vložit řádek před',insertAfter:'Vložit řádek za',deleteRow:'Smazat řádky'},column:{menu:'Sloupec',insertBefore:'Vložit sloupec před',insertAfter:'Vložit sloupec za',deleteColumn:'Smazat sloupec'}},button:{title:'Vlastnosti tlačítka',text:'Popisek',type:'Typ',typeBtn:'Tlačítko',typeSbm:'Odeslat',typeRst:'Obnovit'},checkboxAndRadio:{checkboxTitle:'Vlastnosti zaškrtávacího políčka',radioTitle:'Vlastnosti přepínače',value:'Hodnota',selected:'Zaškrtnuto'},form:{title:'Vlastnosti formuláře',menu:'Vlastnosti formuláře',action:'Akce',method:'Metoda',encoding:'Encoding',target:'Cíl',targetNotSet:'<nenastaveno>',targetNew:'Nové okno (_blank)',targetTop:'Hlavní okno (_top)',targetSelf:'Stejné okno (_self)',targetParent:'Rodičovské okno (_parent)'},select:{title:'Vlastnosti seznamu',selectInfo:'Info',opAvail:'Dostupná nastavení',value:'Hodnota',size:'Velikost',lines:'Řádků',chkMulti:'Povolit mnohonásobné výběry',opText:'Text',opValue:'Hodnota',btnAdd:'Přidat',btnModify:'Změnit',btnUp:'Nahoru',btnDown:'Dolů',btnSetValue:'Nastavit jako vybranou hodnotu',btnDelete:'Smazat'},textarea:{title:'Vlastnosti textové oblasti',cols:'Sloupců',rows:'Řádků'},textfield:{title:'Vlastnosti textového pole',name:'Název',value:'Hodnota',charWidth:'Šířka ve znacích',maxChars:'Maximální počet znaků',type:'Typ',typeText:'Text',typePass:'Heslo'},hidden:{title:'Vlastnosti skrytého pole',name:'Název',value:'Hodnota'},image:{title:'Vlastnosti obrázku',titleButton:'Vlastností obrázkového tlačítka',menu:'Vlastnosti obrázku',infoTab:'Informace o obrázku',btnUpload:'Odeslat na server',url:'URL',upload:'Odeslat',alt:'Alternativní text',width:'Šířka',height:'Výška',lockRatio:'Zámek',resetSize:'Původní velikost',border:'Okraje',hSpace:'H-mezera',vSpace:'V-mezera',align:'Zarovnání',alignLeft:'Vlevo',alignAbsBottom:'Zcela dolů',alignAbsMiddle:'Doprostřed',alignBaseline:'Na účaří',alignBottom:'Dolů',alignMiddle:'Na střed',alignRight:'Vpravo',alignTextTop:'Na horní okraj textu',alignTop:'Nahoru',preview:'Náhled',alertUrl:'Zadejte prosím URL obrázku',linkTab:'Odkaz',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Vlastnosti Flashe',propertiesTab:'Properties',title:'Vlastnosti Flashe',chkPlay:'Automatické spuštění',chkLoop:'Opakování',chkMenu:'Nabídka Flash',chkFull:'Allow Fullscreen',scale:'Zobrazit',scaleAll:'Zobrazit vše',scaleNoBorder:'Bez okraje',scaleFit:'Přizpůsobit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Zarovnání',alignLeft:'Vlevo',alignAbsBottom:'Zcela dolů',alignAbsMiddle:'Doprostřed',alignBaseline:'Na účaří',alignBottom:'Dolů',alignMiddle:'Na střed',alignRight:'Vpravo',alignTextTop:'Na horní okraj textu',alignTop:'Nahoru',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Barva pozadí',width:'Šířka',height:'Výška',hSpace:'H-mezera',vSpace:'V-mezera',validateSrc:'Zadejte prosím URL odkazu',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Zkontrolovat pravopis',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Není ve slovníku',changeTo:'Změnit na',btnIgnore:'Přeskočit',btnIgnoreAll:'Přeskakovat vše',btnReplace:'Zaměnit',btnReplaceAll:'Zaměňovat vše',btnUndo:'Zpět',noSuggestions:'- žádné návrhy -',progress:'Probíhá kontrola pravopisu...',noMispell:'Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny',noChanges:'Kontrola pravopisu dokončena: Beze změn',oneChange:'Kontrola pravopisu dokončena: Jedno slovo změněno',manyChanges:'Kontrola pravopisu dokončena: %1 slov změněno',ieSpellDownload:'Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?'},smiley:{toolbar:'Smajlíky',title:'Vkládání smajlíků'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Číslování',bulletedlist:'Odrážky',indent:'Zvětšit odsazení',outdent:'Zmenšit odsazení',justify:{left:'Zarovnat vlevo',center:'Zarovnat na střed',right:'Zarovnat vpravo',block:'Zarovnat do bloku'},blockquote:'Citace',clipboard:{title:'Vložit',cutError:'Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl+X).',copyError:'Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl+C).',pasteMsg:'Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.',securityMsg:'Z důvodů nastavení bezpečnosti Vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.'},pastefromword:{toolbar:'Vložit z Wordu',title:'Vložit z Wordu',advice:'Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.',ignoreFontFace:'Ignorovat písmo',removeStyle:'Odstranit styly'},pasteText:{button:'Vložit jako čistý text',title:'Vložit jako čistý text'},templates:{button:'Šablony',title:'Šablony obsahu',insertOption:'Nahradit aktuální obsah',selectPromptMsg:'Prosím zvolte šablonu pro otevření v editoru<br>(aktuální obsah editoru bude ztracen):',emptyListMsg:'(Není definována žádná šablona)'},showBlocks:'Ukázat bloky',stylesCombo:{label:'Styl',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formát',voiceLabel:'Format',panelTitle:'Formát',panelVoiceLabel:'Select a paragraph format',tag_p:'Normální',tag_pre:'Naformátováno',tag_address:'Adresa',tag_h1:'Nadpis 1',tag_h2:'Nadpis 2',tag_h3:'Nadpis 3',tag_h4:'Nadpis 4',tag_h5:'Nadpis 5',tag_h6:'Nadpis 6',tag_div:'Normální (DIV)'},font:{label:'Písmo',voiceLabel:'Font',panelTitle:'Písmo',panelVoiceLabel:'Select a font'},fontSize:{label:'Velikost',voiceLabel:'Font Size',panelTitle:'Velikost',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Barva textu',bgColorTitle:'Barva pozadí',auto:'Automaticky',more:'Více barev...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/da.js b/lang/da.js
new file mode 100644 (file)
index 0000000..63ceebe
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.da={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Kilde',newPage:'Ny side',save:'Gem',preview:'Vis eksempel',cut:'Klip',copy:'Kopier',paste:'Indsæt',print:'Udskriv',underline:'Understreget',bold:'Fed',italic:'Kursiv',selectAll:'Vælg alt',removeFormat:'Fjern formatering',strike:'Overstreget',subscript:'Sænket skrift',superscript:'Hævet skrift',horizontalrule:'Indsæt vandret linie',pagebreak:'Indsæt sideskift',unlink:'Fjern hyperlink',undo:'Fortryd',redo:'Annuller fortryd',common:{browseServer:'Gennemse...',url:'URL',protocol:'Protokol',upload:'Upload',uploadSubmit:'Upload',image:'Indsæt billede',flash:'Flash',form:'Indsæt formular',checkbox:'Indsæt afkrydsningsfelt',radio:'Indsæt alternativknap',textField:'Indsæt tekstfelt',textarea:'Indsæt tekstboks',hiddenField:'Indsæt skjult felt',button:'Indsæt knap',select:'Indsæt liste',imageButton:'Indsæt billedknap',notSet:'<intet valgt>',id:'Id',name:'Navn',langDir:'Tekstretning',langDirLtr:'Fra venstre mod højre (LTR)',langDirRtl:'Fra højre mod venstre (RTL)',langCode:'Sprogkode',longDescr:'Udvidet beskrivelse',cssClass:'Typografiark',advisoryTitle:'Titel',cssStyle:'Typografi',ok:'OK',cancel:'Annuller',generalTab:'Generelt',advancedTab:'Avanceret',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Indsæt symbol',title:'Vælg symbol'},link:{toolbar:'Indsæt/rediger hyperlink',menu:'Rediger hyperlink',title:'Egenskaber for hyperlink',info:'Generelt',target:'Mål',upload:'Upload',advanced:'Avanceret',type:'Hyperlink type',toAnchor:'Bogmærke på denne side',toEmail:'E-mail',target:'Mål',targetNotSet:'<intet valgt>',targetFrame:'<ramme>',targetPopup:'<popup vindue>',targetNew:'Nyt vindue (_blank)',targetTop:'Hele vinduet (_top)',targetSelf:'Samme vindue (_self)',targetParent:'Overordnet ramme (_parent)',targetFrameName:'Destinationsvinduets navn',targetPopupName:'Pop-up vinduets navn',popupFeatures:'Egenskaber for pop-up',popupResizable:'Resizable',popupStatusBar:'Statuslinje',popupLocationBar:'Adresselinje',popupToolbar:'Værktøjslinje',popupMenuBar:'Menulinje',popupFullScreen:'Fuld skærm (IE)',popupScrollBars:'Scrollbars',popupDependent:'Koblet/dependent (Netscape)',popupWidth:'Bredde',popupLeft:'Position fra venstre',popupHeight:'Højde',popupTop:'Position fra toppen',id:'Id',langDir:'Tekstretning',langDirNotSet:'<intet valgt>',langDirLTR:'Fra venstre mod højre (LTR)',langDirRTL:'Fra højre mod venstre (RTL)',acccessKey:'Genvejstast',name:'Navn',langCode:'Tekstretning',tabIndex:'Tabulator indeks',advisoryTitle:'Titel',advisoryContentType:'Indholdstype',cssClasses:'Typografiark',charset:'Tegnsæt',styles:'Typografi',selectAnchor:'Vælg et anker',anchorName:'Efter anker navn',anchorId:'Efter element Id',emailAddress:'E-mailadresse',emailSubject:'Emne',emailBody:'Brødtekst',noAnchors:'(Ingen bogmærker dokumentet)',noUrl:'Indtast hyperlink URL!',noEmail:'Indtast e-mailaddresse!'},anchor:{toolbar:'Indsæt/rediger bogmærke',menu:'Egenskaber for bogmærke',title:'Egenskaber for bogmærke',name:'Bogmærke navn',errorName:'Indtast bogmærke navn!'},findAndReplace:{title:'Søg og erstat',find:'Søg',replace:'Erstat',findWhat:'Søg efter:',replaceWith:'Erstat med:',notFoundMsg:'Søgeteksten blev ikke fundet!',matchCase:'Forskel på store og små bogstaver',matchWord:'Kun hele ord',matchCyclic:'Match cyclic',replaceAll:'Erstat alle',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Egenskaber for tabel',menu:'Egenskaber for tabel',deleteTable:'Slet tabel',rows:'Rækker',columns:'Kolonner',border:'Rammebredde',align:'Justering',alignNotSet:'<intet valgt>',alignLeft:'Venstrestillet',alignCenter:'Centreret',alignRight:'Højrestillet',width:'Bredde',widthPx:'pixels',widthPc:'procent',height:'Højde',cellSpace:'Celleafstand',cellPad:'Cellemargen',caption:'Titel',summary:'Resume',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Celle',insertBefore:'Indsæt celle før',insertAfter:'Indsæt celle efter',deleteCell:'Slet celle',merge:'Flet celler',mergeRight:'Flet til højre',mergeDown:'Flet nedad',splitHorizontal:'Del celle vandret',splitVertical:'Del celle lodret',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Række',insertBefore:'Indsæt række før',insertAfter:'Indsæt række efter',deleteRow:'Slet række'},column:{menu:'Kolonne',insertBefore:'Indsæt kolonne før',insertAfter:'Indsæt kolonne efter',deleteColumn:'Slet kolonne'}},button:{title:'Egenskaber for knap',text:'Tekst',type:'Type',typeBtn:'Knap',typeSbm:'Send',typeRst:'Nulstil'},checkboxAndRadio:{checkboxTitle:'Egenskaber for afkrydsningsfelt',radioTitle:'Egenskaber for alternativknap',value:'Værdi',selected:'Valgt'},form:{title:'Egenskaber for formular',menu:'Egenskaber for formular',action:'Handling',method:'Metod',encoding:'Encoding',target:'Mål',targetNotSet:'<intet valgt>',targetNew:'Nyt vindue (_blank)',targetTop:'Hele vinduet (_top)',targetSelf:'Samme vindue (_self)',targetParent:'Overordnet ramme (_parent)'},select:{title:'Egenskaber for liste',selectInfo:'Generelt',opAvail:'Valgmuligheder',value:'Værdi',size:'Størrelse',lines:'linier',chkMulti:'Tillad flere valg',opText:'Tekst',opValue:'Værdi',btnAdd:'Tilføj',btnModify:'Rediger',btnUp:'Op',btnDown:'Ned',btnSetValue:'Sæt som valgt',btnDelete:'Slet'},textarea:{title:'Egenskaber for tekstboks',cols:'Kolonner',rows:'Rækker'},textfield:{title:'Egenskaber for tekstfelt',name:'Navn',value:'Værdi',charWidth:'Bredde (tegn)',maxChars:'Max antal tegn',type:'Type',typeText:'Tekst',typePass:'Adgangskode'},hidden:{title:'Egenskaber for skjult felt',name:'Navn',value:'Værdi'},image:{title:'Egenskaber for billede',titleButton:'Egenskaber for billedknap',menu:'Egenskaber for billede',infoTab:'Generelt',btnUpload:'Upload',url:'URL',upload:'Upload',alt:'Alternativ tekst',width:'Bredde',height:'Højde',lockRatio:'Lås størrelsesforhold',resetSize:'Nulstil størrelse',border:'Ramme',hSpace:'HMargen',vSpace:'VMargen',align:'Justering',alignLeft:'Venstre',alignAbsBottom:'Absolut nederst',alignAbsMiddle:'Absolut centreret',alignBaseline:'Grundlinje',alignBottom:'Nederst',alignMiddle:'Centreret',alignRight:'Højre',alignTextTop:'Toppen af teksten',alignTop:'Øverst',preview:'Vis eksempel',alertUrl:'Indtast stien til billedet',linkTab:'Hyperlink',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Egenskaber for Flash',propertiesTab:'Properties',title:'Egenskaber for Flash',chkPlay:'Automatisk afspilning',chkLoop:'Gentagelse',chkMenu:'Vis Flash menu',chkFull:'Allow Fullscreen',scale:'Skalér',scaleAll:'Vis alt',scaleNoBorder:'Ingen ramme',scaleFit:'Tilpas størrelse',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Justering',alignLeft:'Venstre',alignAbsBottom:'Absolut nederst',alignAbsMiddle:'Absolut centreret',alignBaseline:'Grundlinje',alignBottom:'Nederst',alignMiddle:'Centreret',alignRight:'Højre',alignTextTop:'Toppen af teksten',alignTop:'Øverst',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Baggrundsfarve',width:'Bredde',height:'Højde',hSpace:'HMargen',vSpace:'VMargen',validateSrc:'Indtast hyperlink URL!',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Stavekontrol',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ikke i ordbogen',changeTo:'Forslag',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer alle',btnReplace:'Erstat',btnReplaceAll:'Erstat alle',btnUndo:'Tilbage',noSuggestions:'- ingen forslag -',progress:'Stavekontrolen arbejder...',noMispell:'Stavekontrol færdig: Ingen fejl fundet',noChanges:'Stavekontrol færdig: Ingen ord ændret',oneChange:'Stavekontrol færdig: Et ord ændret',manyChanges:'Stavekontrol færdig: %1 ord ændret',ieSpellDownload:'Stavekontrol ikke installeret.<br>Vil du hente den nu?'},smiley:{toolbar:'Smiley',title:'Vælg smiley'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Talopstilling',bulletedlist:'Punktopstilling',indent:'Forøg indrykning',outdent:'Formindsk indrykning',justify:{left:'Venstrestillet',center:'Centreret',right:'Højrestillet',block:'Lige margener'},blockquote:'Blokcitat',clipboard:{title:'Indsæt',cutError:'Din browsers sikkerhedsindstillinger tillader ikke editoren at klippe tekst automatisk!<br>Brug i stedet tastaturet til at klippe teksten (Ctrl+X).',copyError:'Din browsers sikkerhedsindstillinger tillader ikke editoren at kopiere tekst automatisk!<br>Brug i stedet tastaturet til at kopiere teksten (Ctrl+C).',pasteMsg:'Indsæt i feltet herunder (<STRONG>Ctrl+V</STRONG>) og klik <STRONG>OK</STRONG>.',securityMsg:'På grund af browserens sikkerhedsindstillinger kan editoren ikke tilgå udklipsholderen direkte. Du skal indsætte udklipsholderens indhold i dette vindue igen.'},pastefromword:{toolbar:'Indsæt fra Word',title:'Indsæt fra Word',advice:'Indsæt i feltet herunder (<STRONG>Ctrl+V</STRONG>) og klik <STRONG>OK</STRONG>.',ignoreFontFace:'Ignorer font definitioner',removeStyle:'Ignorer typografi'},pasteText:{button:'Indsæt som ikke-formateret tekst',title:'Indsæt som ikke-formateret tekst'},templates:{button:'Skabeloner',title:'Indholdsskabeloner',insertOption:'Erstat det faktiske indhold',selectPromptMsg:'Vælg den skabelon, som skal åbnes i editoren.<br>(Nuværende indhold vil blive overskrevet!):',emptyListMsg:'(Der er ikke defineret nogen skabelon!)'},showBlocks:'Show Blocks',stylesCombo:{label:'Typografi',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formatering',voiceLabel:'Format',panelTitle:'Formatering',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formateret',tag_address:'Adresse',tag_h1:'Overskrift 1',tag_h2:'Overskrift 2',tag_h3:'Overskrift 3',tag_h4:'Overskrift 4',tag_h5:'Overskrift 5',tag_h6:'Overskrift 6',tag_div:'Normal (DIV)'},font:{label:'Skrifttype',voiceLabel:'Font',panelTitle:'Skrifttype',panelVoiceLabel:'Select a font'},fontSize:{label:'Skriftstørrelse',voiceLabel:'Font Size',panelTitle:'Skriftstørrelse',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Tekstfarve',bgColorTitle:'Baggrundsfarve',auto:'Automatisk',more:'Flere farver...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/de.js b/lang/de.js
new file mode 100644 (file)
index 0000000..21b6b06
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.de={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Quellcode',newPage:'Neue Seite',save:'Speichern',preview:'Vorschau',cut:'Ausschneiden',copy:'Kopieren',paste:'Einfügen',print:'Drucken',underline:'Unterstrichen',bold:'Fett',italic:'Kursiv',selectAll:'Alles auswählen',removeFormat:'Formatierungen entfernen',strike:'Durchgestrichen',subscript:'Tiefgestellt',superscript:'Hochgestellt',horizontalrule:'Horizontale Linie einfügen',pagebreak:'Seitenumbruch einfügen',unlink:'Link entfernen',undo:'Rückgängig',redo:'Wiederherstellen',common:{browseServer:'Server durchsuchen',url:'URL',protocol:'Protokoll',upload:'Upload',uploadSubmit:'Zum Server senden',image:'Bild',flash:'Flash',form:'Formular',checkbox:'Checkbox',radio:'Radiobutton',textField:'Textfeld einzeilig',textarea:'Textfeld mehrzeilig',hiddenField:'verstecktes Feld',button:'Klickbutton',select:'Auswahlfeld',imageButton:'Bildbutton',notSet:'<nichts>',id:'ID',name:'Name',langDir:'Schreibrichtung',langDirLtr:'Links nach Rechts (LTR)',langDirRtl:'Rechts nach Links (RTL)',langCode:'Sprachenkürzel',longDescr:'Langform URL',cssClass:'Stylesheet Klasse',advisoryTitle:'Titel Beschreibung',cssStyle:'Style',ok:'OK',cancel:'Abbrechen',generalTab:'Allgemein',advancedTab:'Erweitert',validateNumberFailed:'Dieser Wert ist keine Nummer.',confirmNewPage:'Alle nicht gespeicherten Änderungen gehen verlohren. Sind sie sicher die neue Seite zu laden?',confirmCancel:'Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?',unavailable:'%1<span class="cke_accessibility">, nicht verfügbar</span>'},specialChar:{toolbar:'Sonderzeichen einfügen/editieren',title:'Sonderzeichen auswählen'},link:{toolbar:'Link einfügen/editieren',menu:'Link editieren',title:'Link',info:'Link-Info',target:'Zielseite',upload:'Upload',advanced:'Erweitert',type:'Link-Typ',toAnchor:'Anker in dieser Seite',toEmail:'E-Mail',target:'Zielseite',targetNotSet:'<nichts>',targetFrame:'<Frame>',targetPopup:'<Pop-up Fenster>',targetNew:'Neues Fenster (_blank)',targetTop:'Oberstes Fenster (_top)',targetSelf:'Gleiches Fenster (_self)',targetParent:'Oberes Fenster (_parent)',targetFrameName:'Ziel-Fenster-Name',targetPopupName:'Pop-up Fenster-Name',popupFeatures:'Pop-up Fenster-Eigenschaften',popupResizable:'Größe änderbar',popupStatusBar:'Statusleiste',popupLocationBar:'Adress-Leiste',popupToolbar:'Werkzeugleiste',popupMenuBar:'Menü-Leiste',popupFullScreen:'Vollbild (IE)',popupScrollBars:'Rollbalken',popupDependent:'Abhängig (Netscape)',popupWidth:'Breite',popupLeft:'Linke Position',popupHeight:'Höhe',popupTop:'Obere Position',id:'Id',langDir:'Schreibrichtung',langDirNotSet:'<nichts>',langDirLTR:'Links nach Rechts (LTR)',langDirRTL:'Rechts nach Links (RTL)',acccessKey:'Zugriffstaste',name:'Name',langCode:'Schreibrichtung',tabIndex:'Tab-Index',advisoryTitle:'Titel Beschreibung',advisoryContentType:'Inhaltstyp',cssClasses:'Stylesheet Klasse',charset:'Ziel-Zeichensatz',styles:'Style',selectAnchor:'Anker auswählen',anchorName:'nach Anker Name',anchorId:'nach Element Id',emailAddress:'E-Mail Addresse',emailSubject:'Betreffzeile',emailBody:'Nachrichtentext',noAnchors:'(keine Anker im Dokument vorhanden)',noUrl:'Bitte geben Sie die Link-URL an',noEmail:'Bitte geben Sie e-Mail Adresse an'},anchor:{toolbar:'Anker einfügen/editieren',menu:'Anker-Eigenschaften',title:'Anker-Eigenschaften',name:'Anker Name',errorName:'Bitte geben Sie den Namen des Ankers ein'},findAndReplace:{title:'Suchen und Ersetzen',find:'Suchen',replace:'Ersetzen',findWhat:'Suche nach:',replaceWith:'Ersetze mit:',notFoundMsg:'Der gesuchte Text wurde nicht gefunden.',matchCase:'Groß-Kleinschreibung beachten',matchWord:'Nur ganze Worte suchen',matchCyclic:'zyklische suche',replaceAll:'Alle Ersetzen',replaceSuccessMsg:'%1 vorkommen ersetzt.'},table:{toolbar:'Tabelle',title:'Tabellen-Eigenschaften',menu:'Tabellen-Eigenschaften',deleteTable:'Tabelle löschen',rows:'Zeile',columns:'Spalte',border:'Rahmen',align:'Ausrichtung',alignNotSet:'<keine>',alignLeft:'Links',alignCenter:'Zentriert',alignRight:'Rechts',width:'Breite',widthPx:'Pixel',widthPc:'%',height:'Höhe',cellSpace:'Zellenabstand außen',cellPad:'Zellenabstand innen',caption:'Überschrift',summary:'Inhaltsübersicht',headers:'Überschriften',headersNone:'keine',headersColumn:'Erste Spalte',headersRow:'Erste Zeile',headersBoth:'keine',invalidRows:'Die Anzahl der Zeilen muß größer als 0 sein.',invalidCols:'Die Anzahl der Spalten muß größer als 0 sein..',invalidBorder:'Die Rahmenbreite muß eine Zahl sein.',invalidWidth:'Die Tabellenbreite muss eine Zahl sein.',invalidHeight:'Die Tabellenbreite muß eine Zahl sein.',invalidCellSpacing:'Der Zellenabstand außen muß eine Zahl sein.',invalidCellPadding:'Der Zellenabstand innen muß eine Zahl sein.',cell:{menu:'Zelle',insertBefore:'Zelle davor einfügen',insertAfter:'Zelle danach einfügen',deleteCell:'Zelle löschen',merge:'Zellen verbinden',mergeRight:'nach rechts verbinden',mergeDown:'nach unten verbinden',splitHorizontal:'Zelle horizontal teilen',splitVertical:'Zelle vertikal teilen',title:'Zellen Eigenschaften',cellType:'Zellart',rowSpan:'Anzahl Zeilen verbinden',colSpan:'Anzahl Spalten verbinden',wordWrap:'Zeilenumbruch',hAlign:'Horizontale Ausrichtung',vAlign:'Vertikale Ausrichtung',alignTop:'Oben',alignMiddle:'Mitte',alignBottom:'Unten',alignBaseline:'Grundlinie',bgColor:'Hintergrundfarbe',borderColor:'Rahmenfarbe',data:'Daten',header:'Überschrift',yes:'Ja',no:'Nein',invalidWidth:'Zellenbreite muß eine Zahl sein.',invalidHeight:'Zellenhöhe muß eine Zahl sein.',invalidRowSpan:'"Anzahl Zeilen verbinden" muss eine Ganzzahl sein.',invalidColSpan:'"Anzahl Spalten verbinden" muss eine Ganzzahl sein.'},row:{menu:'Zeile',insertBefore:'Zeile oberhalb einfügen',insertAfter:'Zeile unterhalb einfügen',deleteRow:'Zeile entfernen'},column:{menu:'Spalte',insertBefore:'Spalte links davor einfügen',insertAfter:'Spalte rechts danach einfügen',deleteColumn:'Spalte löschen'}},button:{title:'Button-Eigenschaften',text:'Text (Wert)',type:'Typ',typeBtn:'Button',typeSbm:'Absenden',typeRst:'Zurücksetzen'},checkboxAndRadio:{checkboxTitle:'Checkbox-Eigenschaften',radioTitle:'Optionsfeld-Eigenschaften',value:'Wert',selected:'ausgewählt'},form:{title:'Formular-Eigenschaften',menu:'Formular-Eigenschaften',action:'Action',method:'Method',encoding:'Zeichenkodierung',target:'Zielseite',targetNotSet:'<keins>',targetNew:'Neues Fenster (_blank)',targetTop:'Oberstes Fenster (_top)',targetSelf:'Gleiches Fenster (_self)',targetParent:'Oberes Fenster (_parent)'},select:{title:'Auswahlfeld-Eigenschaften',selectInfo:'Info',opAvail:'Mögliche Optionen',value:'Wert',size:'Größe',lines:'Linien',chkMulti:'Erlaube Mehrfachauswahl',opText:'Text',opValue:'Wert',btnAdd:'Hinzufügen',btnModify:'Ändern',btnUp:'Hoch',btnDown:'Runter',btnSetValue:'Setze als Standardwert',btnDelete:'Entfernen'},textarea:{title:'Textfeld (mehrzeilig) Eigenschaften',cols:'Spalten',rows:'Reihen'},textfield:{title:'Textfeld (einzeilig) Eigenschaften',name:'Name',value:'Wert',charWidth:'Zeichenbreite',maxChars:'Max. Zeichen',type:'Typ',typeText:'Text',typePass:'Passwort'},hidden:{title:'Verstecktes Feld-Eigenschaften',name:'Name',value:'Wert'},image:{title:'Bild-Eigenschaften',titleButton:'Bildbutton-Eigenschaften',menu:'Bild-Eigenschaften',infoTab:'Bild-Info',btnUpload:'Zum Server senden',url:'URL',upload:'Hochladen',alt:'Alternativer Text',width:'Breite',height:'Höhe',lockRatio:'Größenverhältnis beibehalten',resetSize:'Größe zurücksetzen',border:'Rahmen',hSpace:'Horizontal-Abstand',vSpace:'Vertikal-Abstand',align:'Ausrichtung',alignLeft:'Links',alignAbsBottom:'Abs Unten',alignAbsMiddle:'Abs Mitte',alignBaseline:'Baseline',alignBottom:'Unten',alignMiddle:'Mitte',alignRight:'Rechts',alignTextTop:'Text Oben',alignTop:'Oben',preview:'Vorschau',alertUrl:'Bitte geben Sie die Bild-URL an',linkTab:'Link',button2Img:'Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?',img2Button:'Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?'},flash:{properties:'Flash-Eigenschaften',propertiesTab:'Eigenschaften',title:'Flash-Eigenschaften',chkPlay:'autom. Abspielen',chkLoop:'Endlosschleife',chkMenu:'Flash-Menü aktivieren',chkFull:'Vollbildmodus erlauben',scale:'Skalierung',scaleAll:'Alles anzeigen',scaleNoBorder:'ohne Rand',scaleFit:'Passgenau',access:'Skript Zugang',accessAlways:'Immer',accessSameDomain:'Gleiche Domain',accessNever:'Nie',align:'Ausrichtung',alignLeft:'Links',alignAbsBottom:'Abs Unten',alignAbsMiddle:'Abs Mitte',alignBaseline:'Baseline',alignBottom:'Unten',alignMiddle:'Mitte',alignRight:'Rechts',alignTextTop:'Text Oben',alignTop:'Oben',quality:'Qualität',qualityBest:'Beste',qualityHigh:'Hoch',qualityAutoHigh:'Auto Hoch',qualityMedium:'Medium',qualityAutoLow:'Auto Niedrig',qualityLow:'Niedrig',windowModeWindow:'Fenster',windowModeOpaque:'Deckend',windowModeTransparent:'Transparent',windowMode:'Fenster Modus',flashvars:'Variablen für Flash',bgcolor:'Hintergrundfarbe',width:'Breite',height:'Höhe',hSpace:'Horizontal-Abstand',vSpace:'Vertikal-Abstand',validateSrc:'Bitte geben Sie die Link-URL an',validateWidth:'Breite muss eine Zahl sein.',validateHeight:'Höhe muss eine Zahl sein.',validateHSpace:'HSpace muss eine Zahl sein.',validateVSpace:'VSpace muss eine Zahl sein.'},spellCheck:{toolbar:'Rechtschreibprüfung',title:'Rechtschreibprüfung',notAvailable:'Entschuldigung, aber dieser Dienst steht im Moment nicht zur verfügung.',errorLoading:'Fehler beim laden des Dienstanbieters: %s.',notInDic:'Nicht im Wörterbuch',changeTo:'Ändern in',btnIgnore:'Ignorieren',btnIgnoreAll:'Alle Ignorieren',btnReplace:'Ersetzen',btnReplaceAll:'Alle Ersetzen',btnUndo:'Rückgängig',noSuggestions:' - keine Vorschläge - ',progress:'Rechtschreibprüfung läuft...',noMispell:'Rechtschreibprüfung abgeschlossen - keine Fehler gefunden',noChanges:'Rechtschreibprüfung abgeschlossen - keine Worte geändert',oneChange:'Rechtschreibprüfung abgeschlossen - ein Wort geändert',manyChanges:'Rechtschreibprüfung abgeschlossen - %1 Wörter geändert',ieSpellDownload:'Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?'},smiley:{toolbar:'Smiley',title:'Smiley auswählen'},elementsPath:{eleTitle:'%1 Element'},numberedlist:'Nummerierte Liste',bulletedlist:'Liste',indent:'Einzug erhöhen',outdent:'Einzug verringern',justify:{left:'Linksbündig',center:'Zentriert',right:'Rechtsbündig',block:'Blocksatz'},blockquote:'Zitatblock',clipboard:{title:'Einfügen',cutError:'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).',copyError:'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).',pasteMsg:'Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.',securityMsg:'Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.'},pastefromword:{toolbar:'aus MS-Word einfügen',title:'aus MS-Word einfügen',advice:'Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.',ignoreFontFace:'Ignoriere Schriftart-Definitionen',removeStyle:'Entferne Style-Definitionen'},pasteText:{button:'Als Text einfügen',title:'Als Text einfügen'},templates:{button:'Vorlagen',title:'Vorlagen',insertOption:'Aktuellen Inhalt ersetzen',selectPromptMsg:'Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):',emptyListMsg:'(keine Vorlagen definiert)'},showBlocks:'Blöcke anzeigen',stylesCombo:{label:'Stil',voiceLabel:'Stilarten',panelVoiceLabel:'Stilart auswahl',panelTitle1:'Block Stilart',panelTitle2:'Inline Stilart',panelTitle3:'Objekt Stilart'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Format',panelVoiceLabel:'Wählen Sie einen Absatzformat',tag_p:'Normal',tag_pre:'Formatiert',tag_address:'Addresse',tag_h1:'Überschrift 1',tag_h2:'Überschrift 2',tag_h3:'Überschrift 3',tag_h4:'Überschrift 4',tag_h5:'Überschrift 5',tag_h6:'Überschrift 6',tag_div:'Normal (DIV)'},font:{label:'Schriftart',voiceLabel:'Schriftart',panelTitle:'Schriftart',panelVoiceLabel:'Wählen Sie eine Schriftart'},fontSize:{label:'Größe',voiceLabel:'Schrifgröße',panelTitle:'Größe',panelVoiceLabel:'Wählen Sie eine Schriftgröße'},colorButton:{textColorTitle:'Textfarbe',bgColorTitle:'Hintergrundfarbe',auto:'Automatisch',more:'Weitere Farben...'},colors:{'000':'Schwarz',800000:'Kastanienbraun','8B4513':'Braun','2F4F4F':'Dunkles Schiefergrau','008080':'Blaugrün','000080':'Navy','4B0082':'Indigo',696969:'Dunkelgrau',B22222:'Ziegelrot',A52A2A:'Braun',DAA520:'Goldgelb','006400':'Dunkelgrün','40E0D0':'Türkis','0000CD':'Medium Blau',800080:'Lila',808080:'Grau',F00:'Rot',FF8C00:'Dunkelorange',FFD700:'Gold','008000':'Grün','0FF':'Cyan','00F':'Blau',EE82EE:'Hellviolett',A9A9A9:'Dunkelgrau',FFA07A:'Helles Lachsrosa',FFA500:'Orange',FFFF00:'Gelb','00FF00':'Lime',AFEEEE:'Blaß-Türkis',ADD8E6:'Hellblau',DDA0DD:'Pflaumenblau',D3D3D3:'Hellgrau',FFF0F5:'Lavendel',FAEBD7:'Antik Weiß',FFFFE0:'Hellgelb',F0FFF0:'Honigtau',F0FFFF:'Azurblau',F0F8FF:'Alice Blau',E6E6FA:'Lavendel',FFF:'Weiß'},scayt:{title:'Rechtschreibprüfung während der Texteingabe',enable:'SCAYT einschalten',disable:'SCAYT ausschalten',about:'Über SCAYT',toggle:'SCAYT umschalten',options:'Optionen',langs:'Sprachen',moreSuggestions:'Mehr Vorschläge',ignore:'Ignorieren',ignoreAll:'Alle ignorieren',addWord:'Wort hinzufügen',emptyDic:'Wörterbuchname sollte leer sein.',optionsTab:'Optionen',languagesTab:'Sprachen',dictionariesTab:'Wörterbücher',aboutTab:'Über'},about:{title:'Über CKEditor',dlgTitle:'Über CKEditor',moreInfo:'Für Informationen Liztenzbestimmungen besuchen sie bitte unsere Webseite:',copy:'Copyright &copy; $1. Alle Rechte vorbehalten.'},maximize:'Maximieren',fakeobjects:{anchor:'Anker',flash:'Flash Animation',div:'Seitenumbruch',unknown:'Unbekanntes Objekt'},resize:'Zum Vergrößern ziehen'};\r
diff --git a/lang/el.js b/lang/el.js
new file mode 100644 (file)
index 0000000..419a5a0
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.el={dir:'ltr',editorTitle:'Rich text editor, %1',source:'HTML κώδικας',newPage:'Νέα Σελίδα',save:'Αποθήκευση',preview:'Προεπισκόπιση',cut:'Αποκοπή',copy:'Αντιγραφή',paste:'Επικόλληση',print:'Εκτύπωση',underline:'Υπογράμμιση',bold:'Έντονα',italic:'Πλάγια',selectAll:'Επιλογή όλων',removeFormat:'Αφαίρεση Μορφοποίησης',strike:'Διαγράμμιση',subscript:'Δείκτης',superscript:'Εκθέτης',horizontalrule:'Εισαγωγή Οριζόντιας Γραμμής',pagebreak:'Εισαγωγή τέλους σελίδας',unlink:'Αφαίρεση Συνδέσμου (Link)',undo:'Αναίρεση',redo:'Επαναφορά',common:{browseServer:'Εξερεύνηση διακομιστή',url:'URL',protocol:'Προτόκολο',upload:'Αποστολή',uploadSubmit:'Αποστολή στον Διακομιστή',image:'Εικόνα',flash:'Εισαγωγή Flash',form:'Φόρμα',checkbox:'Κουτί επιλογής',radio:'Κουμπί Radio',textField:'Πεδίο κειμένου',textarea:'Περιοχή κειμένου',hiddenField:'Κρυφό πεδίο',button:'Κουμπί',select:'Πεδίο επιλογής',imageButton:'Κουμπί εικόνας',notSet:'<χωρίς>',id:'Id',name:'Όνομα',langDir:'Κατεύθυνση κειμένου',langDirLtr:'Αριστερά προς Δεξιά (LTR)',langDirRtl:'Δεξιά προς Αριστερά (RTL)',langCode:'Κωδικός Γλώσσας',longDescr:'Αναλυτική περιγραφή URL',cssClass:'Stylesheet Classes',advisoryTitle:'Συμβουλευτικός τίτλος',cssStyle:'Στύλ',ok:'OK',cancel:'Ακύρωση',generalTab:'General',advancedTab:'Για προχωρημένους',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Εισαγωγή Ειδικού Συμβόλου',title:'Επιλέξτε ένα Ειδικό Σύμβολο'},link:{toolbar:'Εισαγωγή/Μεταβολή Συνδέσμου (Link)',menu:'Μεταβολή Συνδέσμου (Link)',title:'Σύνδεσμος (Link)',info:'Link',target:'Παράθυρο Στόχος (Target)',upload:'Αποστολή',advanced:'Για προχωρημένους',type:'Τύπος συνδέσμου (Link)',toAnchor:'Άγκυρα σε αυτή τη σελίδα',toEmail:'E-Mail',target:'Παράθυρο Στόχος (Target)',targetNotSet:'<χωρίς>',targetFrame:'<πλαίσιο>',targetPopup:'<παράθυρο popup>',targetNew:'Νέο Παράθυρο (_blank)',targetTop:'Ανώτατο Παράθυρο (_top)',targetSelf:'Ίδιο Παράθυρο (_self)',targetParent:'Γονικό Παράθυρο (_parent)',targetFrameName:'Όνομα πλαισίου στόχου',targetPopupName:'Όνομα Popup Window',popupFeatures:'Επιλογές Popup Window',popupResizable:'Resizable',popupStatusBar:'Μπάρα Status',popupLocationBar:'Μπάρα Τοποθεσίας',popupToolbar:'Μπάρα Εργαλείων',popupMenuBar:'Μπάρα Menu',popupFullScreen:'Ολόκληρη η Οθόνη (IE)',popupScrollBars:'Μπάρες Κύλισης',popupDependent:'Dependent (Netscape)',popupWidth:'Πλάτος',popupLeft:'Τοποθεσία Αριστερής Άκρης',popupHeight:'Ύψος',popupTop:'Τοποθεσία Πάνω Άκρης',id:'Id',langDir:'Κατεύθυνση κειμένου',langDirNotSet:'<χωρίς>',langDirLTR:'Αριστερά προς Δεξιά (LTR)',langDirRTL:'Δεξιά προς Αριστερά (RTL)',acccessKey:'Συντόμευση (Access Key)',name:'Όνομα',langCode:'Κατεύθυνση κειμένου',tabIndex:'Tab Index',advisoryTitle:'Συμβουλευτικός τίτλος',advisoryContentType:'Συμβουλευτικός τίτλος περιεχομένου',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Στύλ',selectAnchor:'Επιλέξτε μια άγκυρα',anchorName:'Βάσει του Ονόματος (Name) της άγκυρας',anchorId:'Βάσει του Element Id',emailAddress:'Διεύθυνση Ηλεκτρονικού Ταχυδρομείου',emailSubject:'Θέμα Μηνύματος',emailBody:'Κείμενο Μηνύματος',noAnchors:'(Δεν υπάρχουν άγκυρες στο κείμενο)',noUrl:'Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)',noEmail:'Εισάγετε την διεύθυνση ηλεκτρονικού ταχυδρομείου'},anchor:{toolbar:'Εισαγωγή/επεξεργασία Anchor',menu:'Ιδιότητες άγκυρας',title:'Ιδιότητες άγκυρας',name:'Όνομα άγκυρας',errorName:'Παρακαλούμε εισάγετε όνομα άγκυρας'},findAndReplace:{title:'Find and Replace',find:'Αναζήτηση',replace:'Αντικατάσταση',findWhat:'Αναζήτηση:',replaceWith:'Αντικατάσταση με:',notFoundMsg:'Το κείμενο δεν βρέθηκε.',matchCase:'Έλεγχος πεζών/κεφαλαίων',matchWord:'Εύρεση πλήρους λέξης',matchCyclic:'Match cyclic',replaceAll:'Αντικατάσταση Όλων',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Πίνακας',title:'Ιδιότητες Πίνακα',menu:'Ιδιότητες Πίνακα',deleteTable:'Διαγραφή πίνακα',rows:'Γραμμές',columns:'Κολώνες',border:'Μέγεθος Περιθωρίου',align:'Στοίχιση',alignNotSet:'<χωρίς>',alignLeft:'Αριστερά',alignCenter:'Κέντρο',alignRight:'Δεξιά',width:'Πλάτος',widthPx:'pixels',widthPc:'%',height:'Ύψος',cellSpace:'Απόσταση κελιών',cellPad:'Γέμισμα κελιών',caption:'Υπέρτιτλος',summary:'Περίληψη',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Κελί',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Διαγραφή Κελιών',merge:'Ενοποίηση Κελιών',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Σειρά',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Διαγραφή Γραμμών'},column:{menu:'Στήλη',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Διαγραφή Κολωνών'}},button:{title:'Ιδιότητες κουμπιού',text:'Κείμενο (Τιμή)',type:'Τύπος',typeBtn:'Κουμπί',typeSbm:'Καταχώρηση',typeRst:'Επαναφορά'},checkboxAndRadio:{checkboxTitle:'Ιδιότητες κουμπιού επιλογής',radioTitle:'Ιδιότητες κουμπιού radio',value:'Τιμή',selected:'Επιλεγμένο'},form:{title:'Ιδιότητες φόρμας',menu:'Ιδιότητες φόρμας',action:'Δράση',method:'Μάθοδος',encoding:'Encoding',target:'Παράθυρο Στόχος (Target)',targetNotSet:'<χωρίς>',targetNew:'Νέο Παράθυρο (_blank)',targetTop:'Ανώτατο Παράθυρο (_top)',targetSelf:'Ίδιο Παράθυρο (_self)',targetParent:'Γονικό Παράθυρο (_parent)'},select:{title:'Ιδιότητες πεδίου επιλογής',selectInfo:'Πληροφορίες',opAvail:'Διαθέσιμες επιλογές',value:'Τιμή',size:'Μέγεθος',lines:'γραμμές',chkMulti:'Πολλαπλές επιλογές',opText:'Κείμενο',opValue:'Τιμή',btnAdd:'Προσθήκη',btnModify:'Αλλαγή',btnUp:'Πάνω',btnDown:'Κάτω',btnSetValue:'Προεπιλεγμένη επιλογή',btnDelete:'Διαγραφή'},textarea:{title:'Ιδιότητες περιοχής κειμένου',cols:'Στήλες',rows:'Σειρές'},textfield:{title:'Ιδιότητες πεδίου κειμένου',name:'Όνομα',value:'Τιμή',charWidth:'Μήκος χαρακτήρων',maxChars:'Μέγιστοι χαρακτήρες',type:'Τύπος',typeText:'Κείμενο',typePass:'Κωδικός'},hidden:{title:'Ιδιότητες κρυφού πεδίου',name:'Όνομα',value:'Τιμή'},image:{title:'Ιδιότητες Εικόνας',titleButton:'Ιδιότητες κουμπιού εικόνας',menu:'Ιδιότητες Εικόνας',infoTab:'Πληροφορίες Εικόνας',btnUpload:'Αποστολή στον Διακομιστή',url:'URL',upload:'Αποστολή',alt:'Εναλλακτικό Κείμενο (ALT)',width:'Πλάτος',height:'Ύψος',lockRatio:'Κλείδωμα Αναλογίας',resetSize:'Επαναφορά Αρχικού Μεγέθους',border:'Περιθώριο',hSpace:'Οριζόντιος Χώρος (HSpace)',vSpace:'Κάθετος Χώρος (VSpace)',align:'Ευθυγράμμιση (Align)',alignLeft:'Αριστερά',alignAbsBottom:'Απόλυτα Κάτω (Abs Bottom)',alignAbsMiddle:'Απόλυτα στη Μέση (Abs Middle)',alignBaseline:'Γραμμή Βάσης (Baseline)',alignBottom:'Κάτω (Bottom)',alignMiddle:'Μέση (Middle)',alignRight:'Δεξιά (Right)',alignTextTop:'Κορυφή Κειμένου (Text Top)',alignTop:'Πάνω (Top)',preview:'Προεπισκόπιση',alertUrl:'Εισάγετε την τοποθεσία (URL) της εικόνας',linkTab:'Σύνδεσμος',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Ιδιότητες Flash',propertiesTab:'Properties',title:'Ιδιότητες flash',chkPlay:'Αυτόματη έναρξη',chkLoop:'Επανάληψη',chkMenu:'Ενεργοποίηση Flash Menu',chkFull:'Allow Fullscreen',scale:'Κλίμακα',scaleAll:'Εμφάνιση όλων',scaleNoBorder:'Χωρίς όρια',scaleFit:'Ακριβής εφαρμογή',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Ευθυγράμμιση (Align)',alignLeft:'Αριστερά',alignAbsBottom:'Απόλυτα Κάτω (Abs Bottom)',alignAbsMiddle:'Απόλυτα στη Μέση (Abs Middle)',alignBaseline:'Γραμμή Βάσης (Baseline)',alignBottom:'Κάτω (Bottom)',alignMiddle:'Μέση (Middle)',alignRight:'Δεξιά (Right)',alignTextTop:'Κορυφή Κειμένου (Text Top)',alignTop:'Πάνω (Top)',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Χρώμα Υποβάθρου',width:'Πλάτος',height:'Ύψος',hSpace:'Οριζόντιος Χώρος (HSpace)',vSpace:'Κάθετος Χώρος (VSpace)',validateSrc:'Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Ορθογραφικός έλεγχος',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Δεν υπάρχει στο λεξικό',changeTo:'Αλλαγή σε',btnIgnore:'Αγνόηση',btnIgnoreAll:'Αγνόηση όλων',btnReplace:'Αντικατάσταση',btnReplaceAll:'Αντικατάσταση όλων',btnUndo:'Αναίρεση',noSuggestions:'- Δεν υπάρχουν προτάσεις -',progress:'Ορθογραφικός έλεγχος σε εξέλιξη...',noMispell:'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη',noChanges:'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις',oneChange:'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Μια λέξη άλλαξε',manyChanges:'Ο ορθογραφικός έλεγχος ολοκληρώθηκε: %1 λέξεις άλλαξαν',ieSpellDownload:'Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;'},smiley:{toolbar:'Smiley',title:'Επιλέξτε ένα Smiley'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Λίστα με Αριθμούς',bulletedlist:'Λίστα με Bullets',indent:'Αύξηση Εσοχής',outdent:'Μείωση Εσοχής',justify:{left:'Στοίχιση Αριστερά',center:'Στοίχιση στο Κέντρο',right:'Στοίχιση Δεξιά',block:'Πλήρης Στοίχιση (Block)'},blockquote:'Blockquote',clipboard:{title:'Επικόλληση',cutError:'Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+X).',copyError:'Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+C).',pasteMsg:'Παρακαλώ επικολήστε στο ακόλουθο κουτί χρησιμοποιόντας το πληκτρολόγιο (<STRONG>Ctrl+V</STRONG>) και πατήστε <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Επικόλληση από το Word',title:'Επικόλληση από το Word',advice:'Παρακαλώ επικολήστε στο ακόλουθο κουτί χρησιμοποιόντας το πληκτρολόγιο (<STRONG>Ctrl+V</STRONG>) και πατήστε <STRONG>OK</STRONG>.',ignoreFontFace:'Αγνόηση προδιαγραφών γραμματοσειράς',removeStyle:'Αφαίρεση προδιαγραφών στύλ'},pasteText:{button:'Επικόλληση ως Απλό Κείμενο',title:'Επικόλληση ως Απλό Κείμενο'},templates:{button:'Πρότυπα',title:'Πρότυπα περιεχομένου',insertOption:'Αντικατάσταση υπάρχοντων περιεχομένων',selectPromptMsg:'Παρακαλώ επιλέξτε πρότυπο για εισαγωγή στο πρόγραμμα<br>(τα υπάρχοντα περιεχόμενα θα χαθούν):',emptyListMsg:'(Δεν έχουν καθοριστεί πρότυπα)'},showBlocks:'Show Blocks',stylesCombo:{label:'Στυλ',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Μορφή Γραμματοσειράς',voiceLabel:'Format',panelTitle:'Μορφή Γραμματοσειράς',panelVoiceLabel:'Select a paragraph format',tag_p:'Κανονικό',tag_pre:'Μορφοποιημένο',tag_address:'Διεύθυνση',tag_h1:'Επικεφαλίδα 1',tag_h2:'Επικεφαλίδα 2',tag_h3:'Επικεφαλίδα 3',tag_h4:'Επικεφαλίδα 4',tag_h5:'Επικεφαλίδα 5',tag_h6:'Επικεφαλίδα 6',tag_div:'Normal (DIV)'},font:{label:'Γραμματοσειρά',voiceLabel:'Font',panelTitle:'Γραμματοσειρά',panelVoiceLabel:'Select a font'},fontSize:{label:'Μέγεθος',voiceLabel:'Font Size',panelTitle:'Μέγεθος',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Χρώμα Γραμμάτων',bgColorTitle:'Χρώμα Υποβάθρου',auto:'Αυτόματο',more:'Περισσότερα χρώματα...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/en-au.js b/lang/en-au.js
new file mode 100644 (file)
index 0000000..ff65095
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang['en-au']={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character'},link:{toolbar:'Link',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toAnchor:'Link to anchor in the text',toEmail:'E-mail',target:'Target',targetNotSet:'<not set>',targetFrame:'<frame>',targetPopup:'<popup window>',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupWidth:'Width',popupLeft:'Left Position',popupHeight:'Height',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirNotSet:'<not set>',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',align:'Alignment',alignNotSet:'<Not set>',alignLeft:'Left',alignCenter:'Centre',alignRight:'Right',width:'Width',widthPx:'pixels',widthPc:'percent',height:'Height',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding',target:'Target',targetNotSet:'<not set>',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',url:'URL',upload:'Upload',alt:'Alternative Text',width:'Width',height:'Height',lockRatio:'Lock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',align:'Align',alignLeft:'Left',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignBottom:'Bottom',alignMiddle:'Middle',alignRight:'Right',alignTextTop:'Text Top',alignTop:'Top',preview:'Preview',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Align',alignLeft:'Left',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignBottom:'Bottom',alignMiddle:'Middle',alignRight:'Right',alignTextTop:'Text Top',alignTop:'Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background colour',width:'Width',height:'Height',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Left Justify',center:'Centre Justify',right:'Right Justify',block:'Block Justify'},blockquote:'Blockquote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Paste from Word',title:'Paste from Word',advice:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.',ignoreFontFace:'Ignore Font Face definitions',removeStyle:'Remove Styles definitions'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Paragraph Format',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name',panelVoiceLabel:'Select a font'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Text Colour',bgColorTitle:'Background Colour',auto:'Automatic',more:'More Colours...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/en-ca.js b/lang/en-ca.js
new file mode 100644 (file)
index 0000000..cdf8f6f
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang['en-ca']={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character'},link:{toolbar:'Link',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toAnchor:'Link to anchor in the text',toEmail:'E-mail',target:'Target',targetNotSet:'<not set>',targetFrame:'<frame>',targetPopup:'<popup window>',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupWidth:'Width',popupLeft:'Left Position',popupHeight:'Height',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirNotSet:'<not set>',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',align:'Alignment',alignNotSet:'<Not set>',alignLeft:'Left',alignCenter:'Centre',alignRight:'Right',width:'Width',widthPx:'pixels',widthPc:'percent',height:'Height',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding',target:'Target',targetNotSet:'<not set>',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',url:'URL',upload:'Upload',alt:'Alternative Text',width:'Width',height:'Height',lockRatio:'Lock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',align:'Align',alignLeft:'Left',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignBottom:'Bottom',alignMiddle:'Middle',alignRight:'Right',alignTextTop:'Text Top',alignTop:'Top',preview:'Preview',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Align',alignLeft:'Left',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignBottom:'Bottom',alignMiddle:'Middle',alignRight:'Right',alignTextTop:'Text Top',alignTop:'Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background colour',width:'Width',height:'Height',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Left Justify',center:'Centre Justify',right:'Right Justify',block:'Block Justify'},blockquote:'Blockquote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Paste from Word',title:'Paste from Word',advice:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.',ignoreFontFace:'Ignore Font Face definitions',removeStyle:'Remove Styles definitions'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Paragraph Format',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name',panelVoiceLabel:'Select a font'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Text Colour',bgColorTitle:'Background Colour',auto:'Automatic',more:'More Colours...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/en-uk.js b/lang/en-uk.js
new file mode 100644 (file)
index 0000000..bf827a5
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang['en-uk']={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character'},link:{toolbar:'Link',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toAnchor:'Link to anchor in the text',toEmail:'E-mail',target:'Target',targetNotSet:'<not set>',targetFrame:'<frame>',targetPopup:'<popup window>',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupWidth:'Width',popupLeft:'Left Position',popupHeight:'Height',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirNotSet:'<not set>',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',align:'Alignment',alignNotSet:'<Not set>',alignLeft:'Left',alignCenter:'Centre',alignRight:'Right',width:'Width',widthPx:'pixels',widthPc:'percent',height:'Height',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding',target:'Target',targetNotSet:'<not set>',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',url:'URL',upload:'Upload',alt:'Alternative Text',width:'Width',height:'Height',lockRatio:'Lock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',align:'Align',alignLeft:'Left',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignBottom:'Bottom',alignMiddle:'Middle',alignRight:'Right',alignTextTop:'Text Top',alignTop:'Top',preview:'Preview',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Align',alignLeft:'Left',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignBottom:'Bottom',alignMiddle:'Middle',alignRight:'Right',alignTextTop:'Text Top',alignTop:'Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background colour',width:'Width',height:'Height',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Left Justify',center:'Centre Justify',right:'Right Justify',block:'Block Justify'},blockquote:'Blockquote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Paste from Word',title:'Paste from Word',advice:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.',ignoreFontFace:'Ignore Font Face definitions',removeStyle:'Remove Styles definitions'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Paragraph Format',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name',panelVoiceLabel:'Select a font'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Text Colour',bgColorTitle:'Background Colour',auto:'Automatic',more:'More Colours...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/en.js b/lang/en.js
new file mode 100644 (file)
index 0000000..2fc50f7
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.en={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Source',newPage:'New Page',save:'Save',preview:'Preview',cut:'Cut',copy:'Copy',paste:'Paste',print:'Print',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Select All',removeFormat:'Remove Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Insert Horizontal Line',pagebreak:'Insert Page Break for Printing',unlink:'Unlink',undo:'Undo',redo:'Redo',common:{browseServer:'Browse Server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Send it to the Server',image:'Image',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<not set>',id:'Id',name:'Name',langDir:'Language Direction',langDirLtr:'Left to Right (LTR)',langDirRtl:'Right to Left (RTL)',langCode:'Language Code',longDescr:'Long Description URL',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'OK',cancel:'Cancel',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Insert Special Character',title:'Select Special Character'},link:{toolbar:'Link',menu:'Edit Link',title:'Link',info:'Link Info',target:'Target',upload:'Upload',advanced:'Advanced',type:'Link Type',toAnchor:'Link to anchor in the text',toEmail:'E-mail',target:'Target',targetNotSet:'<not set>',targetFrame:'<frame>',targetPopup:'<popup window>',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)',targetFrameName:'Target Frame Name',targetPopupName:'Popup Window Name',popupFeatures:'Popup Window Features',popupResizable:'Resizable',popupStatusBar:'Status Bar',popupLocationBar:'Location Bar',popupToolbar:'Toolbar',popupMenuBar:'Menu Bar',popupFullScreen:'Full Screen (IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupWidth:'Width',popupLeft:'Left Position',popupHeight:'Height',popupTop:'Top Position',id:'Id',langDir:'Language Direction',langDirNotSet:'<not set>',langDirLTR:'Left to Right (LTR)',langDirRTL:'Right to Left (RTL)',acccessKey:'Access Key',name:'Name',langCode:'Language Code',tabIndex:'Tab Index',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',selectAnchor:'Select an Anchor',anchorName:'By Anchor Name',anchorId:'By Element Id',emailAddress:'E-Mail Address',emailSubject:'Message Subject',emailBody:'Message Body',noAnchors:'(No anchors available in the document)',noUrl:'Please type the link URL',noEmail:'Please type the e-mail address'},anchor:{toolbar:'Anchor',menu:'Edit Anchor',title:'Anchor Properties',name:'Anchor Name',errorName:'Please type the anchor name'},findAndReplace:{title:'Find and Replace',find:'Find',replace:'Replace',findWhat:'Find what:',replaceWith:'Replace with:',notFoundMsg:'The specified text was not found.',matchCase:'Match case',matchWord:'Match whole word',matchCyclic:'Match cyclic',replaceAll:'Replace All',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Table',title:'Table Properties',menu:'Table Properties',deleteTable:'Delete Table',rows:'Rows',columns:'Columns',border:'Border size',align:'Alignment',alignNotSet:'<Not set>',alignLeft:'Left',alignCenter:'Center',alignRight:'Right',width:'Width',widthPx:'pixels',widthPc:'percent',height:'Height',cellSpace:'Cell spacing',cellPad:'Cell padding',caption:'Caption',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Delete Cells',merge:'Merge Cells',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Delete Rows'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Delete Columns'}},button:{title:'Button Properties',text:'Text (Value)',type:'Type',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Checkbox Properties',radioTitle:'Radio Button Properties',value:'Value',selected:'Selected'},form:{title:'Form Properties',menu:'Form Properties',action:'Action',method:'Method',encoding:'Encoding',target:'Target',targetNotSet:'<not set>',targetNew:'New Window (_blank)',targetTop:'Topmost Window (_top)',targetSelf:'Same Window (_self)',targetParent:'Parent Window (_parent)'},select:{title:'Selection Field Properties',selectInfo:'Select Info',opAvail:'Available Options',value:'Value',size:'Size',lines:'lines',chkMulti:'Allow multiple selections',opText:'Text',opValue:'Value',btnAdd:'Add',btnModify:'Modify',btnUp:'Up',btnDown:'Down',btnSetValue:'Set as selected value',btnDelete:'Delete'},textarea:{title:'Textarea Properties',cols:'Columns',rows:'Rows'},textfield:{title:'Text Field Properties',name:'Name',value:'Value',charWidth:'Character Width',maxChars:'Maximum Characters',type:'Type',typeText:'Text',typePass:'Password'},hidden:{title:'Hidden Field Properties',name:'Name',value:'Value'},image:{title:'Image Properties',titleButton:'Image Button Properties',menu:'Image Properties',infoTab:'Image Info',btnUpload:'Send it to the Server',url:'URL',upload:'Upload',alt:'Alternative Text',width:'Width',height:'Height',lockRatio:'Lock Ratio',resetSize:'Reset Size',border:'Border',hSpace:'HSpace',vSpace:'VSpace',align:'Align',alignLeft:'Left',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignBottom:'Bottom',alignMiddle:'Middle',alignRight:'Right',alignTextTop:'Text Top',alignTop:'Top',preview:'Preview',alertUrl:'Please type the image URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Align',alignLeft:'Left',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'Baseline',alignBottom:'Bottom',alignMiddle:'Middle',alignRight:'Right',alignTextTop:'Text Top',alignTop:'Top',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Background color',width:'Width',height:'Height',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'URL must not be empty.',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Check Spelling',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Not in dictionary',changeTo:'Change to',btnIgnore:'Ignore',btnIgnoreAll:'Ignore All',btnReplace:'Replace',btnReplaceAll:'Replace All',btnUndo:'Undo',noSuggestions:'- No suggestions -',progress:'Spell check in progress...',noMispell:'Spell check complete: No misspellings found',noChanges:'Spell check complete: No words changed',oneChange:'Spell check complete: One word changed',manyChanges:'Spell check complete: %1 words changed',ieSpellDownload:'Spell checker not installed. Do you want to download it now?'},smiley:{toolbar:'Smiley',title:'Insert a Smiley'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Insert/Remove Numbered List',bulletedlist:'Insert/Remove Bulleted List',indent:'Increase Indent',outdent:'Decrease Indent',justify:{left:'Left Justify',center:'Center Justify',right:'Right Justify',block:'Block Justify'},blockquote:'Blockquote',clipboard:{title:'Paste',cutError:"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",copyError:"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Paste from Word',title:'Paste from Word',advice:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.',ignoreFontFace:'Ignore Font Face definitions',removeStyle:'Remove Styles definitions'},pasteText:{button:'Paste as plain text',title:'Paste as Plain Text'},templates:{button:'Templates',title:'Content Templates',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Styles',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Paragraph Format',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font Name',panelVoiceLabel:'Select a font'},fontSize:{label:'Size',voiceLabel:'Font Size',panelTitle:'Font Size',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Text Color',bgColorTitle:'Background Color',auto:'Automatic',more:'More Colors...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/eo.js b/lang/eo.js
new file mode 100644 (file)
index 0000000..a52fa5c
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.eo={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Fonto',newPage:'Nova Paĝo',save:'Sekurigi',preview:'Vidigi Aspekton',cut:'Eltondi',copy:'Kopii',paste:'Interglui',print:'Presi',underline:'Substreko',bold:'Grasa',italic:'Kursiva',selectAll:'Elekti ĉion',removeFormat:'Forigi Formaton',strike:'Trastreko',subscript:'Subskribo',superscript:'Superskribo',horizontalrule:'Enmeti Horizonta Linio',pagebreak:'Insert Page Break for Printing',unlink:'Forigi Ligilon',undo:'Malfari',redo:'Refari',common:{browseServer:'Foliumi en la Servilo',url:'URL',protocol:'Protokolo',upload:'Alŝuti',uploadSubmit:'Sendu al Servilo',image:'Bildo',flash:'Flash',form:'Formularo',checkbox:'Markobutono',radio:'Radiobutono',textField:'Teksta kampo',textarea:'Teksta Areo',hiddenField:'Kaŝita Kampo',button:'Butono',select:'Elekta Kampo',imageButton:'Bildbutono',notSet:'<Defaŭlta>',id:'Id',name:'Nomo',langDir:'Skribdirekto',langDirLtr:'De maldekstro dekstren (LTR)',langDirRtl:'De dekstro maldekstren (RTL)',langCode:'Lingva Kodo',longDescr:'URL de Longa Priskribo',cssClass:'Klasoj de Stilfolioj',advisoryTitle:'Indika Titolo',cssStyle:'Stilo',ok:'Akcepti',cancel:'Rezigni',generalTab:'General',advancedTab:'Speciala',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Enmeti Specialan Signon',title:'Enmeti Specialan Signon'},link:{toolbar:'Enmeti/Ŝanĝi Ligilon',menu:'Modifier Ligilon',title:'Ligilo',info:'Informoj pri la Ligilo',target:'Celo',upload:'Alŝuti',advanced:'Speciala',type:'Tipo de Ligilo',toAnchor:'Ankri en tiu ĉi paĝo',toEmail:'Retpoŝto',target:'Celo',targetNotSet:'<Defaŭlta>',targetFrame:'<kadro>',targetPopup:'<ŝprucfenestro>',targetNew:'Nova Fenestro (_blank)',targetTop:'Plej Supra Fenestro (_top)',targetSelf:'Sama Fenestro (_self)',targetParent:'Gepatra Fenestro (_parent)',targetFrameName:'Nomo de Kadro',targetPopupName:'Nomo de Ŝprucfenestro',popupFeatures:'Atributoj de la Ŝprucfenestro',popupResizable:'Resizable',popupStatusBar:'Statobreto',popupLocationBar:'Adresobreto',popupToolbar:'Ilobreto',popupMenuBar:'Menubreto',popupFullScreen:'Tutekrane (IE)',popupScrollBars:'Rulumlisteloj',popupDependent:'Dependa (Netscape)',popupWidth:'Larĝo',popupLeft:'Pozicio de Maldekstro',popupHeight:'Alto',popupTop:'Pozicio de Supro',id:'Id',langDir:'Skribdirekto',langDirNotSet:'<Defaŭlta>',langDirLTR:'De maldekstro dekstren (LTR)',langDirRTL:'De dekstro maldekstren (RTL)',acccessKey:'Fulmoklavo',name:'Nomo',langCode:'Skribdirekto',tabIndex:'Taba Ordo',advisoryTitle:'Indika Titolo',advisoryContentType:'Indika Enhavotipo',cssClasses:'Klasoj de Stilfolioj',charset:'Signaro de la Ligita Rimedo',styles:'Stilo',selectAnchor:'Elekti Ankron',anchorName:'Per Ankronomo',anchorId:'Per Elementidentigilo',emailAddress:'Retadreso',emailSubject:'Temlinio',emailBody:'Mesaĝa korpo',noAnchors:'<Ne disponeblas ankroj en la dokumento>',noUrl:'Bonvolu entajpi la URL-on',noEmail:'Bonvolu entajpi la retadreson'},anchor:{toolbar:'Enmeti/Ŝanĝi Ankron',menu:'Ankraj Atributoj',title:'Ankraj Atributoj',name:'Ankra Nomo',errorName:'Bv tajpi la ankran nomon'},findAndReplace:{title:'Find and Replace',find:'Serĉi',replace:'Anstataŭigi',findWhat:'Serĉi:',replaceWith:'Anstataŭigi per:',notFoundMsg:'La celteksto ne estas trovita.',matchCase:'Kongruigi Usklecon',matchWord:'Tuta Vorto',matchCyclic:'Match cyclic',replaceAll:'Anstataŭigi Ĉiun',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabelo',title:'Atributoj de Tabelo',menu:'Atributoj de Tabelo',deleteTable:'Delete Table',rows:'Linioj',columns:'Kolumnoj',border:'Bordero',align:'Ĝisrandigo',alignNotSet:'<Defaŭlte>',alignLeft:'Maldekstre',alignCenter:'Centre',alignRight:'Dekstre',width:'Larĝo',widthPx:'Bitbilderoj',widthPc:'elcentoj',height:'Alto',cellSpace:'Interspacigo de Ĉeloj',cellPad:'Ĉirkaŭenhava Plenigado',caption:'Titolo',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Forigi Ĉelojn',merge:'Kunfandi Ĉelojn',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Forigi Liniojn'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Forigi Kolumnojn'}},button:{title:'Butonaj Atributoj',text:'Teksto (Valoro)',type:'Tipo',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Markobutonaj Atributoj',radioTitle:'Radiobutonaj Atributoj',value:'Valoro',selected:'Elektita'},form:{title:'Formularaj Atributoj',menu:'Formularaj Atributoj',action:'Ago',method:'Metodo',encoding:'Encoding',target:'Celo',targetNotSet:'<Defaŭlta>',targetNew:'Nova Fenestro (_blank)',targetTop:'Plej Supra Fenestro (_top)',targetSelf:'Sama Fenestro (_self)',targetParent:'Gepatra Fenestro (_parent)'},select:{title:'Atributoj de Elekta Kampo',selectInfo:'Select Info',opAvail:'Elektoj Disponeblaj',value:'Valoro',size:'Grando',lines:'Linioj',chkMulti:'Permesi Plurajn Elektojn',opText:'Teksto',opValue:'Valoro',btnAdd:'Aldoni',btnModify:'Modifi',btnUp:'Supren',btnDown:'Malsupren',btnSetValue:'Agordi kiel Elektitan Valoron',btnDelete:'Forigi'},textarea:{title:'Atributoj de Teksta Areo',cols:'Kolumnoj',rows:'Vicoj'},textfield:{title:'Atributoj de Teksta Kampo',name:'Nomo',value:'Valoro',charWidth:'Signolarĝo',maxChars:'Maksimuma Nombro da Signoj',type:'Tipo',typeText:'Teksto',typePass:'Pasvorto'},hidden:{title:'Atributoj de Kaŝita Kampo',name:'Nomo',value:'Valoro'},image:{title:'Atributoj de Bildo',titleButton:'Bildbutonaj Atributoj',menu:'Atributoj de Bildo',infoTab:'Informoj pri Bildo',btnUpload:'Sendu al Servilo',url:'URL',upload:'Alŝuti',alt:'Anstataŭiga Teksto',width:'Larĝo',height:'Alto',lockRatio:'Konservi Proporcion',resetSize:'Origina Grando',border:'Bordero',hSpace:'HSpaco',vSpace:'VSpaco',align:'Ĝisrandigo',alignLeft:'Maldekstre',alignAbsBottom:'Abs Malsupre',alignAbsMiddle:'Abs Centre',alignBaseline:'Je Malsupro de Teksto',alignBottom:'Malsupre',alignMiddle:'Centre',alignRight:'Dekstre',alignTextTop:'Je Supro de Teksto',alignTop:'Supre',preview:'Vidigi Aspekton',alertUrl:'Bonvolu tajpi la URL de la bildo',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Ĝisrandigo',alignLeft:'Maldekstre',alignAbsBottom:'Abs Malsupre',alignAbsMiddle:'Abs Centre',alignBaseline:'Je Malsupro de Teksto',alignBottom:'Malsupre',alignMiddle:'Centre',alignRight:'Dekstre',alignTextTop:'Je Supro de Teksto',alignTop:'Supre',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Fona Koloro',width:'Larĝo',height:'Alto',hSpace:'HSpaco',vSpace:'VSpaco',validateSrc:'Bonvolu entajpi la URL-on',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Literumada Kontrolilo',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ne trovita en la vortaro',changeTo:'Ŝanĝi al',btnIgnore:'Malatenti',btnIgnoreAll:'Malatenti Ĉiun',btnReplace:'Anstataŭigi',btnReplaceAll:'Anstataŭigi Ĉiun',btnUndo:'Malfari',noSuggestions:'- Neniu propono -',progress:'Literumkontrolado daŭras...',noMispell:'Literumkontrolado finita: neniu fuŝo trovita',noChanges:'Literumkontrolado finita: neniu vorto ŝanĝita',oneChange:'Literumkontrolado finita: unu vorto ŝanĝita',manyChanges:'Literumkontrolado finita: %1 vortoj ŝanĝitaj',ieSpellDownload:'Literumada Kontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?'},smiley:{toolbar:'Mienvinjeto',title:'Enmeti Mienvinjeton'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Numera Listo',bulletedlist:'Bula Listo',indent:'Pligrandigi Krommarĝenon',outdent:'Malpligrandigi Krommarĝenon',justify:{left:'Maldekstrigi',center:'Centrigi',right:'Dekstrigi',block:'Ĝisrandigi Ambaŭflanke'},blockquote:'Blockquote',clipboard:{title:'Interglui',cutError:'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-X).',copyError:'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-C).',pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Interglui el Word',title:'Interglui el Word',advice:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.',ignoreFontFace:'Ignore Font Face definitions',removeStyle:'Remove Styles definitions'},pasteText:{button:'Interglui kiel Tekston',title:'Interglui kiel Tekston'},templates:{button:'Templates',title:'Content Templates',insertOption:'Replace actual contents',selectPromptMsg:'Please select the template to open in the editor',emptyListMsg:'(No templates defined)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stilo',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formato',voiceLabel:'Format',panelTitle:'Formato',panelVoiceLabel:'Select a paragraph format',tag_p:'Normala',tag_pre:'Formatita',tag_address:'Adreso',tag_h1:'Titolo 1',tag_h2:'Titolo 2',tag_h3:'Titolo 3',tag_h4:'Titolo 4',tag_h5:'Titolo 5',tag_h6:'Titolo 6',tag_div:'Paragrafo (DIV)'},font:{label:'Tiparo',voiceLabel:'Font',panelTitle:'Tiparo',panelVoiceLabel:'Select a font'},fontSize:{label:'Grando',voiceLabel:'Font Size',panelTitle:'Grando',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Teksta Koloro',bgColorTitle:'Fona Koloro',auto:'Aŭtomata',more:'Pli da Koloroj...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/es.js b/lang/es.js
new file mode 100644 (file)
index 0000000..8a20fb2
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.es={dir:'ltr',editorTitle:'Editor de texto enriquecido, %1',source:'Fuente HTML',newPage:'Nueva Página',save:'Guardar',preview:'Vista Previa',cut:'Cortar',copy:'Copiar',paste:'Pegar',print:'Imprimir',underline:'Subrayado',bold:'Negrita',italic:'Cursiva',selectAll:'Seleccionar Todo',removeFormat:'Eliminar Formato',strike:'Tachado',subscript:'Subíndice',superscript:'Superíndice',horizontalrule:'Insertar Línea Horizontal',pagebreak:'Insertar Salto de Página',unlink:'Eliminar Vínculo',undo:'Deshacer',redo:'Rehacer',common:{browseServer:'Ver Servidor',url:'URL',protocol:'Protocolo',upload:'Cargar',uploadSubmit:'Enviar al Servidor',image:'Imagen',flash:'Flash',form:'Formulario',checkbox:'Casilla de Verificación',radio:'Botones de Radio',textField:'Campo de Texto',textarea:'Area de Texto',hiddenField:'Campo Oculto',button:'Botón',select:'Campo de Selección',imageButton:'Botón Imagen',notSet:'<No definido>',id:'Id',name:'Nombre',langDir:'Orientación',langDirLtr:'Izquierda a Derecha (LTR)',langDirRtl:'Derecha a Izquierda (RTL)',langCode:'Cód. de idioma',longDescr:'Descripción larga URL',cssClass:'Clases de hojas de estilo',advisoryTitle:'Título',cssStyle:'Estilo',ok:'OK',cancel:'Cancelar',generalTab:'General',advancedTab:'Avanzado',validateNumberFailed:'El valor no es un número.',confirmNewPage:'Cualquier cambio que no se haya guardado se perderá. ¿Está seguro de querer crear una nueva página?',confirmCancel:'Algunas de las opciones se han cambiado. ¿Está seguro de querer cerrar el diálogo?',unavailable:'%1<span class="cke_accessibility">, no disponible</span>'},specialChar:{toolbar:'Insertar Caracter Especial',title:'Seleccione un caracter especial'},link:{toolbar:'Insertar/Editar Vínculo',menu:'Editar Vínculo',title:'Vínculo',info:'Información de Vínculo',target:'Destino',upload:'Cargar',advanced:'Avanzado',type:'Tipo de vínculo',toAnchor:'Referencia en esta página',toEmail:'E-Mail',target:'Destino',targetNotSet:'<No definido>',targetFrame:'<marco>',targetPopup:'<ventana emergente>',targetNew:'Nueva Ventana(_blank)',targetTop:'Ventana primaria (_top)',targetSelf:'Misma Ventana (_self)',targetParent:'Ventana Padre (_parent)',targetFrameName:'Nombre del Marco Destino',targetPopupName:'Nombre de Ventana Emergente',popupFeatures:'Características de Ventana Emergente',popupResizable:'Redimensionable',popupStatusBar:'Barra de Estado',popupLocationBar:'Barra de ubicación',popupToolbar:'Barra de Herramientas',popupMenuBar:'Barra de Menú',popupFullScreen:'Pantalla Completa (IE)',popupScrollBars:'Barras de desplazamiento',popupDependent:'Dependiente (Netscape)',popupWidth:'Anchura',popupLeft:'Posición Izquierda',popupHeight:'Altura',popupTop:'Posición Derecha',id:'Id',langDir:'Orientación',langDirNotSet:'<No definido>',langDirLTR:'Izquierda a Derecha (LTR)',langDirRTL:'Derecha a Izquierda (RTL)',acccessKey:'Clave de Acceso',name:'Nombre',langCode:'Orientación',tabIndex:'Indice de tabulación',advisoryTitle:'Título',advisoryContentType:'Tipo de Contenido',cssClasses:'Clases de hojas de estilo',charset:'Fuente de caracteres vinculado',styles:'Estilo',selectAnchor:'Seleccionar una referencia',anchorName:'Por Nombre de Referencia',anchorId:'Por ID de elemento',emailAddress:'Dirección de E-Mail',emailSubject:'Título del Mensaje',emailBody:'Cuerpo del Mensaje',noAnchors:'(No hay referencias disponibles en el documento)',noUrl:'Por favor tipee el vínculo URL',noEmail:'Por favor tipee la dirección de e-mail'},anchor:{toolbar:'Referencia',menu:'Propiedades de Referencia',title:'Propiedades de Referencia',name:'Nombre de la Referencia',errorName:'Por favor, complete el nombre de la Referencia'},findAndReplace:{title:'Buscar y Reemplazar',find:'Buscar',replace:'Reemplazar',findWhat:'Texto a buscar:',replaceWith:'Reemplazar con:',notFoundMsg:'El texto especificado no ha sido encontrado.',matchCase:'Coincidir may/min',matchWord:'Coincidir toda la palabra',matchCyclic:'Buscar en todo el contenido',replaceAll:'Reemplazar Todo',replaceSuccessMsg:'La expresión buscada ha sido reemplazada %1 veces.'},table:{toolbar:'Tabla',title:'Propiedades de Tabla',menu:'Propiedades de Tabla',deleteTable:'Eliminar Tabla',rows:'Filas',columns:'Columnas',border:'Tamaño de Borde',align:'Alineación',alignNotSet:'<No establecido>',alignLeft:'Izquierda',alignCenter:'Centrado',alignRight:'Derecha',width:'Anchura',widthPx:'pixeles',widthPc:'porcentaje',height:'Altura',cellSpace:'Esp. e/celdas',cellPad:'Esp. interior',caption:'Título',summary:'Síntesis',headers:'Encabezados',headersNone:'Ninguno',headersColumn:'Primera columna',headersRow:'Primera fila',headersBoth:'Ambas',invalidRows:'El número de filas debe ser un número mayor que 0.',invalidCols:'El número de columnas debe ser un número mayor que 0.',invalidBorder:'El tamaño del borde debe ser un número.',invalidWidth:'La anchura de tabla debe ser un número.',invalidHeight:'La altura de tabla debe ser un número.',invalidCellSpacing:'El espaciado entre celdas debe ser un número.',invalidCellPadding:'El espaciado interior debe ser un número.',cell:{menu:'Celda',insertBefore:'Insertar celda a la izquierda',insertAfter:'Insertar celda a la derecha',deleteCell:'Eliminar Celdas',merge:'Combinar Celdas',mergeRight:'Combinar a la derecha',mergeDown:'Combinar hacia abajo',splitHorizontal:'Dividir la celda horizontalmente',splitVertical:'Dividir la celda verticalmente',title:'Propiedades de celda',cellType:'Tipo de Celda',rowSpan:'Expandir filas',colSpan:'Expandir columnas',wordWrap:'Ajustar al contenido',hAlign:'Alineación Horizontal',vAlign:'Alineación Vertical',alignTop:'Arriba',alignMiddle:'Medio',alignBottom:'Abajo',alignBaseline:'Linea de base',bgColor:'Color de fondo',borderColor:'Color de borde',data:'Datos',header:'Encabezado',yes:'Sí',no:'No',invalidWidth:'La anchura de celda debe ser un número.',invalidHeight:'La altura de celda debe ser un número.',invalidRowSpan:'La expansión de filas debe ser un número entero.',invalidColSpan:'La expansión de columnas debe ser un número entero.'},row:{menu:'Fila',insertBefore:'Insertar fila en la parte superior',insertAfter:'Insertar fila en la parte inferior',deleteRow:'Eliminar Filas'},column:{menu:'Columna',insertBefore:'Insertar columna a la izquierda',insertAfter:'Insertar columna a la derecha',deleteColumn:'Eliminar Columnas'}},button:{title:'Propiedades de Botón',text:'Texto (Valor)',type:'Tipo',typeBtn:'Boton',typeSbm:'Enviar',typeRst:'Reestablecer'},checkboxAndRadio:{checkboxTitle:'Propiedades de Casilla',radioTitle:'Propiedades de Botón de Radio',value:'Valor',selected:'Seleccionado'},form:{title:'Propiedades de Formulario',menu:'Propiedades de Formulario',action:'Acción',method:'Método',encoding:'Codificación',target:'Destino',targetNotSet:'<No definido>',targetNew:'Nueva Ventana(_blank)',targetTop:'Ventana primaria (_top)',targetSelf:'Misma Ventana (_self)',targetParent:'Ventana Padre (_parent)'},select:{title:'Propiedades de Campo de Selección',selectInfo:'Información',opAvail:'Opciones disponibles',value:'Valor',size:'Tamaño',lines:'Lineas',chkMulti:'Permitir múltiple selección',opText:'Texto',opValue:'Valor',btnAdd:'Agregar',btnModify:'Modificar',btnUp:'Subir',btnDown:'Bajar',btnSetValue:'Establecer como predeterminado',btnDelete:'Eliminar'},textarea:{title:'Propiedades de Area de Texto',cols:'Columnas',rows:'Filas'},textfield:{title:'Propiedades de Campo de Texto',name:'Nombre',value:'Valor',charWidth:'Caracteres de ancho',maxChars:'Máximo caracteres',type:'Tipo',typeText:'Texto',typePass:'Contraseña'},hidden:{title:'Propiedades de Campo Oculto',name:'Nombre',value:'Valor'},image:{title:'Propiedades de Imagen',titleButton:'Propiedades de Botón de Imagen',menu:'Propiedades de Imagen',infoTab:'Información de Imagen',btnUpload:'Enviar al Servidor',url:'URL',upload:'Cargar',alt:'Texto Alternativo',width:'Anchura',height:'Altura',lockRatio:'Proporcional',resetSize:'Tamaño Original',border:'Borde',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',align:'Alineación',alignLeft:'Izquierda',alignAbsBottom:'Abs inferior',alignAbsMiddle:'Abs centro',alignBaseline:'Línea de base',alignBottom:'Pie',alignMiddle:'Centro',alignRight:'Derecha',alignTextTop:'Tope del texto',alignTop:'Tope',preview:'Vista Previa',alertUrl:'Por favor escriba la URL de la imagen',linkTab:'Vínculo',button2Img:'¿Desea convertir el botón de imagen en una simple imagen?',img2Button:'¿Desea convertir la imagen en un botón de imagen?'},flash:{properties:'Propiedades de Flash',propertiesTab:'Propiedades',title:'Propiedades de Flash',chkPlay:'Autoejecución',chkLoop:'Repetir',chkMenu:'Activar Menú Flash',chkFull:'Permitir pantalla completa',scale:'Escala',scaleAll:'Mostrar todo',scaleNoBorder:'Sin Borde',scaleFit:'Ajustado',access:'Acceso de scripts',accessAlways:'Siempre',accessSameDomain:'Mismo dominio',accessNever:'Nunca',align:'Alineación',alignLeft:'Izquierda',alignAbsBottom:'Abs inferior',alignAbsMiddle:'Abs centro',alignBaseline:'Línea de base',alignBottom:'Pie',alignMiddle:'Centro',alignRight:'Derecha',alignTextTop:'Tope del texto',alignTop:'Tope',quality:'Calidad',qualityBest:'La mejor',qualityHigh:'Alta',qualityAutoHigh:'Auto Alta',qualityMedium:'Media',qualityAutoLow:'Auto Baja',qualityLow:'Baja',windowModeWindow:'Ventana',windowModeOpaque:'Opaco',windowModeTransparent:'Transparente',windowMode:'WindowMode',flashvars:'FlashVars',bgcolor:'Color de Fondo',width:'Anchura',height:'Altura',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',validateSrc:'Por favor escriba el vínculo URL',validateWidth:'Anchura debe ser un número.',validateHeight:'Altura debe ser un número.',validateHSpace:'Esp.Horiz debe ser un número.',validateVSpace:'Esp.Vert debe ser un número.'},spellCheck:{toolbar:'Ortografía',title:'Comprobar ortografía',notAvailable:'Lo sentimos pero el servicio no está disponible.',errorLoading:'Error cargando la aplicación del servidor: %s.',notInDic:'No se encuentra en el Diccionario',changeTo:'Cambiar a',btnIgnore:'Ignorar',btnIgnoreAll:'Ignorar Todo',btnReplace:'Reemplazar',btnReplaceAll:'Reemplazar Todo',btnUndo:'Deshacer',noSuggestions:'- No hay sugerencias -',progress:'Control de Ortografía en progreso...',noMispell:'Control finalizado: no se encontraron errores',noChanges:'Control finalizado: no se ha cambiado ninguna palabra',oneChange:'Control finalizado: se ha cambiado una palabra',manyChanges:'Control finalizado: se ha cambiado %1 palabras',ieSpellDownload:'Módulo de Control de Ortografía no instalado. ¿Desea descargarlo ahora?'},smiley:{toolbar:'Emoticons',title:'Insertar un Emoticon'},elementsPath:{eleTitle:'%1 elemento'},numberedlist:'Numeración',bulletedlist:'Viñetas',indent:'Aumentar Sangría',outdent:'Disminuir Sangría',justify:{left:'Alinear a Izquierda',center:'Centrar',right:'Alinear a Derecha',block:'Justificado'},blockquote:'Cita',clipboard:{title:'Pegar',cutError:'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado. Por favor use el teclado (Ctrl+X).',copyError:'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado. Por favor use el teclado (Ctrl+C).',pasteMsg:'Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl+V</STRONG>); luego presione <STRONG>OK</STRONG>.',securityMsg:'Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles. Es necesario que lo pegue de nuevo en esta ventana.'},pastefromword:{toolbar:'Pegar desde Word',title:'Pegar desde Word',advice:'Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl+V</STRONG>); luego presione <STRONG>OK</STRONG>.',ignoreFontFace:'Ignorar definiciones de fuentes',removeStyle:'Remover definiciones de estilo'},pasteText:{button:'Pegar como Texto Plano',title:'Pegar como Texto Plano'},templates:{button:'Plantillas',title:'Contenido de Plantillas',insertOption:'Reemplazar el contenido actual',selectPromptMsg:'Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):',emptyListMsg:'(No hay plantillas definidas)'},showBlocks:'Mostrar bloques',stylesCombo:{label:'Estilo',voiceLabel:'Estilos',panelVoiceLabel:'Elija un estilo',panelTitle1:'Estilos de párrafo',panelTitle2:'Estilos de carácter',panelTitle3:'Estilos de objeto'},format:{label:'Formato',voiceLabel:'Formato',panelTitle:'Formato',panelVoiceLabel:'Elija un formato de párrafo',tag_p:'Normal',tag_pre:'Con formato',tag_address:'Dirección',tag_h1:'Encabezado 1',tag_h2:'Encabezado 2',tag_h3:'Encabezado 3',tag_h4:'Encabezado 4',tag_h5:'Encabezado 5',tag_h6:'Encabezado 6',tag_div:'Normal (DIV)'},font:{label:'Fuente',voiceLabel:'Fuente',panelTitle:'Fuente',panelVoiceLabel:'Elija una fuente'},fontSize:{label:'Tamaño',voiceLabel:'Tamaño de fuente',panelTitle:'Tamaño',panelVoiceLabel:'Elija un tamaño de fuente'},colorButton:{textColorTitle:'Color de Texto',bgColorTitle:'Color de Fondo',auto:'Automático',more:'Más Colores...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Comprobar Ortografía Mientras Escribe',enable:'Activar COME',disable:'Desactivar COME',about:'Acerca de COME',toggle:'Cambiar COME',options:'Opciones',langs:'Idiomas',moreSuggestions:'Más sugerencias',ignore:'Ignorar',ignoreAll:'Ignorar Todas',addWord:'Añadir palabra',emptyDic:'El nombre del diccionario no puede estar en blanco.',optionsTab:'Opciones',languagesTab:'Idiomas',dictionariesTab:'Diccionarios',aboutTab:'Acerca de'},about:{title:'Acerca de CKEditor',dlgTitle:'Acerca de CKEditor',moreInfo:'Para información de licencia, por favor visite nuestro sitio web:',copy:'Copyright &copy; $1. Todos los derechos reservados.'},maximize:'Maximizar',fakeobjects:{anchor:'Ancla',flash:'Animación flash',div:'Salto de página',unknown:'Objeto desconocido'},resize:'Arrastre para redimensionar'};\r
diff --git a/lang/et.js b/lang/et.js
new file mode 100644 (file)
index 0000000..e78e2ae
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.et={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Lähtekood',newPage:'Uus leht',save:'Salvesta',preview:'Eelvaade',cut:'Lõika',copy:'Kopeeri',paste:'Kleebi',print:'Prindi',underline:'Allajoonitud',bold:'Paks',italic:'Kursiiv',selectAll:'Vali kõik',removeFormat:'Eemalda vorming',strike:'Läbijoonitud',subscript:'Allindeks',superscript:'Ülaindeks',horizontalrule:'Sisesta horisontaaljoon',pagebreak:'Sisesta lehevahetuskoht',unlink:'Eemalda link',undo:'Võta tagasi',redo:'Korda toimingut',common:{browseServer:'Sirvi serverit',url:'URL',protocol:'Protokoll',upload:'Lae üles',uploadSubmit:'Saada serverissee',image:'Pilt',flash:'Flash',form:'Vorm',checkbox:'Märkeruut',radio:'Raadionupp',textField:'Tekstilahter',textarea:'Tekstiala',hiddenField:'Varjatud lahter',button:'Nupp',select:'Valiklahter',imageButton:'Piltnupp',notSet:'<määramata>',id:'Id',name:'Nimi',langDir:'Keele suund',langDirLtr:'Vasakult paremale (LTR)',langDirRtl:'Paremalt vasakule (RTL)',langCode:'Keele kood',longDescr:'Pikk kirjeldus URL',cssClass:'Stiilistiku klassid',advisoryTitle:'Juhendav tiitel',cssStyle:'Laad',ok:'OK',cancel:'Loobu',generalTab:'General',advancedTab:'Täpsemalt',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Sisesta erimärk',title:'Vali erimärk'},link:{toolbar:'Sisesta link / Muuda linki',menu:'Muuda linki',title:'Link',info:'Lingi info',target:'Sihtkoht',upload:'Lae üles',advanced:'Täpsemalt',type:'Lingi tüüp',toAnchor:'Ankur sellel lehel',toEmail:'E-post',target:'Sihtkoht',targetNotSet:'<määramata>',targetFrame:'<raam>',targetPopup:'<hüpikaken>',targetNew:'Uus aken (_blank)',targetTop:'Pealmine aken (_top)',targetSelf:'Sama aken (_self)',targetParent:'Esivanem aken (_parent)',targetFrameName:'Sihtmärk raami nimi',targetPopupName:'Hüpikakna nimi',popupFeatures:'Hüpikakna omadused',popupResizable:'Resizable',popupStatusBar:'Olekuriba',popupLocationBar:'Aadressiriba',popupToolbar:'Tööriistariba',popupMenuBar:'Menüüriba',popupFullScreen:'Täisekraan (IE)',popupScrollBars:'Kerimisribad',popupDependent:'Sõltuv (Netscape)',popupWidth:'Laius',popupLeft:'Vasak asukoht',popupHeight:'Kõrgus',popupTop:'Ülemine asukoht',id:'Id',langDir:'Keele suund',langDirNotSet:'<määramata>',langDirLTR:'Vasakult paremale (LTR)',langDirRTL:'Paremalt vasakule (RTL)',acccessKey:'Juurdepääsu võti',name:'Nimi',langCode:'Keele suund',tabIndex:'Tab indeks',advisoryTitle:'Juhendav tiitel',advisoryContentType:'Juhendava sisu tüüp',cssClasses:'Stiilistiku klassid',charset:'Lingitud ressurssi märgistik',styles:'Laad',selectAnchor:'Vali ankur',anchorName:'Ankru nime järgi',anchorId:'Elemendi id järgi',emailAddress:'E-posti aadress',emailSubject:'Sõnumi teema',emailBody:'Sõnumi tekst',noAnchors:'(Selles dokumendis ei ole ankruid)',noUrl:'Palun kirjuta lingi URL',noEmail:'Palun kirjuta E-Posti aadress'},anchor:{toolbar:'Sisesta ankur / Muuda ankrut',menu:'Ankru omadused',title:'Ankru omadused',name:'Ankru nimi',errorName:'Palun sisest ankru nimi'},findAndReplace:{title:'Otsi ja asenda',find:'Otsi',replace:'Asenda',findWhat:'Leia mida:',replaceWith:'Asenda millega:',notFoundMsg:'Valitud teksti ei leitud.',matchCase:'Erista suur- ja väiketähti',matchWord:'Otsi terviklike sõnu',matchCyclic:'Match cyclic',replaceAll:'Asenda kõik',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabel',title:'Tabeli atribuudid',menu:'Tabeli atribuudid',deleteTable:'Kustuta tabel',rows:'Read',columns:'Veerud',border:'Joone suurus',align:'Joondus',alignNotSet:'<Määramata>',alignLeft:'Vasak',alignCenter:'Kesk',alignRight:'Parem',width:'Laius',widthPx:'pikslit',widthPc:'protsenti',height:'Kõrgus',cellSpace:'Lahtri vahe',cellPad:'Lahtri täidis',caption:'Tabeli tiitel',summary:'Kokkuvõte',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Lahter',insertBefore:'Sisesta lahter enne',insertAfter:'Sisesta lahter peale',deleteCell:'Eemalda lahtrid',merge:'Ühenda lahtrid',mergeRight:'Ühenda paremale',mergeDown:'Ühenda alla',splitHorizontal:'Poolita lahter horisontaalselt',splitVertical:'Poolita lahter vertikaalselt',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Rida',insertBefore:'Sisesta rida enne',insertAfter:'Sisesta rida peale',deleteRow:'Eemalda read'},column:{menu:'Veerg',insertBefore:'Sisesta veerg enne',insertAfter:'Sisesta veerg peale',deleteColumn:'Eemalda veerud'}},button:{title:'Nupu omadused',text:'Tekst (väärtus)',type:'Tüüp',typeBtn:'Nupp',typeSbm:'Saada',typeRst:'Lähtesta'},checkboxAndRadio:{checkboxTitle:'Märkeruudu omadused',radioTitle:'Raadionupu omadused',value:'Väärtus',selected:'Valitud'},form:{title:'Vormi omadused',menu:'Vormi omadused',action:'Toiming',method:'Meetod',encoding:'Encoding',target:'Sihtkoht',targetNotSet:'<määramata>',targetNew:'Uus aken (_blank)',targetTop:'Pealmine aken (_top)',targetSelf:'Sama aken (_self)',targetParent:'Esivanem aken (_parent)'},select:{title:'Valiklahtri omadused',selectInfo:'Info',opAvail:'Võimalikud valikud',value:'Väärtus',size:'Suurus',lines:'ridu',chkMulti:'Võimalda mitu valikut',opText:'Tekst',opValue:'Väärtus',btnAdd:'Lisa',btnModify:'Muuda',btnUp:'Üles',btnDown:'Alla',btnSetValue:'Sea valitud olekuna',btnDelete:'Kustuta'},textarea:{title:'Tekstiala omadused',cols:'Veerge',rows:'Ridu'},textfield:{title:'Tekstilahtri omadused',name:'Nimi',value:'Väärtus',charWidth:'Laius (tähemärkides)',maxChars:'Maksimaalselt tähemärke',type:'Tüüp',typeText:'Tekst',typePass:'Parool'},hidden:{title:'Varjatud lahtri omadused',name:'Nimi',value:'Väärtus'},image:{title:'Pildi atribuudid',titleButton:'Piltnupu omadused',menu:'Pildi atribuudid',infoTab:'Pildi info',btnUpload:'Saada serverissee',url:'URL',upload:'Lae üles',alt:'Alternatiivne tekst',width:'Laius',height:'Kõrgus',lockRatio:'Lukusta kuvasuhe',resetSize:'Lähtesta suurus',border:'Joon',hSpace:'H. vaheruum',vSpace:'V. vaheruum',align:'Joondus',alignLeft:'Vasak',alignAbsBottom:'Abs alla',alignAbsMiddle:'Abs keskele',alignBaseline:'Baasjoonele',alignBottom:'Alla',alignMiddle:'Keskele',alignRight:'Paremale',alignTextTop:'Tekstit üles',alignTop:'Üles',preview:'Eelvaade',alertUrl:'Palun kirjuta pildi URL',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash omadused',propertiesTab:'Properties',title:'Flash omadused',chkPlay:'Automaatne start ',chkLoop:'Korduv',chkMenu:'Võimalda flash menüü',chkFull:'Allow Fullscreen',scale:'Mastaap',scaleAll:'Näita kõike',scaleNoBorder:'Äärist ei ole',scaleFit:'Täpne sobivus',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Joondus',alignLeft:'Vasak',alignAbsBottom:'Abs alla',alignAbsMiddle:'Abs keskele',alignBaseline:'Baasjoonele',alignBottom:'Alla',alignMiddle:'Keskele',alignRight:'Paremale',alignTextTop:'Tekstit üles',alignTop:'Üles',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Tausta värv',width:'Laius',height:'Kõrgus',hSpace:'H. vaheruum',vSpace:'V. vaheruum',validateSrc:'Palun kirjuta lingi URL',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Kontrolli õigekirja',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Puudub sõnastikust',changeTo:'Muuda',btnIgnore:'Ignoreeri',btnIgnoreAll:'Ignoreeri kõiki',btnReplace:'Asenda',btnReplaceAll:'Asenda kõik',btnUndo:'Võta tagasi',noSuggestions:'- Soovitused puuduvad -',progress:'Toimub õigekirja kontroll...',noMispell:'Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud',noChanges:'Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud',oneChange:'Õigekirja kontroll sooritatud: üks sõna muudeti',manyChanges:'Õigekirja kontroll sooritatud: %1 sõna muudetud',ieSpellDownload:'Õigekirja kontrollija ei ole installeeritud. Soovid sa selle alla laadida?'},smiley:{toolbar:'Emotikon',title:'Sisesta emotikon'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Nummerdatud loetelu',bulletedlist:'Punktiseeritud loetelu',indent:'Suurenda taanet',outdent:'Vähenda taanet',justify:{left:'Vasakjoondus',center:'Keskjoondus',right:'Paremjoondus',block:'Rööpjoondus'},blockquote:'Blokktsitaat',clipboard:{title:'Kleebi',cutError:'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+X).',copyError:'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+C).',pasteMsg:'Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.',securityMsg:'Sinu veebisirvija turvaseadete tõttu, ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead kleepima need uuesti siia aknasse.'},pastefromword:{toolbar:'Kleebi Wordist',title:'Kleebi Wordist',advice:'Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.',ignoreFontFace:'Ignoreeri kirja definitsioone',removeStyle:'Eemalda stiilide definitsioonid'},pasteText:{button:'Kleebi tavalise tekstina',title:'Kleebi tavalise tekstina'},templates:{button:'Šabloon',title:'Sisu šabloonid',insertOption:'Asenda tegelik sisu',selectPromptMsg:'Palun vali šabloon, et avada see redaktoris<br />(praegune sisu läheb kaotsi):',emptyListMsg:'(Ühtegi šablooni ei ole defineeritud)'},showBlocks:'Näita blokke',stylesCombo:{label:'Laad',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Vorming',voiceLabel:'Format',panelTitle:'Vorming',panelVoiceLabel:'Select a paragraph format',tag_p:'Tavaline',tag_pre:'Vormindatud',tag_address:'Aadress',tag_h1:'Pealkiri 1',tag_h2:'Pealkiri 2',tag_h3:'Pealkiri 3',tag_h4:'Pealkiri 4',tag_h5:'Pealkiri 5',tag_h6:'Pealkiri 6',tag_div:'Tavaline (DIV)'},font:{label:'Kiri',voiceLabel:'Font',panelTitle:'Kiri',panelVoiceLabel:'Select a font'},fontSize:{label:'Suurus',voiceLabel:'Font Size',panelTitle:'Suurus',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Teksti värv',bgColorTitle:'Tausta värv',auto:'Automaatne',more:'Rohkem värve...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/eu.js b/lang/eu.js
new file mode 100644 (file)
index 0000000..0965c86
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.eu={dir:'ltr',editorTitle:'Testu aberastuentzako editorea, %1',source:'HTML Iturburua',newPage:'Orrialde Berria',save:'Gorde',preview:'Aurrebista',cut:'Ebaki',copy:'Kopiatu',paste:'Itsatsi',print:'Inprimatu',underline:'Azpimarratu',bold:'Lodia',italic:'Etzana',selectAll:'Hautatu dena',removeFormat:'Kendu Formatua',strike:'Marratua',subscript:'Azpi-indize',superscript:'Goi-indize',horizontalrule:'Txertatu Marra Horizontala',pagebreak:'Txertatu Orrialde-jauzia',unlink:'Kendu Esteka',undo:'Desegin',redo:'Berregin',common:{browseServer:'Zerbitzaria arakatu',url:'URL',protocol:'Protokoloa',upload:'Gora kargatu',uploadSubmit:'Zerbitzarira bidalia',image:'Irudia',flash:'Flasha',form:'Formularioa',checkbox:'Kontrol-laukia',radio:'Aukera-botoia',textField:'Testu Eremua',textarea:'Testu-area',hiddenField:'Ezkutuko Eremua',button:'Botoia',select:'Hautespen Eremua',imageButton:'Irudi Botoia',notSet:'<Ezarri gabe>',id:'Id',name:'Izena',langDir:'Hizkuntzaren Norabidea',langDirLtr:'Ezkerretik Eskumara(LTR)',langDirRtl:'Eskumatik Ezkerrera (RTL)',langCode:'Hizkuntza Kodea',longDescr:'URL Deskribapen Luzea',cssClass:'Estilo-orriko Klaseak',advisoryTitle:'Izenburua',cssStyle:'Estiloa',ok:'Ados',cancel:'Utzi',generalTab:'Orokorra',advancedTab:'Aurreratua',validateNumberFailed:'Balio hau ez da zenbaki bat.',confirmNewPage:'Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?',confirmCancel:'Aukera batzuk aldatu egin dira. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?',unavailable:'%1<span class="cke_accessibility">, erabilezina</span>'},specialChar:{toolbar:'Txertatu Karaktere Berezia',title:'Karaktere Berezia Aukeratu'},link:{toolbar:'Txertatu/Editatu Esteka',menu:'Aldatu Esteka',title:'Esteka',info:'Estekaren Informazioa',target:'Target (Helburua)',upload:'Gora kargatu',advanced:'Aurreratua',type:'Esteka Mota',toAnchor:'Aingura orrialde honetan',toEmail:'ePosta',target:'Target (Helburua)',targetNotSet:'<Ezarri gabe>',targetFrame:'<marko>',targetPopup:'<popup leihoa>',targetNew:'Leiho Berria (_blank)',targetTop:'Goiko Leihoa (_top)',targetSelf:'Leiho Berdina (_self)',targetParent:'Leiho Gurasoa (_parent)',targetFrameName:'Marko Helburuaren Izena',targetPopupName:'Popup Leihoaren Izena',popupFeatures:'Popup Leihoaren Ezaugarriak',popupResizable:'Tamaina Aldakorra',popupStatusBar:'Egoera Barra',popupLocationBar:'Kokaleku Barra',popupToolbar:'Tresna Barra',popupMenuBar:'Menu Barra',popupFullScreen:'Pantaila Osoa (IE)',popupScrollBars:'Korritze Barrak',popupDependent:'Menpekoa (Netscape)',popupWidth:'Zabalera',popupLeft:'Ezkerreko  Posizioa',popupHeight:'Altuera',popupTop:'Goiko Posizioa',id:'Id',langDir:'Hizkuntzaren Norabidea',langDirNotSet:'<Ezarri gabe>',langDirLTR:'Ezkerretik Eskumara(LTR)',langDirRTL:'Eskumatik Ezkerrera (RTL)',acccessKey:'Sarbide-gakoa',name:'Izena',langCode:'Hizkuntzaren Norabidea',tabIndex:'Tabulazio Indizea',advisoryTitle:'Izenburua',advisoryContentType:'Eduki Mota (Content Type)',cssClasses:'Estilo-orriko Klaseak',charset:'Estekatutako Karaktere Multzoa',styles:'Estiloa',selectAnchor:'Aingura bat hautatu',anchorName:'Aingura izenagatik',anchorId:'Elementuaren ID-gatik',emailAddress:'ePosta Helbidea',emailSubject:'Mezuaren Gaia',emailBody:'Mezuaren Gorputza',noAnchors:'(Ez daude aingurak eskuragarri dokumentuan)',noUrl:'Mesedez URL esteka idatzi',noEmail:'Mesedez ePosta helbidea idatzi'},anchor:{toolbar:'Aingura',menu:'Ainguraren Ezaugarriak',title:'Ainguraren Ezaugarriak',name:'Ainguraren Izena',errorName:'Idatzi ainguraren izena'},findAndReplace:{title:'Bilatu eta Ordeztu',find:'Bilatu',replace:'Ordezkatu',findWhat:'Zer bilatu:',replaceWith:'Zerekin ordeztu:',notFoundMsg:'Idatzitako testua ez da topatu.',matchCase:'Maiuskula/minuskula',matchWord:'Esaldi osoa bilatu',matchCyclic:'Bilaketa ziklikoa',replaceAll:'Ordeztu Guztiak',replaceSuccessMsg:'Zenbat aldiz ordeztua: %1'},table:{toolbar:'Taula',title:'Taularen Ezaugarriak',menu:'Taularen Ezaugarriak',deleteTable:'Ezabatu Taula',rows:'Lerroak',columns:'Zutabeak',border:'Ertzaren Zabalera',align:'Lerrokatu',alignNotSet:'<Ezarri gabe>',alignLeft:'Ezkerrean',alignCenter:'Erdian',alignRight:'Eskuman',width:'Zabalera',widthPx:'pixel',widthPc:'ehuneko',height:'Altuera',cellSpace:'Gelaxka arteko tartea',cellPad:'Gelaxken betegarria',caption:'Epigrafea',summary:'Laburpena',headers:'Goiburuak',headersNone:'Bat ere ez',headersColumn:'Lehen zutabea',headersRow:'Lehen lerroa',headersBoth:'Biak',invalidRows:'Lerro kopurua 0 baino handiagoa den zenbakia izan behar da.',invalidCols:'Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.',invalidBorder:'Ertzaren tamaina zenbaki bat izan behar da.',invalidWidth:'Taularen zabalera zenbaki bat izan behar da.',invalidHeight:'Taularen altuera zenbaki bat izan behar da.',invalidCellSpacing:'Gelaxka arteko tartea zenbaki bat izan behar da.',invalidCellPadding:'Gelaxken betegarria zenbaki bat izan behar da.',cell:{menu:'Gelaxka',insertBefore:'Txertatu Gelaxka Aurretik',insertAfter:'Txertatu Gelaxka Ostean',deleteCell:'Kendu Gelaxkak',merge:'Batu Gelaxkak',mergeRight:'Elkartu Eskumara',mergeDown:'Elkartu Behera',splitHorizontal:'Banatu Gelaxkak Horizontalki',splitVertical:'Banatu Gelaxkak Bertikalki',title:'Gelaxken Ezaugarriak',cellType:'Gelaxka Mota',rowSpan:'Hedatutako Lerroak',colSpan:'Hedatutako Zutabeak',wordWrap:'Itzulbira',hAlign:'Lerrokatze Horizontala',vAlign:'Lerrokatze Bertikala',alignTop:'Goian',alignMiddle:'Erdian',alignBottom:'Behean',alignBaseline:'Oinarri-lerroan',bgColor:'Fondoaren Kolorea',borderColor:'Ertzaren Kolorea',data:'Data',header:'Goiburua',yes:'Bai',no:'Ez',invalidWidth:'Gelaxkaren zabalera zenbaki bat izan behar da.',invalidHeight:'Gelaxkaren altuera zenbaki bat izan behar da.',invalidRowSpan:'Lerroen hedapena zenbaki osoa izan behar da.',invalidColSpan:'Zutabeen hedapena zenbaki osoa izan behar da.'},row:{menu:'Lerroa',insertBefore:'Txertatu Lerroa Aurretik',insertAfter:'Txertatu Lerroa Ostean',deleteRow:'Ezabatu Lerroak'},column:{menu:'Zutabea',insertBefore:'Txertatu Zutabea Aurretik',insertAfter:'Txertatu Zutabea Ostean',deleteColumn:'Ezabatu Zutabeak'}},button:{title:'Botoiaren Ezaugarriak',text:'Testua (Balorea)',type:'Mota',typeBtn:'Botoia',typeSbm:'Bidali',typeRst:'Garbitu'},checkboxAndRadio:{checkboxTitle:'Kontrol-laukiko Ezaugarriak',radioTitle:'Aukera-botoiaren Ezaugarriak',value:'Balorea',selected:'Hautatuta'},form:{title:'Formularioaren Ezaugarriak',menu:'Formularioaren Ezaugarriak',action:'Ekintza',method:'Metodoa',encoding:'Kodeketa',target:'Target (Helburua)',targetNotSet:'<Ezarri gabe>',targetNew:'Leiho Berria (_blank)',targetTop:'Goiko Leihoa (_top)',targetSelf:'Leiho Berdina (_self)',targetParent:'Leiho Gurasoa (_parent)'},select:{title:'Hautespen Eremuaren Ezaugarriak',selectInfo:'Informazioa',opAvail:'Aukera Eskuragarriak',value:'Balorea',size:'Tamaina',lines:'lerro kopurura',chkMulti:'Hautaketa anitzak baimendu',opText:'Testua',opValue:'Balorea',btnAdd:'Gehitu',btnModify:'Aldatu',btnUp:'Gora',btnDown:'Behera',btnSetValue:'Aukeratutako balorea ezarri',btnDelete:'Ezabatu'},textarea:{title:'Testu-arearen Ezaugarriak',cols:'Zutabeak',rows:'Lerroak'},textfield:{title:'Testu Eremuaren Ezaugarriak',name:'Izena',value:'Balorea',charWidth:'Zabalera',maxChars:'Zenbat karaktere gehienez',type:'Mota',typeText:'Testua',typePass:'Pasahitza'},hidden:{title:'Ezkutuko Eremuaren Ezaugarriak',name:'Izena',value:'Balorea'},image:{title:'Irudi Ezaugarriak',titleButton:'Irudi Botoiaren Ezaugarriak',menu:'Irudi Ezaugarriak',infoTab:'Irudi informazioa',btnUpload:'Zerbitzarira bidalia',url:'URL',upload:'Gora Kargatu',alt:'Ordezko Testua',width:'Zabalera',height:'Altuera',lockRatio:'Erlazioa Blokeatu',resetSize:'Tamaina Berrezarri',border:'Ertza',hSpace:'HSpace',vSpace:'VSpace',align:'Lerrokatu',alignLeft:'Ezkerrera',alignAbsBottom:'Abs Behean',alignAbsMiddle:'Abs Erdian',alignBaseline:'Oinan',alignBottom:'Behean',alignMiddle:'Erdian',alignRight:'Eskuman',alignTextTop:'Testua Goian',alignTop:'Goian',preview:'Aurrebista',alertUrl:'Mesedez Irudiaren URLa idatzi',linkTab:'Esteka',button2Img:'Aukeratutako irudi botoia, irudi normal batean eraldatu nahi duzu?',img2Button:'Aukeratutako irudia, irudi botoi batean eraldatu nahi duzu?'},flash:{properties:'Flasharen Ezaugarriak',propertiesTab:'Ezaugarriak',title:'Flasharen Ezaugarriak',chkPlay:'Automatikoki Erreproduzitu',chkLoop:'Begizta',chkMenu:'Flasharen Menua Gaitu',chkFull:'Onartu Pantaila osoa',scale:'Eskalatu',scaleAll:'Dena erakutsi',scaleNoBorder:'Ertzik gabe',scaleFit:'Doitu',access:'Scriptak baimendu',accessAlways:'Beti',accessSameDomain:'Domeinu berdinekoak',accessNever:'Inoiz ere ez',align:'Lerrokatu',alignLeft:'Ezkerrera',alignAbsBottom:'Abs Behean',alignAbsMiddle:'Abs Erdian',alignBaseline:'Oinan',alignBottom:'Behean',alignMiddle:'Erdian',alignRight:'Eskuman',alignTextTop:'Testua Goian',alignTop:'Goian',quality:'Kalitatea',qualityBest:'Hoberena',qualityHigh:'Altua',qualityAutoHigh:'Auto Altua',qualityMedium:'Ertaina',qualityAutoLow:'Auto Baxua',qualityLow:'Baxua',windowModeWindow:'Leihoa',windowModeOpaque:'Opakoa',windowModeTransparent:'Gardena',windowMode:'Leihoaren modua',flashvars:'Flash Aldagaiak',bgcolor:'Atzeko kolorea',width:'Zabalera',height:'Altuera',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Mesedez URL esteka idatzi',validateWidth:'Zabalera zenbaki bat izan behar da.',validateHeight:'Altuera zenbaki bat izan behar da.',validateHSpace:'HSpace zenbaki bat izan behar da.',validateVSpace:'VSpace zenbaki bat izan behar da.'},spellCheck:{toolbar:'Ortografia',title:'Ortografia zuzenketa',notAvailable:'Barkatu baina momentu honetan zerbitzua ez dago erabilgarri.',errorLoading:'Errorea gertatu da aplikazioa zerbitzaritik kargatzean: %s.',notInDic:'Ez dago hiztegian',changeTo:'Honekin ordezkatu',btnIgnore:'Ezikusi',btnIgnoreAll:'Denak Ezikusi',btnReplace:'Ordezkatu',btnReplaceAll:'Denak Ordezkatu',btnUndo:'Desegin',noSuggestions:'- Iradokizunik ez -',progress:'Zuzenketa ortografikoa martxan...',noMispell:'Zuzenketa ortografikoa bukatuta: Akatsik ez',noChanges:'Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu',oneChange:'Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da',manyChanges:'Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira',ieSpellDownload:'Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?'},smiley:{toolbar:'Aurpegierak',title:'Aurpegiera Sartu'},elementsPath:{eleTitle:'%1 elementua'},numberedlist:'Zenbakidun Zerrenda',bulletedlist:'Buletdun Zerrenda',indent:'Handitu Koska',outdent:'Txikitu Koska',justify:{left:'Lerrokatu Ezkerrean',center:'Lerrokatu Erdian',right:'Lerrokatu Eskuman',block:'Justifikatu'},blockquote:'Aipamen blokea',clipboard:{title:'Itsatsi',cutError:'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+X).',copyError:'Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+C).',pasteMsg:'Mesedez teklatua erabilita (<STRONG>Ctrl+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.',securityMsg:'Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.'},pastefromword:{toolbar:'Itsatsi Word-etik',title:'Itsatsi Word-etik',advice:'Mesedez teklatua erabilita (<STRONG>Ctrl+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.',ignoreFontFace:'Letra Motaren definizioa ezikusi',removeStyle:'Estilo definizioak kendu'},pasteText:{button:'Testu Arrunta bezala Itsatsi',title:'Testu Arrunta bezala Itsatsi'},templates:{button:'Txantiloiak',title:'Eduki Txantiloiak',insertOption:'Ordeztu oraingo edukiak',selectPromptMsg:'Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):',emptyListMsg:'(Ez dago definitutako txantiloirik)'},showBlocks:'Blokeak erakutsi',stylesCombo:{label:'Estiloa',voiceLabel:'Estiloak',panelVoiceLabel:'Estilo bat aukeratu',panelTitle1:'Bloke Estiloak',panelTitle2:'Inline Estiloak',panelTitle3:'Objektu Estiloak'},format:{label:'Formatua',voiceLabel:'Formatua',panelTitle:'Formatua',panelVoiceLabel:'Aukeratu paragrafo formatu bat',tag_p:'Arrunta',tag_pre:'Formateatua',tag_address:'Helbidea',tag_h1:'Izenburua 1',tag_h2:'Izenburua 2',tag_h3:'Izenburua 3',tag_h4:'Izenburua 4',tag_h5:'Izenburua 5',tag_h6:'Izenburua 6',tag_div:'Paragrafoa (DIV)'},font:{label:'Letra-tipoa',voiceLabel:'Letra-tipoa',panelTitle:'Letra-tipoa',panelVoiceLabel:'Aukeratu letra-tipoa'},fontSize:{label:'Tamaina',voiceLabel:'Tamaina',panelTitle:'Tamaina',panelVoiceLabel:'Aukeratu letraren tamaina'},colorButton:{textColorTitle:'Testu Kolorea',bgColorTitle:'Atzeko kolorea',auto:'Automatikoa',more:'Kolore gehiago...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Ortografia Zuzenketa Idatzi Ahala (SCAYT)',enable:'Gaitu SCAYT',disable:'Desgaitu SCAYT',about:'SCAYTi buruz',toggle:'SCAYT aldatu',options:'Aukerak',langs:'Hizkuntzak',moreSuggestions:'Iradokizun gehiago',ignore:'Baztertu',ignoreAll:'Denak baztertu',addWord:'Hitza Gehitu',emptyDic:'Hiztegiaren izena ezin da hutsik egon.',optionsTab:'Aukerak',languagesTab:'Hizkuntzak',dictionariesTab:'Hiztegiak',aboutTab:'Honi buruz'},about:{title:'CKEditor(r)i buruz',dlgTitle:'CKEditor(r)i buruz',moreInfo:'Lizentziari buruzko informazioa gure webgunean:',copy:'Copyright &copy; $1. Eskubide guztiak erreserbaturik.'},maximize:'Maximizatu',fakeobjects:{anchor:'Aingura',flash:'Flash Animazioa',div:'Orrialde Saltoa',unknown:'Objektu ezezaguna'},resize:'Arrastatu tamaina aldatzeko'};\r
diff --git a/lang/fa.js b/lang/fa.js
new file mode 100644 (file)
index 0000000..a3730bf
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.fa={dir:'rtl',editorTitle:'Rich text editor, %1',source:'منبع',newPage:'برگهٴ تازه',save:'ذخیره',preview:'پیشنمایش',cut:'برش',copy:'کپی',paste:'چسباندن',print:'چاپ',underline:'خطزیردار',bold:'درشت',italic:'خمیده',selectAll:'گزینش همه',removeFormat:'برداشتن فرمت',strike:'میانخط',subscript:'زیرنویس',superscript:'بالانویس',horizontalrule:'گنجاندن خط ِافقی',pagebreak:'گنجاندن شکستگی ِپایان ِبرگه',unlink:'برداشتن پیوند',undo:'واچیدن',redo:'بازچیدن',common:{browseServer:'فهرستنمایی سرور',url:'URL',protocol:'پروتکل',upload:'انتقال به سرور',uploadSubmit:'به سرور بفرست',image:'تصویر',flash:'Flash',form:'فرم',checkbox:'خانهٴ گزینهای',radio:'دکمهٴ رادیویی',textField:'فیلد متنی',textarea:'ناحیهٴ متنی',hiddenField:'فیلد پنهان',button:'دکمه',select:'فیلد چندگزینهای',imageButton:'دکمهٴ تصویری',notSet:'<تعیننشده>',id:'شناسه',name:'نام',langDir:'جهتنمای زبان',langDirLtr:'چپ به راست (LTR)',langDirRtl:'راست به چپ (RTL)',langCode:'کد زبان',longDescr:'URL توصیف طولانی',cssClass:'کلاسهای شیوهنامه(Stylesheet)',advisoryTitle:'عنوان کمکی',cssStyle:'شیوه(style)',ok:'پذیرش',cancel:'انصراف',generalTab:'General',advancedTab:'پیشرفته',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'گنجاندن نویسهٴ ویژه',title:'گزینش نویسهٴویژه'},link:{toolbar:'گنجاندن/ویرایش ِپیوند',menu:'ویرایش پیوند',title:'پیوند',info:'اطلاعات پیوند',target:'مقصد',upload:'انتقال به سرور',advanced:'پیشرفته',type:'نوع پیوند',toAnchor:'لنگر در همین صفحه',toEmail:'پست الکترونیکی',target:'مقصد',targetNotSet:'<تعیننشده>',targetFrame:'<فریم>',targetPopup:'<پنجرهٴ پاپاپ>',targetNew:'پنجرهٴ دیگر (_blank)',targetTop:'بالاترین پنجره (_top)',targetSelf:'همان پنجره (_self)',targetParent:'پنجرهٴ والد (_parent)',targetFrameName:'نام فریم مقصد',targetPopupName:'نام پنجرهٴ پاپاپ',popupFeatures:'ویژگیهای پنجرهٴ پاپاپ',popupResizable:'Resizable',popupStatusBar:'نوار وضعیت',popupLocationBar:'نوار موقعیت',popupToolbar:'نوارابزار',popupMenuBar:'نوار منو',popupFullScreen:'تمامصفحه (IE)',popupScrollBars:'میلههای پیمایش',popupDependent:'وابسته (Netscape)',popupWidth:'پهنا',popupLeft:'موقعیت ِچپ',popupHeight:'درازا',popupTop:'موقعیت ِبالا',id:'Id',langDir:'جهتنمای زبان',langDirNotSet:'<تعیننشده>',langDirLTR:'چپ به راست (LTR)',langDirRTL:'راست به چپ (RTL)',acccessKey:'کلید دستیابی',name:'نام',langCode:'جهتنمای زبان',tabIndex:'نمایهٴ دسترسی با Tab',advisoryTitle:'عنوان کمکی',advisoryContentType:'نوع محتوای کمکی',cssClasses:'کلاسهای شیوهنامه(Stylesheet)',charset:'نویسهگان منبع ِپیوندشده',styles:'شیوه(style)',selectAnchor:'یک لنگر برگزینید',anchorName:'با نام لنگر',anchorId:'با شناسهٴ المان',emailAddress:'نشانی پست الکترونیکی',emailSubject:'موضوع پیام',emailBody:'متن پیام',noAnchors:'(در این سند لنگری دردسترس نیست)',noUrl:'لطفا URL پیوند را بنویسید',noEmail:'لطفا نشانی پست الکترونیکی را بنویسید'},anchor:{toolbar:'گنجاندن/ویرایش ِلنگر',menu:'ویژگیهای لنگر',title:'ویژگیهای لنگر',name:'نام لنگر',errorName:'لطفا نام لنگر را بنویسید'},findAndReplace:{title:'جستجو و جایگزینی',find:'جستجو',replace:'جایگزینی',findWhat:'چهچیز را مییابید:',replaceWith:'جایگزینی با:',notFoundMsg:'متن موردنظر یافت نشد.',matchCase:'همسانی در بزرگی و کوچکی نویسهها',matchWord:'همسانی با واژهٴ کامل',matchCyclic:'Match cyclic',replaceAll:'جایگزینی همهٴ یافتهها',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'جدول',title:'ویژگیهای جدول',menu:'ویژگیهای جدول',deleteTable:'پاککردن جدول',rows:'سطرها',columns:'ستونها',border:'اندازهٴ لبه',align:'چینش',alignNotSet:'<تعیننشده>',alignLeft:'چپ',alignCenter:'وسط',alignRight:'راست',width:'پهنا',widthPx:'پیکسل',widthPc:'درصد',height:'درازا',cellSpace:'فاصلهٴ میان سلولها',cellPad:'فاصلهٴ پرشده در سلول',caption:'عنوان',summary:'خلاصه',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'سلول',insertBefore:'افزودن سلول قبل از',insertAfter:'افزودن سلول بعد از',deleteCell:'حذف سلولها',merge:'ادغام سلولها',mergeRight:'ادغام به راست',mergeDown:'ادغام به پایین',splitHorizontal:'جدا کردن افقی سلول',splitVertical:'جدا کردن عمودی سلول',title:'ویژگیهای سلول',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'سطر',insertBefore:'افزودن سطر قبل از',insertAfter:'افزودن سطر بعد از',deleteRow:'حذف سطرها'},column:{menu:'ستون',insertBefore:'افزودن ستون قبل از',insertAfter:'افزودن ستون بعد از',deleteColumn:'حذف ستونها'}},button:{title:'ویژگیهای دکمه',text:'متن (مقدار)',type:'نوع',typeBtn:'دکمه',typeSbm:'Submit',typeRst:'بازنشانی (Reset)'},checkboxAndRadio:{checkboxTitle:'ویژگیهای خانهٴ گزینهای',radioTitle:'ویژگیهای دکمهٴ رادیویی',value:'مقدار',selected:'برگزیده'},form:{title:'ویژگیهای فرم',menu:'ویژگیهای فرم',action:'رویداد',method:'متد',encoding:'Encoding',target:'مقصد',targetNotSet:'<تعیننشده>',targetNew:'پنجرهٴ دیگر (_blank)',targetTop:'بالاترین پنجره (_top)',targetSelf:'همان پنجره (_self)',targetParent:'پنجرهٴ والد (_parent)'},select:{title:'ویژگیهای فیلد چندگزینهای',selectInfo:'اطلاعات',opAvail:'گزینههای دردسترس',value:'مقدار',size:'اندازه',lines:'خطوط',chkMulti:'گزینش چندگانه فراهم باشد',opText:'متن',opValue:'مقدار',btnAdd:'افزودن',btnModify:'ویرایش',btnUp:'بالا',btnDown:'پائین',btnSetValue:'تنظیم به عنوان مقدار ِبرگزیده',btnDelete:'پاککردن'},textarea:{title:'ویژگیهای ناحیهٴ متنی',cols:'ستونها',rows:'سطرها'},textfield:{title:'ویژگیهای فیلد متنی',name:'نام',value:'مقدار',charWidth:'پهنای نویسه',maxChars:'بیشینهٴ نویسهها',type:'نوع',typeText:'متن',typePass:'گذرواژه'},hidden:{title:'ویژگیهای فیلد پنهان',name:'نام',value:'مقدار'},image:{title:'ویژگیهای تصویر',titleButton:'ویژگیهای دکمهٴ تصویری',menu:'ویژگیهای تصویر',infoTab:'اطلاعات تصویر',btnUpload:'به سرور بفرست',url:'URL',upload:'انتقال به سرور',alt:'متن جایگزین',width:'پهنا',height:'درازا',lockRatio:'قفلکردن ِنسبت',resetSize:'بازنشانی اندازه',border:'لبه',hSpace:'فاصلهٴ افقی',vSpace:'فاصلهٴ عمودی',align:'چینش',alignLeft:'چپ',alignAbsBottom:'پائین مطلق',alignAbsMiddle:'وسط مطلق',alignBaseline:'خطپایه',alignBottom:'پائین',alignMiddle:'وسط',alignRight:'راست',alignTextTop:'متن بالا',alignTop:'بالا',preview:'پیشنمایش',alertUrl:'لطفا URL تصویر را بنویسید',linkTab:'پیوند',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'ویژگیهای Flash',propertiesTab:'Properties',title:'ویژگیهای Flash',chkPlay:'آغاز ِخودکار',chkLoop:'اجرای پیاپی',chkMenu:'دردسترسبودن منوی Flash',chkFull:'Allow Fullscreen',scale:'مقیاس',scaleAll:'نمایش همه',scaleNoBorder:'بدون کران',scaleFit:'جایگیری کامل',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'چینش',alignLeft:'چپ',alignAbsBottom:'پائین مطلق',alignAbsMiddle:'وسط مطلق',alignBaseline:'خطپایه',alignBottom:'پائین',alignMiddle:'وسط',alignRight:'راست',alignTextTop:'متن بالا',alignTop:'بالا',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'رنگ پسزمینه',width:'پهنا',height:'درازا',hSpace:'فاصلهٴ افقی',vSpace:'فاصلهٴ عمودی',validateSrc:'لطفا URL پیوند را بنویسید',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'بررسی املا',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'در واژهنامه یافت نشد',changeTo:'تغییر به',btnIgnore:'چشمپوشی',btnIgnoreAll:'چشمپوشی همه',btnReplace:'جایگزینی',btnReplaceAll:'جایگزینی همه',btnUndo:'واچینش',noSuggestions:'- پیشنهادی نیست -',progress:'بررسی املا در حال انجام...',noMispell:'بررسی املا انجام شد. هیچ غلطاملائی یافت نشد',noChanges:'بررسی املا انجام شد. هیچ واژهای تغییر نیافت',oneChange:'بررسی املا انجام شد. یک واژه تغییر یافت',manyChanges:'بررسی املا انجام شد. %1 واژه تغییر یافت',ieSpellDownload:'بررسیکنندهٴ املا نصب نشده است. آیا میخواهید آن را هماکنون دریافت کنید؟'},smiley:{toolbar:'خندانک',title:'گنجاندن خندانک'},elementsPath:{eleTitle:'%1 element'},numberedlist:'فهرست شمارهدار',bulletedlist:'فهرست نقطهای',indent:'افزایش تورفتگی',outdent:'کاهش تورفتگی',justify:{left:'چپچین',center:'میانچین',right:'راستچین',block:'بلوکچین'},blockquote:'بلوک نقل قول',clipboard:{title:'چسباندن',cutError:'تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحهکلید این کار را انجام دهید (Ctrl+X).',copyError:'تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپیکردن را انجام دهد. لطفا با دکمههای صفحهکلید این کار را انجام دهید (Ctrl+C).',pasteMsg:'لطفا متن را با کلیدهای (<STRONG>Ctrl+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.',securityMsg:'به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمیتواند دسترسی مستقیم به دادههای clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.'},pastefromword:{toolbar:'چسباندن از Word',title:'چسباندن از Word',advice:'لطفا متن را با کلیدهای (<STRONG>Ctrl+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.',ignoreFontFace:'چشمپوشی از تعاریف نوع قلم',removeStyle:'چشمپوشی از تعاریف سبک (style)'},pasteText:{button:'چسباندن به عنوان متن ِساده',title:'چسباندن به عنوان متن ِساده'},templates:{button:'الگوها',title:'الگوهای محتویات',insertOption:'محتویات کنونی جایگزین شوند',selectPromptMsg:'لطفا الگوی موردنظر را برای بازکردن در ویرایشگر برگزینید<br>(محتویات کنونی از دست خواهند رفت):',emptyListMsg:'(الگوئی تعریف نشده است)'},showBlocks:'نمایش بلوکها',stylesCombo:{label:'سبک',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'فرمت',voiceLabel:'Format',panelTitle:'فرمت',panelVoiceLabel:'Select a paragraph format',tag_p:'نرمال',tag_pre:'فرمتشده',tag_address:'آدرس',tag_h1:'سرنویس 1',tag_h2:'سرنویس 2',tag_h3:'سرنویس 3',tag_h4:'سرنویس 4',tag_h5:'سرنویس 5',tag_h6:'سرنویس 6',tag_div:'بند'},font:{label:'قلم',voiceLabel:'Font',panelTitle:'قلم',panelVoiceLabel:'Select a font'},fontSize:{label:'اندازه',voiceLabel:'Font Size',panelTitle:'اندازه',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'رنگ متن',bgColorTitle:'رنگ پسزمینه',auto:'خودکار',more:'رنگهای بیشتر...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/fi.js b/lang/fi.js
new file mode 100644 (file)
index 0000000..07ec7f7
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.fi={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Koodi',newPage:'Tyhjennä',save:'Tallenna',preview:'Esikatsele',cut:'Leikkaa',copy:'Kopioi',paste:'Liitä',print:'Tulosta',underline:'Alleviivattu',bold:'Lihavoitu',italic:'Kursivoitu',selectAll:'Valitse kaikki',removeFormat:'Poista muotoilu',strike:'Yliviivattu',subscript:'Alaindeksi',superscript:'Yläindeksi',horizontalrule:'Lisää murtoviiva',pagebreak:'Lisää sivun vaihto',unlink:'Poista linkki',undo:'Kumoa',redo:'Toista',common:{browseServer:'Selaa palvelinta',url:'Osoite',protocol:'Protokolla',upload:'Lisää tiedosto',uploadSubmit:'Lähetä palvelimelle',image:'Kuva',flash:'Flash',form:'Lomake',checkbox:'Valintaruutu',radio:'Radiopainike',textField:'Tekstikenttä',textarea:'Tekstilaatikko',hiddenField:'Piilokenttä',button:'Painike',select:'Valintakenttä',imageButton:'Kuvapainike',notSet:'<ei asetettu>',id:'Tunniste',name:'Nimi',langDir:'Kielen suunta',langDirLtr:'Vasemmalta oikealle (LTR)',langDirRtl:'Oikealta vasemmalle (RTL)',langCode:'Kielikoodi',longDescr:'Pitkän kuvauksen URL',cssClass:'Tyyliluokat',advisoryTitle:'Avustava otsikko',cssStyle:'Tyyli',ok:'OK',cancel:'Peruuta',generalTab:'General',advancedTab:'Lisäominaisuudet',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Lisää erikoismerkki',title:'Valitse erikoismerkki'},link:{toolbar:'Lisää linkki/muokkaa linkkiä',menu:'Muokkaa linkkiä',title:'Linkki',info:'Linkin tiedot',target:'Kohde',upload:'Lisää tiedosto',advanced:'Lisäominaisuudet',type:'Linkkityyppi',toAnchor:'Ankkuri tässä sivussa',toEmail:'Sähköposti',target:'Kohde',targetNotSet:'<ei asetettu>',targetFrame:'<kehys>',targetPopup:'<popup ikkuna>',targetNew:'Uusi ikkuna (_blank)',targetTop:'Päällimmäisin ikkuna (_top)',targetSelf:'Sama ikkuna (_self)',targetParent:'Emoikkuna (_parent)',targetFrameName:'Kohdekehyksen nimi',targetPopupName:'Popup ikkunan nimi',popupFeatures:'Popup ikkunan ominaisuudet',popupResizable:'Resizable',popupStatusBar:'Tilarivi',popupLocationBar:'Osoiterivi',popupToolbar:'Vakiopainikkeet',popupMenuBar:'Valikkorivi',popupFullScreen:'Täysi ikkuna (IE)',popupScrollBars:'Vierityspalkit',popupDependent:'Riippuva (Netscape)',popupWidth:'Leveys',popupLeft:'Vasemmalta (px)',popupHeight:'Korkeus',popupTop:'Ylhäältä (px)',id:'Id',langDir:'Kielen suunta',langDirNotSet:'<ei asetettu>',langDirLTR:'Vasemmalta oikealle (LTR)',langDirRTL:'Oikealta vasemmalle (RTL)',acccessKey:'Pikanäppäin',name:'Nimi',langCode:'Kielen suunta',tabIndex:'Tabulaattori indeksi',advisoryTitle:'Avustava otsikko',advisoryContentType:'Avustava sisällön tyyppi',cssClasses:'Tyyliluokat',charset:'Linkitetty kirjaimisto',styles:'Tyyli',selectAnchor:'Valitse ankkuri',anchorName:'Ankkurin nimen mukaan',anchorId:'Ankkurin ID:n mukaan',emailAddress:'Sähköpostiosoite',emailSubject:'Aihe',emailBody:'Viesti',noAnchors:'(Ei ankkureita tässä dokumentissa)',noUrl:'Linkille on kirjoitettava URL',noEmail:'Kirjoita sähköpostiosoite'},anchor:{toolbar:'Lisää ankkuri/muokkaa ankkuria',menu:'Ankkurin ominaisuudet',title:'Ankkurin ominaisuudet',name:'Nimi',errorName:'Ankkurille on kirjoitettava nimi'},findAndReplace:{title:'Etsi ja korvaa',find:'Etsi',replace:'Korvaa',findWhat:'Etsi mitä:',replaceWith:'Korvaa tällä:',notFoundMsg:'Etsittyä tekstiä ei löytynyt.',matchCase:'Sama kirjainkoko',matchWord:'Koko sana',matchCyclic:'Match cyclic',replaceAll:'Korvaa kaikki',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Taulu',title:'Taulun ominaisuudet',menu:'Taulun ominaisuudet',deleteTable:'Poista taulu',rows:'Rivit',columns:'Sarakkeet',border:'Rajan paksuus',align:'Kohdistus',alignNotSet:'<ei asetettu>',alignLeft:'Vasemmalle',alignCenter:'Keskelle',alignRight:'Oikealle',width:'Leveys',widthPx:'pikseliä',widthPc:'prosenttia',height:'Korkeus',cellSpace:'Solujen väli',cellPad:'Solujen sisennys',caption:'Otsikko',summary:'Yhteenveto',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Solu',insertBefore:'Lisää solu eteen',insertAfter:'Lisää solu perään',deleteCell:'Poista solut',merge:'Yhdistä solut',mergeRight:'Yhdistä oikealla olevan kanssa',mergeDown:'Yhdistä alla olevan kanssa',splitHorizontal:'Jaa solu vaakasuunnassa',splitVertical:'Jaa solu pystysuunnassa',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Rivi',insertBefore:'Lisää rivi yläpuolelle',insertAfter:'Lisää rivi alapuolelle',deleteRow:'Poista rivit'},column:{menu:'Sarake',insertBefore:'Lisää sarake vasemmalle',insertAfter:'Lisää sarake oikealle',deleteColumn:'Poista sarakkeet'}},button:{title:'Painikkeen ominaisuudet',text:'Teksti (arvo)',type:'Tyyppi',typeBtn:'Painike',typeSbm:'Lähetä',typeRst:'Tyhjennä'},checkboxAndRadio:{checkboxTitle:'Valintaruudun ominaisuudet',radioTitle:'Radiopainikkeen ominaisuudet',value:'Arvo',selected:'Valittu'},form:{title:'Lomakkeen ominaisuudet',menu:'Lomakkeen ominaisuudet',action:'Toiminto',method:'Tapa',encoding:'Encoding',target:'Kohde',targetNotSet:'<ei asetettu>',targetNew:'Uusi ikkuna (_blank)',targetTop:'Päällimmäisin ikkuna (_top)',targetSelf:'Sama ikkuna (_self)',targetParent:'Emoikkuna (_parent)'},select:{title:'Valintakentän ominaisuudet',selectInfo:'Info',opAvail:'Ominaisuudet',value:'Arvo',size:'Koko',lines:'Rivit',chkMulti:'Salli usea valinta',opText:'Teksti',opValue:'Arvo',btnAdd:'Lisää',btnModify:'Muuta',btnUp:'Ylös',btnDown:'Alas',btnSetValue:'Aseta valituksi',btnDelete:'Poista'},textarea:{title:'Tekstilaatikon ominaisuudet',cols:'Sarakkeita',rows:'Rivejä'},textfield:{title:'Tekstikentän ominaisuudet',name:'Nimi',value:'Arvo',charWidth:'Leveys',maxChars:'Maksimi merkkimäärä',type:'Tyyppi',typeText:'Teksti',typePass:'Salasana'},hidden:{title:'Piilokentän ominaisuudet',name:'Nimi',value:'Arvo'},image:{title:'Kuvan ominaisuudet',titleButton:'Kuvapainikkeen ominaisuudet',menu:'Kuvan ominaisuudet',infoTab:'Kuvan tiedot',btnUpload:'Lähetä palvelimelle',url:'Osoite',upload:'Lisää kuva',alt:'Vaihtoehtoinen teksti',width:'Leveys',height:'Korkeus',lockRatio:'Lukitse suhteet',resetSize:'Alkuperäinen koko',border:'Raja',hSpace:'Vaakatila',vSpace:'Pystytila',align:'Kohdistus',alignLeft:'Vasemmalle',alignAbsBottom:'Aivan alas',alignAbsMiddle:'Aivan keskelle',alignBaseline:'Alas (teksti)',alignBottom:'Alas',alignMiddle:'Keskelle',alignRight:'Oikealle',alignTextTop:'Ylös (teksti)',alignTop:'Ylös',preview:'Esikatselu',alertUrl:'Kirjoita kuvan osoite (URL)',linkTab:'Linkki',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash ominaisuudet',propertiesTab:'Properties',title:'Flash ominaisuudet',chkPlay:'Automaattinen käynnistys',chkLoop:'Toisto',chkMenu:'Näytä Flash-valikko',chkFull:'Allow Fullscreen',scale:'Levitä',scaleAll:'Näytä kaikki',scaleNoBorder:'Ei rajaa',scaleFit:'Tarkka koko',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Kohdistus',alignLeft:'Vasemmalle',alignAbsBottom:'Aivan alas',alignAbsMiddle:'Aivan keskelle',alignBaseline:'Alas (teksti)',alignBottom:'Alas',alignMiddle:'Keskelle',alignRight:'Oikealle',alignTextTop:'Ylös (teksti)',alignTop:'Ylös',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Taustaväri',width:'Leveys',height:'Korkeus',hSpace:'Vaakatila',vSpace:'Pystytila',validateSrc:'Linkille on kirjoitettava URL',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Tarkista oikeinkirjoitus',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ei sanakirjassa',changeTo:'Vaihda',btnIgnore:'Jätä huomioimatta',btnIgnoreAll:'Jätä kaikki huomioimatta',btnReplace:'Korvaa',btnReplaceAll:'Korvaa kaikki',btnUndo:'Kumoa',noSuggestions:'Ei ehdotuksia',progress:'Tarkistus käynnissä...',noMispell:'Tarkistus valmis: Ei virheitä',noChanges:'Tarkistus valmis: Yhtään sanaa ei muutettu',oneChange:'Tarkistus valmis: Yksi sana muutettiin',manyChanges:'Tarkistus valmis: %1 sanaa muutettiin',ieSpellDownload:'Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?'},smiley:{toolbar:'Hymiö',title:'Lisää hymiö'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Numerointi',bulletedlist:'Luottelomerkit',indent:'Suurenna sisennystä',outdent:'Pienennä sisennystä',justify:{left:'Tasaa vasemmat reunat',center:'Keskitä',right:'Tasaa oikeat reunat',block:'Tasaa molemmat reunat'},blockquote:'Lainaus',clipboard:{title:'Liitä',cutError:'Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).',copyError:'Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).',pasteMsg:'Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.',securityMsg:'Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.'},pastefromword:{toolbar:'Liitä Wordista',title:'Liitä Wordista',advice:'Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.',ignoreFontFace:'Jätä huomioimatta fonttimääritykset',removeStyle:'Poista tyylimääritykset'},pasteText:{button:'Liitä tekstinä',title:'Liitä tekstinä'},templates:{button:'Pohjat',title:'Sisältöpohjat',insertOption:'Korvaa editorin koko sisältö',selectPromptMsg:'Valitse pohja editoriin<br>(aiempi sisältö menetetään):',emptyListMsg:'(Ei määriteltyjä pohjia)'},showBlocks:'Näytä elementit',stylesCombo:{label:'Tyyli',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Muotoilu',voiceLabel:'Format',panelTitle:'Muotoilu',panelVoiceLabel:'Select a paragraph format',tag_p:'Normaali',tag_pre:'Muotoiltu',tag_address:'Osoite',tag_h1:'Otsikko 1',tag_h2:'Otsikko 2',tag_h3:'Otsikko 3',tag_h4:'Otsikko 4',tag_h5:'Otsikko 5',tag_h6:'Otsikko 6',tag_div:'Normal (DIV)'},font:{label:'Fontti',voiceLabel:'Font',panelTitle:'Fontti',panelVoiceLabel:'Select a font'},fontSize:{label:'Koko',voiceLabel:'Font Size',panelTitle:'Koko',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Tekstiväri',bgColorTitle:'Taustaväri',auto:'Automaattinen',more:'Lisää värejä...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/fo.js b/lang/fo.js
new file mode 100644 (file)
index 0000000..07e42bb
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.fo={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Kelda',newPage:'Nýggj síða',save:'Goym',preview:'Frumsýning',cut:'Kvett',copy:'Avrita',paste:'Innrita',print:'Prenta',underline:'Undirstrikað',bold:'Feit skrift',italic:'Skráskrift',selectAll:'Markera alt',removeFormat:'Strika sniðgeving',strike:'Yvirstrikað',subscript:'Lækkað skrift',superscript:'Hækkað skrift',horizontalrule:'Ger vatnrætta linju',pagebreak:'Ger síðuskift',unlink:'Strika tilknýti',undo:'Angra',redo:'Vend aftur',common:{browseServer:'Ambætarakagi',url:'URL',protocol:'Protokoll',upload:'Send til ambætaran',uploadSubmit:'Send til ambætaran',image:'Myndir',flash:'Flash',form:'Formur',checkbox:'Flugubein',radio:'Radioknøttur',textField:'Tekstteigur',textarea:'Tekstumráði',hiddenField:'Fjaldur teigur',button:'Knøttur',select:'Valskrá',imageButton:'Myndaknøttur',notSet:'<ikki sett>',id:'Id',name:'Navn',langDir:'Tekstkós',langDirLtr:'Frá vinstru til høgru (LTR)',langDirRtl:'Frá høgru til vinstru (RTL)',langCode:'Málkoda',longDescr:'Víðkað URL frágreiðing',cssClass:'Typografi klassar',advisoryTitle:'Vegleiðandi heiti',cssStyle:'Typografi',ok:'Góðkent',cancel:'Avlýst',generalTab:'Generelt',advancedTab:'Fjølbroytt',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Set inn sertekn',title:'Vel sertekn'},link:{toolbar:'Ger/broyt tilknýti',menu:'Broyt tilknýti',title:'Tilknýti',info:'Tilknýtis upplýsingar',target:'Mál',upload:'Send til ambætaran',advanced:'Fjølbroytt',type:'Tilknýtisslag',toAnchor:'Tilknýti til marknastein í tekstinum',toEmail:'Teldupostur',target:'Mál',targetNotSet:'<ikki sett>',targetFrame:'<ramma>',targetPopup:'<popup vindeyga>',targetNew:'Nýtt vindeyga (_blank)',targetTop:'Alt vindeygað (_top)',targetSelf:'Sama vindeygað (_self)',targetParent:'Upphavliga vindeygað (_parent)',targetFrameName:'Vís navn vindeygans',targetPopupName:'Popup vindeygans navn',popupFeatures:'Popup vindeygans víðkaðu eginleikar',popupResizable:'Resizable',popupStatusBar:'Støðufrágreiðingarbjálki',popupLocationBar:'Adressulinja',popupToolbar:'Amboðsbjálki',popupMenuBar:'Skrábjálki',popupFullScreen:'Fullur skermur (IE)',popupScrollBars:'Rullibjálki',popupDependent:'Bundið (Netscape)',popupWidth:'Breidd',popupLeft:'Frástøða frá vinstru',popupHeight:'Hædd',popupTop:'Frástøða frá íerva',id:'Id',langDir:'Tekstkós',langDirNotSet:'<ikki sett>',langDirLTR:'Frá vinstru til høgru (LTR)',langDirRTL:'Frá høgru til vinstru (RTL)',acccessKey:'Snarvegisknappur',name:'Navn',langCode:'Tekstkós',tabIndex:'Inntriv indeks',advisoryTitle:'Vegleiðandi heiti',advisoryContentType:'Vegleiðandi innihaldsslag',cssClasses:'Typografi klassar',charset:'Atknýtt teknsett',styles:'Typografi',selectAnchor:'Vel ein marknastein',anchorName:'Eftir navni á marknasteini',anchorId:'Eftir element Id',emailAddress:'Teldupost-adressa',emailSubject:'Evni',emailBody:'Breyðtekstur',noAnchors:'(Eingir marknasteinar eru í hesum dokumentið)',noUrl:'Vinarliga skriva tilknýti (URL)',noEmail:'Vinarliga skriva teldupost-adressu'},anchor:{toolbar:'Ger/broyt marknastein',menu:'Eginleikar fyri marknastein',title:'Eginleikar fyri marknastein',name:'Heiti marknasteinsins',errorName:'Vinarliga rita marknasteinsins heiti'},findAndReplace:{title:'Finn og broyt',find:'Leita',replace:'Yvirskriva',findWhat:'Finn:',replaceWith:'Yvirskriva við:',notFoundMsg:'Leititeksturin varð ikki funnin',matchCase:'Munur á stórum og smáðum bókstavum',matchWord:'Bert heil orð',matchCyclic:'Match cyclic',replaceAll:'Yvirskriva alt',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabell',title:'Eginleikar fyri tabell',menu:'Eginleikar fyri tabell',deleteTable:'Strika tabell',rows:'Røðir',columns:'Kolonnur',border:'Bordabreidd',align:'Justering',alignNotSet:'<Einki valt>',alignLeft:'Vinstrasett',alignCenter:'Miðsett',alignRight:'Høgrasett',width:'Breidd',widthPx:'pixels',widthPc:'prosent',height:'Hædd',cellSpace:'Fjarstøða millum meskar',cellPad:'Meskubreddi',caption:'Tabellfrágreiðing',summary:'Samandráttur',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Meski',insertBefore:'Set meska inn áðrenn',insertAfter:'Set meska inn aftaná',deleteCell:'Strika meskar',merge:'Flætta meskar',mergeRight:'Flætta meskar til høgru',mergeDown:'Flætta saman',splitHorizontal:'Kloyv meska vatnrætt',splitVertical:'Kloyv meska loddrætt',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Rað',insertBefore:'Set rað inn áðrenn',insertAfter:'Set rað inn aftaná',deleteRow:'Strika røðir'},column:{menu:'Kolonna',insertBefore:'Set kolonnu inn áðrenn',insertAfter:'Set kolonnu inn aftaná',deleteColumn:'Strika kolonnur'}},button:{title:'Eginleikar fyri knøtt',text:'Tekstur',type:'Slag',typeBtn:'Knøttur',typeSbm:'Send',typeRst:'Nullstilla'},checkboxAndRadio:{checkboxTitle:'Eginleikar fyri flugubein',radioTitle:'Eginleikar fyri radioknøtt',value:'Virði',selected:'Valt'},form:{title:'Eginleikar fyri Form',menu:'Eginleikar fyri Form',action:'Hending',method:'Háttur',encoding:'Encoding',target:'Mál',targetNotSet:'<ikki sett>',targetNew:'Nýtt vindeyga (_blank)',targetTop:'Alt vindeygað (_top)',targetSelf:'Sama vindeygað (_self)',targetParent:'Upphavliga vindeygað (_parent)'},select:{title:'Eginleikar fyri valskrá',selectInfo:'Upplýsingar',opAvail:'Tøkir møguleikar',value:'Virði',size:'Stødd',lines:'Linjur',chkMulti:'Loyv fleiri valmøguleikum samstundis',opText:'Tekstur',opValue:'Virði',btnAdd:'Legg afturat',btnModify:'Broyt',btnUp:'Upp',btnDown:'Niður',btnSetValue:'Set sum valt virði',btnDelete:'Strika'},textarea:{title:'Eginleikar fyri tekstumráði',cols:'kolonnur',rows:'røðir'},textfield:{title:'Eginleikar fyri tekstteig',name:'Navn',value:'Virði',charWidth:'Breidd (sjónlig tekn)',maxChars:'Mest loyvdu tekn',type:'Slag',typeText:'Tekstur',typePass:'Loyniorð'},hidden:{title:'Eginleikar fyri fjaldan teig',name:'Navn',value:'Virði'},image:{title:'Myndaeginleikar',titleButton:'Eginleikar fyri myndaknøtt',menu:'Myndaeginleikar',infoTab:'Myndaupplýsingar',btnUpload:'Send til ambætaran',url:'URL',upload:'Send',alt:'Alternativur tekstur',width:'Breidd',height:'Hædd',lockRatio:'Læs lutfallið',resetSize:'Upprunastødd',border:'Bordi',hSpace:'Høgri breddi',vSpace:'Vinstri breddi',align:'Justering',alignLeft:'Vinstra',alignAbsBottom:'Abs botnur',alignAbsMiddle:'Abs miðja',alignBaseline:'Basislinja',alignBottom:'Botnur',alignMiddle:'Miðja',alignRight:'Høgra',alignTextTop:'Tekst toppur',alignTop:'Ovast',preview:'Frumsýning',alertUrl:'Rita slóðina til myndina',linkTab:'Tilknýti',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash eginleikar',propertiesTab:'Properties',title:'Flash eginleikar',chkPlay:'Avspælingin byrjar sjálv',chkLoop:'Endurspæl',chkMenu:'Ger Flash skrá virkna',chkFull:'Allow Fullscreen',scale:'Skalering',scaleAll:'Vís alt',scaleNoBorder:'Eingin bordi',scaleFit:'Neyv skalering',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Justering',alignLeft:'Vinstra',alignAbsBottom:'Abs botnur',alignAbsMiddle:'Abs miðja',alignBaseline:'Basislinja',alignBottom:'Botnur',alignMiddle:'Miðja',alignRight:'Høgra',alignTextTop:'Tekst toppur',alignTop:'Ovast',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Bakgrundslitur',width:'Breidd',height:'Hædd',hSpace:'Høgri breddi',vSpace:'Vinstri breddi',validateSrc:'Vinarliga skriva tilknýti (URL)',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Kanna stavseting',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Finst ikki í orðabókini',changeTo:'Broyt til',btnIgnore:'Forfjóna',btnIgnoreAll:'Forfjóna alt',btnReplace:'Yvirskriva',btnReplaceAll:'Yvirskriva alt',btnUndo:'Angra',noSuggestions:'- Einki uppskot -',progress:'Rættstavarin arbeiðir...',noMispell:'Rættstavarain liðugur: Eingin feilur funnin',noChanges:'Rættstavarain liðugur: Einki orð varð broytt',oneChange:'Rættstavarain liðugur: Eitt orð er broytt',manyChanges:'Rættstavarain liðugur: %1 orð broytt',ieSpellDownload:'Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?'},smiley:{toolbar:'Smiley',title:'Vel Smiley'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Talmerktur listi',bulletedlist:'Punktmerktur listi',indent:'Økja reglubrotarinntriv',outdent:'Minka reglubrotarinntriv',justify:{left:'Vinstrasett',center:'Miðsett',right:'Høgrasett',block:'Javnir tekstkantar'},blockquote:'Blockquote',clipboard:{title:'Innrita',cutError:'Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (CTRL+X).',copyError:'Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (CTRL+C).',pasteMsg:'Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>CTRL+V</strong>) og klikk á <strong>Góðtak</strong>.',securityMsg:'Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.'},pastefromword:{toolbar:'Innrita frá Word',title:'Innrita frá Word',advice:'Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>CTRL+V</strong>) og klikk á <strong>Góðtak</strong>.',ignoreFontFace:'Forfjóna Font definitiónirnar',removeStyle:'Strika typografi definitiónir'},pasteText:{button:'Innrita som reinan tekst',title:'Innrita som reinan tekst'},templates:{button:'Skabelónir',title:'Innihaldsskabelónir',insertOption:'Yvirskriva núverandi innihald',selectPromptMsg:'Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):',emptyListMsg:'(Ongar skabelónir tøkar)'},showBlocks:'Vís blokkar',stylesCombo:{label:'Typografi',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Skriftsnið',voiceLabel:'Format',panelTitle:'Skriftsnið',panelVoiceLabel:'Select a paragraph format',tag_p:'Vanligt',tag_pre:'Sniðgivið',tag_address:'Adressa',tag_h1:'Yvirskrift 1',tag_h2:'Yvirskrift 2',tag_h3:'Yvirskrift 3',tag_h4:'Yvirskrift 4',tag_h5:'Yvirskrift 5',tag_h6:'Yvirskrift 6',tag_div:'Normal (DIV)'},font:{label:'Skrift',voiceLabel:'Font',panelTitle:'Skrift',panelVoiceLabel:'Select a font'},fontSize:{label:'Skriftstødd',voiceLabel:'Font Size',panelTitle:'Skriftstødd',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Tekstlitur',bgColorTitle:'Bakgrundslitur',auto:'Automatiskt',more:'Fleiri litir...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/fr-ca.js b/lang/fr-ca.js
new file mode 100644 (file)
index 0000000..95954ef
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang['fr-ca']={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Source',newPage:'Nouvelle page',save:'Sauvegarder',preview:'Previsualiser',cut:'Couper',copy:'Copier',paste:'Coller',print:'Imprimer',underline:'Souligné',bold:'Gras',italic:'Italique',selectAll:'Tout sélectionner',removeFormat:'Supprimer le formatage',strike:'Barrer',subscript:'Indice',superscript:'Exposant',horizontalrule:'Insérer un séparateur',pagebreak:'Insérer un saut de page',unlink:'Supprimer le lien',undo:'Annuler',redo:'Refaire',common:{browseServer:'Parcourir le serveur',url:'URL',protocol:'Protocole',upload:'Télécharger',uploadSubmit:'Envoyer sur le serveur',image:'Image',flash:'Animation Flash',form:'Formulaire',checkbox:'Case à cocher',radio:'Bouton radio',textField:'Champ texte',textarea:'Zone de texte',hiddenField:'Champ caché',button:'Bouton',select:'Champ de sélection',imageButton:'Bouton image',notSet:'<Par défaut>',id:'Id',name:'Nom',langDir:"Sens d'écriture",langDirLtr:'De gauche à droite (LTR)',langDirRtl:'De droite à gauche (RTL)',langCode:'Code langue',longDescr:'URL de description longue',cssClass:'Classes de feuilles de style',advisoryTitle:'Titre',cssStyle:'Style',ok:'OK',cancel:'Annuler',generalTab:'Général',advancedTab:'Avancée',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Insérer un caractère spécial',title:'Insérer un caractère spécial'},link:{toolbar:'Insérer/modifier le lien',menu:'Modifier le lien',title:'Propriétés du lien',info:'Informations sur le lien',target:'Destination',upload:'Télécharger',advanced:'Avancée',type:'Type de lien',toAnchor:'Ancre dans cette page',toEmail:'E-Mail',target:'Destination',targetNotSet:'<Par défaut>',targetFrame:'<Cadre>',targetPopup:'<fenêtre popup>',targetNew:'Nouvelle fenêtre (_blank)',targetTop:'Fenêtre supérieure (_top)',targetSelf:'Même fenêtre (_self)',targetParent:'Fenêtre mère (_parent)',targetFrameName:'Nom du cadre de destination',targetPopupName:'Nom de la fenêtre popup',popupFeatures:'Caractéristiques de la fenêtre popup',popupResizable:'Resizable',popupStatusBar:"Barre d'état",popupLocationBar:"Barre d'adresses",popupToolbar:"Barre d'outils",popupMenuBar:'Barre de menu',popupFullScreen:'Plein écran (IE)',popupScrollBars:'Barres de défilement',popupDependent:'Dépendante (Netscape)',popupWidth:'Largeur',popupLeft:'Position à partir de la gauche',popupHeight:'Hauteur',popupTop:'Position à partir du haut',id:'Id',langDir:"Sens d'écriture",langDirNotSet:'<Par défaut>',langDirLTR:'De gauche à droite (LTR)',langDirRTL:'De droite à gauche (RTL)',acccessKey:'Équivalent clavier',name:'Nom',langCode:"Sens d'écriture",tabIndex:'Ordre de tabulation',advisoryTitle:'Titre',advisoryContentType:'Type de contenu',cssClasses:'Classes de feuilles de style',charset:'Encodage de caractère',styles:'Style',selectAnchor:'Sélectionner une ancre',anchorName:'Par nom',anchorId:'Par id',emailAddress:'Adresse E-Mail',emailSubject:'Sujet du message',emailBody:'Corps du message',noAnchors:"(Pas d'ancre disponible dans le document)",noUrl:"Veuillez saisir l'URL",noEmail:"Veuillez saisir l'adresse e-mail"},anchor:{toolbar:"Insérer/modifier l'ancre",menu:"Propriétés de l'ancre",title:"Propriétés de l'ancre",name:"Nom de l'ancre",errorName:"Veuillez saisir le nom de l'ancre"},findAndReplace:{title:'Chercher et Remplacer',find:'Chercher',replace:'Remplacer',findWhat:'Rechercher:',replaceWith:'Remplacer par:',notFoundMsg:'Le texte indiqué est introuvable.',matchCase:'Respecter la casse',matchWord:'Mot entier',matchCyclic:'Match cyclic',replaceAll:'Tout remplacer',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tableau',title:'Propriétés du tableau',menu:'Propriétés du tableau',deleteTable:'Supprimer le tableau',rows:'Lignes',columns:'Colonnes',border:'Taille de la bordure',align:'Alignement',alignNotSet:'<Par défaut>',alignLeft:'Gauche',alignCenter:'Centré',alignRight:'Droite',width:'Largeur',widthPx:'pixels',widthPc:'pourcentage',height:'Hauteur',cellSpace:'Espacement',cellPad:'Contour',caption:'Titre',summary:'Résumé',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cellule',insertBefore:'Insérer une cellule avant',insertAfter:'Insérer une cellule après',deleteCell:'Supprimer des cellules',merge:'Fusionner les cellules',mergeRight:'Fusionner à droite',mergeDown:'Fusionner en bas',splitHorizontal:'Scinder la cellule horizontalement',splitVertical:'Scinder la cellule verticalement',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Ligne',insertBefore:'Insérer une ligne avant',insertAfter:'Insérer une ligne après',deleteRow:'Supprimer des lignes'},column:{menu:'Colonne',insertBefore:'Insérer une colonne avant',insertAfter:'Insérer une colonne après',deleteColumn:'Supprimer des colonnes'}},button:{title:'Propriétés du bouton',text:'Texte (Valeur)',type:'Type',typeBtn:'Bouton',typeSbm:'Soumettre',typeRst:'Réinitialiser'},checkboxAndRadio:{checkboxTitle:'Propriétés de la case à cocher',radioTitle:'Propriétés du bouton radio',value:'Valeur',selected:'Sélectionné'},form:{title:'Propriétés du formulaire',menu:'Propriétés du formulaire',action:'Action',method:'Méthode',encoding:'Encoding',target:'Destination',targetNotSet:'<Par défaut>',targetNew:'Nouvelle fenêtre (_blank)',targetTop:'Fenêtre supérieure (_top)',targetSelf:'Même fenêtre (_self)',targetParent:'Fenêtre mère (_parent)'},select:{title:'Propriétés de la liste/du menu',selectInfo:'Info',opAvail:'Options disponibles',value:'Valeur',size:'Taille',lines:'lignes',chkMulti:'Sélection multiple',opText:'Texte',opValue:'Valeur',btnAdd:'Ajouter',btnModify:'Modifier',btnUp:'Monter',btnDown:'Descendre',btnSetValue:'Valeur sélectionnée',btnDelete:'Supprimer'},textarea:{title:'Propriétés de la zone de texte',cols:'Colonnes',rows:'Lignes'},textfield:{title:'Propriétés du champ texte',name:'Nom',value:'Valeur',charWidth:'Largeur en caractères',maxChars:'Nombre maximum de caractères',type:'Type',typeText:'Texte',typePass:'Mot de passe'},hidden:{title:'Propriétés du champ caché',name:'Nom',value:'Valeur'},image:{title:"Propriétés de l'image",titleButton:'Propriétés du bouton image',menu:"Propriétés de l'image",infoTab:"Informations sur l'image",btnUpload:'Envoyer sur le serveur',url:'URL',upload:'Télécharger',alt:'Texte de remplacement',width:'Largeur',height:'Hauteur',lockRatio:'Garder les proportions',resetSize:'Taille originale',border:'Bordure',hSpace:'Espacement horizontal',vSpace:'Espacement vertical',align:'Alignement',alignLeft:'Gauche',alignAbsBottom:'Abs Bas',alignAbsMiddle:'Abs Milieu',alignBaseline:'Bas du texte',alignBottom:'Bas',alignMiddle:'Milieu',alignRight:'Droite',alignTextTop:'Haut du texte',alignTop:'Haut',preview:'Prévisualisation',alertUrl:"Veuillez saisir l'URL de l'image",linkTab:'Lien',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:"Propriétés de l'animation Flash",propertiesTab:'Properties',title:"Propriétés de l'animation Flash",chkPlay:'Lecture automatique',chkLoop:'Boucle',chkMenu:'Activer le menu Flash',chkFull:'Allow Fullscreen',scale:'Affichage',scaleAll:'Par défaut (tout montrer)',scaleNoBorder:'Sans bordure',scaleFit:'Ajuster aux dimensions',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Alignement',alignLeft:'Gauche',alignAbsBottom:'Abs Bas',alignAbsMiddle:'Abs Milieu',alignBaseline:'Bas du texte',alignBottom:'Bas',alignMiddle:'Milieu',alignRight:'Droite',alignTextTop:'Haut du texte',alignTop:'Haut',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Couleur de fond',width:'Largeur',height:'Hauteur',hSpace:'Espacement horizontal',vSpace:'Espacement vertical',validateSrc:"Veuillez saisir l'URL",validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Orthographe',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Pas dans le dictionnaire',changeTo:'Changer en',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer tout',btnReplace:'Remplacer',btnReplaceAll:'Remplacer tout',btnUndo:'Annuler',noSuggestions:'- Pas de suggestion -',progress:"Vérification d'orthographe en cours...",noMispell:"Vérification d'orthographe terminée: pas d'erreur trouvée",noChanges:"Vérification d'orthographe terminée: Pas de modifications",oneChange:"Vérification d'orthographe terminée: Un mot modifié",manyChanges:"Vérification d'orthographe terminée: %1 mots modifiés",ieSpellDownload:"Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?"},smiley:{toolbar:'Emoticon',title:'Insérer un Emoticon'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Liste numérotée',bulletedlist:'Liste à puces',indent:'Augmenter le retrait',outdent:'Diminuer le retrait',justify:{left:'Aligner à gauche',center:'Centrer',right:'Aligner à Droite',block:'Texte justifié'},blockquote:'Citation',clipboard:{title:'Coller',cutError:"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).",copyError:"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).",pasteMsg:'Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.',securityMsg:"A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre."},pastefromword:{toolbar:'Coller en tant que Word (formaté)',title:'Coller en tant que Word (formaté)',advice:'Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.',ignoreFontFace:'Ignorer les polices de caractères',removeStyle:'Supprimer les styles'},pasteText:{button:'Coller comme texte',title:'Coller comme texte'},templates:{button:'Modèles',title:'Modèles de contenu',insertOption:'Remplacer tout le contenu actuel',selectPromptMsg:"Sélectionner le modèle à ouvrir dans l'éditeur<br>(le contenu actuel sera remplacé):",emptyListMsg:'(Aucun modèle disponible)'},showBlocks:'Afficher les blocs',stylesCombo:{label:'Style',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Format',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formaté',tag_address:'Adresse',tag_h1:'En-tête 1',tag_h2:'En-tête 2',tag_h3:'En-tête 3',tag_h4:'En-tête 4',tag_h5:'En-tête 5',tag_h6:'En-tête 6',tag_div:'Normal (DIV)'},font:{label:'Police',voiceLabel:'Font',panelTitle:'Police',panelVoiceLabel:'Select a font'},fontSize:{label:'Taille',voiceLabel:'Font Size',panelTitle:'Taille',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Couleur de caractère',bgColorTitle:'Couleur de fond',auto:'Automatique',more:'Plus de couleurs...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/fr.js b/lang/fr.js
new file mode 100644 (file)
index 0000000..c746702
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.fr={dir:'ltr',editorTitle:'Editeur de Texte Enrichi, %1',source:'Source',newPage:'Nouvelle page',save:'Enregistrer',preview:'Aperçu',cut:'Couper',copy:'Copier',paste:'Coller',print:'Imprimer',underline:'Souligné',bold:'Gras',italic:'Italique',selectAll:'Tout sélectionner',removeFormat:'Supprimer la mise en forme',strike:'Barré',subscript:'Indice',superscript:'Exposant',horizontalrule:'Ligne horizontale',pagebreak:'Saut de page',unlink:'Supprimer le lien',undo:'Annuler',redo:'Rétablir',common:{browseServer:'Explorer le serveur',url:'URL',protocol:'Protocole',upload:'Envoyer',uploadSubmit:'Envoyer sur le serveur',image:'Image',flash:'Flash',form:'Formulaire',checkbox:'Case à cocher',radio:'Bouton Radio',textField:'Champ texte',textarea:'Zone de texte',hiddenField:'Champ caché',button:'Bouton',select:'Liste déroulante',imageButton:'Bouton image',notSet:'<non défini>',id:'Id',name:'Nom',langDir:"Sens d'écriture",langDirLtr:'Gauche à droite (LTR)',langDirRtl:'Droite à gauche (RTL)',langCode:'Code de langue',longDescr:'URL de description longue (longdesc => malvoyant)',cssClass:'Classe CSS',advisoryTitle:'Description (title)',cssStyle:'Style',ok:'OK',cancel:'Annuler',generalTab:'Général',advancedTab:'Avancé',validateNumberFailed:"Cette valeur n'est pas un nombre.",confirmNewPage:'Les changements non sauvegardés seront perdus. Etes-vous sûr de vouloir charger une nouvelle page?',confirmCancel:'Certaines options ont été modifiées. Etes-vous sûr de vouloir fermer?',unavailable:'%1<span class="cke_accessibility">, Indisponible</span>'},specialChar:{toolbar:'Insérer un caractère spécial',title:'Sélectionnez un caractère'},link:{toolbar:'Lien',menu:'Editer le lien',title:'Lien',info:'Infos sur le lien',target:'Cible',upload:'Envoyer',advanced:'Avancé',type:'Type de lien',toAnchor:'Transformer le lien en ancre dans le texte',toEmail:'E-mail',target:'Cible',targetNotSet:'<non définie>',targetFrame:'<cadre>',targetPopup:'<fenêtre popup>',targetNew:'Nouvelle fenêtre (_blank)',targetTop:'Même fenêtre (_top)',targetSelf:'Même Cadre (_self)',targetParent:'Fenêtre parente (_parent)',targetFrameName:'Nom du Cadre destination',targetPopupName:'Nom de la fenêtre popup',popupFeatures:'Options de la fenêtre popup',popupResizable:'Redimensionnable',popupStatusBar:'Barre de status',popupLocationBar:"Barre d'adresse",popupToolbar:"Barre d'outils",popupMenuBar:'Barre de menu',popupFullScreen:'Plein écran (IE)',popupScrollBars:'Barres de défilement',popupDependent:'Dépendante (Netscape)',popupWidth:'Largeur',popupLeft:'Position gauche',popupHeight:'Hauteur',popupTop:'Position haute',id:'Id',langDir:"Sens d'écriture",langDirNotSet:'<non défini>',langDirLTR:'Gauche à droite',langDirRTL:'Droite à gauche',acccessKey:"Touche d'accessibilité",name:'Nom',langCode:'Code de langue',tabIndex:'Index de tabulation',advisoryTitle:'Description (title)',advisoryContentType:'Type de contenu (ex: text/html)',cssClasses:'Classe du CSS',charset:'Charset de la cible',styles:'Style',selectAnchor:"Sélectionner l'ancre",anchorName:"Par nom d'ancre",anchorId:"Par ID d'élément",emailAddress:'Adresse E-Mail',emailSubject:'Sujet du message',emailBody:'Corps du message',noAnchors:'(Aucune ancre disponible dans ce document)',noUrl:"Veuillez entrer l'adresse du lien",noEmail:"Veuillez entrer l'adresse e-mail"},anchor:{toolbar:'Ancre',menu:"Editer l'ancre",title:"Propriétés de l'ancre",name:"Nom de l'ancre",errorName:"Veuillez entrer le nom de l'ancre"},findAndReplace:{title:'Trouver et remplacer',find:'Trouver',replace:'Remplacer',findWhat:'Expression à trouver: ',replaceWith:'Remplacer par: ',notFoundMsg:'Le texte spécifié ne peut être trouvé.',matchCase:'Respecter la casse',matchWord:'Mot entier uniquement',matchCyclic:'Boucler',replaceAll:'Remplacer tout',replaceSuccessMsg:'%1 occurrence(s) replacée(s).'},table:{toolbar:'Tableau',title:'Propriétés du tableau',menu:'Propriétés du tableau',deleteTable:'Supprimer le tableau',rows:'Lignes',columns:'Colonnes',border:'Taille de la bordure',align:'Alignement du contenu',alignNotSet:'<non définie>',alignLeft:'Gauche',alignCenter:'Centré',alignRight:'Droite',width:'Largeur',widthPx:'pixels',widthPc:'% pourcents',height:'Hauteur',cellSpace:'Espacement des cellules',cellPad:'Marge interne des cellules',caption:'Titre du tableau',summary:'Résumé (description)',headers:'En-Têtes',headersNone:'Aucunes',headersColumn:'Première colonne',headersRow:'Première ligne',headersBoth:'Les deux',invalidRows:'Le nombre de lignes doit être supérieur à 0.',invalidCols:'Le nombre de colonnes doit être supérieur à 0.',invalidBorder:'La taille de la bordure doit être un nombre.',invalidWidth:'La largeur du tableau doit être un nombre.',invalidHeight:'La hauteur du tableau doit être un nombre.',invalidCellSpacing:"L'espacement des cellules doit être un nombre.",invalidCellPadding:'La marge intérieure des cellules doit être un nombre.',cell:{menu:'Cellule',insertBefore:'Insérer une cellule avant',insertAfter:'Insérer une cellule après',deleteCell:'Supprimer les cellules',merge:'Fusionner les cellules',mergeRight:'Fusionner à droite',mergeDown:'Fusionner en bas',splitHorizontal:'Fractionner horizontalement',splitVertical:'Fractionner verticalement',title:'Propriétés de Cellule',cellType:'Type de Cellule',rowSpan:'Fusion de Lignes',colSpan:'Fusion de Colonnes',wordWrap:'Word Wrap',hAlign:'Alignement Horizontal',vAlign:'Alignement Vertical',alignTop:'Haut',alignMiddle:'Milieu',alignBottom:'Bas',alignBaseline:'Bas du texte',bgColor:"Couleur d'arrière-plan",borderColor:'Couleur de Bordure',data:'Données',header:'Entête',yes:'Oui',no:'Non',invalidWidth:'La Largeur de Cellule doit être un nombre.',invalidHeight:'La Hauteur de Cellule doit être un nombre.',invalidRowSpan:'La fusion de lignes doit être un nombre entier.',invalidColSpan:'La fusion de colonnes doit être un nombre entier.'},row:{menu:'Ligne',insertBefore:'Insérer une ligne avant',insertAfter:'Insérer une ligne après',deleteRow:'Supprimer les lignes'},column:{menu:'Colonnes',insertBefore:'Insérer une colonne avant',insertAfter:'Insérer une colonne après',deleteColumn:'Supprimer les colonnes'}},button:{title:'Propriétés du bouton',text:'Texte (Value)',type:'Type',typeBtn:'Bouton',typeSbm:'Validation (submit)',typeRst:'Remise à zéro'},checkboxAndRadio:{checkboxTitle:'Propriétés de la case à cocher',radioTitle:'Propriétés du bouton Radio',value:'Valeur',selected:'Sélectionné'},form:{title:'Propriétés du formulaire',menu:'Propriétés du formulaire',action:'Action',method:'Méthode',encoding:'Encodage',target:'Cible',targetNotSet:'<non définie>',targetNew:'Nouvelle fenêtre (_blank)',targetTop:'Même fenêtre (_top)',targetSelf:'Même Cadre (_self)',targetParent:'Fenêtre parente (_parent)'},select:{title:'Propriétés du menu déroulant',selectInfo:'Informations sur le menu déroulant',opAvail:'Options disponibles',value:'Valeur',size:'Taille',lines:'Lignes',chkMulti:'Permettre les sélections multiples',opText:'Texte',opValue:'Valeur',btnAdd:'Ajouter',btnModify:'Modifier',btnUp:'Haut',btnDown:'Bas',btnSetValue:'Définir comme valeur sélectionnée',btnDelete:'Supprimer'},textarea:{title:'Propriétés de la zone de texte',cols:'Colonnes',rows:'Lignes'},textfield:{title:'Propriétés du champ texte',name:'Nom',value:'Valeur',charWidth:'Taille des caractères',maxChars:'Nombre maximum de caractères',type:'Type',typeText:'Texte',typePass:'Mot de passe'},hidden:{title:'Propriétés du champ caché',name:'Nom',value:'Valeur'},image:{title:"Propriétés de l'image",titleButton:'Propriétés du bouton image',menu:"Propriétés de l'image",infoTab:"Informations sur l'image",btnUpload:'Envoyer sur le serveur',url:'URL',upload:'Envoyer',alt:'Texte de remplacement',width:'Largeur',height:'Hauteur',lockRatio:'Garder les proportions',resetSize:"Taille d'origine",border:'Bordure',hSpace:'Espacement horizontal',vSpace:'Espacement vertical',align:'Alignement',alignLeft:'Gauche',alignAbsBottom:'Bas absolu',alignAbsMiddle:'Milieu absolu',alignBaseline:'Bas du texte',alignBottom:'Bas',alignMiddle:'Milieu',alignRight:'Droite',alignTextTop:'Haut du texte',alignTop:'Haut',preview:'Aperçu',alertUrl:"Veuillez entrer l'adresse de l'image",linkTab:'Lien',button2Img:'Voulez-vous transformer le bouton image sélectionné en simple image?',img2Button:"Voulez-vous transformer l'image en bouton image?"},flash:{properties:'Propriétés du Flash',propertiesTab:'Propriétés',title:'Propriétés du Flash',chkPlay:'Jouer automatiquement',chkLoop:'Boucle',chkMenu:'Activer le menu Flash',chkFull:'Permettre le plein écran',scale:'Echelle',scaleAll:'Afficher tout',scaleNoBorder:'Pas de bordure',scaleFit:"Taille d'origine",access:'Accès aux scripts',accessAlways:'Toujours',accessSameDomain:'Même domaine',accessNever:'Jamais',align:'Alignement',alignLeft:'Gauche',alignAbsBottom:'Bas absolu',alignAbsMiddle:'Milieu absolu',alignBaseline:'Bas du texte',alignBottom:'Bas',alignMiddle:'Milieu',alignRight:'Droite',alignTextTop:'Haut du texte',alignTop:'Haut',quality:'Qualité',qualityBest:'Meilleure',qualityHigh:'Haute',qualityAutoHigh:'Haute Auto',qualityMedium:'Moyenne',qualityAutoLow:'Basse Auto',qualityLow:'Basse',windowModeWindow:'Fenêtre',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Mode fenêtre',flashvars:'Variables du Flash',bgcolor:"Couleur d'arrière-plan",width:'Largeur',height:'Hauteur',hSpace:'Espacement horizontal',vSpace:'Espacement vertical',validateSrc:"L'adresse ne doit pas être vide.",validateWidth:'La largeur doit être un nombre.',validateHeight:'La hauteur doit être un nombre.',validateHSpace:"L'espacement horizontal doit être un nombre.",validateVSpace:"L'espacement vertical doit être un nombre."},spellCheck:{toolbar:"Vérifier l'orthographe",title:"Vérifier l'orthographe",notAvailable:'Désolé, le service est indisponible actuellement.',errorLoading:"Erreur du chargement du service depuis l'hôte : %s.",notInDic:"N'existe pas dans le dictionnaire",changeTo:'Modifier pour',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer tout',btnReplace:'Remplacer',btnReplaceAll:'Remplacer tout',btnUndo:'Annuler',noSuggestions:'- Aucune suggestion -',progress:"Vérification de l'orthographe en cours...",noMispell:"Vérification de l'orthographe terminée : aucune erreur trouvée",noChanges:"Vérification de l'orthographe terminée : Aucun mot corrigé",oneChange:"Vérification de l'orthographe terminée : Un seul mot corrigé",manyChanges:"Vérification de l'orthographe terminée : %1 mots corrigés",ieSpellDownload:"La vérification d'orthographe n'est pas installée. Voulez-vous la télécharger maintenant?"},smiley:{toolbar:'Emoticon',title:'Insérer un émoticon'},elementsPath:{eleTitle:'%1 éléments'},numberedlist:'Insérer/Supprimer la liste numérotée',bulletedlist:'Insérer/Supprimer la liste à puces',indent:'Augmenter le retrait (tabulation)',outdent:'Diminuer le retrait (tabulation)',justify:{left:'Aligner à gauche',center:'Centrer',right:'Aligner à droite',block:'Justifier'},blockquote:'Citation',clipboard:{title:'Coller',cutError:"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement l'opération \"couper\". Veuillez utiliser le raccourci clavier (Ctrl+X).",copyError:"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl+C).",pasteMsg:'Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl+V</strong>) et cliquez sur OK',securityMsg:"A cause des paramètres de sécurité de votre navigateur, l'éditeur n'est pas en mesure d'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre."},pastefromword:{toolbar:'Coller depuis Word',title:'Coller depuis Word',advice:'Veuillez coller le texte dans la zone suivante, en utilisant le raccourci clavier (<strong>Ctrl+V</strong>) et cliquez sur OK.',ignoreFontFace:'Supprimer la définition des polices',removeStyle:'Supprimer la définition des styles'},pasteText:{button:'Coller comme texte sans mise en forme',title:'Coller comme texte sans mise en forme'},templates:{button:'Modèles',title:'Contenu des modèles',insertOption:'Remplacer le contenu actuel',selectPromptMsg:"Veuillez sélectionner le modèle pour l'ouvrir dans l'éditeur",emptyListMsg:'(Aucun modèle disponible)'},showBlocks:'Afficher les blocs',stylesCombo:{label:'Styles',voiceLabel:'Styles',panelVoiceLabel:'Choisissez un style',panelTitle1:'Styles de blocs',panelTitle2:'Styles en ligne',panelTitle3:"Styles d'objet"},format:{label:'Format',voiceLabel:'Format',panelTitle:'Format de paragraphe',panelVoiceLabel:'Choisissez un format de paragraphe',tag_p:'Normal',tag_pre:'Formaté',tag_address:'Adresse',tag_h1:'Titre 1',tag_h2:'Titre 2',tag_h3:'Titre 3',tag_h4:'Titre 4',tag_h5:'Titre 5',tag_h6:'Titre 6',tag_div:'Normal (DIV)'},font:{label:'Police',voiceLabel:'Police',panelTitle:'Style de police',panelVoiceLabel:'Choisissez une police'},fontSize:{label:'Taille',voiceLabel:'Taille de police',panelTitle:'Taille de police',panelVoiceLabel:'Choisissez une taille de police'},colorButton:{textColorTitle:'Couleur de texte',bgColorTitle:"Couleur d'arrière plan",auto:'Automatique',more:'Plus de couleurs...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:"Vérification d'Orthographe en Cours de Frappe (SCAYT: Spell Check As You Type)",enable:'Activer SCAYT',disable:'Désactiver SCAYT',about:'A propos de SCAYT',toggle:'Activer/Désactiver SCAYT',options:'Options',langs:'Langues',moreSuggestions:'Plus de suggestions',ignore:'Ignorer',ignoreAll:'Ignorer Tout',addWord:'Ajouter le mot',emptyDic:'Le nom du dictionnaire ne devrait pas être vide.',optionsTab:'Options',languagesTab:'Langues',dictionariesTab:'Dictionnaires',aboutTab:'A propos de'},about:{title:'A propos de CKEditor',dlgTitle:'A propos de CKEditor',moreInfo:'Pour les informations de licence, veuillez visiter notre site web:',copy:'Copyright &copy; $1. Tous droits réservés.'},maximize:'Agrandir',fakeobjects:{anchor:'Ancre',flash:'Animation Flash',div:'Saut de Page',unknown:'Objet Inconnu'},resize:'Glisser pour modifier la taille'};\r
diff --git a/lang/gl.js b/lang/gl.js
new file mode 100644 (file)
index 0000000..f0a5ca8
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.gl={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Código Fonte',newPage:'Nova Páxina',save:'Gardar',preview:'Vista Previa',cut:'Cortar',copy:'Copiar',paste:'Pegar',print:'Imprimir',underline:'Sub-raiado',bold:'Negrita',italic:'Cursiva',selectAll:'Seleccionar todo',removeFormat:'Eliminar Formato',strike:'Tachado',subscript:'Subíndice',superscript:'Superíndice',horizontalrule:'Inserir Liña Horizontal',pagebreak:'Inserir Salto de Páxina',unlink:'Eliminar Ligazón',undo:'Desfacer',redo:'Refacer',common:{browseServer:'Navegar no Servidor',url:'URL',protocol:'Protocolo',upload:'Carregar',uploadSubmit:'Enviar ó Servidor',image:'Imaxe',flash:'Flash',form:'Formulario',checkbox:'Cadro de Verificación',radio:'Botón de Radio',textField:'Campo de Texto',textarea:'Área de Texto',hiddenField:'Campo Oculto',button:'Botón',select:'Campo de Selección',imageButton:'Botón de Imaxe',notSet:'<non definido>',id:'Id',name:'Nome',langDir:'Orientación do Idioma',langDirLtr:'Esquerda a Dereita (LTR)',langDirRtl:'Dereita a Esquerda (RTL)',langCode:'Código do Idioma',longDescr:'Descrición Completa da URL',cssClass:'Clases da Folla de Estilos',advisoryTitle:'Título',cssStyle:'Estilo',ok:'OK',cancel:'Cancelar',generalTab:'General',advancedTab:'Advanzado',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Inserir Carácter Especial',title:'Seleccione Caracter Especial'},link:{toolbar:'Inserir/Editar Ligazón',menu:'Editar Ligazón',title:'Ligazón',info:'Información da Ligazón',target:'Destino',upload:'Carregar',advanced:'Advanzado',type:'Tipo de Ligazón',toAnchor:'Referencia nesta páxina',toEmail:'E-Mail',target:'Destino',targetNotSet:'<non definido>',targetFrame:'<frame>',targetPopup:'<Xanela Emerxente>',targetNew:'Nova Xanela (_blank)',targetTop:'Xanela Primaria (_top)',targetSelf:'Mesma Xanela (_self)',targetParent:'Xanela Pai (_parent)',targetFrameName:'Nome do Marco Destino',targetPopupName:'Nome da Xanela Emerxente',popupFeatures:'Características da Xanela Emerxente',popupResizable:'Resizable',popupStatusBar:'Barra de Estado',popupLocationBar:'Barra de Localización',popupToolbar:'Barra de Ferramentas',popupMenuBar:'Barra de Menú',popupFullScreen:'A Toda Pantalla (IE)',popupScrollBars:'Barras de Desplazamento',popupDependent:'Dependente (Netscape)',popupWidth:'Largura',popupLeft:'Posición Esquerda',popupHeight:'Altura',popupTop:'Posición dende Arriba',id:'Id',langDir:'Orientación do Idioma',langDirNotSet:'<non definido>',langDirLTR:'Esquerda a Dereita (LTR)',langDirRTL:'Dereita a Esquerda (RTL)',acccessKey:'Chave de Acceso',name:'Nome',langCode:'Orientación do Idioma',tabIndex:'Índice de Tabulación',advisoryTitle:'Título',advisoryContentType:'Tipo de Contido',cssClasses:'Clases da Folla de Estilos',charset:'Fonte de Caracteres Vinculado',styles:'Estilo',selectAnchor:'Seleccionar unha Referencia',anchorName:'Por Nome de Referencia',anchorId:'Por Element Id',emailAddress:'Enderezo de E-Mail',emailSubject:'Asunto do Mensaxe',emailBody:'Corpo do Mensaxe',noAnchors:'(Non hai referencias disponibles no documento)',noUrl:'Por favor, escriba a ligazón URL',noEmail:'Por favor, escriba o enderezo de e-mail'},anchor:{toolbar:'Inserir/Editar Referencia',menu:'Propriedades da Referencia',title:'Propriedades da Referencia',name:'Nome da Referencia',errorName:'Por favor, escriba o nome da referencia'},findAndReplace:{title:'Find and Replace',find:'Procurar',replace:'Substituir',findWhat:'Texto a procurar:',replaceWith:'Substituir con:',notFoundMsg:'Non te atopou o texto indicado.',matchCase:'Coincidir Mai./min.',matchWord:'Coincidir con toda a palabra',matchCyclic:'Match cyclic',replaceAll:'Substitiur Todo',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabla',title:'Propiedades da Táboa',menu:'Propiedades da Táboa',deleteTable:'Borrar Táboa',rows:'Filas',columns:'Columnas',border:'Tamaño do Borde',align:'Aliñamento',alignNotSet:'<Non Definido>',alignLeft:'Esquerda',alignCenter:'Centro',alignRight:'Ereita',width:'Largura',widthPx:'pixels',widthPc:'percent',height:'Altura',cellSpace:'Marxe entre Celas',cellPad:'Marxe interior',caption:'Título',summary:'Sumario',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cela',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Borrar Cela',merge:'Unir Celas',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Fila',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Borrar Filas'},column:{menu:'Columna',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Borrar Columnas'}},button:{title:'Propriedades do Botón',text:'Texto (Valor)',type:'Tipo',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Propriedades do Cadro de Verificación',radioTitle:'Propriedades do Botón de Radio',value:'Valor',selected:'Seleccionado'},form:{title:'Propriedades do Formulario',menu:'Propriedades do Formulario',action:'Acción',method:'Método',encoding:'Encoding',target:'Destino',targetNotSet:'<non definido>',targetNew:'Nova Xanela (_blank)',targetTop:'Xanela Primaria (_top)',targetSelf:'Mesma Xanela (_self)',targetParent:'Xanela Pai (_parent)'},select:{title:'Propriedades do Campo de Selección',selectInfo:'Info',opAvail:'Opcións Disponibles',value:'Valor',size:'Tamaño',lines:'liñas',chkMulti:'Permitir múltiples seleccións',opText:'Texto',opValue:'Valor',btnAdd:'Engadir',btnModify:'Modificar',btnUp:'Subir',btnDown:'Baixar',btnSetValue:'Definir como valor por defecto',btnDelete:'Borrar'},textarea:{title:'Propriedades da Área de Texto',cols:'Columnas',rows:'Filas'},textfield:{title:'Propriedades do Campo de Texto',name:'Nome',value:'Valor',charWidth:'Tamaño do Caracter',maxChars:'Máximo de Caracteres',type:'Tipo',typeText:'Texto',typePass:'Chave'},hidden:{title:'Propriedades do Campo Oculto',name:'Nome',value:'Valor'},image:{title:'Propriedades da Imaxe',titleButton:'Propriedades do Botón de Imaxe',menu:'Propriedades da Imaxe',infoTab:'Información da Imaxe',btnUpload:'Enviar ó Servidor',url:'URL',upload:'Carregar',alt:'Texto Alternativo',width:'Largura',height:'Altura',lockRatio:'Proporcional',resetSize:'Tamaño Orixinal',border:'Límite',hSpace:'Esp. Horiz.',vSpace:'Esp. Vert.',align:'Aliñamento',alignLeft:'Esquerda',alignAbsBottom:'Abs Inferior',alignAbsMiddle:'Abs Centro',alignBaseline:'Liña Base',alignBottom:'Pé',alignMiddle:'Centro',alignRight:'Dereita',alignTextTop:'Tope do Texto',alignTop:'Tope',preview:'Vista Previa',alertUrl:'Por favor, escriba a URL da imaxe',linkTab:'Ligazón',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Propriedades Flash',propertiesTab:'Properties',title:'Propriedades Flash',chkPlay:'Auto Execución',chkLoop:'Bucle',chkMenu:'Activar Menú Flash',chkFull:'Allow Fullscreen',scale:'Escalar',scaleAll:'Amosar Todo',scaleNoBorder:'Sen Borde',scaleFit:'Encaixar axustando',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Aliñamento',alignLeft:'Esquerda',alignAbsBottom:'Abs Inferior',alignAbsMiddle:'Abs Centro',alignBaseline:'Liña Base',alignBottom:'Pé',alignMiddle:'Centro',alignRight:'Dereita',alignTextTop:'Tope do Texto',alignTop:'Tope',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Cor do Fondo',width:'Largura',height:'Altura',hSpace:'Esp. Horiz.',vSpace:'Esp. Vert.',validateSrc:'Por favor, escriba a ligazón URL',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Corrección Ortográfica',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Non está no diccionario',changeTo:'Cambiar a',btnIgnore:'Ignorar',btnIgnoreAll:'Ignorar Todas',btnReplace:'Substituir',btnReplaceAll:'Substituir Todas',btnUndo:'Desfacer',noSuggestions:'- Sen candidatos -',progress:'Corrección ortográfica en progreso...',noMispell:'Corrección ortográfica rematada: Non se atoparon erros',noChanges:'Corrección ortográfica rematada: Non se substituiu nengunha verba',oneChange:'Corrección ortográfica rematada: Unha verba substituida',manyChanges:'Corrección ortográfica rematada: %1 verbas substituidas',ieSpellDownload:'O corrector ortográfico non está instalado. ¿Quere descargalo agora?'},smiley:{toolbar:'Smiley',title:'Inserte un Smiley'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Lista Numerada',bulletedlist:'Marcas',indent:'Aumentar Sangría',outdent:'Disminuir Sangría',justify:{left:'Aliñar á Esquerda',center:'Centrado',right:'Aliñar á Dereita',block:'Xustificado'},blockquote:'Blockquote',clipboard:{title:'Pegar',cutError:'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl+X).',copyError:'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl+C).',pasteMsg:'Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl+V</STRONG>) e pulse <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Pegar dende Word',title:'Pegar dende Word',advice:'Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl+V</STRONG>) e pulse <STRONG>OK</STRONG>.',ignoreFontFace:'Ignorar as definicións de Tipografía',removeStyle:'Eliminar as definicións de Estilos'},pasteText:{button:'Pegar como texto plano',title:'Pegar como texto plano'},templates:{button:'Plantillas',title:'Plantillas de Contido',insertOption:'Replace actual contents',selectPromptMsg:'Por favor, seleccione a plantilla a abrir no editor<br>(o contido actual perderase):',emptyListMsg:'(Non hai plantillas definidas)'},showBlocks:'Show Blocks',stylesCombo:{label:'Estilo',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formato',voiceLabel:'Format',panelTitle:'Formato',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formateado',tag_address:'Enderezo',tag_h1:'Enacabezado 1',tag_h2:'Encabezado 2',tag_h3:'Encabezado 3',tag_h4:'Encabezado 4',tag_h5:'Encabezado 5',tag_h6:'Encabezado 6',tag_div:'Paragraph (DIV)'},font:{label:'Tipo',voiceLabel:'Font',panelTitle:'Tipo',panelVoiceLabel:'Select a font'},fontSize:{label:'Tamaño',voiceLabel:'Font Size',panelTitle:'Tamaño',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Cor do Texto',bgColorTitle:'Cor do Fondo',auto:'Automático',more:'Máis Cores...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/gu.js b/lang/gu.js
new file mode 100644 (file)
index 0000000..0a45fe3
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.gu={dir:'ltr',editorTitle:'Rich text editor, %1',source:'મૂળ કે પ્રાથમિક દસ્તાવેજ',newPage:'નવુ પાનું',save:'સેવ',preview:'પૂર્વદર્શન',cut:'કાપવું',copy:'નકલ',paste:'પેસ્ટ',print:'પ્રિન્ટ',underline:'અન્ડર્લાઇન, નીચે લીટી',bold:'બોલ્ડ/સ્પષ્ટ',italic:'ઇટેલિક, ત્રાંસા',selectAll:'બઘું પસંદ કરવું',removeFormat:'ફૉર્મટ કાઢવું',strike:'છેકી નાખવું',subscript:'એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન',superscript:'એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.',horizontalrule:'સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી',pagebreak:'ઇન્સર્ટ પેજબ્રેક/પાનાને અલગ કરવું/દાખલ કરવું',unlink:'લિંક કાઢવી',undo:'રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી',redo:'રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી',common:{browseServer:'સર્વર બ્રાઉઝ કરો',url:'URL',protocol:'પ્રોટોકૉલ',upload:'અપલોડ',uploadSubmit:'આ સર્વરને મોકલવું',image:'ચિત્ર',flash:'ફ્લૅશ',form:'ફૉર્મ/પત્રક',checkbox:'ચેક બોક્સ',radio:'રેડિઓ બટન',textField:'ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર',textarea:'ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર',hiddenField:'ગુપ્ત ક્ષેત્ર',button:'બટન',select:'પસંદગી ક્ષેત્ર',imageButton:'ચિત્ર બટન',notSet:'<સેટ નથી>',id:'Id',name:'નામ',langDir:'ભાષા લેખવાની પદ્ધતિ',langDirLtr:'ડાબે થી જમણે (LTR)',langDirRtl:'જમણે થી ડાબે (RTL)',langCode:'ભાષા કોડ',longDescr:'વધારે માહિતી માટે URL',cssClass:'સ્ટાઇલ-શીટ ક્લાસ',advisoryTitle:'મુખ્ય મથાળું',cssStyle:'સ્ટાઇલ',ok:'ઠીક છે',cancel:'રદ કરવું',generalTab:'General',advancedTab:'અડ્વાન્સડ',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું',title:'સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો'},link:{toolbar:'લિંક ઇન્સર્ટ/દાખલ કરવી',menu:' લિંક એડિટ/માં ફેરફાર કરવો',title:'લિંક',info:'લિંક ઇન્ફૉ ટૅબ',target:'ટાર્ગેટ/લક્ષ્ય',upload:'અપલોડ',advanced:'અડ્વાન્સડ',type:'લિંક પ્રકાર',toAnchor:'આ પેજનો ઍંકર',toEmail:'ઈ-મેલ',target:'ટાર્ગેટ/લક્ષ્ય',targetNotSet:'<સેટ નથી>',targetFrame:'<ફ્રેમ>',targetPopup:'<પૉપ-અપ વિન્ડો>',targetNew:'નવી  વિન્ડો (_blank)',targetTop:'ઉપરની વિન્ડો (_top)',targetSelf:'આજ વિન્ડો (_self)',targetParent:'મૂળ વિન્ડો (_parent)',targetFrameName:'ટાર્ગેટ ફ્રેમ નું નામ',targetPopupName:'પૉપ-અપ વિન્ડો નું નામ',popupFeatures:'પૉપ-અપ વિન્ડો ફીચરસૅ',popupResizable:'Resizable',popupStatusBar:'સ્ટૅટસ બાર',popupLocationBar:'લોકેશન બાર',popupToolbar:'ટૂલ બાર',popupMenuBar:'મેન્યૂ બાર',popupFullScreen:'ફુલ સ્ક્રીન (IE)',popupScrollBars:'સ્ક્રોલ બાર',popupDependent:'ડિપેન્ડન્ટ (Netscape)',popupWidth:'પહોળાઈ',popupLeft:'ડાબી બાજુ',popupHeight:'ઊંચાઈ',popupTop:'જમણી બાજુ',id:'Id',langDir:'ભાષા લેખવાની પદ્ધતિ',langDirNotSet:'<સેટ નથી>',langDirLTR:'ડાબે થી જમણે (LTR)',langDirRTL:'જમણે થી ડાબે (RTL)',acccessKey:'ઍક્સેસ કી',name:'નામ',langCode:'ભાષા લેખવાની પદ્ધતિ',tabIndex:'ટૅબ ઇન્ડેક્સ',advisoryTitle:'મુખ્ય મથાળું',advisoryContentType:'મુખ્ય કન્ટેન્ટ પ્રકાર',cssClasses:'સ્ટાઇલ-શીટ ક્લાસ',charset:'લિંક રિસૉર્સ કૅરિક્ટર સેટ',styles:'સ્ટાઇલ',selectAnchor:'ઍંકર પસંદ કરો',anchorName:'ઍંકર નામથી પસંદ કરો',anchorId:'ઍંકર એલિમન્ટ Id થી પસંદ કરો',emailAddress:'ઈ-મેલ સરનામું',emailSubject:'ઈ-મેલ વિષય',emailBody:'સંદેશ',noAnchors:'(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)',noUrl:'લિંક  URL ટાઇપ કરો',noEmail:'ઈ-મેલ સરનામું ટાઇપ કરો'},anchor:{toolbar:'ઍંકર ઇન્સર્ટ/દાખલ કરવી',menu:'ઍંકરના ગુણ',title:'ઍંકરના ગુણ',name:'ઍંકરનું નામ',errorName:'ઍંકરનું નામ ટાઈપ કરો'},findAndReplace:{title:'શોધવું અને બદલવું',find:'શોધવું',replace:'રિપ્લેસ/બદલવું',findWhat:'આ શોધો',replaceWith:'આનાથી બદલો',notFoundMsg:'તમે શોધેલી ટેક્સ્ટ નથી મળી',matchCase:'કેસ સરખા રાખો',matchWord:'બઘા શબ્દ સરખા રાખો',matchCyclic:'Match cyclic',replaceAll:'બઘા બદલી ',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'ટેબલ, કોઠો',title:'ટેબલ, કોઠાનું મથાળું',menu:'ટેબલ, કોઠાનું મથાળું',deleteTable:'કોઠો ડિલીટ/કાઢી નાખવું',rows:'પંક્તિના ખાના',columns:'કૉલમ/ઊભી કટાર',border:'કોઠાની બાજુ(બોર્ડર) સાઇઝ',align:'અલાઇનમન્ટ/ગોઠવાયેલું ',alignNotSet:'<સેટ નથી>',alignLeft:'ડાબી બાજુ',alignCenter:'મધ્ય સેન્ટર',alignRight:'જમણી બાજુ',width:'પહોળાઈ',widthPx:'પિકસલ',widthPc:'પ્રતિશત',height:'ઊંચાઈ',cellSpace:'સેલ અંતર',cellPad:'સેલ પૅડિંગ',caption:'મથાળું/કૅપ્શન ',summary:'ટૂંકો એહેવાલ',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'કોષના ખાના',insertBefore:'પહેલાં કોષ ઉમેરવો',insertAfter:'પછી કોષ ઉમેરવો',deleteCell:'કોષ ડિલીટ/કાઢી નાખવો',merge:'કોષ ભેગા કરવા',mergeRight:'જમણી બાજુ ભેગા કરવા',mergeDown:'નીચે ભેગા કરવા',splitHorizontal:'કોષને સમસ્તરીય વિભાજન કરવું',splitVertical:'કોષને સીધું ને ઊભું વિભાજન કરવું',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'પંક્તિના ખાના',insertBefore:'પહેલાં પંક્તિ ઉમેરવી',insertAfter:'પછી પંક્તિ ઉમેરવી',deleteRow:'પંક્તિઓ ડિલીટ/કાઢી નાખવી'},column:{menu:'કૉલમ/ઊભી કટાર',insertBefore:'પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી',insertAfter:'પછી કૉલમ/ઊભી કટાર ઉમેરવી',deleteColumn:'કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી'}},button:{title:'બટનના ગુણ',text:'ટેક્સ્ટ (વૅલ્યૂ)',type:'પ્રકાર',typeBtn:'બટન',typeSbm:'સબ્મિટ',typeRst:'રિસેટ'},checkboxAndRadio:{checkboxTitle:'ચેક બોક્સ ગુણ',radioTitle:'રેડિઓ બટનના ગુણ',value:'વૅલ્યૂ',selected:'સિલેક્ટેડ'},form:{title:'ફૉર્મ/પત્રકના ગુણ',menu:'ફૉર્મ/પત્રકના ગુણ',action:'ક્રિયા',method:'પદ્ધતિ',encoding:'Encoding',target:'ટાર્ગેટ/લક્ષ્ય',targetNotSet:'<સેટ નથી>',targetNew:'નવી  વિન્ડો (_blank)',targetTop:'ઉપરની વિન્ડો (_top)',targetSelf:'આજ વિન્ડો (_self)',targetParent:'મૂળ વિન્ડો (_parent)'},select:{title:'પસંદગી ક્ષેત્રના ગુણ',selectInfo:'સૂચના',opAvail:'ઉપલબ્ધ વિકલ્પ',value:'વૅલ્યૂ',size:'સાઇઝ',lines:'લીટીઓ',chkMulti:'એકથી વધારે પસંદ કરી શકો',opText:'ટેક્સ્ટ',opValue:'વૅલ્યૂ',btnAdd:'ઉમેરવું',btnModify:'બદલવું',btnUp:'ઉપર',btnDown:'નીચે',btnSetValue:'પસંદ કરલી વૅલ્યૂ સેટ કરો',btnDelete:'રદ કરવું'},textarea:{title:'ટેક્સ્ટ એઅરિઆ, શબ્દ વિસ્તારના ગુણ',cols:'કૉલમ/ઊભી કટાર',rows:'પંક્તિઓ'},textfield:{title:'ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્રના ગુણ',name:'નામ',value:'વૅલ્યૂ',charWidth:'કેરેક્ટરની પહોળાઈ',maxChars:'અધિકતમ કેરેક્ટર',type:'ટાઇપ',typeText:'ટેક્સ્ટ',typePass:'પાસવર્ડ'},hidden:{title:'ગુપ્ત ક્ષેત્રના ગુણ',name:'નામ',value:'વૅલ્યૂ'},image:{title:'ચિત્રના ગુણ',titleButton:'ચિત્ર બટનના ગુણ',menu:'ચિત્રના ગુણ',infoTab:'ચિત્ર ની જાણકારી',btnUpload:'આ સર્વરને મોકલવું',url:'URL',upload:'અપલોડ',alt:'ઑલ્ટર્નટ ટેક્સ્ટ',width:'પહોળાઈ',height:'ઊંચાઈ',lockRatio:'લૉક ગુણોત્તર',resetSize:'રીસેટ સાઇઝ',border:'બોર્ડર',hSpace:'સમસ્તરીય જગ્યા',vSpace:'લંબરૂપ જગ્યા',align:'લાઇનદોરીમાં ગોઠવવું',alignLeft:'ડાબી બાજુ ગોઠવવું',alignAbsBottom:'Abs નીચે',alignAbsMiddle:'Abs ઉપર',alignBaseline:'આધાર લીટી',alignBottom:'નીચે',alignMiddle:'વચ્ચે',alignRight:'જમણી',alignTextTop:'ટેક્સ્ટ ઉપર',alignTop:'ઉપર',preview:'પૂર્વદર્શન',alertUrl:'ચિત્રની URL ટાઇપ કરો',linkTab:'લિંક',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'ફ્લૅશના ગુણ',propertiesTab:'Properties',title:'ફ્લૅશ ગુણ',chkPlay:'ઑટો/સ્વયં પ્લે',chkLoop:'લૂપ',chkMenu:'ફ્લૅશ મેન્યૂ નો પ્રયોગ કરો',chkFull:'Allow Fullscreen',scale:'સ્કેલ',scaleAll:'સ્કેલ ઓલ/બધુ બતાવો',scaleNoBorder:'સ્કેલ બોર્ડર વગર',scaleFit:'સ્કેલ એકદમ ફીટ',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'લાઇનદોરીમાં ગોઠવવું',alignLeft:'ડાબી બાજુ ગોઠવવું',alignAbsBottom:'Abs નીચે',alignAbsMiddle:'Abs ઉપર',alignBaseline:'આધાર લીટી',alignBottom:'નીચે',alignMiddle:'વચ્ચે',alignRight:'જમણી',alignTextTop:'ટેક્સ્ટ ઉપર',alignTop:'ઉપર',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'બૅકગ્રાઉન્ડ રંગ,',width:'પહોળાઈ',height:'ઊંચાઈ',hSpace:'સમસ્તરીય જગ્યા',vSpace:'લંબરૂપ જગ્યા',validateSrc:'લિંક  URL ટાઇપ કરો',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'જોડણી (સ્પેલિંગ) તપાસવી',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'શબ્દકોશમાં નથી',changeTo:'આનાથી બદલવું',btnIgnore:'ઇગ્નોર/અવગણના કરવી',btnIgnoreAll:'બધાની ઇગ્નોર/અવગણના કરવી',btnReplace:'બદલવું',btnReplaceAll:'બધા બદલી કરો',btnUndo:'અન્ડૂ',noSuggestions:'- કઇ સજેશન નથી -',progress:'શબ્દની જોડણી/સ્પેલ ચેક ચાલુ છે...',noMispell:'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: ખોટી જોડણી મળી નથી',noChanges:'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એકપણ શબ્દ બદલયો નથી',oneChange:'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એક શબ્દ બદલયો છે',manyChanges:'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: %1 શબ્દ બદલયા છે',ieSpellDownload:'સ્પેલ-ચેકર ઇન્સ્ટોલ નથી. શું તમે ડાઉનલોડ કરવા માંગો છો?'},smiley:{toolbar:'સ્માઇલી',title:'સ્માઇલી  પસંદ કરો'},elementsPath:{eleTitle:'%1 element'},numberedlist:'સંખ્યાંકન સૂચિ',bulletedlist:'બુલેટ સૂચિ',indent:'ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી',outdent:'ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી',justify:{left:'ડાબી બાજુએ/બાજુ તરફ',center:'સંકેંદ્રણ/સેંટરિંગ',right:'જમણી બાજુએ/બાજુ તરફ',block:'બ્લૉક, અંતરાય જસ્ટિફાઇ'},blockquote:'બ્લૉક-કોટ, અવતરણચિહ્નો',clipboard:{title:'પેસ્ટ',cutError:'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl+X) નો ઉપયોગ કરો.',copyError:'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી.  (Ctrl+C) का प्रयोग करें।',pasteMsg:'Ctrl+V નો પ્રયોગ કરી પેસ્ટ કરો',securityMsg:'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસના કારણે,એડિટર તમારા કિલ્પબોર્ડ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિન્ડોમાં ફરીથી પેસ્ટ કરવું પડશે.'},pastefromword:{toolbar:'પેસ્ટ (વડૅ ટેક્સ્ટ)',title:'પેસ્ટ (વડૅ ટેક્સ્ટ)',advice:'Ctrl+V નો પ્રયોગ કરી પેસ્ટ કરો',ignoreFontFace:'ફૉન્ટફેસ વ્યાખ્યાની અવગણના',removeStyle:'સ્ટાઇલ વ્યાખ્યા કાઢી નાખવી'},pasteText:{button:'પેસ્ટ (ટેક્સ્ટ)',title:'પેસ્ટ (ટેક્સ્ટ)'},templates:{button:'ટેમ્પ્લેટ',title:'કન્ટેન્ટ ટેમ્પ્લેટ',insertOption:'મૂળ શબ્દને બદલો',selectPromptMsg:'એડિટરમાં ઓપન કરવા ટેમ્પ્લેટ પસંદ કરો (વર્તમાન કન્ટેન્ટ સેવ નહીં થાય):',emptyListMsg:'(કોઈ ટેમ્પ્લેટ ડિફાઇન નથી)'},showBlocks:'બ્લૉક બતાવવું',stylesCombo:{label:'શૈલી/રીત',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'ફૉન્ટ ફૉર્મટ, રચનાની શૈલી',voiceLabel:'Format',panelTitle:'ફૉન્ટ ફૉર્મટ, રચનાની શૈલી',panelVoiceLabel:'Select a paragraph format',tag_p:'સામાન્ય',tag_pre:'ફૉર્મટેડ',tag_address:'સરનામું',tag_h1:'શીર્ષક 1',tag_h2:'શીર્ષક 2',tag_h3:'શીર્ષક 3',tag_h4:'શીર્ષક 4',tag_h5:'શીર્ષક 5',tag_h6:'શીર્ષક 6',tag_div:'શીર્ષક (DIV)'},font:{label:'ફૉન્ટ',voiceLabel:'Font',panelTitle:'ફૉન્ટ',panelVoiceLabel:'Select a font'},fontSize:{label:'ફૉન્ટ સાઇઝ/કદ',voiceLabel:'Font Size',panelTitle:'ફૉન્ટ સાઇઝ/કદ',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'શબ્દનો રંગ',bgColorTitle:'બૅકગ્રાઉન્ડ રંગ,',auto:'સ્વચાલિત',more:'ઔર રંગ...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/he.js b/lang/he.js
new file mode 100644 (file)
index 0000000..3a399ff
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.he={dir:'rtl',editorTitle:'Rich text editor, %1',source:'מקור',newPage:'דף חדש',save:'שמירה',preview:'תצוגה מקדימה',cut:'גזירה',copy:'העתקה',paste:'הדבקה',print:'הדפסה',underline:'קו תחתון',bold:'מודגש',italic:'נטוי',selectAll:'בחירת הכל',removeFormat:'הסרת העיצוב',strike:'כתיב מחוק',subscript:'כתיב תחתון',superscript:'כתיב עליון',horizontalrule:'הוספת קו אופקי',pagebreak:'הוסף שבירת דף',unlink:'הסרת הקישור',undo:'ביטול צעד אחרון',redo:'חזרה על צעד אחרון',common:{browseServer:'סייר השרת',url:'כתובת (URL)',protocol:'פרוטוקול',upload:'העלאה',uploadSubmit:'שליחה לשרת',image:'תמונה',flash:'פלאש',form:'טופס',checkbox:'תיבת סימון',radio:'לחצן אפשרויות',textField:'שדה טקסט',textarea:'איזור טקסט',hiddenField:'שדה חבוי',button:'כפתור',select:'שדה בחירה',imageButton:'כפתור תמונה',notSet:'<לא נקבע>',id:'זיהוי (Id)',name:'שם',langDir:'כיוון שפה',langDirLtr:'שמאל לימין (LTR)',langDirRtl:'ימין לשמאל (RTL)',langCode:'קוד שפה',longDescr:'קישור לתיאור מפורט',cssClass:'גיליונות עיצוב קבוצות',advisoryTitle:'כותרת מוצעת',cssStyle:'סגנון',ok:'אישור',cancel:'ביטול',generalTab:'כללי',advancedTab:'אפשרויות מתקדמות',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'הוספת תו מיוחד',title:'בחירת תו מיוחד'},link:{toolbar:'הוספת/עריכת קישור',menu:'עריכת קישור',title:'קישור',info:'מידע על הקישור',target:'מטרה',upload:'העלאה',advanced:'אפשרויות מתקדמות',type:'סוג קישור',toAnchor:'עוגן בעמוד זה',toEmail:"דוא''ל",target:'מטרה',targetNotSet:'<לא נקבע>',targetFrame:'<מסגרת>',targetPopup:'<חלון קופץ>',targetNew:'חלון חדש (_blank)',targetTop:'חלון ראשי (_top)',targetSelf:'באותו החלון (_self)',targetParent:'חלון האב (_parent)',targetFrameName:'שם מסגרת היעד',targetPopupName:'שם החלון הקופץ',popupFeatures:'תכונות החלון הקופץ',popupResizable:'Resizable',popupStatusBar:'סרגל חיווי',popupLocationBar:'סרגל כתובת',popupToolbar:'סרגל הכלים',popupMenuBar:'סרגל תפריט',popupFullScreen:'מסך מלא (IE)',popupScrollBars:'ניתן לגלילה',popupDependent:'תלוי (Netscape)',popupWidth:'רוחב',popupLeft:'מיקום צד שמאל',popupHeight:'גובה',popupTop:'מיקום צד עליון',id:'Id',langDir:'כיוון שפה',langDirNotSet:'<לא נקבע>',langDirLTR:'שמאל לימין (LTR)',langDirRTL:'ימין לשמאל (RTL)',acccessKey:'מקש גישה',name:'שם',langCode:'כיוון שפה',tabIndex:'מספר טאב',advisoryTitle:'כותרת מוצעת',advisoryContentType:'Content Type מוצע',cssClasses:'גיליונות עיצוב קבוצות',charset:'קידוד המשאב המקושר',styles:'סגנון',selectAnchor:'בחירת עוגן',anchorName:"עפ''י שם העוגן",anchorId:"עפ''י זיהוי (Id) הרכיב",emailAddress:"כתובת הדוא''ל",emailSubject:'נושא ההודעה',emailBody:'גוף ההודעה',noAnchors:'(אין עוגנים זמינים בדף)',noUrl:'נא להקליד את כתובת הקישור (URL)',noEmail:"נא להקליד את כתובת הדוא''ל"},anchor:{toolbar:'הוספת/עריכת נקודת עיגון',menu:'מאפייני נקודת עיגון',title:'מאפייני נקודת עיגון',name:'שם לנקודת עיגון',errorName:'אנא הזן שם לנקודת עיגון'},findAndReplace:{title:'חפש והחלף',find:'חיפוש',replace:'החלפה',findWhat:'חיפוש מחרוזת:',replaceWith:'החלפה במחרוזת:',notFoundMsg:'הטקסט המבוקש לא נמצא.',matchCase:'התאמת סוג אותיות (Case)',matchWord:'התאמה למילה המלאה',matchCyclic:'Match cyclic',replaceAll:'החלפה בכל העמוד',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'טבלה',title:'תכונות טבלה',menu:'תכונות טבלה',deleteTable:'מחק טבלה',rows:'שורות',columns:'עמודות',border:'גודל מסגרת',align:'יישור',alignNotSet:'<לא נקבע>',alignLeft:'שמאל',alignCenter:'מרכז',alignRight:'ימין',width:'רוחב',widthPx:'פיקסלים',widthPc:'אחוז',height:'גובה',cellSpace:'מרווח תא',cellPad:'ריפוד תא',caption:'כיתוב',summary:'סיכום',headers:'כותרות',headersNone:'אין',headersColumn:'עמודה ראשונה',headersRow:'שורה ראשונה',headersBoth:'שניהם',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'תא',insertBefore:'הוסף תא אחרי',insertAfter:'הוסף תא אחרי',deleteCell:'מחיקת תאים',merge:'מיזוג תאים',mergeRight:'מזג ימינה',mergeDown:'מזג למטה',splitHorizontal:'פצל תא אופקית',splitVertical:'פצל תא אנכית',title:'תכונות התא',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'שורה',insertBefore:'הוסף שורה לפני',insertAfter:'הוסף שורה אחרי',deleteRow:'מחיקת שורות'},column:{menu:'עמודה',insertBefore:'הוסף עמודה לפני',insertAfter:'הוסף עמודה אחרי',deleteColumn:'מחיקת עמודות'}},button:{title:'מאפייני כפתור',text:'טקסט (ערך)',type:'סוג',typeBtn:'כפתור',typeSbm:'שלח',typeRst:'אפס'},checkboxAndRadio:{checkboxTitle:'מאפייני תיבת סימון',radioTitle:'מאפייני לחצן אפשרויות',value:'ערך',selected:'בחור'},form:{title:'מאפיני טופס',menu:'מאפיני טופס',action:'שלח אל',method:'סוג שליחה',encoding:'Encoding',target:'מטרה',targetNotSet:'<לא נקבע>',targetNew:'חלון חדש (_blank)',targetTop:'חלון ראשי (_top)',targetSelf:'באותו החלון (_self)',targetParent:'חלון האב (_parent)'},select:{title:'מאפייני שדה בחירה',selectInfo:'מידע',opAvail:'אפשרויות זמינות',value:'ערך',size:'גודל',lines:'שורות',chkMulti:'אפשר בחירות מרובות',opText:'טקסט',opValue:'ערך',btnAdd:'הוסף',btnModify:'שנה',btnUp:'למעלה',btnDown:'למטה',btnSetValue:'קבע כברירת מחדל',btnDelete:'מחק'},textarea:{title:'מאפיני איזור טקסט',cols:'עמודות',rows:'שורות'},textfield:{title:'מאפייני שדה טקסט',name:'שם',value:'ערך',charWidth:'רוחב באותיות',maxChars:'מקסימות אותיות',type:'סוג',typeText:'טקסט',typePass:'סיסמה'},hidden:{title:'מאפיני שדה חבוי',name:'שם',value:'ערך'},image:{title:'תכונות התמונה',titleButton:'מאפיני כפתור תמונה',menu:'תכונות התמונה',infoTab:'מידע על התמונה',btnUpload:'שליחה לשרת',url:'כתובת (URL)',upload:'העלאה',alt:'טקסט חלופי',width:'רוחב',height:'גובה',lockRatio:'נעילת היחס',resetSize:'איפוס הגודל',border:'מסגרת',hSpace:'מרווח אופקי',vSpace:'מרווח אנכי',align:'יישור',alignLeft:'לשמאל',alignAbsBottom:'לתחתית האבסולוטית',alignAbsMiddle:'מרכוז אבסולוטי',alignBaseline:'לקו התחתית',alignBottom:'לתחתית',alignMiddle:'לאמצע',alignRight:'לימין',alignTextTop:'לראש הטקסט',alignTop:'למעלה',preview:'תצוגה מקדימה',alertUrl:'נא להקליד את כתובת התמונה',linkTab:'קישור',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'מאפייני פלאש',propertiesTab:'Properties',title:'מאפיני פלאש',chkPlay:'נגן אוטומטי',chkLoop:'לולאה',chkMenu:'אפשר תפריט פלאש',chkFull:'Allow Fullscreen',scale:'גודל',scaleAll:'הצג הכל',scaleNoBorder:'ללא גבולות',scaleFit:'התאמה מושלמת',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'יישור',alignLeft:'לשמאל',alignAbsBottom:'לתחתית האבסולוטית',alignAbsMiddle:'מרכוז אבסולוטי',alignBaseline:'לקו התחתית',alignBottom:'לתחתית',alignMiddle:'לאמצע',alignRight:'לימין',alignTextTop:'לראש הטקסט',alignTop:'למעלה',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'צבע רקע',width:'רוחב',height:'גובה',hSpace:'מרווח אופקי',vSpace:'מרווח אנכי',validateSrc:'נא להקליד את כתובת הקישור (URL)',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'בדיקת איות',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'לא נמצא במילון',changeTo:'שנה ל',btnIgnore:'התעלם',btnIgnoreAll:'התעלם מהכל',btnReplace:'החלף',btnReplaceAll:'החלף הכל',btnUndo:'החזר',noSuggestions:'- אין הצעות -',progress:'בדיקות איות בתהליך ....',noMispell:'בדיקות איות הסתיימה: לא נמצאו שגיעות כתיב',noChanges:'בדיקות איות הסתיימה: לא שונתה אף מילה',oneChange:'בדיקות איות הסתיימה: שונתה מילה אחת',manyChanges:'בדיקות איות הסתיימה: %1 מילים שונו',ieSpellDownload:'בודק האיות לא מותקן, האם אתה מעוניין להוריד?'},smiley:{toolbar:'סמיילי',title:'הוספת סמיילי'},elementsPath:{eleTitle:'%1 element'},numberedlist:'רשימה ממוספרת',bulletedlist:'רשימת נקודות',indent:'הגדלת אינדנטציה',outdent:'הקטנת אינדנטציה',justify:{left:'יישור לשמאל',center:'מרכוז',right:'יישור לימין',block:'יישור לשוליים'},blockquote:'בלוק ציטוט',clipboard:{title:'הדבקה',cutError:'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה  אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+X).',copyError:'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+C).',pasteMsg:'אנא הדבק בתוך הקופסה באמצעות  (<STRONG>Ctrl+V</STRONG>) ולחץ על  <STRONG>אישור</STRONG>.',securityMsg:'עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (clipboard) בצורה ישירה.אנא בצע הדבק שוב בחלון זה.'},pastefromword:{toolbar:'הדבקה מ-וורד',title:'הדבקה מ-וורד',advice:'אנא הדבק בתוך הקופסה באמצעות  (<STRONG>Ctrl+V</STRONG>) ולחץ על  <STRONG>אישור</STRONG>.',ignoreFontFace:'התעלם מהגדרות סוג פונט',removeStyle:'הסר הגדרות סגנון'},pasteText:{button:'הדבקה כטקסט פשוט',title:'הדבקה כטקסט פשוט'},templates:{button:'תבניות',title:'תביות תוכן',insertOption:'החלפת תוכן ממשי',selectPromptMsg:'אנא בחר תבנית לפתיחה בעורך <BR>התוכן המקורי ימחק:',emptyListMsg:'(לא הוגדרו תבניות)'},showBlocks:'הצג בלוקים',stylesCombo:{label:'סגנון',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'עיצוב',voiceLabel:'Format',panelTitle:'עיצוב',panelVoiceLabel:'Select a paragraph format',tag_p:'נורמלי',tag_pre:'קוד',tag_address:'כתובת',tag_h1:'כותרת',tag_h2:'כותרת 2',tag_h3:'כותרת 3',tag_h4:'כותרת 4',tag_h5:'כותרת 5',tag_h6:'כותרת 6',tag_div:'Normal (DIV)'},font:{label:'גופן',voiceLabel:'Font',panelTitle:'גופן',panelVoiceLabel:'Select a font'},fontSize:{label:'גודל',voiceLabel:'Font Size',panelTitle:'גודל',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'צבע טקסט',bgColorTitle:'צבע רקע',auto:'אוטומטי',more:'צבעים נוספים...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/hi.js b/lang/hi.js
new file mode 100644 (file)
index 0000000..862d71d
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.hi={dir:'ltr',editorTitle:'Rich text editor, %1',source:'सोर्स',newPage:'नया पेज',save:'सेव',preview:'प्रीव्यू',cut:'कट',copy:'कॉपी',paste:'पेस्ट',print:'प्रिन्ट',underline:'रेखांकण',bold:'बोल्ड',italic:'इटैलिक',selectAll:'सब सॅलॅक्ट करें',removeFormat:'फ़ॉर्मैट हटायें',strike:'स्ट्राइक थ्रू',subscript:'अधोलेख',superscript:'अभिलेख',horizontalrule:'हॉरिज़ॉन्टल रेखा इन्सर्ट करें',pagebreak:'पेज ब्रेक इन्सर्ट् करें',unlink:'लिंक हटायें',undo:'अन्डू',redo:'रीडू',common:{browseServer:'सर्वर ब्राउज़ करें',url:'URL',protocol:'प्रोटोकॉल',upload:'अपलोड',uploadSubmit:'इसे सर्वर को भेजें',image:'तस्वीर',flash:'फ़्लैश',form:'फ़ॉर्म',checkbox:'चॅक बॉक्स',radio:'रेडिओ बटन',textField:'टेक्स्ट फ़ील्ड',textarea:'टेक्स्ट एरिया',hiddenField:'गुप्त फ़ील्ड',button:'बटन',select:'चुनाव फ़ील्ड',imageButton:'तस्वीर बटन',notSet:'<सॅट नहीं>',id:'Id',name:'नाम',langDir:'भाषा लिखने की दिशा',langDirLtr:'बायें से दायें (LTR)',langDirRtl:'दायें से बायें (RTL)',langCode:'भाषा कोड',longDescr:'अधिक विवरण के लिए URL',cssClass:'स्टाइल-शीट क्लास',advisoryTitle:'परामर्श शीर्शक',cssStyle:'स्टाइल',ok:'ठीक है',cancel:'रद्द करें',generalTab:'सामान्य',advancedTab:'ऍड्वान्स्ड',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'विशेष करॅक्टर इन्सर्ट करें',title:'विशेष करॅक्टर चुनें'},link:{toolbar:'लिंक इन्सर्ट/संपादन',menu:'लिंक संपादन',title:'लिंक',info:'लिंक  ',target:'टार्गेट',upload:'अपलोड',advanced:'ऍड्वान्स्ड',type:'लिंक प्रकार',toAnchor:'इस पेज का ऐंकर',toEmail:'ई-मेल',target:'टार्गेट',targetNotSet:'<सॅट नहीं>',targetFrame:'<फ़्रेम>',targetPopup:'<पॉप-अप विन्डो>',targetNew:'नया विन्डो (_blank)',targetTop:'शीर्ष विन्डो (_top)',targetSelf:'इसी विन्डो (_self)',targetParent:'मूल विन्डो (_parent)',targetFrameName:'टार्गेट फ़्रेम का नाम',targetPopupName:'पॉप-अप विन्डो का नाम',popupFeatures:'पॉप-अप विन्डो फ़ीचर्स',popupResizable:'Resizable',popupStatusBar:'स्टेटस बार',popupLocationBar:'लोकेशन बार',popupToolbar:'टूल बार',popupMenuBar:'मॅन्यू बार',popupFullScreen:'फ़ुल स्क्रीन (IE)',popupScrollBars:'स्क्रॉल बार',popupDependent:'डिपेन्डॅन्ट (Netscape)',popupWidth:'चौड़ाई',popupLeft:'बायीं तरफ',popupHeight:'ऊँचाई',popupTop:'दायीं तरफ',id:'Id',langDir:'भाषा लिखने की दिशा',langDirNotSet:'<सॅट नहीं>',langDirLTR:'बायें से दायें (LTR)',langDirRTL:'दायें से बायें (RTL)',acccessKey:'ऍक्सॅस की',name:'नाम',langCode:'भाषा लिखने की दिशा',tabIndex:'टैब इन्डॅक्स',advisoryTitle:'परामर्श शीर्शक',advisoryContentType:'परामर्श कन्टॅन्ट प्रकार',cssClasses:'स्टाइल-शीट क्लास',charset:'लिंक रिसोर्स करॅक्टर सॅट',styles:'स्टाइल',selectAnchor:'ऐंकर चुनें',anchorName:'ऐंकर नाम से',anchorId:'ऍलीमॅन्ट Id से',emailAddress:'ई-मेल पता',emailSubject:'संदेश विषय',emailBody:'संदेश',noAnchors:'(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)',noUrl:'लिंक URL टाइप करें',noEmail:'ई-मेल पता टाइप करें'},anchor:{toolbar:'ऐंकर इन्सर्ट/संपादन',menu:'ऐंकर प्रॉपर्टीज़',title:'ऐंकर प्रॉपर्टीज़',name:'ऐंकर का नाम',errorName:'ऐंकर का नाम टाइप करें'},findAndReplace:{title:'खोजें और बदलें',find:'खोजें',replace:'रीप्लेस',findWhat:'यह खोजें:',replaceWith:'इससे रिप्लेस करें:',notFoundMsg:'आपके द्वारा दिया गया टेक्स्ट नहीं मिला',matchCase:'केस मिलायें',matchWord:'पूरा शब्द मिलायें',matchCyclic:'Match cyclic',replaceAll:'सभी रिप्लेस करें',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'टेबल',title:'टेबल प्रॉपर्टीज़',menu:'टेबल प्रॉपर्टीज़',deleteTable:'टेबल डिलीट करें',rows:'पंक्तियाँ',columns:'कालम',border:'बॉर्डर साइज़',align:'ऍलाइन्मॅन्ट',alignNotSet:'<सॅट नहीं>',alignLeft:'दायें',alignCenter:'बीच में',alignRight:'बायें',width:'चौड़ाई',widthPx:'पिक्सैल',widthPc:'प्रतिशत',height:'ऊँचाई',cellSpace:'सैल अंतर',cellPad:'सैल पैडिंग',caption:'शीर्षक',summary:'सारांश',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'खाना',insertBefore:'पहले सैल डालें',insertAfter:'बाद में सैल डालें',deleteCell:'सैल डिलीट करें',merge:'सैल मिलायें',mergeRight:'बाँया विलय',mergeDown:'नीचे विलय करें',splitHorizontal:'सैल को क्षैतिज स्थिति में विभाजित करें',splitVertical:'सैल को लम्बाकार में विभाजित करें',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'पंक्ति',insertBefore:'पहले पंक्ति डालें',insertAfter:'बाद में पंक्ति डालें',deleteRow:'पंक्तियाँ डिलीट करें'},column:{menu:'कालम',insertBefore:'पहले कालम डालें',insertAfter:'बाद में कालम डालें',deleteColumn:'कालम डिलीट करें'}},button:{title:'बटन प्रॉपर्टीज़',text:'टेक्स्ट (वैल्यू)',type:'प्रकार',typeBtn:'बटन',typeSbm:'सब्मिट',typeRst:'रिसेट'},checkboxAndRadio:{checkboxTitle:'चॅक बॉक्स प्रॉपर्टीज़',radioTitle:'रेडिओ बटन प्रॉपर्टीज़',value:'वैल्यू',selected:'सॅलॅक्टॅड'},form:{title:'फ़ॉर्म प्रॉपर्टीज़',menu:'फ़ॉर्म प्रॉपर्टीज़',action:'क्रिया',method:'तरीका',encoding:'Encoding',target:'टार्गेट',targetNotSet:'<सॅट नहीं>',targetNew:'नया विन्डो (_blank)',targetTop:'शीर्ष विन्डो (_top)',targetSelf:'इसी विन्डो (_self)',targetParent:'मूल विन्डो (_parent)'},select:{title:'चुनाव फ़ील्ड प्रॉपर्टीज़',selectInfo:'सूचना',opAvail:'उपलब्ध विकल्प',value:'वैल्यू',size:'साइज़',lines:'पंक्तियाँ',chkMulti:'एक से ज्यादा विकल्प चुनने दें',opText:'टेक्स्ट',opValue:'वैल्यू',btnAdd:'जोड़ें',btnModify:'बदलें',btnUp:'ऊपर',btnDown:'नीचे',btnSetValue:'चुनी गई वैल्यू सॅट करें',btnDelete:'डिलीट'},textarea:{title:'टेक्स्त एरिया प्रॉपर्टीज़',cols:'कालम',rows:'पंक्तियां'},textfield:{title:'टेक्स्ट फ़ील्ड प्रॉपर्टीज़',name:'नाम',value:'वैल्यू',charWidth:'करॅक्टर की चौढ़ाई',maxChars:'अधिकतम करॅक्टर',type:'टाइप',typeText:'टेक्स्ट',typePass:'पास्वर्ड'},hidden:{title:'गुप्त फ़ील्ड प्रॉपर्टीज़',name:'नाम',value:'वैल्यू'},image:{title:'तस्वीर प्रॉपर्टीज़',titleButton:'तस्वीर बटन प्रॉपर्टीज़',menu:'तस्वीर प्रॉपर्टीज़',infoTab:'तस्वीर की जानकारी',btnUpload:'इसे सर्वर को भेजें',url:'URL',upload:'अपलोड',alt:'वैकल्पिक टेक्स्ट',width:'चौड़ाई',height:'ऊँचाई',lockRatio:'लॉक अनुपात',resetSize:'रीसॅट साइज़',border:'बॉर्डर',hSpace:'हॉरिज़ॉन्टल स्पेस',vSpace:'वर्टिकल स्पेस',align:'ऍलाइन',alignLeft:'दायें',alignAbsBottom:'Abs नीचे',alignAbsMiddle:'Abs ऊपर',alignBaseline:'मूल रेखा',alignBottom:'नीचे',alignMiddle:'मध्य',alignRight:'दायें',alignTextTop:'टेक्स्ट ऊपर',alignTop:'ऊपर',preview:'प्रीव्यू',alertUrl:'तस्वीर का URL टाइप करें ',linkTab:'लिंक',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'फ़्लैश प्रॉपर्टीज़',propertiesTab:'Properties',title:'फ़्लैश प्रॉपर्टीज़',chkPlay:'ऑटो प्ले',chkLoop:'लूप',chkMenu:'फ़्लैश मॅन्यू का प्रयोग करें',chkFull:'Allow Fullscreen',scale:'स्केल',scaleAll:'सभी दिखायें',scaleNoBorder:'कोई बॉर्डर नहीं',scaleFit:'बिल्कुल फ़िट',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'ऍलाइन',alignLeft:'दायें',alignAbsBottom:'Abs नीचे',alignAbsMiddle:'Abs ऊपर',alignBaseline:'मूल रेखा',alignBottom:'नीचे',alignMiddle:'मध्य',alignRight:'दायें',alignTextTop:'टेक्स्ट ऊपर',alignTop:'ऊपर',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'बैक्ग्राउन्ड रंग',width:'चौड़ाई',height:'ऊँचाई',hSpace:'हॉरिज़ॉन्टल स्पेस',vSpace:'वर्टिकल स्पेस',validateSrc:'लिंक URL टाइप करें',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'वर्तनी (स्पेलिंग) जाँच',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'शब्दकोश में नहीं',changeTo:'इसमें बदलें',btnIgnore:'इग्नोर',btnIgnoreAll:'सभी इग्नोर करें',btnReplace:'रिप्लेस',btnReplaceAll:'सभी रिप्लेस करें',btnUndo:'अन्डू',noSuggestions:'- कोई सुझाव नहीं -',progress:'वर्तनी की जाँच (स्पॅल-चॅक) जारी है...',noMispell:'वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई',noChanges:'वर्तनी की जाँच :कोई शब्द नहीं बदला गया',oneChange:'वर्तनी की जाँच : एक शब्द बदला गया',manyChanges:'वर्तनी की जाँच : %1 शब्द बदले गये',ieSpellDownload:'स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डाउनलोड करना चाहेंगे?'},smiley:{toolbar:'स्माइली',title:'स्माइली इन्सर्ट करें'},elementsPath:{eleTitle:'%1 element'},numberedlist:'अंकीय सूची',bulletedlist:'बुलॅट सूची',indent:'इन्डॅन्ट बढ़ायें',outdent:'इन्डॅन्ट कम करें',justify:{left:'बायीं तरफ',center:'बीच में',right:'दायीं तरफ',block:'ब्लॉक जस्टीफ़ाई'},blockquote:'ब्लॉक-कोट',clipboard:{title:'पेस्ट',cutError:'आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl+X) का प्रयोग करें।',copyError:'आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl+C) का प्रयोग करें।',pasteMsg:'Ctrl+V का प्रयोग करके पेस्ट करें और ठीक है करें.',securityMsg:'आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.'},pastefromword:{toolbar:'पेस्ट (वर्ड से)',title:'पेस्ट (वर्ड से)',advice:'Ctrl+V का प्रयोग करके पेस्ट करें और ठीक है करें.',ignoreFontFace:'फ़ॉन्ट परिभाषा निकालें',removeStyle:'स्टाइल परिभाषा निकालें'},pasteText:{button:'पेस्ट (सादा टॅक्स्ट)',title:'पेस्ट (सादा टॅक्स्ट)'},templates:{button:'टॅम्प्लेट',title:'कन्टेन्ट टॅम्प्लेट',insertOption:'मूल शब्दों को बदलें',selectPromptMsg:'ऍडिटर में ओपन करने हेतु टॅम्प्लेट चुनें(वर्तमान कन्टॅन्ट सेव नहीं होंगे):',emptyListMsg:'(कोई टॅम्प्लेट डिफ़ाइन नहीं किया गया है)'},showBlocks:'ब्लॉक दिखायें',stylesCombo:{label:'स्टाइल',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'फ़ॉर्मैट',voiceLabel:'Format',panelTitle:'फ़ॉर्मैट',panelVoiceLabel:'Select a paragraph format',tag_p:'साधारण',tag_pre:'फ़ॉर्मैटॅड',tag_address:'पता',tag_h1:'शीर्षक 1',tag_h2:'शीर्षक 2',tag_h3:'शीर्षक 3',tag_h4:'शीर्षक 4',tag_h5:'शीर्षक 5',tag_h6:'शीर्षक 6',tag_div:'शीर्षक (DIV)'},font:{label:'फ़ॉन्ट',voiceLabel:'Font',panelTitle:'फ़ॉन्ट',panelVoiceLabel:'Select a font'},fontSize:{label:'साइज़',voiceLabel:'Font Size',panelTitle:'साइज़',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'टेक्स्ट रंग',bgColorTitle:'बैक्ग्राउन्ड रंग',auto:'स्वचालित',more:'और रंग...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/hr.js b/lang/hr.js
new file mode 100644 (file)
index 0000000..e6cc060
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.hr={dir:'ltr',editorTitle:'Text editor, %1',source:'Kôd',newPage:'Nova stranica',save:'Snimi',preview:'Pregledaj',cut:'Izreži',copy:'Kopiraj',paste:'Zalijepi',print:'Ispiši',underline:'Potcrtano',bold:'Podebljaj',italic:'Ukosi',selectAll:'Odaberi sve',removeFormat:'Ukloni formatiranje',strike:'Precrtano',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Ubaci vodoravnu liniju',pagebreak:'Ubaci prijelom stranice',unlink:'Ukloni link',undo:'Poništi',redo:'Ponovi',common:{browseServer:'Pretraži server',url:'URL',protocol:'Protokol',upload:'Pošalji',uploadSubmit:'Pošalji na server',image:'Slika',flash:'Flash',form:'Form',checkbox:'Checkbox',radio:'Radio Button',textField:'Text Field',textarea:'Textarea',hiddenField:'Hidden Field',button:'Button',select:'Selection Field',imageButton:'Image Button',notSet:'<nije postavljeno>',id:'Id',name:'Naziv',langDir:'Smjer jezika',langDirLtr:'S lijeva na desno (LTR)',langDirRtl:'S desna na lijevo (RTL)',langCode:'Kôd jezika',longDescr:'Dugački opis URL',cssClass:'Stylesheet klase',advisoryTitle:'Advisory naslov',cssStyle:'Stil',ok:'OK',cancel:'Poništi',generalTab:'Općenito',advancedTab:'Napredno',validateNumberFailed:'Ova vrijednost nije broj.',confirmNewPage:'Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?',confirmCancel:'Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?',unavailable:'%1<span class="cke_accessibility">, nedostupno</span>'},specialChar:{toolbar:'Ubaci posebne znakove',title:'Odaberite posebni karakter'},link:{toolbar:'Ubaci/promijeni link',menu:'Promijeni link',title:'Link',info:'Link Info',target:'Meta',upload:'Pošalji',advanced:'Napredno',type:'Link vrsta',toAnchor:'Sidro na ovoj stranici',toEmail:'E-Mail',target:'Meta',targetNotSet:'<nije postavljeno>',targetFrame:'<okvir>',targetPopup:'<popup prozor>',targetNew:'Novi prozor (_blank)',targetTop:'Vršni prozor (_top)',targetSelf:'Isti prozor (_self)',targetParent:'Roditeljski prozor (_parent)',targetFrameName:'Ime ciljnog okvira',targetPopupName:'Naziv popup prozora',popupFeatures:'Mogućnosti popup prozora',popupResizable:'Promjenjiva veličina',popupStatusBar:'Statusna traka',popupLocationBar:'Traka za lokaciju',popupToolbar:'Traka s alatima',popupMenuBar:'Izborna traka',popupFullScreen:'Cijeli ekran (IE)',popupScrollBars:'Scroll traka',popupDependent:'Ovisno (Netscape)',popupWidth:'Širina',popupLeft:'Lijeva pozicija',popupHeight:'Visina',popupTop:'Gornja pozicija',id:'Id',langDir:'Smjer jezika',langDirNotSet:'<nije postavljeno>',langDirLTR:'S lijeva na desno (LTR)',langDirRTL:'S desna na lijevo (RTL)',acccessKey:'Pristupna tipka',name:'Naziv',langCode:'Smjer jezika',tabIndex:'Tab Indeks',advisoryTitle:'Advisory naslov',advisoryContentType:'Advisory vrsta sadržaja',cssClasses:'Stylesheet klase',charset:'Kodna stranica povezanih resursa',styles:'Stil',selectAnchor:'Odaberi sidro',anchorName:'Po nazivu sidra',anchorId:'Po Id elementa',emailAddress:'E-Mail adresa',emailSubject:'Naslov',emailBody:'Sadržaj poruke',noAnchors:'(Nema dostupnih sidra)',noUrl:'Molimo upišite URL link',noEmail:'Molimo upišite e-mail adresu'},anchor:{toolbar:'Ubaci/promijeni sidro',menu:'Svojstva sidra',title:'Svojstva sidra',name:'Ime sidra',errorName:'Molimo unesite ime sidra'},findAndReplace:{title:'Pronađi i zamijeni',find:'Pronađi',replace:'Zamijeni',findWhat:'Pronađi:',replaceWith:'Zamijeni s:',notFoundMsg:'Traženi tekst nije pronađen.',matchCase:'Usporedi mala/velika slova',matchWord:'Usporedi cijele riječi',matchCyclic:'Usporedi kružno',replaceAll:'Zamijeni sve',replaceSuccessMsg:'Zamijenjeno %1 pojmova.'},table:{toolbar:'Tablica',title:'Svojstva tablice',menu:'Svojstva tablice',deleteTable:'Izbriši tablicu',rows:'Redova',columns:'Kolona',border:'Veličina okvira',align:'Poravnanje',alignNotSet:'<nije postavljeno>',alignLeft:'Lijevo',alignCenter:'Središnje',alignRight:'Desno',width:'Širina',widthPx:'piksela',widthPc:'postotaka',height:'Visina',cellSpace:'Prostornost ćelija',cellPad:'Razmak ćelija',caption:'Naslov',summary:'Sažetak',headers:'Zaglavlje',headersNone:'Ništa',headersColumn:'Prva kolona',headersRow:'Prvi red',headersBoth:'Oba',invalidRows:'Broj redova mora biti broj veći od 0.',invalidCols:'Broj kolona mora biti broj veći od 0.',invalidBorder:'Debljina ruba mora biti broj.',invalidWidth:'Širina tablice mora biti broj.',invalidHeight:'Visina tablice mora biti broj.',invalidCellSpacing:'Prostornost ćelija mora biti broj.',invalidCellPadding:'Razmak ćelija mora biti broj.',cell:{menu:'Ćelija',insertBefore:'Ubaci ćeliju prije',insertAfter:'Ubaci ćeliju poslije',deleteCell:'Izbriši ćelije',merge:'Spoji ćelije',mergeRight:'Spoji desno',mergeDown:'Spoji dolje',splitHorizontal:'Podijeli ćeliju vodoravno',splitVertical:'Podijeli ćeliju okomito',title:'Svojstva ćelije',cellType:'Vrsta ćelije',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Prelazak u novi red',hAlign:'Vodoravno poravnanje',vAlign:'Okomito poravnanje',alignTop:'Vrh',alignMiddle:'Sredina',alignBottom:'Dolje',alignBaseline:'Osnovna linija',bgColor:'Boja pozadine',borderColor:'Boja ruba',data:'Podatak',header:'Zaglavlje',yes:'Da',no:'ne',invalidWidth:'Širina ćelije mora biti broj.',invalidHeight:'Visina ćelije mora biti broj.',invalidRowSpan:'Rows span mora biti cijeli broj.',invalidColSpan:'Columns span mora biti cijeli broj.'},row:{menu:'Red',insertBefore:'Ubaci red prije',insertAfter:'Ubaci red poslije',deleteRow:'Izbriši redove'},column:{menu:'Kolona',insertBefore:'Ubaci kolonu prije',insertAfter:'Ubaci kolonu poslije',deleteColumn:'Izbriši kolone'}},button:{title:'Image Button svojstva',text:'Tekst (vrijednost)',type:'Vrsta',typeBtn:'Gumb',typeSbm:'Pošalji',typeRst:'Poništi'},checkboxAndRadio:{checkboxTitle:'Checkbox svojstva',radioTitle:'Radio Button svojstva',value:'Vrijednost',selected:'Odabrano'},form:{title:'Form svojstva',menu:'Form svojstva',action:'Akcija',method:'Metoda',encoding:'Encoding',target:'Meta',targetNotSet:'<nije postavljeno>',targetNew:'Novi prozor (_blank)',targetTop:'Vršni prozor (_top)',targetSelf:'Isti prozor (_self)',targetParent:'Roditeljski prozor (_parent)'},select:{title:'Selection svojstva',selectInfo:'Info',opAvail:'Dostupne opcije',value:'Vrijednost',size:'Veličina',lines:'linija',chkMulti:'Dozvoli višestruki odabir',opText:'Tekst',opValue:'Vrijednost',btnAdd:'Dodaj',btnModify:'Promijeni',btnUp:'Gore',btnDown:'Dolje',btnSetValue:'Postavi kao odabranu vrijednost',btnDelete:'Obriši'},textarea:{title:'Textarea svojstva',cols:'Kolona',rows:'Redova'},textfield:{title:'Text Field svojstva',name:'Ime',value:'Vrijednost',charWidth:'Širina',maxChars:'Najviše karaktera',type:'Vrsta',typeText:'Tekst',typePass:'Šifra'},hidden:{title:'Hidden Field svojstva',name:'Ime',value:'Vrijednost'},image:{title:'Svojstva slika',titleButton:'Image Button svojstva',menu:'Svojstva slika',infoTab:'Info slike',btnUpload:'Pošalji na server',url:'URL',upload:'Pošalji',alt:'Alternativni tekst',width:'Širina',height:'Visina',lockRatio:'Zaključaj odnos',resetSize:'Obriši veličinu',border:'Okvir',hSpace:'HSpace',vSpace:'VSpace',align:'Poravnaj',alignLeft:'Lijevo',alignAbsBottom:'Abs dolje',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignBottom:'Dolje',alignMiddle:'Sredina',alignRight:'Desno',alignTextTop:'Vrh teksta',alignTop:'Vrh',preview:'Pregledaj',alertUrl:'Unesite URL slike',linkTab:'Link',button2Img:'Želite li promijeniti odabrani gumb u jednostavnu sliku?',img2Button:'Želite li promijeniti odabranu sliku u gumb?'},flash:{properties:'Flash svojstva',propertiesTab:'Svojstva',title:'Flash svojstva',chkPlay:'Auto Play',chkLoop:'Ponavljaj',chkMenu:'Omogući Flash izbornik',chkFull:'Omogući Fullscreen',scale:'Omjer',scaleAll:'Prikaži sve',scaleNoBorder:'Bez okvira',scaleFit:'Točna veličina',access:'Script Access',accessAlways:'Uvijek',accessSameDomain:'Ista domena',accessNever:'Nikad',align:'Poravnaj',alignLeft:'Lijevo',alignAbsBottom:'Abs dolje',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignBottom:'Dolje',alignMiddle:'Sredina',alignRight:'Desno',alignTextTop:'Vrh teksta',alignTop:'Vrh',quality:'Kvaliteta',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Vrsta prozora',flashvars:'Varijable za Flash',bgcolor:'Boja pozadine',width:'Širina',height:'Visina',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Molimo upišite URL link',validateWidth:'Širina mora biti broj.',validateHeight:'Visina mora biti broj.',validateHSpace:'HSpace mora biti broj.',validateVSpace:'VSpace mora biti broj.'},spellCheck:{toolbar:'Provjeri pravopis',title:'Provjera pravopisa',notAvailable:'Žao nam je, ali usluga trenutno nije dostupna.',errorLoading:'Greška učitavanja aplikacije: %s.',notInDic:'Nije u rječniku',changeTo:'Promijeni u',btnIgnore:'Zanemari',btnIgnoreAll:'Zanemari sve',btnReplace:'Zamijeni',btnReplaceAll:'Zamijeni sve',btnUndo:'Vrati',noSuggestions:'-Nema preporuke-',progress:'Provjera u tijeku...',noMispell:'Provjera završena: Nema grešaka',noChanges:'Provjera završena: Nije napravljena promjena',oneChange:'Provjera završena: Jedna riječ promjenjena',manyChanges:'Provjera završena: Promijenjeno %1 riječi',ieSpellDownload:'Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?'},smiley:{toolbar:'Smješko',title:'Ubaci smješka'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Brojčana lista',bulletedlist:'Obična lista',indent:'Pomakni udesno',outdent:'Pomakni ulijevo',justify:{left:'Lijevo poravnanje',center:'Središnje poravnanje',right:'Desno poravnanje',block:'Blok poravnanje'},blockquote:'Blockquote',clipboard:{title:'Zalijepi',cutError:'Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl+X).',copyError:'Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl+C).',pasteMsg:'Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl+V</STRONG>) i kliknite <STRONG>OK</STRONG>.',securityMsg:'Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.'},pastefromword:{toolbar:'Zalijepi iz Worda',title:'Zalijepi iz Worda',advice:'Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl+V</STRONG>) i kliknite <STRONG>OK</STRONG>.',ignoreFontFace:'Zanemari definiciju vrste fonta',removeStyle:'Ukloni definicije stilova'},pasteText:{button:'Zalijepi kao čisti tekst',title:'Zalijepi kao čisti tekst'},templates:{button:'Predlošci',title:'Predlošci sadržaja',insertOption:'Zamijeni trenutne sadržaje',selectPromptMsg:'Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):',emptyListMsg:'(Nema definiranih predložaka)'},showBlocks:'Prikaži blokove',stylesCombo:{label:'Stil',voiceLabel:'Stilovi',panelVoiceLabel:'Odaberite stil',panelTitle1:'Block stilovi',panelTitle2:'Inline stilovi',panelTitle3:'Object stilovi'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Format',panelVoiceLabel:'Odaberite format paragrafa',tag_p:'Normal',tag_pre:'Formatirano',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font',panelVoiceLabel:'Odaberite font'},fontSize:{label:'Veličina',voiceLabel:'Veličina slova',panelTitle:'Veličina',panelVoiceLabel:'Odaberite veličinu slova'},colorButton:{textColorTitle:'Boja teksta',bgColorTitle:'Boja pozadine',auto:'Automatski',more:'Više boja...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Provjeri pravopis tijekom tipkanja (SCAYT)',enable:'Omogući SCAYT',disable:'Onemogući SCAYT',about:'O SCAYT',toggle:'Omoguću/Onemogući SCAYT',options:'Opcije',langs:'Jezici',moreSuggestions:'Više prijedloga',ignore:'Zanemari',ignoreAll:'Zanemari sve',addWord:'Dodaj riječ',emptyDic:'Naziv rječnika ne smije biti prazno.',optionsTab:'Opcije',languagesTab:'Jezici',dictionariesTab:'Rječnici',aboutTab:'O SCAYT'},about:{title:'O CKEditoru',dlgTitle:'O CKEditoru',moreInfo:'Za informacije o licencama posjetite našu web stranicu:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Povećaj',fakeobjects:{anchor:'Sidro',flash:'Flash animacija',div:'Prijelom stranice',unknown:'Nepoznati objekt'},resize:'Povuci za promjenu veličine'};\r
diff --git a/lang/hu.js b/lang/hu.js
new file mode 100644 (file)
index 0000000..4043b47
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.hu={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Forráskód',newPage:'Új oldal',save:'Mentés',preview:'Előnézet',cut:'Kivágás',copy:'Másolás',paste:'Beillesztés',print:'Nyomtatás',underline:'Aláhúzott',bold:'Félkövér',italic:'Dőlt',selectAll:'Mindent kijelöl',removeFormat:'Formázás eltávolítása',strike:'Áthúzott',subscript:'Alsó index',superscript:'Felső index',horizontalrule:'Elválasztóvonal beillesztése',pagebreak:'Oldaltörés beillesztése',unlink:'Hivatkozás törlése',undo:'Visszavonás',redo:'Ismétlés',common:{browseServer:'Böngészés a szerveren',url:'Hivatkozás',protocol:'Protokoll',upload:'Feltöltés',uploadSubmit:'Küldés a szerverre',image:'Kép',flash:'Flash',form:'Űrlap',checkbox:'Jelölőnégyzet',radio:'Választógomb',textField:'Szövegmező',textarea:'Szövegterület',hiddenField:'Rejtettmező',button:'Gomb',select:'Legördülő lista',imageButton:'Képgomb',notSet:'<nincs beállítva>',id:'Azonosító',name:'Név',langDir:'Írás iránya',langDirLtr:'Balról jobbra',langDirRtl:'Jobbról balra',langCode:'Nyelv kódja',longDescr:'Részletes leírás webcíme',cssClass:'Stíluskészlet',advisoryTitle:'Súgócimke',cssStyle:'Stílus',ok:'Rendben',cancel:'Mégsem',generalTab:'General',advancedTab:'További opciók',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Speciális karakter beillesztése',title:'Speciális karakter választása'},link:{toolbar:'Hivatkozás beillesztése/módosítása',menu:'Hivatkozás módosítása',title:'Hivatkozás tulajdonságai',info:'Alaptulajdonságok',target:'Tartalom megjelenítése',upload:'Feltöltés',advanced:'További opciók',type:'Hivatkozás típusa',toAnchor:'Horgony az oldalon',toEmail:'E-Mail',target:'Tartalom megjelenítése',targetNotSet:'<nincs beállítva>',targetFrame:'<keretben>',targetPopup:'<felugró ablakban>',targetNew:'Új ablakban (_blank)',targetTop:'Legfelső ablakban (_top)',targetSelf:'Azonos ablakban (_self)',targetParent:'Szülő ablakban (_parent)',targetFrameName:'Keret neve',targetPopupName:'Felugró ablak neve',popupFeatures:'Felugró ablak jellemzői',popupResizable:'Resizable',popupStatusBar:'Állapotsor',popupLocationBar:'Címsor',popupToolbar:'Eszköztár',popupMenuBar:'Menü sor',popupFullScreen:'Teljes képernyő (csak IE)',popupScrollBars:'Gördítősáv',popupDependent:'Szülőhöz kapcsolt (csak Netscape)',popupWidth:'Szélesség',popupLeft:'Bal pozíció',popupHeight:'Magasság',popupTop:'Felső pozíció',id:'Id',langDir:'Írás iránya',langDirNotSet:'<nincs beállítva>',langDirLTR:'Balról jobbra',langDirRTL:'Jobbról balra',acccessKey:'Billentyűkombináció',name:'Név',langCode:'Írás iránya',tabIndex:'Tabulátor index',advisoryTitle:'Súgócimke',advisoryContentType:'Súgó tartalomtípusa',cssClasses:'Stíluskészlet',charset:'Hivatkozott tartalom kódlapja',styles:'Stílus',selectAnchor:'Horgony választása',anchorName:'Horgony név szerint',anchorId:'Azonosító szerint',emailAddress:'E-Mail cím',emailSubject:'Üzenet tárgya',emailBody:'Üzenet',noAnchors:'(Nincs horgony a dokumentumban)',noUrl:'Adja meg a hivatkozás webcímét',noEmail:'Adja meg az E-Mail címet'},anchor:{toolbar:'Horgony beillesztése/szerkesztése',menu:'Horgony tulajdonságai',title:'Horgony tulajdonságai',name:'Horgony neve',errorName:'Kérem adja meg a horgony nevét'},findAndReplace:{title:'Keresés és csere',find:'Keresés',replace:'Csere',findWhat:'Keresett szöveg:',replaceWith:'Csere erre:',notFoundMsg:'A keresett szöveg nem található.',matchCase:'kis- és nagybetű megkülönböztetése',matchWord:'csak ha ez a teljes szó',matchCyclic:'Match cyclic',replaceAll:'Az összes cseréje',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Táblázat',title:'Táblázat tulajdonságai',menu:'Táblázat tulajdonságai',deleteTable:'Táblázat törlése',rows:'Sorok',columns:'Oszlopok',border:'Szegélyméret',align:'Igazítás',alignNotSet:'<Nincs beállítva>',alignLeft:'Balra',alignCenter:'Középre',alignRight:'Jobbra',width:'Szélesség',widthPx:'képpont',widthPc:'százalék',height:'Magasság',cellSpace:'Cella térköz',cellPad:'Cella belső margó',caption:'Felirat',summary:'Leírás',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cella',insertBefore:'Cella beillesztése az aktuális cella elé',insertAfter:'Cella beillesztése az aktuális cella mögé',deleteCell:'Cellák törlése',merge:'Cellák egyesítése',mergeRight:'Cellák egyesítése jobbra',mergeDown:'Cellák egyesítése lefelé',splitHorizontal:'Cellák szétválasztása vízszintesen',splitVertical:'Cellák szétválasztása függőlegesen',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Sor',insertBefore:'Sor beillesztése az aktuális sor elé',insertAfter:'Sor beillesztése az aktuális sor mögé',deleteRow:'Sorok törlése'},column:{menu:'Oszlop',insertBefore:'Oszlop beillesztése az aktuális oszlop elé',insertAfter:'Oszlop beillesztése az aktuális oszlop mögé',deleteColumn:'Oszlopok törlése'}},button:{title:'Gomb tulajdonságai',text:'Szöveg (Érték)',type:'Típus',typeBtn:'Gomb',typeSbm:'Küldés',typeRst:'Alaphelyzet'},checkboxAndRadio:{checkboxTitle:'Jelölőnégyzet tulajdonságai',radioTitle:'Választógomb tulajdonságai',value:'Érték',selected:'Kiválasztott'},form:{title:'Űrlap tulajdonságai',menu:'Űrlap tulajdonságai',action:'Adatfeldolgozást végző hivatkozás',method:'Adatküldés módja',encoding:'Encoding',target:'Tartalom megjelenítése',targetNotSet:'<nincs beállítva>',targetNew:'Új ablakban (_blank)',targetTop:'Legfelső ablakban (_top)',targetSelf:'Azonos ablakban (_self)',targetParent:'Szülő ablakban (_parent)'},select:{title:'Legördülő lista tulajdonságai',selectInfo:'Alaptulajdonságok',opAvail:'Elérhető opciók',value:'Érték',size:'Méret',lines:'sor',chkMulti:'több sor is kiválasztható',opText:'Szöveg',opValue:'Érték',btnAdd:'Hozzáad',btnModify:'Módosít',btnUp:'Fel',btnDown:'Le',btnSetValue:'Legyen az alapértelmezett érték',btnDelete:'Töröl'},textarea:{title:'Szövegterület tulajdonságai',cols:'Karakterek száma egy sorban',rows:'Sorok száma'},textfield:{title:'Szövegmező tulajdonságai',name:'Név',value:'Érték',charWidth:'Megjelenített karakterek száma',maxChars:'Maximális karakterszám',type:'Típus',typeText:'Szöveg',typePass:'Jelszó'},hidden:{title:'Rejtett mező tulajdonságai',name:'Név',value:'Érték'},image:{title:'Kép tulajdonságai',titleButton:'Képgomb tulajdonságai',menu:'Kép tulajdonságai',infoTab:'Alaptulajdonságok',btnUpload:'Küldés a szerverre',url:'Hivatkozás',upload:'Feltöltés',alt:'Buborék szöveg',width:'Szélesség',height:'Magasság',lockRatio:'Arány megtartása',resetSize:'Eredeti méret',border:'Keret',hSpace:'Vízsz. táv',vSpace:'Függ. táv',align:'Igazítás',alignLeft:'Bal',alignAbsBottom:'Legaljára',alignAbsMiddle:'Közepére',alignBaseline:'Alapvonalhoz',alignBottom:'Aljára',alignMiddle:'Középre',alignRight:'Jobbra',alignTextTop:'Szöveg tetejére',alignTop:'Tetejére',preview:'Előnézet',alertUrl:'Töltse ki a kép webcímét',linkTab:'Hivatkozás',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash tulajdonságai',propertiesTab:'Properties',title:'Flash tulajdonságai',chkPlay:'Automata lejátszás',chkLoop:'Folyamatosan',chkMenu:'Flash menü engedélyezése',chkFull:'Allow Fullscreen',scale:'Méretezés',scaleAll:'Mindent mutat',scaleNoBorder:'Keret nélkül',scaleFit:'Teljes kitöltés',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Igazítás',alignLeft:'Bal',alignAbsBottom:'Legaljára',alignAbsMiddle:'Közepére',alignBaseline:'Alapvonalhoz',alignBottom:'Aljára',alignMiddle:'Középre',alignRight:'Jobbra',alignTextTop:'Szöveg tetejére',alignTop:'Tetejére',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Háttérszín',width:'Szélesség',height:'Magasság',hSpace:'Vízsz. táv',vSpace:'Függ. táv',validateSrc:'Adja meg a hivatkozás webcímét',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Helyesírás-ellenőrzés',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Nincs a szótárban',changeTo:'Módosítás',btnIgnore:'Kihagyja',btnIgnoreAll:'Mindet kihagyja',btnReplace:'Csere',btnReplaceAll:'Összes cseréje',btnUndo:'Visszavonás',noSuggestions:'Nincs javaslat',progress:'Helyesírás-ellenőrzés folyamatban...',noMispell:'Helyesírás-ellenőrzés kész: Nem találtam hibát',noChanges:'Helyesírás-ellenőrzés kész: Nincs változtatott szó',oneChange:'Helyesírás-ellenőrzés kész: Egy szó cserélve',manyChanges:'Helyesírás-ellenőrzés kész: %1 szó cserélve',ieSpellDownload:'A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?'},smiley:{toolbar:'Hangulatjelek',title:'Hangulatjel beszúrása'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Számozás',bulletedlist:'Felsorolás',indent:'Behúzás növelése',outdent:'Behúzás csökkentése',justify:{left:'Balra',center:'Középre',right:'Jobbra',block:'Sorkizárt'},blockquote:'Idézet blokk',clipboard:{title:'Beillesztés',cutError:'A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).',copyError:'A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).',pasteMsg:'Másolja be az alábbi mezőbe a <STRONG>Ctrl+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.',securityMsg:'A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.'},pastefromword:{toolbar:'Beillesztés Word-ből',title:'Beillesztés Word-ből',advice:'Másolja be az alábbi mezőbe a <STRONG>Ctrl+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.',ignoreFontFace:'Betű formázások megszüntetése',removeStyle:'Stílusok eltávolítása'},pasteText:{button:'Beillesztés formázatlan szövegként',title:'Beillesztés formázatlan szövegként'},templates:{button:'Sablonok',title:'Elérhető sablonok',insertOption:'Kicseréli a jelenlegi tartalmat',selectPromptMsg:'Válassza ki melyik sablon nyíljon meg a szerkesztőben<br>(a jelenlegi tartalom elveszik):',emptyListMsg:'(Nincs sablon megadva)'},showBlocks:'Blokkok megjelenítése',stylesCombo:{label:'Stílus',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formátum',voiceLabel:'Format',panelTitle:'Formátum',panelVoiceLabel:'Select a paragraph format',tag_p:'Normál',tag_pre:'Formázott',tag_address:'Címsor',tag_h1:'Fejléc 1',tag_h2:'Fejléc 2',tag_h3:'Fejléc 3',tag_h4:'Fejléc 4',tag_h5:'Fejléc 5',tag_h6:'Fejléc 6',tag_div:'Bekezdés (DIV)'},font:{label:'Betűtípus',voiceLabel:'Font',panelTitle:'Betűtípus',panelVoiceLabel:'Select a font'},fontSize:{label:'Méret',voiceLabel:'Font Size',panelTitle:'Méret',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Betűszín',bgColorTitle:'Háttérszín',auto:'Automatikus',more:'További színek...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/is.js b/lang/is.js
new file mode 100644 (file)
index 0000000..38e9024
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.is={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Kóði',newPage:'Ný síða',save:'Vista',preview:'Forskoða',cut:'Klippa',copy:'Afrita',paste:'Líma',print:'Prenta',underline:'Undirstrikað',bold:'Feitletrað',italic:'Skáletrað',selectAll:'Velja allt',removeFormat:'Fjarlægja snið',strike:'Yfirstrikað',subscript:'Niðurskrifað',superscript:'Uppskrifað',horizontalrule:'Lóðrétt lína',pagebreak:'Setja inn síðuskil',unlink:'Fjarlægja stiklu',undo:'Afturkalla',redo:'Hætta við afturköllun',common:{browseServer:'Fletta í skjalasafni',url:'Vefslóð',protocol:'Samskiptastaðall',upload:'Senda upp',uploadSubmit:'Hlaða upp',image:'Setja inn mynd',flash:'Flash',form:'Setja inn innsláttarform',checkbox:'Setja inn hökunarreit',radio:'Setja inn valhnapp',textField:'Setja inn textareit',textarea:'Setja inn textasvæði',hiddenField:'Setja inn falið svæði',button:'Setja inn hnapp',select:'Setja inn lista',imageButton:'Setja inn myndahnapp',notSet:'<ekkert valið>',id:'Auðkenni',name:'Nafn',langDir:'Lesstefna',langDirLtr:'Frá vinstri til hægri (LTR)',langDirRtl:'Frá hægri til vinstri (RTL)',langCode:'Tungumálakóði',longDescr:'Nánari lýsing',cssClass:'Stílsniðsflokkur',advisoryTitle:'Titill',cssStyle:'Stíll',ok:'Í lagi',cancel:'Hætta við',generalTab:'Almennt',advancedTab:'Tæknilegt',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Setja inn merki',title:'Velja tákn'},link:{toolbar:'Stofna/breyta stiklu',menu:'Breyta stiklu',title:'Stikla',info:'Almennt',target:'Mark',upload:'Senda upp',advanced:'Tæknilegt',type:'Stikluflokkur',toAnchor:'Bókamerki á þessari síðu',toEmail:'Netfang',target:'Mark',targetNotSet:'<ekkert valið>',targetFrame:'<rammi>',targetPopup:'<sprettigluggi>',targetNew:'Nýr gluggi (_blank)',targetTop:'Allur glugginn (_top)',targetSelf:'Sami gluggi (_self)',targetParent:'Yfirsettur rammi (_parent)',targetFrameName:'Nafn markglugga',targetPopupName:'Nafn sprettiglugga',popupFeatures:'Eigindi sprettiglugga',popupResizable:'Resizable',popupStatusBar:'Stöðustika',popupLocationBar:'Fanglína',popupToolbar:'Verkfærastika',popupMenuBar:'Vallína',popupFullScreen:'Heilskjár (IE)',popupScrollBars:'Skrunstikur',popupDependent:'Háð venslum (Netscape)',popupWidth:'Breidd',popupLeft:'Fjarlægð frá vinstri',popupHeight:'Hæð',popupTop:'Fjarlægð frá efri brún',id:'Id',langDir:'Lesstefna',langDirNotSet:'<ekkert valið>',langDirLTR:'Frá vinstri til hægri (LTR)',langDirRTL:'Frá hægri til vinstri (RTL)',acccessKey:'Skammvalshnappur',name:'Nafn',langCode:'Lesstefna',tabIndex:'Raðnúmer innsláttarreits',advisoryTitle:'Titill',advisoryContentType:'Tegund innihalds',cssClasses:'Stílsniðsflokkur',charset:'Táknróf',styles:'Stíll',selectAnchor:'Veldu akkeri',anchorName:'Eftir akkerisnafni',anchorId:'Eftir auðkenni einingar',emailAddress:'Netfang',emailSubject:'Efni',emailBody:'Meginmál',noAnchors:'<Engin bókamerki á skrá>',noUrl:'Sláðu inn veffang stiklunnar!',noEmail:'Sláðu inn netfang!'},anchor:{toolbar:'Stofna/breyta kaflamerki',menu:'Eigindi kaflamerkis',title:'Eigindi kaflamerkis',name:'Nafn bókamerkis',errorName:'Sláðu inn nafn bókamerkis!'},findAndReplace:{title:'Finna og skipta',find:'Leita',replace:'Skipta út',findWhat:'Leita að:',replaceWith:'Skipta út fyrir:',notFoundMsg:'Leitartexti fannst ekki!',matchCase:'Gera greinarmun á¡ há¡- og lágstöfum',matchWord:'Aðeins heil orð',matchCyclic:'Match cyclic',replaceAll:'Skipta út allsstaðar',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tafla',title:'Eigindi töflu',menu:'Eigindi töflu',deleteTable:'Fella töflu',rows:'Raðir',columns:'Dálkar',border:'Breidd ramma',align:'Jöfnun',alignNotSet:'<ekkert valið>',alignLeft:'Vinstrijafnað',alignCenter:'Miðjað',alignRight:'Hægrijafnað',width:'Breidd',widthPx:'myndeindir',widthPc:'prósent',height:'Hæð',cellSpace:'Bil milli reita',cellPad:'Reitaspássía',caption:'Titill',summary:'Áfram',headers:'Fyrirsagnir',headersNone:'Engar',headersColumn:'Fyrsti dálkur',headersRow:'Fyrsta röð',headersBoth:'Hvort tveggja',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Reitur',insertBefore:'Skjóta inn reiti fyrir aftan',insertAfter:'Skjóta inn reiti fyrir framan',deleteCell:'Fella reit',merge:'Sameina reiti',mergeRight:'Sameina til hægri',mergeDown:'Sameina niður á við',splitHorizontal:'Kljúfa reit lárétt',splitVertical:'Kljúfa reit lóðrétt',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Röð',insertBefore:'Skjóta inn röð fyrir ofan',insertAfter:'Skjóta inn röð fyrir neðan',deleteRow:'Eyða röð'},column:{menu:'Dálkur',insertBefore:'Skjóta inn dálki vinstra megin',insertAfter:'Skjóta inn dálki hægra megin',deleteColumn:'Fella dálk'}},button:{title:'Eigindi hnapps',text:'Texti',type:'Gerð',typeBtn:'Hnappur',typeSbm:'Staðfesta',typeRst:'Hreinsa'},checkboxAndRadio:{checkboxTitle:'Eigindi markreits',radioTitle:'Eigindi valhnapps',value:'Gildi',selected:'Valið'},form:{title:'Eigindi innsláttarforms',menu:'Eigindi innsláttarforms',action:'Aðgerð',method:'Aðferð',encoding:'Encoding',target:'Mark',targetNotSet:'<ekkert valið>',targetNew:'Nýr gluggi (_blank)',targetTop:'Allur glugginn (_top)',targetSelf:'Sami gluggi (_self)',targetParent:'Yfirsettur rammi (_parent)'},select:{title:'Eigindi lista',selectInfo:'Upplýsingar',opAvail:'Kostir',value:'Gildi',size:'Stærð',lines:'línur',chkMulti:'Leyfa fleiri kosti',opText:'Texti',opValue:'Gildi',btnAdd:'Bæta við',btnModify:'Breyta',btnUp:'Upp',btnDown:'Niður',btnSetValue:'Merkja sem valið',btnDelete:'Eyða'},textarea:{title:'Eigindi textasvæðis',cols:'Dálkar',rows:'Línur'},textfield:{title:'Eigindi textareits',name:'Nafn',value:'Gildi',charWidth:'Breidd (leturtákn)',maxChars:'Hámarksfjöldi leturtákna',type:'Gerð',typeText:'Texti',typePass:'Lykilorð'},hidden:{title:'Eigindi falins svæðis',name:'Nafn',value:'Gildi'},image:{title:'Eigindi myndar',titleButton:'Eigindi myndahnapps',menu:'Eigindi myndar',infoTab:'Almennt',btnUpload:'Hlaða upp',url:'Vefslóð',upload:'Hlaða upp',alt:'Baklægur texti',width:'Breidd',height:'Hæð',lockRatio:'Festa stærðarhlutfall',resetSize:'Reikna stærð',border:'Rammi',hSpace:'Vinstri bil',vSpace:'Hægri bil',align:'Jöfnun',alignLeft:'Vinstri',alignAbsBottom:'Abs neðst',alignAbsMiddle:'Abs miðjuð',alignBaseline:'Grunnlína',alignBottom:'Neðst',alignMiddle:'Miðjuð',alignRight:'Hægri',alignTextTop:'Efri brún texta',alignTop:'Efst',preview:'Sýna dæmi',alertUrl:'Sláðu inn slóðina að myndinni',linkTab:'Stikla',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Eigindi Flash',propertiesTab:'Properties',title:'Eigindi Flash',chkPlay:'Sjálfvirk spilun',chkLoop:'Endurtekning',chkMenu:'Sýna Flash-valmynd',chkFull:'Allow Fullscreen',scale:'Skali',scaleAll:'Sýna allt',scaleNoBorder:'Án ramma',scaleFit:'Fella skala að stærð',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Jöfnun',alignLeft:'Vinstri',alignAbsBottom:'Abs neðst',alignAbsMiddle:'Abs miðjuð',alignBaseline:'Grunnlína',alignBottom:'Neðst',alignMiddle:'Miðjuð',alignRight:'Hægri',alignTextTop:'Efri brún texta',alignTop:'Efst',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Bakgrunnslitur',width:'Breidd',height:'Hæð',hSpace:'Vinstri bil',vSpace:'Hægri bil',validateSrc:'Sláðu inn veffang stiklunnar!',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Villuleit',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ekki í orðabókinni',changeTo:'Tillaga',btnIgnore:'Hunsa',btnIgnoreAll:'Hunsa allt',btnReplace:'Skipta',btnReplaceAll:'Skipta öllu',btnUndo:'Til baka',noSuggestions:'- engar tillögur -',progress:'Villuleit í gangi...',noMispell:'Villuleit lokið: Engin villa fannst',noChanges:'Villuleit lokið: Engu orði breytt',oneChange:'Villuleit lokið: Einu orði breytt',manyChanges:'Villuleit lokið: %1 orðum breytt',ieSpellDownload:'Villuleit ekki sett upp.<br>Viltu setja hana upp?'},smiley:{toolbar:'Svipur',title:'Velja svip'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Númeraður listi',bulletedlist:'Punktalisti',indent:'Minnka inndrátt',outdent:'Auka inndrátt',justify:{left:'Vinstrijöfnun',center:'Miðja texta',right:'Hægrijöfnun',block:'Jafna báðum megin'},blockquote:'Inndráttur',clipboard:{title:'Líma',cutError:'Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl+X).',copyError:'Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl+C).',pasteMsg:'Límdu í svæðið hér að neðan og (<STRONG>Ctrl+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.',securityMsg:'Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.'},pastefromword:{toolbar:'Líma úr Word',title:'Líma úr Word',advice:'Límdu í svæðið hér að neðan og (<STRONG>Ctrl+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.',ignoreFontFace:'Hunsa leturskilgreiningar',removeStyle:'Hunsa letureigindi'},pasteText:{button:'Líma sem ósniðinn texta',title:'Líma sem ósniðinn texta'},templates:{button:'Sniðmát',title:'Innihaldssniðmát',insertOption:'Skipta út raunverulegu innihaldi',selectPromptMsg:'Veldu sniðmát til að opna í ritlinum.<br>(Núverandi innihald víkur fyrir því!):',emptyListMsg:'(Ekkert sniðmát er skilgreint!)'},showBlocks:'Sýna blokkir',stylesCombo:{label:'Stílflokkur',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Stílsnið',voiceLabel:'Format',panelTitle:'Stílsnið',panelVoiceLabel:'Select a paragraph format',tag_p:'Venjulegt letur',tag_pre:'Forsniðið',tag_address:'Vistfang',tag_h1:'Fyrirsögn 1',tag_h2:'Fyrirsögn 2',tag_h3:'Fyrirsögn 3',tag_h4:'Fyrirsögn 4',tag_h5:'Fyrirsögn 5',tag_h6:'Fyrirsögn 6',tag_div:'Venjulegt (DIV)'},font:{label:'Leturgerð ',voiceLabel:'Font',panelTitle:'Leturgerð ',panelVoiceLabel:'Select a font'},fontSize:{label:'Leturstærð ',voiceLabel:'Font Size',panelTitle:'Leturstærð ',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Litur texta',bgColorTitle:'Bakgrunnslitur',auto:'Sjálfval',more:'Fleiri liti...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/it.js b/lang/it.js
new file mode 100644 (file)
index 0000000..43f2017
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.it={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Codice Sorgente',newPage:'Nuova pagina vuota',save:'Salva',preview:'Anteprima',cut:'Taglia',copy:'Copia',paste:'Incolla',print:'Stampa',underline:'Sottolineato',bold:'Grassetto',italic:'Corsivo',selectAll:'Seleziona tutto',removeFormat:'Elimina formattazione',strike:'Barrato',subscript:'Pedice',superscript:'Apice',horizontalrule:'Inserisci riga orizzontale',pagebreak:'Inserisci interruzione di pagina',unlink:'Elimina collegamento',undo:'Annulla',redo:'Ripristina',common:{browseServer:'Cerca sul server',url:'URL',protocol:'Protocollo',upload:'Carica',uploadSubmit:'Invia al server',image:'Immagine',flash:'Oggetto Flash',form:'Modulo',checkbox:'Checkbox',radio:'Radio Button',textField:'Campo di testo',textarea:'Area di testo',hiddenField:'Campo nascosto',button:'Bottone',select:'Menu di selezione',imageButton:'Bottone immagine',notSet:'<non impostato>',id:'Id',name:'Nome',langDir:'Direzione scrittura',langDirLtr:'Da Sinistra a Destra (LTR)',langDirRtl:'Da Destra a Sinistra (RTL)',langCode:'Codice Lingua',longDescr:'URL descrizione estesa',cssClass:'Nome classe CSS',advisoryTitle:'Titolo',cssStyle:'Stile',ok:'OK',cancel:'Annulla',generalTab:'Generale',advancedTab:'Avanzate',validateNumberFailed:'Il valore inserito non è un numero.',confirmNewPage:'Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?',confirmCancel:'Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?',unavailable:'%1<span class="cke_accessibility">, non disponibile</span>'},specialChar:{toolbar:'Inserisci carattere speciale',title:'Seleziona carattere speciale'},link:{toolbar:'Inserisci/Modifica collegamento',menu:'Modifica collegamento',title:'Collegamento',info:'Informazioni collegamento',target:'Destinazione',upload:'Carica',advanced:'Avanzate',type:'Tipo di Collegamento',toAnchor:'Ancora nella pagina',toEmail:'E-Mail',target:'Destinazione',targetNotSet:'<non impostato>',targetFrame:'<riquadro>',targetPopup:'<finestra popup>',targetNew:'Nuova finestra (_blank)',targetTop:'Finestra superiore (_top)',targetSelf:'Stessa finestra (_self)',targetParent:'Finestra padre (_parent)',targetFrameName:'Nome del riquadro di destinazione',targetPopupName:'Nome finestra popup',popupFeatures:'Caratteristiche finestra popup',popupResizable:'Ridimensionabile',popupStatusBar:'Barra di stato',popupLocationBar:'Barra degli indirizzi',popupToolbar:'Barra degli strumenti',popupMenuBar:'Barra del menu',popupFullScreen:'A tutto schermo (IE)',popupScrollBars:'Barre di scorrimento',popupDependent:'Dipendente (Netscape)',popupWidth:'Larghezza',popupLeft:'Posizione da sinistra',popupHeight:'Altezza',popupTop:"Posizione dall'alto",id:'Id',langDir:'Direzione scrittura',langDirNotSet:'<non impostato>',langDirLTR:'Da Sinistra a Destra (LTR)',langDirRTL:'Da Destra a Sinistra (RTL)',acccessKey:'Scorciatoia<br />da tastiera',name:'Nome',langCode:'Direzione scrittura',tabIndex:'Ordine di tabulazione',advisoryTitle:'Titolo',advisoryContentType:'Tipo della risorsa collegata',cssClasses:'Nome classe CSS',charset:'Set di caretteri della risorsa collegata',styles:'Stile',selectAnchor:'Scegli Ancora',anchorName:'Per Nome',anchorId:'Per id elemento',emailAddress:'Indirizzo E-Mail',emailSubject:'Oggetto del messaggio',emailBody:'Corpo del messaggio',noAnchors:'(Nessuna ancora disponibile nel documento)',noUrl:"Devi inserire l'URL del collegamento",noEmail:"Devi inserire un'indirizzo e-mail"},anchor:{toolbar:'Inserisci/Modifica Ancora',menu:'Proprietà ancora',title:'Proprietà ancora',name:'Nome ancora',errorName:"Inserici il nome dell'ancora"},findAndReplace:{title:'Cerca e Sostituisci',find:'Trova',replace:'Sostituisci',findWhat:'Trova:',replaceWith:'Sostituisci con:',notFoundMsg:"L'elemento cercato non è stato trovato.",matchCase:'Maiuscole/minuscole',matchWord:'Solo parole intere',matchCyclic:'Ricerca ciclica',replaceAll:'Sostituisci tutto',replaceSuccessMsg:'%1 occorrenza(e) sostituite.'},table:{toolbar:'Tabella',title:'Proprietà tabella',menu:'Proprietà tabella',deleteTable:'Cancella Tabella',rows:'Righe',columns:'Colonne',border:'Dimensione bordo',align:'Allineamento',alignNotSet:'<non impostato>',alignLeft:'Sinistra',alignCenter:'Centrato',alignRight:'Destra',width:'Larghezza',widthPx:'pixel',widthPc:'percento',height:'Altezza',cellSpace:'Spaziatura celle',cellPad:'Padding celle',caption:'Intestazione',summary:'Indice',headers:'Intestazione',headersNone:'Nessuna',headersColumn:'Prima Colonna',headersRow:'Prima Riga',headersBoth:'Entrambe',invalidRows:"Il numero di righe dev'essere un numero maggiore di 0.",invalidCols:"Il numero di colonne dev'essere un numero maggiore di 0.",invalidBorder:"La dimensione del bordo dev'essere un numero.",invalidWidth:"La larghezza della tabella dev'essere un numero.",invalidHeight:"L'altezza della tabella dev'essere un numero.",invalidCellSpacing:"La spaziatura tra le celle dev'essere un numero.",invalidCellPadding:"Il pagging delle celle dev'essere un numero",cell:{menu:'Cella',insertBefore:'Inserisci Cella Prima',insertAfter:'Inserisci Cella Dopo',deleteCell:'Elimina celle',merge:'Unisce celle',mergeRight:'Unisci a Destra',mergeDown:'Unisci in Basso',splitHorizontal:'Dividi Cella Orizzontalmente',splitVertical:'Dividi Cella Verticalmente',title:'Proprietà della cella',cellType:'Tipo di cella',rowSpan:'Su più righe',colSpan:'Su più colonne',wordWrap:'Ritorno a capo',hAlign:'Allineamento orizzontale',vAlign:'Allineamento verticale',alignTop:'In Alto',alignMiddle:'Al Centro',alignBottom:'In Basso',alignBaseline:'Linea Base',bgColor:'Colore di Sfondo',borderColor:'Colore del Bordo',data:'Dati',header:'Intestazione',yes:'Si',no:'No',invalidWidth:"La larghezza della cella dev'essere un numero.",invalidHeight:"L'altezza della cella dev'essere un numero.",invalidRowSpan:"Il numero di righe dev'essere un numero intero.",invalidColSpan:"Il numero di colonne dev'essere un numero intero."},row:{menu:'Riga',insertBefore:'Inserisci Riga Prima',insertAfter:'Inserisci Riga Dopo',deleteRow:'Elimina righe'},column:{menu:'Colonna',insertBefore:'Inserisci Colonna Prima',insertAfter:'Inserisci Colonna Dopo',deleteColumn:'Elimina colonne'}},button:{title:'Proprietà bottone',text:'Testo (Value)',type:'Tipo',typeBtn:'Bottone',typeSbm:'Invio',typeRst:'Annulla'},checkboxAndRadio:{checkboxTitle:'Proprietà checkbox',radioTitle:'Proprietà radio button',value:'Valore',selected:'Selezionato'},form:{title:'Proprietà modulo',menu:'Proprietà modulo',action:'Azione',method:'Metodo',encoding:'Codifica',target:'Destinazione',targetNotSet:'<non impostato>',targetNew:'Nuova finestra (_blank)',targetTop:'Finestra superiore (_top)',targetSelf:'Stessa finestra (_self)',targetParent:'Finestra padre (_parent)'},select:{title:'Proprietà menu di selezione',selectInfo:'Info',opAvail:'Opzioni disponibili',value:'Valore',size:'Dimensione',lines:'righe',chkMulti:'Permetti selezione multipla',opText:'Testo',opValue:'Valore',btnAdd:'Aggiungi',btnModify:'Modifica',btnUp:'Su',btnDown:'Gi',btnSetValue:'Imposta come predefinito',btnDelete:'Rimuovi'},textarea:{title:'Proprietà area di testo',cols:'Colonne',rows:'Righe'},textfield:{title:'Proprietà campo di testo',name:'Nome',value:'Valore',charWidth:'Larghezza',maxChars:'Numero massimo di caratteri',type:'Tipo',typeText:'Testo',typePass:'Password'},hidden:{title:'Proprietà campo nascosto',name:'Nome',value:'Valore'},image:{title:'Proprietà immagine',titleButton:'Proprietà bottone immagine',menu:'Proprietà immagine',infoTab:'Informazioni immagine',btnUpload:'Invia al server',url:'URL',upload:'Carica',alt:'Testo alternativo',width:'Larghezza',height:'Altezza',lockRatio:'Blocca rapporto',resetSize:'Reimposta dimensione',border:'Bordo',hSpace:'HSpace',vSpace:'VSpace',align:'Allineamento',alignLeft:'Sinistra',alignAbsBottom:'In basso assoluto',alignAbsMiddle:'Centrato assoluto',alignBaseline:'Linea base',alignBottom:'In Basso',alignMiddle:'Centrato',alignRight:'Destra',alignTextTop:'In alto al testo',alignTop:'In Alto',preview:'Anteprima',alertUrl:"Devi inserire l'URL per l'immagine",linkTab:'Collegamento',button2Img:"Vuoi trasformare il bottone immagine selezionato in un'immagine semplice?",img2Button:"Vuoi trasferomare l'immagine selezionata in un bottone immagine?"},flash:{properties:'Proprietà Oggetto Flash',propertiesTab:'Proprietà',title:'Proprietà Oggetto Flash',chkPlay:'Avvio Automatico',chkLoop:'Riavvio automatico',chkMenu:'Abilita Menu di Flash',chkFull:'Permetti la modalità tutto schermo',scale:'Ridimensiona',scaleAll:'Mostra Tutto',scaleNoBorder:'Senza Bordo',scaleFit:'Dimensione Esatta',access:'Accesso Script',accessAlways:'Sempre',accessSameDomain:'Solo stesso dominio',accessNever:'Mai',align:'Allineamento',alignLeft:'Sinistra',alignAbsBottom:'In basso assoluto',alignAbsMiddle:'Centrato assoluto',alignBaseline:'Linea base',alignBottom:'In Basso',alignMiddle:'Centrato',alignRight:'Destra',alignTextTop:'In alto al testo',alignTop:'In Alto',quality:'Qualità',qualityBest:'Massima',qualityHigh:'Alta',qualityAutoHigh:'Alta Automatica',qualityMedium:'Intermedia',qualityAutoLow:'Bassa Automatica',qualityLow:'Bassa',windowModeWindow:'Finestra',windowModeOpaque:'Opaca',windowModeTransparent:'Trasparente',windowMode:'Modalità finestra',flashvars:'Variabili per Flash',bgcolor:'Colore sfondo',width:'Larghezza',height:'Altezza',hSpace:'HSpace',vSpace:'VSpace',validateSrc:"Devi inserire l'URL del collegamento",validateWidth:"La Larghezza dev'essere un numero",validateHeight:"L'altezza dev'essere un numero",validateHSpace:"L'HSpace dev'essere un numero.",validateVSpace:"Il VSpace dev'essere un numero."},spellCheck:{toolbar:'Correttore ortografico',title:'Controllo ortografico',notAvailable:'Il servizio non è momentaneamente disponibile.',errorLoading:"Errore nel caricamento dell'host col servizio applicativo: %s.",notInDic:'Non nel dizionario',changeTo:'Cambia in',btnIgnore:'Ignora',btnIgnoreAll:'Ignora tutto',btnReplace:'Cambia',btnReplaceAll:'Cambia tutto',btnUndo:'Annulla',noSuggestions:'- Nessun suggerimento -',progress:'Controllo ortografico in corso',noMispell:'Controllo ortografico completato: nessun errore trovato',noChanges:'Controllo ortografico completato: nessuna parola cambiata',oneChange:'Controllo ortografico completato: 1 parola cambiata',manyChanges:'Controllo ortografico completato: %1 parole cambiate',ieSpellDownload:'Contollo ortografico non installato. Lo vuoi scaricare ora?'},smiley:{toolbar:'Emoticon',title:'Inserisci emoticon'},elementsPath:{eleTitle:'%1 elemento'},numberedlist:'Elenco numerato',bulletedlist:'Elenco puntato',indent:'Aumenta rientro',outdent:'Riduci rientro',justify:{left:'Allinea a sinistra',center:'Centra',right:'Allinea a destra',block:'Giustifica'},blockquote:'Citazione',clipboard:{title:'Incolla',cutError:'Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl+X).',copyError:'Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl+C).',pasteMsg:"Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl+V</STRONG>) e premi <STRONG>OK</STRONG>.",securityMsg:"A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra."},pastefromword:{toolbar:'Incolla da Word',title:'Incolla da Word',advice:"Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl+V</STRONG>) e premi <STRONG>OK</STRONG>.",ignoreFontFace:'Ignora le definizioni di Font',removeStyle:'Rimuovi le definizioni di Stile'},pasteText:{button:'Incolla come testo semplice',title:'Incolla come testo semplice'},templates:{button:'Modelli',title:'Contenuto dei modelli',insertOption:'Cancella il contenuto corrente',selectPromptMsg:"Seleziona il modello da aprire nell'editor<br />(il contenuto attuale verrà eliminato):",emptyListMsg:'(Nessun modello definito)'},showBlocks:'Visualizza Blocchi',stylesCombo:{label:'Stile',voiceLabel:'Stili',panelVoiceLabel:'Seleziona uno stile',panelTitle1:'Stili per blocchi',panelTitle2:'Stili in linea',panelTitle3:'Stili per oggetti'},format:{label:'Formato',voiceLabel:'Formato',panelTitle:'Formato',panelVoiceLabel:'Seleziona il formato per paragrafo',tag_p:'Normale',tag_pre:'Formattato',tag_address:'Indirizzo',tag_h1:'Titolo 1',tag_h2:'Titolo 2',tag_h3:'Titolo 3',tag_h4:'Titolo 4',tag_h5:'Titolo 5',tag_h6:'Titolo 6',tag_div:'Paragrafo (DIV)'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font',panelVoiceLabel:'Seleziona un font'},fontSize:{label:'Dimensione',voiceLabel:'Dimensione Font',panelTitle:'Dimensione',panelVoiceLabel:'Seleziona una dimensione font'},colorButton:{textColorTitle:'Colore testo',bgColorTitle:'Colore sfondo',auto:'Automatico',more:'Altri colori...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Controllo Ortografico Mentre Scrivi',enable:'Abilita COMS',disable:'Disabilita COMS',about:'About COMS',toggle:'Inverti abilitazione SCOMS',options:'Opzioni',langs:'Lingue',moreSuggestions:'Altri suggerimenti',ignore:'Ignora',ignoreAll:'Ignora tutti',addWord:'Aggiungi Parola',emptyDic:'Il nome del dizionario non può essere vuoto.',optionsTab:'Opzioni',languagesTab:'Lingue',dictionariesTab:'Dizionari',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'Per le informazioni sulla licenza si prega di visitare il nostro sito:',copy:'Copyright &copy; $1. Tutti i diritti riservati.'},maximize:'Massimizza',fakeobjects:{anchor:'Ancora',flash:'Animazione Flash',div:'Interruzione di Pagina',unknown:'Oggetto sconosciuto'},resize:'Trascina per ridimensionare'};\r
diff --git a/lang/ja.js b/lang/ja.js
new file mode 100644 (file)
index 0000000..f562780
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.ja={dir:'ltr',editorTitle:'リッチテキストエディタ, %1',source:'ソース',newPage:'新しいページ',save:'保存',preview:'プレビュー',cut:'切り取り',copy:'コピー',paste:'貼り付け',print:'印刷',underline:'下線',bold:'太字',italic:'斜体',selectAll:'すべて選択',removeFormat:'フォーマット削除',strike:'打ち消し線',subscript:'添え字',superscript:'上付き文字',horizontalrule:'横罫線',pagebreak:'改ページ挿入',unlink:'リンク削除',undo:'元に戻す',redo:'やり直し',common:{browseServer:'サーバーブラウザー',url:'URL',protocol:'プロトコル',upload:'アップロード',uploadSubmit:'サーバーに送信',image:'イメージ',flash:'Flash',form:'フォーム',checkbox:'チェックボックス',radio:'ラジオボタン',textField:'1行テキスト',textarea:'テキストエリア',hiddenField:'不可視フィールド',button:'ボタン',select:'選択フィールド',imageButton:'画像ボタン',notSet:'<なし>',id:'Id',name:'Name属性',langDir:'文字表記の方向',langDirLtr:'左から右 (LTR)',langDirRtl:'右から左 (RTL)',langCode:'言語コード',longDescr:'longdesc属性(長文説明)',cssClass:'スタイルシートクラス',advisoryTitle:'Title属性',cssStyle:'スタイルシート',ok:'OK',cancel:'キャンセル',generalTab:'全般',advancedTab:'高度な設定',validateNumberFailed:'値が数ではありません',confirmNewPage:'変更内容を保存せず、 新しいページを開いてもよろしいでしょうか?',confirmCancel:'オプション設定を変更しました。ダイアログを閉じてもよろしいでしょうか?',unavailable:'%1<span class="cke_accessibility">, 利用不可能</span>'},specialChar:{toolbar:'特殊文字挿入',title:'特殊文字選択'},link:{toolbar:'リンク挿入/編集',menu:'リンク編集',title:'ハイパーリンク',info:'ハイパーリンク 情報',target:'ターゲット',upload:'アップロード',advanced:'高度な設定',type:'リンクタイプ',toAnchor:'このページのアンカー',toEmail:'E-Mail',target:'ターゲット',targetNotSet:'<なし>',targetFrame:'<フレーム>',targetPopup:'<ポップアップウィンドウ>',targetNew:'新しいウィンドウ (_blank)',targetTop:'最上位ウィンドウ (_top)',targetSelf:'同じウィンドウ (_self)',targetParent:'親ウィンドウ (_parent)',targetFrameName:'目的のフレーム名',targetPopupName:'ポップアップウィンドウ名',popupFeatures:'ポップアップウィンドウ特徴',popupResizable:'サイズ可変',popupStatusBar:'ステータスバー',popupLocationBar:'ロケーションバー',popupToolbar:'ツールバー',popupMenuBar:'メニューバー',popupFullScreen:'全画面モード(IE)',popupScrollBars:'スクロールバー',popupDependent:'開いたウィンドウに連動して閉じる (Netscape)',popupWidth:'幅',popupLeft:'左端からの座標で指定',popupHeight:'高さ',popupTop:'上端からの座標で指定',id:'Id',langDir:'文字表記の方向',langDirNotSet:'<なし>',langDirLTR:'左から右 (LTR)',langDirRTL:'右から左 (RTL)',acccessKey:'アクセスキー',name:'Name属性',langCode:'文字表記の方向',tabIndex:'タブインデックス',advisoryTitle:'Title属性',advisoryContentType:'Content Type属性',cssClasses:'スタイルシートクラス',charset:'リンクcharset属性',styles:'スタイルシート',selectAnchor:'アンカーを選択',anchorName:'アンカー名',anchorId:'エレメントID',emailAddress:'E-Mail アドレス',emailSubject:'件名',emailBody:'本文',noAnchors:'(ドキュメントにおいて利用可能なアンカーはありません。)',noUrl:'リンクURLを入力してください。',noEmail:'メールアドレスを入力してください。'},anchor:{toolbar:'アンカー挿入/編集',menu:'アンカー プロパティ',title:'アンカー プロパティ',name:'アンカー名',errorName:'アンカー名を必ず入力してください。'},findAndReplace:{title:'検索して置換',find:'検索',replace:'置き換え',findWhat:'検索する文字列:',replaceWith:'置換えする文字列:',notFoundMsg:'指定された文字列は見つかりませんでした。',matchCase:'部分一致',matchWord:'単語単位で一致',matchCyclic:'大文字/小文字区別一致',replaceAll:'すべて置換え',replaceSuccessMsg:'%1 に置換しました。'},table:{toolbar:'テーブル',title:'テーブル プロパティ',menu:'テーブル プロパティ',deleteTable:'テーブル削除',rows:'行',columns:'列',border:'ボーダーサイズ',align:'キャプションの整列',alignNotSet:'<なし>',alignLeft:'左',alignCenter:'中央',alignRight:'右',width:'テーブル幅',widthPx:'ピクセル',widthPc:'パーセント',height:'テーブル高さ',cellSpace:'セル内余白',cellPad:'セル内間隔',caption:'キャプション',summary:'テーブル目的/構造',headers:'テーブルヘッダ(th)',headersNone:'なし',headersColumn:'初めの列のみ',headersRow:'初めの行のみ',headersBoth:'両方',invalidRows:'行は0より大きな数値で入力してください。',invalidCols:'列は0より大きな数値で入力してください。',invalidBorder:'ボーダーサイズは数値で入力してください。',invalidWidth:'テーブル幅は数値で入力してください。',invalidHeight:'テーブル高さは数値で入力してください。',invalidCellSpacing:'セル内余白は数値で入力してください。',invalidCellPadding:'セル内間隔は数値で入力してください。',cell:{menu:'セル',insertBefore:'セルの前に挿入',insertAfter:'セルの後に挿入',deleteCell:'セル削除',merge:'セル結合',mergeRight:'右に結合',mergeDown:'下に結合',splitHorizontal:'セルを水平方向分割',splitVertical:'セルを垂直方向に分割',title:'セルプロパティ',cellType:'セルタイプ',rowSpan:'縦幅(行数)',colSpan:'横幅(列数)',wordWrap:'折り返し',hAlign:'セル横の整列',vAlign:'セル縦の整列',alignTop:'上',alignMiddle:'中央',alignBottom:'下',alignBaseline:'ベースライン',bgColor:'背景色',borderColor:'ボーダーカラー',data:'テーブルデータ(td)',header:'テーブルヘッダ(th)',yes:'Yes',no:'No',invalidWidth:'セル幅は数値で入力してください。',invalidHeight:'セル高さは数値で入力してください。',invalidRowSpan:'縦幅(行数)は数値で入力してください。',invalidColSpan:'横幅(列数)は数値で入力してください。'},row:{menu:'行',insertBefore:'列の前に挿入',insertAfter:'列の後に挿入',deleteRow:'行削除'},column:{menu:'カラム',insertBefore:'カラムの前に挿入',insertAfter:'カラムの後に挿入',deleteColumn:'列削除'}},button:{title:'ボタン プロパティ',text:'テキスト (値)',type:'タイプ',typeBtn:'ボタン',typeSbm:'送信',typeRst:'リセット'},checkboxAndRadio:{checkboxTitle:'チェックボックス プロパティ',radioTitle:'ラジオボタン プロパティ',value:'値',selected:'選択済み'},form:{title:'フォーム プロパティ',menu:'フォーム プロパティ',action:'アクション',method:'メソッド',encoding:'エンコーディング',target:'ターゲット',targetNotSet:'<なし>',targetNew:'新しいウィンドウ (_blank)',targetTop:'最上位ウィンドウ (_top)',targetSelf:'同じウィンドウ (_self)',targetParent:'親ウィンドウ (_parent)'},select:{title:'選択フィールド プロパティ',selectInfo:'情報',opAvail:'利用可能なオプション',value:'選択項目値',size:'サイズ',lines:'行',chkMulti:'複数項目選択を許可',opText:'選択項目名',opValue:'値',btnAdd:'追加',btnModify:'編集',btnUp:'上へ',btnDown:'下へ',btnSetValue:'選択した値を設定',btnDelete:'削除'},textarea:{title:'テキストエリア プロパティ',cols:'列',rows:'行'},textfield:{title:'1行テキスト プロパティ',name:'名前',value:'値',charWidth:'サイズ',maxChars:'最大長',type:'タイプ',typeText:'テキスト',typePass:'パスワード入力'},hidden:{title:'不可視フィールド プロパティ',name:'名前',value:'値'},image:{title:'イメージ プロパティ',titleButton:'画像ボタン プロパティ',menu:'イメージ プロパティ',infoTab:'イメージ 情報',btnUpload:'サーバーに送信',url:'URL',upload:'アップロード',alt:'代替テキスト',width:'幅',height:'高さ',lockRatio:'ロック比率',resetSize:'サイズリセット',border:'ボーダー',hSpace:'横間隔',vSpace:'縦間隔',align:'行揃え',alignLeft:'左',alignAbsBottom:'下部(絶対的)',alignAbsMiddle:'中央(絶対的)',alignBaseline:'ベースライン',alignBottom:'下',alignMiddle:'中央',alignRight:'右',alignTextTop:'テキスト上部',alignTop:'上',preview:'プレビュー',alertUrl:'イメージのURLを入力してください。',linkTab:'リンク',button2Img:'選択したボタンを画像に置き換えますか?',img2Button:'選択した画像をボタンに置き換えますか?'},flash:{properties:'Flash プロパティ',propertiesTab:'プロパティ',title:'Flash プロパティ',chkPlay:'再生',chkLoop:'ループ再生',chkMenu:'Flashメニュー可能',chkFull:'フルスクリーン許可',scale:'拡大縮小設定',scaleAll:'すべて表示',scaleNoBorder:'外が見えない様に拡大',scaleFit:'上下左右にフィット',access:'スプリクトアクセス(AllowScriptAccess)',accessAlways:'すべての場合に通信可能(Always)',accessSameDomain:'同一ドメインのみに通信可能(Same domain)',accessNever:'すべての場合に通信不可能(Never)',align:'行揃え',alignLeft:'左',alignAbsBottom:'下部(絶対的)',alignAbsMiddle:'中央(絶対的)',alignBaseline:'ベースライン',alignBottom:'下',alignMiddle:'中央',alignRight:'右',alignTextTop:'テキスト上部',alignTop:'上',quality:'画質',qualityBest:'品質優先',qualityHigh:'高',qualityAutoHigh:'自動/高',qualityMedium:'中',qualityAutoLow:'自動/低',qualityLow:'低',windowModeWindow:'標準',windowModeOpaque:'背景を不透明設定',windowModeTransparent:'背景を透過設定',windowMode:'ウィンドウモード',flashvars:'フラッシュに渡す変数(FlashVars)',bgcolor:'背景色',width:'幅',height:'高さ',hSpace:'横間隔',vSpace:'縦間隔',validateSrc:'リンクURLを入力してください。',validateWidth:'幅は数値で入力してください。',validateHeight:'高さは数値で入力してください。',validateHSpace:'横間隔は数値で入力してください。',validateVSpace:'縦間隔は数値で入力してください。'},spellCheck:{toolbar:'スペルチェック',title:'スペルチェック',notAvailable:'申し訳ありません、現在サービスを利用することができません',errorLoading:'アプリケーションサービスホスト読込みエラー: %s.',notInDic:'辞書にありません',changeTo:'変更',btnIgnore:'無視',btnIgnoreAll:'すべて無視',btnReplace:'置換',btnReplaceAll:'すべて置換',btnUndo:'やり直し',noSuggestions:'- 該当なし -',progress:'スペルチェック処理中...',noMispell:'スペルチェック完了: スペルの誤りはありませんでした',noChanges:'スペルチェック完了: 語句は変更されませんでした',oneChange:'スペルチェック完了: 1語句変更されました',manyChanges:'スペルチェック完了: %1 語句変更されました',ieSpellDownload:'スペルチェッカーがインストールされていません。今すぐダウンロードしますか?'},smiley:{toolbar:'絵文字',title:'顔文字挿入'},elementsPath:{eleTitle:'%1 エレメント'},numberedlist:'段落番号',bulletedlist:'箇条書き',indent:'インデント',outdent:'インデント解除',justify:{left:'左揃え',center:'中央揃え',right:'右揃え',block:'両端揃え'},blockquote:'ブロック引用',clipboard:{title:'貼り付け',cutError:'ブラウザーのセキュリティ設定によりエディタの切り取り操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+X)を使用してください。',copyError:'ブラウザーのセキュリティ設定によりエディタのコピー操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+C)を使用してください。',pasteMsg:'キーボード(<STRONG>Ctrl+V</STRONG>)を使用して、次の入力エリア内で貼って、<STRONG>OK</STRONG>を押してください。',securityMsg:'ブラウザのセキュリティ設定により、エディタはクリップボード・データに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。'},pastefromword:{toolbar:'ワード文章から貼り付け',title:'ワード文章から貼り付け',advice:'キーボード(<STRONG>Ctrl+V</STRONG>)を使用して、次の入力エリア内で貼って、<STRONG>OK</STRONG>を押してください。',ignoreFontFace:'FontタグのFace属性を無視します。',removeStyle:'スタイル定義を削除します。'},pasteText:{button:'プレーンテキスト貼り付け',title:'プレーンテキスト貼り付け'},templates:{button:'テンプレート(雛形)',title:'テンプレート内容',insertOption:'現在のエディタの内容と置換えをします',selectPromptMsg:'エディターで使用するテンプレートを選択してください。<br>(現在のエディタの内容は失われます):',emptyListMsg:'(テンプレートが定義されていません)'},showBlocks:'ブロック表示',stylesCombo:{label:'スタイル',voiceLabel:'スタイル',panelVoiceLabel:'スタイルを選択してください',panelTitle1:'ブロックスタイル',panelTitle2:'インラインスタイル',panelTitle3:'オブジェクトスタイル'},format:{label:'フォーマット',voiceLabel:'フォーマット',panelTitle:'フォーマット',panelVoiceLabel:'パラグラフ形式を選択してください。',tag_p:'標準',tag_pre:'書式付き',tag_address:'アドレス',tag_h1:'見出し 1',tag_h2:'見出し 2',tag_h3:'見出し 3',tag_h4:'見出し 4',tag_h5:'見出し 5',tag_h6:'見出し 6',tag_div:'標準 (DIV)'},font:{label:'フォント',voiceLabel:'フォント',panelTitle:'フォント',panelVoiceLabel:'フォントを選択してください'},fontSize:{label:'サイズ',voiceLabel:'フォントサイズ',panelTitle:'サイズ',panelVoiceLabel:'フォントサイズを選択してください'},colorButton:{textColorTitle:'テキスト色',bgColorTitle:'背景色',auto:'自動',more:'その他の色...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'スペルチェック設定(SCAYT)',enable:'SCAYT有効',disable:'SCAYT無効',about:'SCAYTバージョン',toggle:'SCAYT切替',options:'オプション',langs:'言語',moreSuggestions:'More suggestions',ignore:'無視',ignoreAll:'すべて無視',addWord:'語句追加',emptyDic:'辞書名は必ず入力してください',optionsTab:'オプション',languagesTab:'言語',dictionariesTab:'辞書',aboutTab:'バージョン情報'},about:{title:'CKEditorバージョン情報',dlgTitle:'CKEditorバージョン情報',moreInfo:'ライセンス情報の詳細はウェブサイトにて確認してください:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'最大化',fakeobjects:{anchor:'アンカー',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'ドラックしてリサイズ'};\r
diff --git a/lang/km.js b/lang/km.js
new file mode 100644 (file)
index 0000000..a748569
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.km={dir:'ltr',editorTitle:'Rich text editor, %1',source:'កូត',newPage:'ទំព័រថ្មី',save:'រក្សាទុក',preview:'មើលសាកល្បង',cut:'កាត់យក',copy:'ចំលងយក',paste:'ចំលងដាក់',print:'បោះពុម្ភ',underline:'ដិតបន្ទាត់ពីក្រោមអក្សរ',bold:'អក្សរដិតធំ',italic:'អក្សរផ្តេក',selectAll:'ជ្រើសរើសទាំងអស់',removeFormat:'លប់ចោល ការរចនា',strike:'ដិតបន្ទាត់ពាក់កណ្តាលអក្សរ',subscript:'អក្សរតូចក្រោម',superscript:'អក្សរតូចលើ',horizontalrule:'បន្ថែមបន្ទាត់ផ្តេក',pagebreak:'បន្ថែម ការផ្តាច់ទំព័រ',unlink:'លប់ឈ្នាប់',undo:'សារឡើងវិញ',redo:'ធ្វើឡើងវិញ',common:{browseServer:'មើល',url:'URL',protocol:'ប្រូតូកូល',upload:'ទាញយក',uploadSubmit:'បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា',image:'រូបភាព',flash:'Flash',form:'បែបបទ',checkbox:'ប្រអប់ជ្រើសរើស',radio:'ប៉ូតុនរង្វង់មូល',textField:'ជួរសរសេរអត្ថបទ',textarea:'តំបន់សរសេរអត្ថបទ',hiddenField:'ជួរលាក់',button:'ប៉ូតុន',select:'ជួរជ្រើសរើស',imageButton:'ប៉ូតុនរូបភាព',notSet:'<មិនមែន>',id:'Id',name:'ឈ្មោះ',langDir:'ទិសដៅភាសា',langDirLtr:'ពីឆ្វេងទៅស្តាំ(LTR)',langDirRtl:'ពីស្តាំទៅឆ្វេង(RTL)',langCode:'លេខកូតភាសា',longDescr:'អធិប្បាយ URL វែង',cssClass:'Stylesheet Classes',advisoryTitle:'ចំណងជើង ប្រឹក្សា',cssStyle:'ម៉ូត',ok:'យល់ព្រម',cancel:'មិនយល់ព្រម',generalTab:'General',advancedTab:'កំរិតខ្ពស់',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'បន្ថែមអក្សរពិសេស',title:'តូអក្សរពិសេស'},link:{toolbar:'បន្ថែម/កែប្រែ ឈ្នាប់',menu:'កែប្រែឈ្នាប់',title:'ឈ្នាប់',info:'ពត៌មានអំពីឈ្នាប់',target:'គោលដៅ',upload:'ទាញយក',advanced:'កំរិតខ្ពស់',type:'ប្រភេទឈ្នាប់',toAnchor:'យុថ្កានៅក្នុងទំព័រនេះ',toEmail:'អ៊ីមែល',target:'គោលដៅ',targetNotSet:'<មិនមែន>',targetFrame:'<ហ្វ្រេម>',targetPopup:'<វីនដូវ លោត>',targetNew:'វីនដូវថ្មី (_blank)',targetTop:'វីនដូវនៅលើគេ(_top)',targetSelf:'វីនដូវដដែល (_self)',targetParent:'វីនដូវមេ (_parent)',targetFrameName:'ឈ្មោះហ្រ្វេមដែលជាគោលដៅ',targetPopupName:'ឈ្មោះវីនដូវលោត',popupFeatures:'លក្ខណះរបស់វីនដូលលោត',popupResizable:'Resizable',popupStatusBar:'របា ពត៌មាន',popupLocationBar:'របា ទីតាំង',popupToolbar:'របា ឩបករណ៍',popupMenuBar:'របា មឺនុយ',popupFullScreen:'អេក្រុងពេញ(IE)',popupScrollBars:'របា ទាញ',popupDependent:'អាស្រ័យលើ (Netscape)',popupWidth:'ទទឹង',popupLeft:'ទីតាំងខាងឆ្វេង',popupHeight:'កំពស់',popupTop:'ទីតាំងខាងលើ',id:'Id',langDir:'ទិសដៅភាសា',langDirNotSet:'<មិនមែន>',langDirLTR:'ពីឆ្វេងទៅស្តាំ(LTR)',langDirRTL:'ពីស្តាំទៅឆ្វេង(RTL)',acccessKey:'ឃី សំរាប់ចូល',name:'ឈ្មោះ',langCode:'ទិសដៅភាសា',tabIndex:'លេខ Tab',advisoryTitle:'ចំណងជើង ប្រឹក្សា',advisoryContentType:'ប្រភេទអត្ថបទ ប្រឹក្សា',cssClasses:'Stylesheet Classes',charset:'លេខកូតអក្សររបស់ឈ្នាប់',styles:'ម៉ូត',selectAnchor:'ជ្រើសរើសយុថ្កា',anchorName:'តាមឈ្មោះរបស់យុថ្កា',anchorId:'តាម Id',emailAddress:'អ៊ីមែល',emailSubject:'ចំណងជើងអត្ថបទ',emailBody:'អត្ថបទ',noAnchors:'(No anchors available in the document)',noUrl:'សូមសរសេរ អាស័យដ្ឋាន URL',noEmail:'សូមសរសេរ អាស័យដ្ឋាន អ៊ីមែល'},anchor:{toolbar:'បន្ថែម/កែប្រែ យុថ្កា',menu:'ការកំណត់យុថ្កា',title:'ការកំណត់យុថ្កា',name:'ឈ្មោះយុទ្ធថ្កា',errorName:'សូមសរសេរ ឈ្មោះយុទ្ធថ្កា'},findAndReplace:{title:'Find and Replace',find:'ស្វែងរក',replace:'ជំនួស',findWhat:'ស្វែងរកអ្វី:',replaceWith:'ជំនួសជាមួយ:',notFoundMsg:'ពាក្យនេះ រកមិនឃើញទេ ។',matchCase:'ករណ៉ត្រូវរក',matchWord:'ត្រូវពាក្យទាំងអស់',matchCyclic:'Match cyclic',replaceAll:'ជំនួសទាំងអស់',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'តារាង',title:'ការកំណត់ តារាង',menu:'ការកំណត់ តារាង',deleteTable:'លប់តារាង',rows:'ជួរផ្តេក',columns:'ជួរឈរ',border:'ទំហំស៊ុម',align:'ការកំណត់ទីតាំង',alignNotSet:'<មិនកំណត់>',alignLeft:'ខាងឆ្វេង',alignCenter:'កណ្តាល',alignRight:'ខាងស្តាំ',width:'ទទឹង',widthPx:'ភីកសែល',widthPc:'ភាគរយ',height:'កំពស់',cellSpace:'គំលាតសែល',cellPad:'គែមសែល',caption:'ចំណងជើង',summary:'សេចក្តីសង្ខេប',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'លប់សែល',merge:'បញ្ជូលសែល',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'លប់ជួរផ្តេក'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'លប់ជួរឈរ'}},button:{title:'ការកំណត់ ប៉ូតុន',text:'អត្ថបទ(តំលៃ)',type:'ប្រភេទ',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'ការកំណត់ប្រអប់ជ្រើសរើស',radioTitle:'ការកំណត់ប៉ូតុនរង្វង់',value:'តំលៃ',selected:'បានជ្រើសរើស'},form:{title:'ការកំណត់បែបបទ',menu:'ការកំណត់បែបបទ',action:'សកម្មភាព',method:'វិធី',encoding:'Encoding',target:'គោលដៅ',targetNotSet:'<មិនមែន>',targetNew:'វីនដូវថ្មី (_blank)',targetTop:'វីនដូវនៅលើគេ(_top)',targetSelf:'វីនដូវដដែល (_self)',targetParent:'វីនដូវមេ (_parent)'},select:{title:'ការកំណត់ជួរជ្រើសរើស',selectInfo:'ពត៌មាន',opAvail:'ការកំណត់ជ្រើសរើស ដែលអាចកំណត់បាន',value:'តំលៃ',size:'ទំហំ',lines:'បន្ទាត់',chkMulti:'អនុញ្ញាតអោយជ្រើសរើសច្រើន',opText:'ពាក្យ',opValue:'តំលៃ',btnAdd:'បន្ថែម',btnModify:'ផ្លាស់ប្តូរ',btnUp:'លើ',btnDown:'ក្រោម',btnSetValue:'Set as selected value',btnDelete:'លប់'},textarea:{title:'ការកំណត់កន្លែងសរសេរអត្ថបទ',cols:'ជូរឈរ',rows:'ជូរផ្តេក'},textfield:{title:'ការកំណត់ជួរអត្ថបទ',name:'ឈ្មោះ',value:'តំលៃ',charWidth:'ទទឹង អក្សរ',maxChars:'អក្សរអតិបរិមា',type:'ប្រភេទ',typeText:'ពាក្យ',typePass:'ពាក្យសំងាត់'},hidden:{title:'ការកំណត់ជួរលាក់',name:'ឈ្មោះ',value:'តំលៃ'},image:{title:'ការកំណត់រូបភាព',titleButton:'ការកំណត់ប៉ូតុនរូបភាព',menu:'ការកំណត់រូបភាព',infoTab:'ពត៌មានអំពីរូបភាព',btnUpload:'បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា',url:'URL',upload:'ទាញយក',alt:'អត្ថបទជំនួស',width:'ទទឹង',height:'កំពស់',lockRatio:'អត្រាឡុក',resetSize:'កំណត់ទំហំឡើងវិញ',border:'ស៊ុម',hSpace:'គំលាតទទឹង',vSpace:'គំលាតបណ្តោយ',align:'កំណត់ទីតាំង',alignLeft:'ខាងឆ្វង',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'បន្ទាត់ជាមូលដ្ឋាន',alignBottom:'ខាងក្រោម',alignMiddle:'កណ្តាល',alignRight:'ខាងស្តាំ',alignTextTop:'លើអត្ថបទ',alignTop:'ខាងលើ',preview:'មើលសាកល្បង',alertUrl:'សូមសរសេរងាស័យដ្ឋានរបស់រូបភាព',linkTab:'ឈ្នាប់',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'ការកំណត់ Flash',propertiesTab:'Properties',title:'ការកំណត់ Flash',chkPlay:'លេងដោយស្វ័យប្រវត្ត',chkLoop:'ចំនួនដង',chkMenu:'បង្ហាញ មឺនុយរបស់ Flash',chkFull:'Allow Fullscreen',scale:'ទំហំ',scaleAll:'បង្ហាញទាំងអស់',scaleNoBorder:'មិនបង្ហាញស៊ុម',scaleFit:'ត្រូវល្មម',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'កំណត់ទីតាំង',alignLeft:'ខាងឆ្វង',alignAbsBottom:'Abs Bottom',alignAbsMiddle:'Abs Middle',alignBaseline:'បន្ទាត់ជាមូលដ្ឋាន',alignBottom:'ខាងក្រោម',alignMiddle:'កណ្តាល',alignRight:'ខាងស្តាំ',alignTextTop:'លើអត្ថបទ',alignTop:'ខាងលើ',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'ពណ៌ផ្ទៃខាងក្រោយ',width:'ទទឹង',height:'កំពស់',hSpace:'គំលាតទទឹង',vSpace:'គំលាតបណ្តោយ',validateSrc:'សូមសរសេរ អាស័យដ្ឋាន URL',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'ពិនិត្យអក្ខរាវិរុទ្ធ',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'គ្មានក្នុងវចនានុក្រម',changeTo:'ផ្លាស់ប្តូរទៅ',btnIgnore:'មិនផ្លាស់ប្តូរ',btnIgnoreAll:'មិនផ្លាស់ប្តូរ ទាំងអស់',btnReplace:'ជំនួស',btnReplaceAll:'ជំនួសទាំងអស់',btnUndo:'សារឡើងវិញ',noSuggestions:'- គ្មានសំណើរ -',progress:'កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...',noMispell:'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស',noChanges:'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ',oneChange:'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ',manyChanges:'ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ',ieSpellDownload:'ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?'},smiley:{toolbar:'រូបភាព',title:'បញ្ជូលរូបភាព'},elementsPath:{eleTitle:'%1 element'},numberedlist:'បញ្ជីជាអក្សរ',bulletedlist:'បញ្ជីជារង្វង់មូល',indent:'បន្ថែមការចូលបន្ទាត់',outdent:'បន្ថយការចូលបន្ទាត់',justify:{left:'តំរឹមឆ្វេង',center:'តំរឹមកណ្តាល',right:'តំរឹមស្តាំ',block:'តំរឹមសងខាង'},blockquote:'Blockquote',clipboard:{title:'ចំលងដាក់',cutError:'ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ  (Ctrl+X) ។',copyError:'ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl+C)។',pasteMsg:'សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី ​(<STRONG>Ctrl+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'ចំលងដាក់ពី Word',title:'ចំលងដាក់ពី Word',advice:'សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី ​(<STRONG>Ctrl+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។',ignoreFontFace:'មិនគិតអំពីប្រភេទពុម្ភអក្សរ',removeStyle:'លប់ម៉ូត'},pasteText:{button:'ចំលងដាក់អត្ថបទធម្មតា',title:'ចំលងដាក់អត្ថបទធម្មតា'},templates:{button:'ឯកសារគំរូ',title:'ឯកសារគំរូ របស់អត្ថន័យ',insertOption:'Replace actual contents',selectPromptMsg:'សូមជ្រើសរើសឯកសារគំរូ ដើម្បីបើកនៅក្នុងកម្មវិធីតាក់តែងអត្ថបទ<br>(អត្ថបទនឹងបាត់បង់):',emptyListMsg:'(ពុំមានឯកសារគំរូត្រូវបានកំណត់)'},showBlocks:'Show Blocks',stylesCombo:{label:'ម៉ូត',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'រចនា',voiceLabel:'Format',panelTitle:'រចនា',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},font:{label:'ហ្វុង',voiceLabel:'Font',panelTitle:'ហ្វុង',panelVoiceLabel:'Select a font'},fontSize:{label:'ទំហំ',voiceLabel:'Font Size',panelTitle:'ទំហំ',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'ពណ៌អក្សរ',bgColorTitle:'ពណ៌ផ្ទៃខាងក្រោយ',auto:'ស្វ័យប្រវត្ត',more:'ពណ៌ផ្សេងទៀត..'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/ko.js b/lang/ko.js
new file mode 100644 (file)
index 0000000..19865c9
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.ko={dir:'ltr',editorTitle:'Rich text editor, %1',source:'소스',newPage:'새 문서',save:'저장하기',preview:'미리보기',cut:'잘라내기',copy:'복사하기',paste:'붙여넣기',print:'인쇄하기',underline:'밑줄',bold:'진하게',italic:'이텔릭',selectAll:'전체선택',removeFormat:'포맷 지우기',strike:'취소선',subscript:'아래 첨자',superscript:'위 첨자',horizontalrule:'수평선 삽입',pagebreak:'Insert Page Break for Printing',unlink:'링크 삭제',undo:'취소',redo:'재실행',common:{browseServer:'서버 보기',url:'URL',protocol:'프로토콜',upload:'업로드',uploadSubmit:'서버로 전송',image:'이미지',flash:'플래쉬',form:'폼',checkbox:'체크박스',radio:'라디오버튼',textField:'입력필드',textarea:'입력영역',hiddenField:'숨김필드',button:'버튼',select:'펼침목록',imageButton:'이미지버튼',notSet:'<설정되지 않음>',id:'ID',name:'Name',langDir:'쓰기 방향',langDirLtr:'왼쪽에서 오른쪽 (LTR)',langDirRtl:'오른쪽에서 왼쪽 (RTL)',langCode:'언어 코드',longDescr:'URL 설명',cssClass:'Stylesheet Classes',advisoryTitle:'Advisory Title',cssStyle:'Style',ok:'예',cancel:'아니오',generalTab:'General',advancedTab:'자세히',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'특수문자 삽입',title:'특수문자 선택'},link:{toolbar:'링크 삽입/변경',menu:'링크 수정',title:'링크',info:'링크 정보',target:'타겟',upload:'업로드',advanced:'자세히',type:'링크 종류',toAnchor:'책갈피',toEmail:'이메일',target:'타겟',targetNotSet:'<설정되지 않음>',targetFrame:'<프레임>',targetPopup:'<팝업창>',targetNew:'새 창 (_blank)',targetTop:'최 상위 창 (_top)',targetSelf:'현재 창 (_self)',targetParent:'부모 창 (_parent)',targetFrameName:'타겟 프레임 이름',targetPopupName:'팝업창 이름',popupFeatures:'팝업창 설정',popupResizable:'Resizable',popupStatusBar:'상태바',popupLocationBar:'주소표시줄',popupToolbar:'툴바',popupMenuBar:'메뉴바',popupFullScreen:'전체화면 (IE)',popupScrollBars:'스크롤바',popupDependent:'Dependent (Netscape)',popupWidth:'너비',popupLeft:'왼쪽 위치',popupHeight:'높이',popupTop:'윗쪽 위치',id:'Id',langDir:'쓰기 방향',langDirNotSet:'<설정되지 않음>',langDirLTR:'왼쪽에서 오른쪽 (LTR)',langDirRTL:'오른쪽에서 왼쪽 (RTL)',acccessKey:'엑세스 키',name:'Name',langCode:'쓰기 방향',tabIndex:'탭 순서',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Stylesheet Classes',charset:'Linked Resource Charset',styles:'Style',selectAnchor:'책갈피 선택',anchorName:'책갈피 이름',anchorId:'책갈피 ID',emailAddress:'이메일 주소',emailSubject:'제목',emailBody:'내용',noAnchors:'(문서에 책갈피가 없습니다.)',noUrl:'링크 URL을 입력하십시요.',noEmail:'이메일주소를 입력하십시요.'},anchor:{toolbar:'책갈피 삽입/변경',menu:'책갈피 속성',title:'책갈피 속성',name:'책갈피 이름',errorName:'책갈피 이름을 입력하십시요.'},findAndReplace:{title:'찾기 & 바꾸기',find:'찾기',replace:'바꾸기',findWhat:'찾을 문자열:',replaceWith:'바꿀 문자열:',notFoundMsg:'문자열을 찾을 수 없습니다.',matchCase:'대소문자 구분',matchWord:'온전한 단어',matchCyclic:'Match cyclic',replaceAll:'모두 바꾸기',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'표',title:'표 설정',menu:'표 설정',deleteTable:'표 삭제',rows:'가로줄',columns:'세로줄',border:'테두리 크기',align:'정렬',alignNotSet:'<설정되지 않음>',alignLeft:'왼쪽',alignCenter:'가운데',alignRight:'오른쪽',width:'너비',widthPx:'픽셀',widthPc:'퍼센트',height:'높이',cellSpace:'셀 간격',cellPad:'셀 여백',caption:'캡션',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'셀/칸(Cell)',insertBefore:'앞에 셀/칸 삽입',insertAfter:'뒤에 셀/칸 삽입',deleteCell:'셀 삭제',merge:'셀 합치기',mergeRight:'오른쪽 뭉치기',mergeDown:'왼쪽 뭉치기',splitHorizontal:'수평 나누기',splitVertical:'수직 나누기',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'행(Row)',insertBefore:'앞에 행 삽입',insertAfter:'뒤에 행 삽입',deleteRow:'가로줄 삭제'},column:{menu:'열(Column)',insertBefore:'앞에 열 삽입',insertAfter:'뒤에 열 삽입',deleteColumn:'세로줄 삭제'}},button:{title:'버튼 속성',text:'버튼글자(값)',type:'버튼종류',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'체크박스 속성',radioTitle:'라디오버튼 속성',value:'값',selected:'선택됨'},form:{title:'폼 속성',menu:'폼 속성',action:'실행경로(Action)',method:'방법(Method)',encoding:'Encoding',target:'타겟',targetNotSet:'<설정되지 않음>',targetNew:'새 창 (_blank)',targetTop:'최 상위 창 (_top)',targetSelf:'현재 창 (_self)',targetParent:'부모 창 (_parent)'},select:{title:'펼침목록 속성',selectInfo:'정보',opAvail:'선택옵션',value:'값',size:'세로크기',lines:'줄',chkMulti:'여러항목 선택 허용',opText:'이름',opValue:'값',btnAdd:'추가',btnModify:'변경',btnUp:'위로',btnDown:'아래로',btnSetValue:'선택된것으로 설정',btnDelete:'삭제'},textarea:{title:'입력영역 속성',cols:'칸수',rows:'줄수'},textfield:{title:'입력필드 속성',name:'이름',value:'값',charWidth:'글자 너비',maxChars:'최대 글자수',type:'종류',typeText:'문자열',typePass:'비밀번호'},hidden:{title:'숨김필드 속성',name:'이름',value:'값'},image:{title:'이미지 설정',titleButton:'이미지버튼 속성',menu:'이미지 설정',infoTab:'이미지 정보',btnUpload:'서버로 전송',url:'URL',upload:'업로드',alt:'이미지 설명',width:'너비',height:'높이',lockRatio:'비율 유지',resetSize:'원래 크기로',border:'테두리',hSpace:'수평여백',vSpace:'수직여백',align:'정렬',alignLeft:'왼쪽',alignAbsBottom:'줄아래(Abs Bottom)',alignAbsMiddle:'줄중간(Abs Middle)',alignBaseline:'기준선',alignBottom:'아래',alignMiddle:'중간',alignRight:'오른쪽',alignTextTop:'글자상단',alignTop:'위',preview:'미리보기',alertUrl:'이미지 URL을 입력하십시요',linkTab:'링크',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'플래쉬 속성',propertiesTab:'Properties',title:'플래쉬 등록정보',chkPlay:'자동재생',chkLoop:'반복',chkMenu:'플래쉬메뉴 가능',chkFull:'Allow Fullscreen',scale:'영역',scaleAll:'모두보기',scaleNoBorder:'경계선없음',scaleFit:'영역자동조절',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'정렬',alignLeft:'왼쪽',alignAbsBottom:'줄아래(Abs Bottom)',alignAbsMiddle:'줄중간(Abs Middle)',alignBaseline:'기준선',alignBottom:'아래',alignMiddle:'중간',alignRight:'오른쪽',alignTextTop:'글자상단',alignTop:'위',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'배경 색상',width:'너비',height:'높이',hSpace:'수평여백',vSpace:'수직여백',validateSrc:'링크 URL을 입력하십시요.',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'철자검사',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'사전에 없는 단어',changeTo:'변경할 단어',btnIgnore:'건너뜀',btnIgnoreAll:'모두 건너뜀',btnReplace:'변경',btnReplaceAll:'모두 변경',btnUndo:'취소',noSuggestions:'- 추천단어 없음 -',progress:'철자검사를 진행중입니다...',noMispell:'철자검사 완료: 잘못된 철자가 없습니다.',noChanges:'철자검사 완료: 변경된 단어가 없습니다.',oneChange:'철자검사 완료: 단어가 변경되었습니다.',manyChanges:'철자검사 완료: %1 단어가 변경되었습니다.',ieSpellDownload:'철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?'},smiley:{toolbar:'아이콘',title:'아이콘 삽입'},elementsPath:{eleTitle:'%1 element'},numberedlist:'순서있는 목록',bulletedlist:'순서없는 목록',indent:'들여쓰기',outdent:'내어쓰기',justify:{left:'왼쪽 정렬',center:'가운데 정렬',right:'오른쪽 정렬',block:'양쪽 맞춤'},blockquote:'Blockquote',clipboard:{title:'붙여넣기',cutError:'브라우저의 보안설정때문에 잘라내기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl+X).',copyError:'브라우저의 보안설정때문에 복사하기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요.  (Ctrl+C).',pasteMsg:'키보드의 (<STRONG>Ctrl+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.',securityMsg:'브러우저 보안 설정으로 인해, 클립보드의 자료를 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.'},pastefromword:{toolbar:'MS Word 형식에서 붙여넣기',title:'MS Word 형식에서 붙여넣기',advice:'키보드의 (<STRONG>Ctrl+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.',ignoreFontFace:'폰트 설정 무시',removeStyle:'스타일 정의 제거'},pasteText:{button:'텍스트로 붙여넣기',title:'텍스트로 붙여넣기'},templates:{button:'템플릿',title:'내용 템플릿',insertOption:'현재 내용 바꾸기',selectPromptMsg:'에디터에서 사용할 템플릿을 선택하십시요.<br>(지금까지 작성된 내용은 사라집니다.):',emptyListMsg:'(템플릿이 없습니다.)'},showBlocks:'Show Blocks',stylesCombo:{label:'스타일',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'포맷',voiceLabel:'Format',panelTitle:'포맷',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},font:{label:'폰트',voiceLabel:'Font',panelTitle:'폰트',panelVoiceLabel:'Select a font'},fontSize:{label:'글자 크기',voiceLabel:'Font Size',panelTitle:'글자 크기',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'글자 색상',bgColorTitle:'배경 색상',auto:'기본색상',more:'색상선택...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/lt.js b/lang/lt.js
new file mode 100644 (file)
index 0000000..b16d5ec
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.lt={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Šaltinis',newPage:'Naujas puslapis',save:'Išsaugoti',preview:'Peržiūra',cut:'Iškirpti',copy:'Kopijuoti',paste:'Įdėti',print:'Spausdinti',underline:'Pabrauktas',bold:'Pusjuodis',italic:'Kursyvas',selectAll:'Pažymėti viską',removeFormat:'Panaikinti formatą',strike:'Perbrauktas',subscript:'Apatinis indeksas',superscript:'Viršutinis indeksas',horizontalrule:'Įterpti horizontalią liniją',pagebreak:'Įterpti puslapių skirtuką',unlink:'Panaikinti nuorodą',undo:'Atšaukti',redo:'Atstatyti',common:{browseServer:'Naršyti po serverį',url:'URL',protocol:'Protokolas',upload:'Siųsti',uploadSubmit:'Siųsti į serverį',image:'Vaizdas',flash:'Flash',form:'Forma',checkbox:'Žymimasis langelis',radio:'Žymimoji akutė',textField:'Teksto laukas',textarea:'Teksto sritis',hiddenField:'Nerodomas laukas',button:'Mygtukas',select:'Atrankos laukas',imageButton:'Vaizdinis mygtukas',notSet:'<nėra nustatyta>',id:'Id',name:'Vardas',langDir:'Teksto kryptis',langDirLtr:'Iš kairės į dešinę (LTR)',langDirRtl:'Iš dešinės į kairę (RTL)',langCode:'Kalbos kodas',longDescr:'Ilgas aprašymas URL',cssClass:'Stilių lentelės klasės',advisoryTitle:'Konsultacinė antraštė',cssStyle:'Stilius',ok:'OK',cancel:'Nutraukti',generalTab:'Bendros savybės',advancedTab:'Papildomas',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Įterpti specialų simbolį',title:'Pasirinkite specialų simbolį'},link:{toolbar:'Įterpti/taisyti nuorodą',menu:'Taisyti nuorodą',title:'Nuoroda',info:'Nuorodos informacija',target:'Paskirties vieta',upload:'Siųsti',advanced:'Papildomas',type:'Nuorodos tipas',toAnchor:'Žymė šiame puslapyje',toEmail:'El.paštas',target:'Paskirties vieta',targetNotSet:'<nėra nustatyta>',targetFrame:'<kadras>',targetPopup:'<išskleidžiamas langas>',targetNew:'Naujas langas (_blank)',targetTop:'Svarbiausias langas (_top)',targetSelf:'Tas pats langas (_self)',targetParent:'Pirminis langas (_parent)',targetFrameName:'Paskirties kadro vardas',targetPopupName:'Paskirties lango vardas',popupFeatures:'Išskleidžiamo lango savybės',popupResizable:'Resizable',popupStatusBar:'Būsenos juosta',popupLocationBar:'Adreso juosta',popupToolbar:'Mygtukų juosta',popupMenuBar:'Meniu juosta',popupFullScreen:'Visas ekranas (IE)',popupScrollBars:'Slinkties juostos',popupDependent:'Priklausomas (Netscape)',popupWidth:'Plotis',popupLeft:'Kairė pozicija',popupHeight:'Aukštis',popupTop:'Viršutinė pozicija',id:'Id',langDir:'Teksto kryptis',langDirNotSet:'<nėra nustatyta>',langDirLTR:'Iš kairės į dešinę (LTR)',langDirRTL:'Iš dešinės į kairę (RTL)',acccessKey:'Prieigos raktas',name:'Vardas',langCode:'Teksto kryptis',tabIndex:'Tabuliavimo indeksas',advisoryTitle:'Konsultacinė antraštė',advisoryContentType:'Konsultacinio turinio tipas',cssClasses:'Stilių lentelės klasės',charset:'Susietų išteklių simbolių lentelė',styles:'Stilius',selectAnchor:'Pasirinkite žymę',anchorName:'Pagal žymės vardą',anchorId:'Pagal žymės Id',emailAddress:'El.pašto adresas',emailSubject:'Žinutės tema',emailBody:'Žinutės turinys',noAnchors:'(Šiame dokumente žymių nėra)',noUrl:'Prašome įvesti nuorodos URL',noEmail:'Prašome įvesti el.pašto adresą'},anchor:{toolbar:'Įterpti/modifikuoti žymę',menu:'Žymės savybės',title:'Žymės savybės',name:'Žymės vardas',errorName:'Prašome įvesti žymės vardą'},findAndReplace:{title:'Surasti ir pakeisti',find:'Rasti',replace:'Pakeisti',findWhat:'Surasti tekstą:',replaceWith:'Pakeisti tekstu:',notFoundMsg:'Nurodytas tekstas nerastas.',matchCase:'Skirti didžiąsias ir mažąsias raides',matchWord:'Atitikti pilną žodį',matchCyclic:'Match cyclic',replaceAll:'Pakeisti viską',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Lentelė',title:'Lentelės savybės',menu:'Lentelės savybės',deleteTable:'Šalinti lentelę',rows:'Eilutės',columns:'Stulpeliai',border:'Rėmelio dydis',align:'Lygiuoti',alignNotSet:'<Nenustatyta>',alignLeft:'Kairę',alignCenter:'Centrą',alignRight:'Dešinę',width:'Plotis',widthPx:'taškais',widthPc:'procentais',height:'Aukštis',cellSpace:'Tarpas tarp langelių',cellPad:'Trapas nuo langelio rėmo iki teksto',caption:'Antraštė',summary:'Santrauka',headers:'Antraštės',headersNone:'Nėra',headersColumn:'Pirmas stulpelis',headersRow:'Pirma eilutė',headersBoth:'Abu',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Langelis',insertBefore:'Įterpti langelį prieš',insertAfter:'Įterpti langelį po',deleteCell:'Šalinti langelius',merge:'Sujungti langelius',mergeRight:'Sujungti su dešine',mergeDown:'Sujungti su apačia',splitHorizontal:'Skaidyti langelį horizontaliai',splitVertical:'Skaidyti langelį vertikaliai',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Eilutė',insertBefore:'Įterpti eilutę prieš',insertAfter:'Įterpti eilutę po',deleteRow:'Šalinti eilutes'},column:{menu:'Stulpelis',insertBefore:'Įterpti stulpelį prieš',insertAfter:'Įterpti stulpelį po',deleteColumn:'Šalinti stulpelius'}},button:{title:'Mygtuko savybės',text:'Tekstas (Reikšmė)',type:'Tipas',typeBtn:'Mygtukas',typeSbm:'Siųsti',typeRst:'Išvalyti'},checkboxAndRadio:{checkboxTitle:'Žymimojo langelio savybės',radioTitle:'Žymimosios akutės savybės',value:'Reikšmė',selected:'Pažymėtas'},form:{title:'Formos savybės',menu:'Formos savybės',action:'Veiksmas',method:'Metodas',encoding:'Encoding',target:'Paskirties vieta',targetNotSet:'<nėra nustatyta>',targetNew:'Naujas langas (_blank)',targetTop:'Svarbiausias langas (_top)',targetSelf:'Tas pats langas (_self)',targetParent:'Pirminis langas (_parent)'},select:{title:'Atrankos lauko savybės',selectInfo:'Informacija',opAvail:'Galimos parinktys',value:'Reikšmė',size:'Dydis',lines:'eilučių',chkMulti:'Leisti daugeriopą atranką',opText:'Tekstas',opValue:'Reikšmė',btnAdd:'Įtraukti',btnModify:'Modifikuoti',btnUp:'Aukštyn',btnDown:'Žemyn',btnSetValue:'Laikyti pažymėta reikšme',btnDelete:'Trinti'},textarea:{title:'Teksto srities savybės',cols:'Ilgis',rows:'Plotis'},textfield:{title:'Teksto lauko savybės',name:'Vardas',value:'Reikšmė',charWidth:'Ilgis simboliais',maxChars:'Maksimalus simbolių skaičius',type:'Tipas',typeText:'Tekstas',typePass:'Slaptažodis'},hidden:{title:'Nerodomo lauko savybės',name:'Vardas',value:'Reikšmė'},image:{title:'Vaizdo savybės',titleButton:'Vaizdinio mygtuko savybės',menu:'Vaizdo savybės',infoTab:'Vaizdo informacija',btnUpload:'Siųsti į serverį',url:'URL',upload:'Nusiųsti',alt:'Alternatyvus Tekstas',width:'Plotis',height:'Aukštis',lockRatio:'Išlaikyti proporciją',resetSize:'Atstatyti dydį',border:'Rėmelis',hSpace:'Hor.Erdvė',vSpace:'Vert.Erdvė',align:'Lygiuoti',alignLeft:'Kairę',alignAbsBottom:'Absoliučią apačią',alignAbsMiddle:'Absoliutų vidurį',alignBaseline:'Apatinę liniją',alignBottom:'Apačią',alignMiddle:'Vidurį',alignRight:'Dešinę',alignTextTop:'Teksto viršūnę',alignTop:'Viršūnę',preview:'Peržiūra',alertUrl:'Prašome įvesti vaizdo URL',linkTab:'Nuoroda',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash savybės',propertiesTab:'Properties',title:'Flash savybės',chkPlay:'Automatinis paleidimas',chkLoop:'Ciklas',chkMenu:'Leisti Flash meniu',chkFull:'Allow Fullscreen',scale:'Mastelis',scaleAll:'Rodyti visą',scaleNoBorder:'Be rėmelio',scaleFit:'Tikslus atitikimas',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Lygiuoti',alignLeft:'Kairę',alignAbsBottom:'Absoliučią apačią',alignAbsMiddle:'Absoliutų vidurį',alignBaseline:'Apatinę liniją',alignBottom:'Apačią',alignMiddle:'Vidurį',alignRight:'Dešinę',alignTextTop:'Teksto viršūnę',alignTop:'Viršūnę',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Fono spalva',width:'Plotis',height:'Aukštis',hSpace:'Hor.Erdvė',vSpace:'Vert.Erdvė',validateSrc:'Prašome įvesti nuorodos URL',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Rašybos tikrinimas',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Žodyne nerastas',changeTo:'Pakeisti į',btnIgnore:'Ignoruoti',btnIgnoreAll:'Ignoruoti visus',btnReplace:'Pakeisti',btnReplaceAll:'Pakeisti visus',btnUndo:'Atšaukti',noSuggestions:'- Nėra pasiūlymų -',progress:'Vyksta rašybos tikrinimas...',noMispell:'Rašybos tikrinimas baigtas: Nerasta rašybos klaidų',noChanges:'Rašybos tikrinimas baigtas: Nėra pakeistų žodžių',oneChange:'Rašybos tikrinimas baigtas: Vienas žodis pakeistas',manyChanges:'Rašybos tikrinimas baigtas: Pakeista %1 žodžių',ieSpellDownload:'Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?'},smiley:{toolbar:'Veideliai',title:'Įterpti veidelį'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Numeruotas sąrašas',bulletedlist:'Suženklintas sąrašas',indent:'Padidinti įtrauką',outdent:'Sumažinti įtrauką',justify:{left:'Lygiuoti kairę',center:'Centruoti',right:'Lygiuoti dešinę',block:'Lygiuoti abi puses'},blockquote:'Citata',clipboard:{title:'Įdėti',cutError:'Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+X).',copyError:'Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+C).',pasteMsg:'Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl+V</STRONG>) ir paspauskite mygtuką <STRONG>OK</STRONG>.',securityMsg:'Dėl jūsų naršyklės saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartą į šį langą.'},pastefromword:{toolbar:'Įdėti iš Word',title:'Įdėti iš Word',advice:'Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl+V</STRONG>) ir paspauskite mygtuką <STRONG>OK</STRONG>.',ignoreFontFace:'Ignoruoti šriftų nustatymus',removeStyle:'Pašalinti stilių nustatymus'},pasteText:{button:'Įdėti kaip gryną tekstą',title:'Įdėti kaip gryną tekstą'},templates:{button:'Šablonai',title:'Turinio šablonai',insertOption:'Pakeisti dabartinį turinį pasirinktu šablonu',selectPromptMsg:'Pasirinkite norimą šabloną<br>(<b>Dėmesio!</b> esamas turinys bus prarastas):',emptyListMsg:'(Šablonų sąrašas tuščias)'},showBlocks:'Rodyti blokus',stylesCombo:{label:'Stilius',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Šrifto formatas',voiceLabel:'Format',panelTitle:'Šrifto formatas',panelVoiceLabel:'Select a paragraph format',tag_p:'Normalus',tag_pre:'Formuotas',tag_address:'Kreipinio',tag_h1:'Antraštinis 1',tag_h2:'Antraštinis 2',tag_h3:'Antraštinis 3',tag_h4:'Antraštinis 4',tag_h5:'Antraštinis 5',tag_h6:'Antraštinis 6',tag_div:'Normal (DIV)'},font:{label:'Šriftas',voiceLabel:'Font',panelTitle:'Šriftas',panelVoiceLabel:'Select a font'},fontSize:{label:'Šrifto dydis',voiceLabel:'Font Size',panelTitle:'Šrifto dydis',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Teksto spalva',bgColorTitle:'Fono spalva',auto:'Automatinis',more:'Daugiau spalvų...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/lv.js b/lang/lv.js
new file mode 100644 (file)
index 0000000..74c050b
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.lv={dir:'ltr',editorTitle:'Rich text editor, %1',source:'HTML kods',newPage:'Jauna lapa',save:'Saglabāt',preview:'Pārskatīt',cut:'Izgriezt',copy:'Kopēt',paste:'Ievietot',print:'Drukāt',underline:'Apakšsvītra',bold:'Treknu šriftu',italic:'Slīprakstā',selectAll:'Iezīmēt visu',removeFormat:'Noņemt stilus',strike:'Pārsvītrots',subscript:'Zemrakstā',superscript:'Augšrakstā',horizontalrule:'Ievietot horizontālu Atdalītājsvītru',pagebreak:'Ievietot lapas pārtraukumu',unlink:'Noņemt hipersaiti',undo:'Atcelt',redo:'Atkārtot',common:{browseServer:'Skatīt servera saturu',url:'URL',protocol:'Protokols',upload:'Augšupielādēt',uploadSubmit:'Nosūtīt serverim',image:'Attēls',flash:'Flash',form:'Forma',checkbox:'Atzīmēšanas kastīte',radio:'Izvēles poga',textField:'Teksta rinda',textarea:'Teksta laukums',hiddenField:'Paslēpta teksta rinda',button:'Poga',select:'Iezīmēšanas lauks',imageButton:'Attēlpoga',notSet:'<nav iestatīts>',id:'Id',name:'Nosaukums',langDir:'Valodas lasīšanas virziens',langDirLtr:'No kreisās uz labo (LTR)',langDirRtl:'No labās uz kreiso (RTL)',langCode:'Valodas kods',longDescr:'Gara apraksta Hipersaite',cssClass:'Stilu saraksta klases',advisoryTitle:'Konsultatīvs virsraksts',cssStyle:'Stils',ok:'Darīts!',cancel:'Atcelt',generalTab:'General',advancedTab:'Izvērstais',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Ievietot speciālo simbolu',title:'Ievietot īpašu simbolu'},link:{toolbar:'Ievietot/Labot hipersaiti',menu:'Labot hipersaiti',title:'Hipersaite',info:'Hipersaites informācija',target:'Mērķis',upload:'Augšupielādēt',advanced:'Izvērstais',type:'Hipersaites tips',toAnchor:'Iezīme šajā lapā',toEmail:'E-pasts',target:'Mērķis',targetNotSet:'<nav iestatīts>',targetFrame:'<ietvars>',targetPopup:'<uznirstošā logā>',targetNew:'Jaunā logā (_blank)',targetTop:'Visredzamākajā logā (_top)',targetSelf:'Tajā pašā logā (_self)',targetParent:'Esošajā logā (_parent)',targetFrameName:'Mērķa ietvara nosaukums',targetPopupName:'Uznirstošā loga nosaukums',popupFeatures:'Uznirstošā loga nosaukums īpašības',popupResizable:'Resizable',popupStatusBar:'Statusa josla',popupLocationBar:'Atrašanās vietas josla',popupToolbar:'Rīku josla',popupMenuBar:'Izvēlnes josla',popupFullScreen:'Pilnā ekrānā (IE)',popupScrollBars:'Ritjoslas',popupDependent:'Atkarīgs (Netscape)',popupWidth:'Platums',popupLeft:'Kreisā koordināte',popupHeight:'Augstums',popupTop:'Augšējā koordināte',id:'Id',langDir:'Valodas lasīšanas virziens',langDirNotSet:'<nav iestatīts>',langDirLTR:'No kreisās uz labo (LTR)',langDirRTL:'No labās uz kreiso (RTL)',acccessKey:'Pieejas kods',name:'Nosaukums',langCode:'Valodas lasīšanas virziens',tabIndex:'Ciļņu indekss',advisoryTitle:'Konsultatīvs virsraksts',advisoryContentType:'Konsultatīvs satura tips',cssClasses:'Stilu saraksta klases',charset:'Pievienotā resursa kodu tabula',styles:'Stils',selectAnchor:'Izvēlēties iezīmi',anchorName:'Pēc iezīmes nosaukuma',anchorId:'Pēc elementa ID',emailAddress:'E-pasta adrese',emailSubject:'Ziņas tēma',emailBody:'Ziņas saturs',noAnchors:'(Šajā dokumentā nav iezīmju)',noUrl:'Lūdzu norādi hipersaiti',noEmail:'Lūdzu norādi e-pasta adresi'},anchor:{toolbar:'Ievietot/Labot iezīmi',menu:'Iezīmes īpašības',title:'Iezīmes īpašības',name:'Iezīmes nosaukums',errorName:'Lūdzu norādiet iezīmes nosaukumu'},findAndReplace:{title:'Find and Replace',find:'Meklēt',replace:'Nomainīt',findWhat:'Meklēt:',replaceWith:'Nomainīt uz:',notFoundMsg:'Norādītā frāze netika atrasta.',matchCase:'Reģistrjūtīgs',matchWord:'Jāsakrīt pilnībā',matchCyclic:'Match cyclic',replaceAll:'Aizvietot visu',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabula',title:'Tabulas īpašības',menu:'Tabulas īpašības',deleteTable:'Dzēst tabulu',rows:'Rindas',columns:'Kolonnas',border:'Rāmja izmērs',align:'Novietojums',alignNotSet:'<nav norādīts>',alignLeft:'Pa kreisi',alignCenter:'Centrēti',alignRight:'Pa labi',width:'Platums',widthPx:'pikseļos',widthPc:'procentuāli',height:'Augstums',cellSpace:'Rūtiņu atstatums',cellPad:'Rūtiņu nobīde',caption:'Leģenda',summary:'Anotācija',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Šūna',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Dzēst rūtiņas',merge:'Apvienot rūtiņas',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Rinda',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Dzēst rindas'},column:{menu:'Kolonna',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Dzēst kolonnas'}},button:{title:'Pogas īpašības',text:'Teksts (vērtība)',type:'Tips',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Atzīmēšanas kastītes īpašības',radioTitle:'Izvēles poga īpašības',value:'Vērtība',selected:'Iezīmēts'},form:{title:'Formas īpašības',menu:'Formas īpašības',action:'Darbība',method:'Metode',encoding:'Encoding',target:'Mērķis',targetNotSet:'<nav iestatīts>',targetNew:'Jaunā logā (_blank)',targetTop:'Visredzamākajā logā (_top)',targetSelf:'Tajā pašā logā (_self)',targetParent:'Esošajā logā (_parent)'},select:{title:'Iezīmēšanas lauka īpašības',selectInfo:'Informācija',opAvail:'Pieejamās iespējas',value:'Vērtība',size:'Izmērs',lines:'rindas',chkMulti:'Atļaut vairākus iezīmējumus',opText:'Teksts',opValue:'Vērtība',btnAdd:'Pievienot',btnModify:'Veikt izmaiņas',btnUp:'Augšup',btnDown:'Lejup',btnSetValue:'Noteikt kā iezīmēto vērtību',btnDelete:'Dzēst'},textarea:{title:'Teksta laukuma īpašības',cols:'Kolonnas',rows:'Rindas'},textfield:{title:'Teksta rindas  īpašības',name:'Nosaukums',value:'Vērtība',charWidth:'Simbolu platums',maxChars:'Simbolu maksimālais daudzums',type:'Tips',typeText:'Teksts',typePass:'Parole'},hidden:{title:'Paslēptās teksta rindas īpašības',name:'Nosaukums',value:'Vērtība'},image:{title:'Attēla īpašības',titleButton:'Attēlpogas īpašības',menu:'Attēla īpašības',infoTab:'Informācija par attēlu',btnUpload:'Nosūtīt serverim',url:'URL',upload:'Augšupielādēt',alt:'Alternatīvais teksts',width:'Platums',height:'Augstums',lockRatio:'Nemainīga Augstuma/Platuma attiecība',resetSize:'Atjaunot sākotnējo izmēru',border:'Rāmis',hSpace:'Horizontālā telpa',vSpace:'Vertikālā telpa',align:'Nolīdzināt',alignLeft:'Pa kreisi',alignAbsBottom:'Absolūti apakšā',alignAbsMiddle:'Absolūti vertikāli centrēts',alignBaseline:'Pamatrindā',alignBottom:'Apakšā',alignMiddle:'Vertikāli centrēts',alignRight:'Pa labi',alignTextTop:'Teksta augšā',alignTop:'Augšā',preview:'Pārskats',alertUrl:'Lūdzu norādīt attēla hipersaiti',linkTab:'Hipersaite',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash īpašības',propertiesTab:'Properties',title:'Flash īpašības',chkPlay:'Automātiska atskaņošana',chkLoop:'Nepārtraukti',chkMenu:'Atļaut Flash izvēlni',chkFull:'Allow Fullscreen',scale:'Mainīt izmēru',scaleAll:'Rādīt visu',scaleNoBorder:'Bez rāmja',scaleFit:'Precīzs izmērs',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Nolīdzināt',alignLeft:'Pa kreisi',alignAbsBottom:'Absolūti apakšā',alignAbsMiddle:'Absolūti vertikāli centrēts',alignBaseline:'Pamatrindā',alignBottom:'Apakšā',alignMiddle:'Vertikāli centrēts',alignRight:'Pa labi',alignTextTop:'Teksta augšā',alignTop:'Augšā',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Fona krāsa',width:'Platums',height:'Augstums',hSpace:'Horizontālā telpa',vSpace:'Vertikālā telpa',validateSrc:'Lūdzu norādi hipersaiti',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Pareizrakstības pārbaude',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Netika atrasts vārdnīcā',changeTo:'Nomainīt uz',btnIgnore:'Ignorēt',btnIgnoreAll:'Ignorēt visu',btnReplace:'Aizvietot',btnReplaceAll:'Aizvietot visu',btnUndo:'Atcelt',noSuggestions:'- Nav ieteikumu -',progress:'Notiek pareizrakstības pārbaude...',noMispell:'Pareizrakstības pārbaude pabeigta: kļūdas netika atrastas',noChanges:'Pareizrakstības pārbaude pabeigta: nekas netika labots',oneChange:'Pareizrakstības pārbaude pabeigta: 1 vārds izmainīts',manyChanges:'Pareizrakstības pārbaude pabeigta: %1 vārdi tika mainīti',ieSpellDownload:'Pareizrakstības pārbaudītājs nav pievienots. Vai vēlaties to lejupielādēt tagad?'},smiley:{toolbar:'Smaidiņi',title:'Ievietot smaidiņu'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Numurēts saraksts',bulletedlist:'Izcelts saraksts',indent:'Palielināt atkāpi',outdent:'Samazināt atkāpi',justify:{left:'Izlīdzināt pa kreisi',center:'Izlīdzināt pret centru',right:'Izlīdzināt pa labi',block:'Izlīdzināt malas'},blockquote:'Blockquote',clipboard:{title:'Ievietot',cutError:'Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt izgriešanas darbību.  Lūdzu, izmantojiet (Ctrl+X, lai veiktu šo darbību.',copyError:'Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt kopēšanas darbību.  Lūdzu, izmantojiet (Ctrl+C), lai veiktu šo darbību.',pasteMsg:'Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Ievietot no Worda',title:'Ievietot no Worda',advice:'Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.',ignoreFontFace:'Ignorēt iepriekš norādītos fontus',removeStyle:'Noņemt norādītos stilus'},pasteText:{button:'Ievietot kā vienkāršu tekstu',title:'Ievietot kā vienkāršu tekstu'},templates:{button:'Sagataves',title:'Satura sagataves',insertOption:'Replace actual contents',selectPromptMsg:'Lūdzu, norādiet sagatavi, ko atvērt editorā<br>(patreizējie dati tiks zaudēti):',emptyListMsg:'(Nav norādītas sagataves)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stils',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formāts',voiceLabel:'Format',panelTitle:'Formāts',panelVoiceLabel:'Select a paragraph format',tag_p:'Normāls teksts',tag_pre:'Formatēts teksts',tag_address:'Adrese',tag_h1:'Virsraksts 1',tag_h2:'Virsraksts 2',tag_h3:'Virsraksts 3',tag_h4:'Virsraksts 4',tag_h5:'Virsraksts 5',tag_h6:'Virsraksts 6',tag_div:'Rindkopa (DIV)'},font:{label:'Šrifts',voiceLabel:'Font',panelTitle:'Šrifts',panelVoiceLabel:'Select a font'},fontSize:{label:'Izmērs',voiceLabel:'Font Size',panelTitle:'Izmērs',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Teksta krāsa',bgColorTitle:'Fona krāsa',auto:'Automātiska',more:'Plašāka palete...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/mn.js b/lang/mn.js
new file mode 100644 (file)
index 0000000..2940dcd
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.mn={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Код',newPage:'Шинэ хуудас',save:'Хадгалах',preview:'Уридчлан харах',cut:'Хайчлах',copy:'Хуулах',paste:'Буулгах',print:'Хэвлэх',underline:'Доогуур нь зураастай болгох',bold:'Тод бүдүүн',italic:'Налуу',selectAll:'Бүгдийг нь сонгох',removeFormat:'Формат авч хаях',strike:'Дундуур нь зураастай болгох',subscript:'Суурь болгох',superscript:'Зэрэг болгох',horizontalrule:'Хөндлөн зураас оруулах',pagebreak:'Хуудас тусгаарлагч оруулах',unlink:'Линк авч хаях',undo:'Хүчингүй болгох',redo:'Өмнөх үйлдлээ сэргээх',common:{browseServer:'Сервер харуулах',url:'URL',protocol:'Протокол',upload:'Хуулах',uploadSubmit:'Үүнийг сервэррүү илгээ',image:'Зураг',flash:'Флаш',form:'Форм',checkbox:'Чекбокс',radio:'Радио товч',textField:'Техт талбар',textarea:'Техт орчин',hiddenField:'Нууц талбар',button:'Товч',select:'Сонгогч талбар',imageButton:'Зурагтай товч',notSet:'<Оноохгүй>',id:'Id',name:'Нэр',langDir:'Хэлний чиглэл',langDirLtr:'Зүүнээс баруун (LTR)',langDirRtl:'Баруунаас зүүн (RTL)',langCode:'Хэлний код',longDescr:'URL-ын тайлбар',cssClass:'Stylesheet классууд',advisoryTitle:'Зөвлөлдөх гарчиг',cssStyle:'Загвар',ok:'OK',cancel:'Болих',generalTab:'General',advancedTab:'Нэмэлт',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Онцгой тэмдэгт оруулах',title:'Онцгой тэмдэгт сонгох'},link:{toolbar:'Линк Оруулах/Засварлах',menu:'Холбоос засварлах',title:'Линк',info:'Линкийн мэдээлэл',target:'Байрлал',upload:'Хуулах',advanced:'Нэмэлт',type:'Линкийн төрөл',toAnchor:'Энэ хуудасандах холбоос',toEmail:'E-Mail',target:'Байрлал',targetNotSet:'<Оноохгүй>',targetFrame:'<Агуулах хүрээ>',targetPopup:'<popup цонх>',targetNew:'Шинэ цонх (_blank)',targetTop:'Хамгийн түрүүн байх цонх (_top)',targetSelf:'Төстэй цонх (_self)',targetParent:'Эцэг цонх (_parent)',targetFrameName:'Очих фремын нэр',targetPopupName:'Popup цонхны нэр',popupFeatures:'Popup цонхны онцлог',popupResizable:'Resizable',popupStatusBar:'Статус хэсэг',popupLocationBar:'Location хэсэг',popupToolbar:'Багажны хэсэг',popupMenuBar:'Meню хэсэг',popupFullScreen:'Цонх дүүргэх (IE)',popupScrollBars:'Скрол хэсэгүүд',popupDependent:'Хамаатай (Netscape)',popupWidth:'Өргөн',popupLeft:'Зүүн байрлал',popupHeight:'Өндөр',popupTop:'Дээд байрлал',id:'Id',langDir:'Хэлний чиглэл',langDirNotSet:'<Оноохгүй>',langDirLTR:'Зүүнээс баруун (LTR)',langDirRTL:'Баруунаас зүүн (RTL)',acccessKey:'Холбох түлхүүр',name:'Нэр',langCode:'Хэлний чиглэл',tabIndex:'Tab индекс',advisoryTitle:'Зөвлөлдөх гарчиг',advisoryContentType:'Зөвлөлдөх төрлийн агуулга',cssClasses:'Stylesheet классууд',charset:'Тэмдэгт оноох нөөцөд холбогдсон',styles:'Загвар',selectAnchor:'Холбоос сонгох',anchorName:'Холбоосын нэрээр',anchorId:'Элемэнт Id-гаар',emailAddress:'E-Mail Хаяг',emailSubject:'Message гарчиг',emailBody:'Message-ийн агуулга',noAnchors:'(Баримт бичиг холбоосгүй байна)',noUrl:'Линк URL-ээ төрөлжүүлнэ үү',noEmail:'Е-mail хаягаа төрөлжүүлнэ үү'},anchor:{toolbar:'Холбоос Оруулах/Засварлах',menu:'Холбоос шинж чанар',title:'Холбоос шинж чанар',name:'Холбоос нэр',errorName:'Холбоос төрөл оруулна уу'},findAndReplace:{title:'Хай мөн Дарж бич',find:'Хайх',replace:'Солих',findWhat:'Хайх үг/үсэг:',replaceWith:'Солих үг:',notFoundMsg:'Хайсан текст олсонгүй.',matchCase:'Тэнцэх төлөв',matchWord:'Тэнцэх бүтэн үг',matchCyclic:'Match cyclic',replaceAll:'Бүгдийг нь Солих',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Хүснэгт',title:'Хүснэгт',menu:'Хүснэгт',deleteTable:'Хүснэгт устгах',rows:'Мөр',columns:'Багана',border:'Хүрээний хэмжээ',align:'Эгнээ',alignNotSet:'<Оноохгүй>',alignLeft:'Зүүн талд',alignCenter:'Төвд',alignRight:'Баруун талд',width:'Өргөн',widthPx:'цэг',widthPc:'хувь',height:'Өндөр',cellSpace:'Нүх хоорондын зай (spacing)',cellPad:'Нүх доторлох(padding)',caption:'Тайлбар',summary:'Тайлбар',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Нүх/зай',insertBefore:'Нүх/зай өмнө нь оруулах',insertAfter:'Нүх/зай дараа нь оруулах',deleteCell:'Нүх устгах',merge:'Нүх нэгтэх',mergeRight:'Баруун тийш нэгтгэх',mergeDown:'Доош нэгтгэх',splitHorizontal:'Нүх/зайг босоогоор нь тусгаарлах',splitVertical:'Нүх/зайг хөндлөнгөөр нь тусгаарлах',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Мөр',insertBefore:'Мөр өмнө нь оруулах',insertAfter:'Мөр дараа нь оруулах',deleteRow:'Мөр устгах'},column:{menu:'Багана',insertBefore:'Багана өмнө нь оруулах',insertAfter:'Багана дараа нь оруулах',deleteColumn:'Багана устгах'}},button:{title:'Товчны шинж чанар',text:'Тэкст (Утга)',type:'Төрөл',typeBtn:'Товч',typeSbm:'Submit',typeRst:'Болих'},checkboxAndRadio:{checkboxTitle:'Чекбоксны шинж чанар',radioTitle:'Радио товчны шинж чанар',value:'Утга',selected:'Сонгогдсон'},form:{title:'Форм шинж чанар',menu:'Форм шинж чанар',action:'Үйлдэл',method:'Арга',encoding:'Encoding',target:'Байрлал',targetNotSet:'<Оноохгүй>',targetNew:'Шинэ цонх (_blank)',targetTop:'Хамгийн түрүүн байх цонх (_top)',targetSelf:'Төстэй цонх (_self)',targetParent:'Эцэг цонх (_parent)'},select:{title:'Согогч талбарын шинж чанар',selectInfo:'Мэдээлэл',opAvail:'Идвэхтэй сонголт',value:'Утга',size:'Хэмжээ',lines:'Мөр',chkMulti:'Олон сонголт зөвшөөрөх',opText:'Тэкст',opValue:'Утга',btnAdd:'Нэмэх',btnModify:'Өөрчлөх',btnUp:'Дээш',btnDown:'Доош',btnSetValue:'Сонгогдсан утга оноох',btnDelete:'Устгах'},textarea:{title:'Текст орчны шинж чанар',cols:'Багана',rows:'Мөр'},textfield:{title:'Текст талбарын шинж чанар',name:'Нэр',value:'Утга',charWidth:'Тэмдэгтын өргөн',maxChars:'Хамгийн их тэмдэгт',type:'Төрөл',typeText:'Текст',typePass:'Нууц үг'},hidden:{title:'Нууц талбарын шинж чанар',name:'Нэр',value:'Утга'},image:{title:'Зураг',titleButton:'Зурган товчны шинж чанар',menu:'Зураг',infoTab:'Зурагны мэдээлэл',btnUpload:'Үүнийг сервэррүү илгээ',url:'URL',upload:'Хуулах',alt:'Тайлбар текст',width:'Өргөн',height:'Өндөр',lockRatio:'Радио түгжих',resetSize:'хэмжээ дахин оноох',border:'Хүрээ',hSpace:'Хөндлөн зай',vSpace:'Босоо зай',align:'Эгнээ',alignLeft:'Зүүн',alignAbsBottom:'Abs доод талд',alignAbsMiddle:'Abs Дунд талд',alignBaseline:'Baseline',alignBottom:'Доод талд',alignMiddle:'Дунд талд',alignRight:'Баруун',alignTextTop:'Текст дээр',alignTop:'Дээд талд',preview:'Уридчлан харах',alertUrl:'Зурагны URL-ын төрлийн сонгоно уу',linkTab:'Линк',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Флаш шинж чанар',propertiesTab:'Properties',title:'Флаш  шинж чанар',chkPlay:'Автоматаар тоглох',chkLoop:'Давтах',chkMenu:'Флаш цэс идвэхжүүлэх',chkFull:'Allow Fullscreen',scale:'Өргөгтгөх',scaleAll:'Бүгдийг харуулах',scaleNoBorder:'Хүрээгүй',scaleFit:'Яг тааруулах',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Эгнээ',alignLeft:'Зүүн',alignAbsBottom:'Abs доод талд',alignAbsMiddle:'Abs Дунд талд',alignBaseline:'Baseline',alignBottom:'Доод талд',alignMiddle:'Дунд талд',alignRight:'Баруун',alignTextTop:'Текст дээр',alignTop:'Дээд талд',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Фонны өнгө',width:'Өргөн',height:'Өндөр',hSpace:'Хөндлөн зай',vSpace:'Босоо зай',validateSrc:'Линк URL-ээ төрөлжүүлнэ үү',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Үгийн дүрэх шалгах',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Толь бичиггүй',changeTo:'Өөрчлөх',btnIgnore:'Зөвшөөрөх',btnIgnoreAll:'Бүгдийг зөвшөөрөх',btnReplace:'Дарж бичих',btnReplaceAll:'Бүгдийг Дарж бичих',btnUndo:'Буцаах',noSuggestions:'- Тайлбаргүй -',progress:'Дүрэм шалгаж байгаа үйл явц...',noMispell:'Дүрэм шалгаад дууссан: Алдаа олдсонгүй',noChanges:'Дүрэм шалгаад дууссан: үг өөрчлөгдөөгүй',oneChange:'Дүрэм шалгаад дууссан: 1 үг өөрчлөгдсөн',manyChanges:'Дүрэм шалгаад дууссан: %1 үг өөрчлөгдсөн',ieSpellDownload:'Дүрэм шалгагч суугаагүй байна. Татаж авахыг хүсч байна уу?'},smiley:{toolbar:'Тодорхойлолт',title:'Тодорхойлолт оруулах'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Дугаарлагдсан жагсаалт',bulletedlist:'Цэгтэй жагсаалт',indent:'Догол мөр хасах',outdent:'Догол мөр нэмэх',justify:{left:'Зүүн талд байрлуулах',center:'Төвд байрлуулах',right:'Баруун талд байрлуулах',block:'Блок хэлбэрээр байрлуулах'},blockquote:'Хайрцаглах',clipboard:{title:'Буулгах',cutError:'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+X) товчны хослолыг ашиглана уу.',copyError:'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+C) товчны хослолыг ашиглана уу.',pasteMsg:'(<strong>Ctrl+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.',securityMsg:'Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.'},pastefromword:{toolbar:'Word-оос буулгах',title:'Word-оос буулгах',advice:'(<strong>Ctrl+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.',ignoreFontFace:'Тодорхойлогдсон Font Face зөвшөөрнө',removeStyle:'Тодорхойлогдсон загварыг авах'},pasteText:{button:'Plain Text-ээс буулгах',title:'Plain Text-ээс буулгах'},templates:{button:'Загварууд',title:'Загварын агуулга',insertOption:'Одоогийн агууллагыг дарж бичих',selectPromptMsg:'Загварыг нээж editor-рүү сонгож оруулна уу<br />(Одоогийн агууллагыг устаж магадгүй):',emptyListMsg:'(Загвар тодорхойлогдоогүй байна)'},showBlocks:'Block-уудыг үзүүлэх',stylesCombo:{label:'Загвар',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Формат',voiceLabel:'Format',panelTitle:'Формат',panelVoiceLabel:'Select a paragraph format',tag_p:'Хэвийн',tag_pre:'Formatted',tag_address:'Хаяг',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Paragraph (DIV)'},font:{label:'Фонт',voiceLabel:'Font',panelTitle:'Фонт',panelVoiceLabel:'Select a font'},fontSize:{label:'Хэмжээ',voiceLabel:'Font Size',panelTitle:'Хэмжээ',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Фонтны өнгө',bgColorTitle:'Фонны өнгө',auto:'Автоматаар',more:'Нэмэлт өнгөнүүд...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/ms.js b/lang/ms.js
new file mode 100644 (file)
index 0000000..6a0b34d
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.ms={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Sumber',newPage:'Helaian Baru',save:'Simpan',preview:'Prebiu',cut:'Potong',copy:'Salin',paste:'Tampal',print:'Cetak',underline:'Underline',bold:'Bold',italic:'Italic',selectAll:'Pilih Semua',removeFormat:'Buang Format',strike:'Strike Through',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Masukkan Garisan Membujur',pagebreak:'Insert Page Break for Printing',unlink:'Buang Sambungan',undo:'Batalkan',redo:'Ulangkan',common:{browseServer:'Browse Server',url:'URL',protocol:'Protokol',upload:'Muat Naik',uploadSubmit:'Hantar ke Server',image:'Gambar',flash:'Flash',form:'Borang',checkbox:'Checkbox',radio:'Butang Radio',textField:'Text Field',textarea:'Textarea',hiddenField:'Field Tersembunyi',button:'Butang',select:'Field Pilihan',imageButton:'Butang Bergambar',notSet:'<tidak di set>',id:'Id',name:'Nama',langDir:'Arah Tulisan',langDirLtr:'Kiri ke Kanan (LTR)',langDirRtl:'Kanan ke Kiri (RTL)',langCode:'Kod Bahasa',longDescr:'Butiran Panjang URL',cssClass:'Kelas-kelas Stylesheet',advisoryTitle:'Tajuk Makluman',cssStyle:'Stail',ok:'OK',cancel:'Batal',generalTab:'General',advancedTab:'Advanced',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Masukkan Huruf Istimewa',title:'Sila pilih huruf istimewa'},link:{toolbar:'Masukkan/Sunting Sambungan',menu:'Sunting Sambungan',title:'Sambungan',info:'Butiran Sambungan',target:'Sasaran',upload:'Muat Naik',advanced:'Advanced',type:'Jenis Sambungan',toAnchor:'Pautan dalam muka surat ini',toEmail:'E-Mail',target:'Sasaran',targetNotSet:'<tidak di set>',targetFrame:'<bingkai>',targetPopup:'<tetingkap popup>',targetNew:'Tetingkap Baru (_blank)',targetTop:'Tetingkap yang paling atas (_top)',targetSelf:'Tetingkap yang Sama (_self)',targetParent:'Tetingkap Parent (_parent)',targetFrameName:'Nama Bingkai Sasaran',targetPopupName:'Nama Tetingkap Popup',popupFeatures:'Ciri Tetingkap Popup',popupResizable:'Resizable',popupStatusBar:'Bar Status',popupLocationBar:'Bar Lokasi',popupToolbar:'Toolbar',popupMenuBar:'Bar Menu',popupFullScreen:'Skrin Penuh (IE)',popupScrollBars:'Bar-bar skrol',popupDependent:'Bergantungan (Netscape)',popupWidth:'Lebar',popupLeft:'Posisi Kiri',popupHeight:'Tinggi',popupTop:'Posisi Atas',id:'Id',langDir:'Arah Tulisan',langDirNotSet:'<tidak di set>',langDirLTR:'Kiri ke Kanan (LTR)',langDirRTL:'Kanan ke Kiri (RTL)',acccessKey:'Kunci Akses',name:'Nama',langCode:'Arah Tulisan',tabIndex:'Indeks Tab ',advisoryTitle:'Tajuk Makluman',advisoryContentType:'Jenis Kandungan Makluman',cssClasses:'Kelas-kelas Stylesheet',charset:'Linked Resource Charset',styles:'Stail',selectAnchor:'Sila pilih pautan',anchorName:'dengan menggunakan nama pautan',anchorId:'dengan menggunakan ID elemen',emailAddress:'Alamat E-Mail',emailSubject:'Subjek Mesej',emailBody:'Isi Kandungan Mesej',noAnchors:'(Tiada pautan terdapat dalam dokumen ini)',noUrl:'Sila taip sambungan URL',noEmail:'Sila taip alamat e-mail'},anchor:{toolbar:'Masukkan/Sunting Pautan',menu:'Ciri-ciri Pautan',title:'Ciri-ciri Pautan',name:'Nama Pautan',errorName:'Sila taip nama pautan'},findAndReplace:{title:'Find and Replace',find:'Cari',replace:'Ganti',findWhat:'Perkataan yang dicari:',replaceWith:'Diganti dengan:',notFoundMsg:'Text yang dicari tidak dijumpai.',matchCase:'Padanan case huruf',matchWord:'Padana Keseluruhan perkataan',matchCyclic:'Match cyclic',replaceAll:'Ganti semua',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Jadual',title:'Ciri-ciri Jadual',menu:'Ciri-ciri Jadual',deleteTable:'Delete Table',rows:'Barisan',columns:'Jaluran',border:'Saiz Border',align:'Penjajaran',alignNotSet:'<Tidak diset>',alignLeft:'Kiri',alignCenter:'Tengah',alignRight:'Kanan',width:'Lebar',widthPx:'piksel-piksel',widthPc:'peratus',height:'Tinggi',cellSpace:'Ruangan Antara Sel',cellPad:'Tambahan Ruang Sel',caption:'Keterangan',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Buangkan Sel-sel',merge:'Cantumkan Sel-sel',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Buangkan Baris'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Buangkan Lajur'}},button:{title:'Ciri-ciri Butang',text:'Teks (Nilai)',type:'Jenis',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Ciri-ciri Checkbox',radioTitle:'Ciri-ciri Butang Radio',value:'Nilai',selected:'Dipilih'},form:{title:'Ciri-ciri Borang',menu:'Ciri-ciri Borang',action:'Tindakan borang',method:'Cara borang dihantar',encoding:'Encoding',target:'Sasaran',targetNotSet:'<tidak di set>',targetNew:'Tetingkap Baru (_blank)',targetTop:'Tetingkap yang paling atas (_top)',targetSelf:'Tetingkap yang Sama (_self)',targetParent:'Tetingkap Parent (_parent)'},select:{title:'Ciri-ciri Selection Field',selectInfo:'Select Info',opAvail:'Pilihan sediada',value:'Nilai',size:'Saiz',lines:'garisan',chkMulti:'Benarkan pilihan pelbagai',opText:'Teks',opValue:'Nilai',btnAdd:'Tambah Pilihan',btnModify:'Ubah Pilihan',btnUp:'Naik ke atas',btnDown:'Turun ke bawah',btnSetValue:'Set sebagai nilai terpilih',btnDelete:'Padam'},textarea:{title:'Ciri-ciri Textarea',cols:'Lajur',rows:'Baris'},textfield:{title:'Ciri-ciri Text Field',name:'Nama',value:'Nilai',charWidth:'Lebar isian',maxChars:'Isian Maksimum',type:'Jenis',typeText:'Teks',typePass:'Kata Laluan'},hidden:{title:'Ciri-ciri Field Tersembunyi',name:'Nama',value:'Nilai'},image:{title:'Ciri-ciri Imej',titleButton:'Ciri-ciri Butang Bergambar',menu:'Ciri-ciri Imej',infoTab:'Info Imej',btnUpload:'Hantar ke Server',url:'URL',upload:'Muat Naik',alt:'Text Alternatif',width:'Lebar',height:'Tinggi',lockRatio:'Tetapkan Nisbah',resetSize:'Saiz Set Semula',border:'Border',hSpace:'Ruang Melintang',vSpace:'Ruang Menegak',align:'Jajaran',alignLeft:'Kiri',alignAbsBottom:'Bawah Mutlak',alignAbsMiddle:'Pertengahan Mutlak',alignBaseline:'Garis Dasar',alignBottom:'Bawah',alignMiddle:'Pertengahan',alignRight:'Kanan',alignTextTop:'Atas Text',alignTop:'Atas',preview:'Prebiu',alertUrl:'Sila taip URL untuk fail gambar',linkTab:'Sambungan',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash Properties',propertiesTab:'Properties',title:'Flash Properties',chkPlay:'Auto Play',chkLoop:'Loop',chkMenu:'Enable Flash Menu',chkFull:'Allow Fullscreen',scale:'Scale',scaleAll:'Show all',scaleNoBorder:'No Border',scaleFit:'Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Jajaran',alignLeft:'Kiri',alignAbsBottom:'Bawah Mutlak',alignAbsMiddle:'Pertengahan Mutlak',alignBaseline:'Garis Dasar',alignBottom:'Bawah',alignMiddle:'Pertengahan',alignRight:'Kanan',alignTextTop:'Atas Text',alignTop:'Atas',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Warna Latarbelakang',width:'Lebar',height:'Tinggi',hSpace:'Ruang Melintang',vSpace:'Ruang Menegak',validateSrc:'Sila taip sambungan URL',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Semak Ejaan',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Tidak terdapat didalam kamus',changeTo:'Tukarkan kepada',btnIgnore:'Biar',btnIgnoreAll:'Biarkan semua',btnReplace:'Ganti',btnReplaceAll:'Gantikan Semua',btnUndo:'Batalkan',noSuggestions:'- Tiada cadangan -',progress:'Pemeriksaan ejaan sedang diproses...',noMispell:'Pemeriksaan ejaan siap: Tiada salah ejaan',noChanges:'Pemeriksaan ejaan siap: Tiada perkataan diubah',oneChange:'Pemeriksaan ejaan siap: Satu perkataan telah diubah',manyChanges:'Pemeriksaan ejaan siap: %1 perkataan diubah',ieSpellDownload:'Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?'},smiley:{toolbar:'Smiley',title:'Masukkan Smiley'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Senarai bernombor',bulletedlist:'Senarai tidak bernombor',indent:'Tambahkan Inden',outdent:'Kurangkan Inden',justify:{left:'Jajaran Kiri',center:'Jajaran Tengah',right:'Jajaran Kanan',block:'Jajaran Blok'},blockquote:'Blockquote',clipboard:{title:'Tampal',cutError:'Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl+X).',copyError:'Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl+C).',pasteMsg:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Tampal dari Word',title:'Tampal dari Word',advice:'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.',ignoreFontFace:'Ignore Font Face definitions',removeStyle:'Remove Styles definitions'},pasteText:{button:'Tampal sebagai text biasa',title:'Tampal sebagai text biasa'},templates:{button:'Templat',title:'Templat Kandungan',insertOption:'Replace actual contents',selectPromptMsg:'Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):',emptyListMsg:'(Tiada Templat Disimpan)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stail',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Format',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Telah Diformat',tag_address:'Alamat',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Perenggan (DIV)'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font',panelVoiceLabel:'Select a font'},fontSize:{label:'Saiz',voiceLabel:'Font Size',panelTitle:'Saiz',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Warna Text',bgColorTitle:'Warna Latarbelakang',auto:'Otomatik',more:'Warna lain-lain...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/nb.js b/lang/nb.js
new file mode 100644 (file)
index 0000000..c09419d
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.nb={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Kilde',newPage:'Ny Side',save:'Lagre',preview:'Forhåndsvis',cut:'Klipp ut',copy:'Kopier',paste:'Lim inn',print:'Skriv ut',underline:'Understrek',bold:'Fet',italic:'Kursiv',selectAll:'Merk alt',removeFormat:'Fjern format',strike:'Gjennomstrek',subscript:'Senket skrift',superscript:'Hevet skrift',horizontalrule:'Sett inn horisontal linje',pagebreak:'Sett inn sideskift',unlink:'Fjern lenke',undo:'Angre',redo:'Gjør om',common:{browseServer:'Bla igjennom server',url:'URL',protocol:'Protokoll',upload:'Last opp',uploadSubmit:'Send det til serveren',image:'Bilde',flash:'Flash',form:'Skjema',checkbox:'Avmerkingsboks',radio:'Alternativknapp',textField:'Tekstboks',textarea:'Tekstområde',hiddenField:'Skjult felt',button:'Knapp',select:'Rullegardinliste',imageButton:'Bildeknapp',notSet:'<ikke satt>',id:'Id',name:'Navn',langDir:'Språkretning',langDirLtr:'Venstre til høyre (VTH)',langDirRtl:'Høyre til venstre (HTV)',langCode:'Språkkode',longDescr:'Utvidet beskrivelse',cssClass:'Stilarkklasser',advisoryTitle:'Tittel',cssStyle:'Stil',ok:'OK',cancel:'Avbryt',generalTab:'Generelt',advancedTab:'Avansert',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Sett inn spesielt tegn',title:'Velg spesielt tegn'},link:{toolbar:'Sett inn/Rediger lenke',menu:'Rediger lenke',title:'Lenke',info:'Lenkeinfo',target:'Mål',upload:'Last opp',advanced:'Avansert',type:'Lenketype',toAnchor:'Lenke til anker i teksten',toEmail:'E-post',target:'Mål',targetNotSet:'<ikke satt>',targetFrame:'<ramme>',targetPopup:'<popup vindu>',targetNew:'Nytt vindu (_blank)',targetTop:'Hele vindu (_top)',targetSelf:'Samme vindu (_self)',targetParent:'Foreldrevindu (_parent)',targetFrameName:'Målramme',targetPopupName:'Navn på popup-vindus',popupFeatures:'Egenskaper for popup-vindu',popupResizable:'Resizable',popupStatusBar:'Statuslinje',popupLocationBar:'Adresselinje',popupToolbar:'Verktøylinje',popupMenuBar:'Menylinje',popupFullScreen:'Full skjerm (IE)',popupScrollBars:'Scrollbar',popupDependent:'Avhenging (Netscape)',popupWidth:'Bredde',popupLeft:'Venstre posisjon',popupHeight:'Høyde',popupTop:'Topp-posisjon',id:'Id',langDir:'Språkretning',langDirNotSet:'<ikke satt>',langDirLTR:'Venstre til høyre (VTH)',langDirRTL:'Høyre til venstre (HTV)',acccessKey:'Aksessknapp',name:'Navn',langCode:'Språkretning',tabIndex:'Tab Indeks',advisoryTitle:'Tittel',advisoryContentType:'Type',cssClasses:'Stilarkklasser',charset:'Lenket språkkart',styles:'Stil',selectAnchor:'Velg et anker',anchorName:'Anker etter navn',anchorId:'Element etter ID',emailAddress:'E-postadresse',emailSubject:'Meldingsemne',emailBody:'Melding',noAnchors:'(Ingen anker i dokumentet)',noUrl:'Vennligst skriv inn lenkens url',noEmail:'Vennligst skriv inn e-postadressen'},anchor:{toolbar:'Sett inn/Rediger anker',menu:'Egenskaper for anker',title:'Egenskaper for anker',name:'Ankernavn',errorName:'Vennligst skriv inn ankernavnet'},findAndReplace:{title:'Søk og erstatt',find:'Søk',replace:'Erstatt',findWhat:'Søk etter:',replaceWith:'Erstatt med:',notFoundMsg:'Fant ikke søketeksten.',matchCase:'Skill mellom store og små bokstaver',matchWord:'Bare hele ord',matchCyclic:'Match cyclic',replaceAll:'Erstatt alle',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabell',title:'Egenskaper for tabell',menu:'Egenskaper for tabell',deleteTable:'Slett tabell',rows:'Rader',columns:'Kolonner',border:'Rammestørrelse',align:'Justering',alignNotSet:'<Ikke satt>',alignLeft:'Venstre',alignCenter:'Midtjuster',alignRight:'Høyre',width:'Bredde',widthPx:'piksler',widthPc:'prosent',height:'Høyde',cellSpace:'Cellemarg',cellPad:'Cellepolstring',caption:'Tittel',summary:'Sammendrag',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Celle',insertBefore:'Sett inn celle før',insertAfter:'Sett inn celle etter',deleteCell:'Slett celler',merge:'Slå sammen celler',mergeRight:'Slå sammen høyre',mergeDown:'Slå sammen ned',splitHorizontal:'Del celle horisontalt',splitVertical:'Del celle vertikalt',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Rader',insertBefore:'Sett inn rad før',insertAfter:'Sett inn rad etter',deleteRow:'Slett rader'},column:{menu:'Kolonne',insertBefore:'Sett inn kolonne før',insertAfter:'Sett inn kolonne etter',deleteColumn:'Slett kolonner'}},button:{title:'Egenskaper for knapp',text:'Tekst (verdi)',type:'Type',typeBtn:'Knapp',typeSbm:'Send',typeRst:'Nullstill'},checkboxAndRadio:{checkboxTitle:'Egenskaper for avmerkingsboks',radioTitle:'Egenskaper for alternativknapp',value:'Verdi',selected:'Valgt'},form:{title:'Egenskaper for skjema',menu:'Egenskaper for skjema',action:'Handling',method:'Metode',encoding:'Encoding',target:'Mål',targetNotSet:'<ikke satt>',targetNew:'Nytt vindu (_blank)',targetTop:'Hele vindu (_top)',targetSelf:'Samme vindu (_self)',targetParent:'Foreldrevindu (_parent)'},select:{title:'Egenskaper for rullegardinliste',selectInfo:'Info',opAvail:'Tilgjenglige alternativer',value:'Verdi',size:'Størrelse',lines:'Linjer',chkMulti:'Tillat flervalg',opText:'Tekst',opValue:'Verdi',btnAdd:'Legg til',btnModify:'Endre',btnUp:'Opp',btnDown:'Ned',btnSetValue:'Sett som valgt',btnDelete:'Slett'},textarea:{title:'Egenskaper for tekstområde',cols:'Kolonner',rows:'Rader'},textfield:{title:'Egenskaper for tekstfelt',name:'Navn',value:'Verdi',charWidth:'Tegnbredde',maxChars:'Maks antall tegn',type:'Type',typeText:'Tekst',typePass:'Passord'},hidden:{title:'Egenskaper for skjult felt',name:'Navn',value:'Verdi'},image:{title:'Bildeegenskaper',titleButton:'Egenskaper for bildeknapp',menu:'Bildeegenskaper',infoTab:'Bildeinformasjon',btnUpload:'Send det til serveren',url:'URL',upload:'Last opp',alt:'Alternativ tekst',width:'Bredde',height:'Høyde',lockRatio:'Lås forhold',resetSize:'Tilbakestill størrelse',border:'Ramme',hSpace:'HMarg',vSpace:'VMarg',align:'Juster',alignLeft:'Venstre',alignAbsBottom:'Abs bunn',alignAbsMiddle:'Abs midten',alignBaseline:'Bunnlinje',alignBottom:'Bunn',alignMiddle:'Midten',alignRight:'Høyre',alignTextTop:'Tekst topp',alignTop:'Topp',preview:'Forhåndsvis',alertUrl:'Vennligst skriv bilde-urlen',linkTab:'Lenke',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Egenskaper for Flash-objekt',propertiesTab:'Properties',title:'Flash-egenskaper',chkPlay:'Autospill',chkLoop:'Loop',chkMenu:'Slå på Flash-meny',chkFull:'Allow Fullscreen',scale:'Skaler',scaleAll:'Vis alt',scaleNoBorder:'Ingen ramme',scaleFit:'Skaler til å passe',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Juster',alignLeft:'Venstre',alignAbsBottom:'Abs bunn',alignAbsMiddle:'Abs midten',alignBaseline:'Bunnlinje',alignBottom:'Bunn',alignMiddle:'Midten',alignRight:'Høyre',alignTextTop:'Tekst topp',alignTop:'Topp',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Bakgrunnsfarge',width:'Bredde',height:'Høyde',hSpace:'HMarg',vSpace:'VMarg',validateSrc:'Vennligst skriv inn lenkens url',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Stavekontroll',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ikke i ordboken',changeTo:'Endre til',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer alle',btnReplace:'Erstatt',btnReplaceAll:'Erstatt alle',btnUndo:'Angre',noSuggestions:'- Ingen forslag -',progress:'Stavekontroll pågår...',noMispell:'Stavekontroll fullført: ingen feilstavinger funnet',noChanges:'Stavekontroll fullført: ingen ord endret',oneChange:'Stavekontroll fullført: Ett ord endret',manyChanges:'Stavekontroll fullført: %1 ord endret',ieSpellDownload:'Stavekontroll er ikke installert. Vil du laste den ned nå?'},smiley:{toolbar:'Smil',title:'Sett inn smil'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Nummerert liste',bulletedlist:'Uordnet liste',indent:'Øk nivå',outdent:'Senk nivå',justify:{left:'Venstrejuster',center:'Midtjuster',right:'Høyrejuster',block:'Blokkjuster'},blockquote:'Blockquote',clipboard:{title:'Lim inn',cutError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl+X).',copyError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl+C).',pasteMsg:'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',securityMsg:'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må lime det igjen i dette vinduet.'},pastefromword:{toolbar:'Lim inn fra Word',title:'Lim inn fra Word',advice:'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',ignoreFontFace:'Fjern skrifttyper',removeStyle:'Fjern stildefinisjoner'},pasteText:{button:'Lim inn som ren tekst',title:'Lim inn som ren tekst'},templates:{button:'Maler',title:'Innholdsmaler',insertOption:'Erstatt faktisk innold',selectPromptMsg:'Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):',emptyListMsg:'(Ingen maler definert)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stil',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Format',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatert',tag_address:'Adresse',tag_h1:'Tittel 1',tag_h2:'Tittel 2',tag_h3:'Tittel 3',tag_h4:'Tittel 4',tag_h5:'Tittel 5',tag_h6:'Tittel 6',tag_div:'Normal (DIV)'},font:{label:'Skrift',voiceLabel:'Font',panelTitle:'Skrift',panelVoiceLabel:'Select a font'},fontSize:{label:'Størrelse',voiceLabel:'Font Size',panelTitle:'Størrelse',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Tekstfarge',bgColorTitle:'Bakgrunnsfarge',auto:'Automatisk',more:'Flere farger...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/nl.js b/lang/nl.js
new file mode 100644 (file)
index 0000000..c56e52c
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.nl={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Code',newPage:'Nieuwe pagina',save:'Opslaan',preview:'Voorbeeld',cut:'Knippen',copy:'Kopiëren',paste:'Plakken',print:'Printen',underline:'Onderstreept',bold:'Vet',italic:'Schuingedrukt',selectAll:'Alles selecteren',removeFormat:'Opmaak verwijderen',strike:'Doorhalen',subscript:'Subscript',superscript:'Superscript',horizontalrule:'Horizontale lijn invoegen',pagebreak:'Pagina-einde invoegen',unlink:'Link verwijderen',undo:'Ongedaan maken',redo:'Opnieuw uitvoeren',common:{browseServer:'Bladeren op server',url:'URL',protocol:'Protocol',upload:'Upload',uploadSubmit:'Naar server verzenden',image:'Afbeelding',flash:'Flash',form:'Formulier',checkbox:'Aanvinkvakje',radio:'Selectievakje',textField:'Tekstveld',textarea:'Tekstvak',hiddenField:'Verborgen veld',button:'Knop',select:'Selectieveld',imageButton:'Afbeeldingsknop',notSet:'<niet ingevuld>',id:'Kenmerk',name:'Naam',langDir:'Schrijfrichting',langDirLtr:'Links naar rechts (LTR)',langDirRtl:'Rechts naar links (RTL)',langCode:'Taalcode',longDescr:'Lange URL-omschrijving',cssClass:'Stylesheet-klassen',advisoryTitle:'Aanbevolen titel',cssStyle:'Stijl',ok:'OK',cancel:'Annuleren',generalTab:'Algemeen',advancedTab:'Geavanceerd',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Speciaal teken invoegen',title:'Selecteer speciaal teken'},link:{toolbar:'Link invoegen/wijzigen',menu:'Link wijzigen',title:'Link',info:'Linkomschrijving',target:'Doel',upload:'Upload',advanced:'Geavanceerd',type:'Linktype',toAnchor:'Interne link in pagina',toEmail:'E-mail',target:'Doel',targetNotSet:'<niet ingevuld>',targetFrame:'<frame>',targetPopup:'<popup window>',targetNew:'Nieuw venster (_blank)',targetTop:'Hele venster (_top)',targetSelf:'Zelfde venster (_self)',targetParent:'Origineel venster (_parent)',targetFrameName:'Naam doelframe',targetPopupName:'Naam popupvenster',popupFeatures:'Instellingen popupvenster',popupResizable:'Resizable',popupStatusBar:'Statusbalk',popupLocationBar:'Locatiemenu',popupToolbar:'Menubalk',popupMenuBar:'Menubalk',popupFullScreen:'Volledig scherm (IE)',popupScrollBars:'Schuifbalken',popupDependent:'Afhankelijk (Netscape)',popupWidth:'Breedte',popupLeft:'Positie links',popupHeight:'Hoogte',popupTop:'Positie boven',id:'Id',langDir:'Schrijfrichting',langDirNotSet:'<niet ingevuld>',langDirLTR:'Links naar rechts (LTR)',langDirRTL:'Rechts naar links (RTL)',acccessKey:'Toegangstoets',name:'Naam',langCode:'Schrijfrichting',tabIndex:'Tabvolgorde',advisoryTitle:'Aanbevolen titel',advisoryContentType:'Aanbevolen content-type',cssClasses:'Stylesheet-klassen',charset:'Karakterset van gelinkte bron',styles:'Stijl',selectAnchor:'Kies een interne link',anchorName:'Op naam interne link',anchorId:'Op kenmerk interne link',emailAddress:'E-mailadres',emailSubject:'Onderwerp bericht',emailBody:'Inhoud bericht',noAnchors:'(Geen interne links in document gevonden)',noUrl:'Geef de link van de URL',noEmail:'Geef een e-mailadres'},anchor:{toolbar:'Interne link',menu:'Eigenschappen interne link',title:'Eigenschappen interne link',name:'Naam interne link',errorName:'Geef de naam van de interne link op'},findAndReplace:{title:'Zoeken en vervangen',find:'Zoeken',replace:'Vervangen',findWhat:'Zoeken naar:',replaceWith:'Vervangen met:',notFoundMsg:'De opgegeven tekst is niet gevonden.',matchCase:'Hoofdlettergevoelig',matchWord:'Hele woord moet voorkomen',matchCyclic:'Match cyclic',replaceAll:'Alles vervangen',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabel',title:'Eigenschappen tabel',menu:'Eigenschappen tabel',deleteTable:'Tabel verwijderen',rows:'Rijen',columns:'Kolommen',border:'Breedte rand',align:'Uitlijning',alignNotSet:'<Niet ingevoerd>',alignLeft:'Links',alignCenter:'Centreren',alignRight:'Rechts',width:'Breedte',widthPx:'pixels',widthPc:'procent',height:'Hoogte',cellSpace:'Afstand tussen cellen',cellPad:'Afstand vanaf rand cel',caption:'Naam',summary:'Samenvatting',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cel',insertBefore:'Voeg cel in voor',insertAfter:'Voeg cel in achter',deleteCell:'Cellen verwijderen',merge:'Cellen samenvoegen',mergeRight:'Voeg samen naar rechts',mergeDown:'Voeg samen naar beneden',splitHorizontal:'Splits cellen horizontaal',splitVertical:'Splits cellen verticaal',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Rij',insertBefore:'Voeg rij in voor',insertAfter:'Voeg rij in achter',deleteRow:'Rijen verwijderen'},column:{menu:'Kolom',insertBefore:'Voeg kolom in voor',insertAfter:'Voeg kolom in achter',deleteColumn:'Kolommen verwijderen'}},button:{title:'Eigenschappen knop',text:'Tekst (waarde)',type:'Soort',typeBtn:'Knop',typeSbm:'Versturen',typeRst:'Leegmaken'},checkboxAndRadio:{checkboxTitle:'Eigenschappen aanvinkvakje',radioTitle:'Eigenschappen selectievakje',value:'Waarde',selected:'Geselecteerd'},form:{title:'Eigenschappen formulier',menu:'Eigenschappen formulier',action:'Actie',method:'Methode',encoding:'Encoding',target:'Doel',targetNotSet:'<niet ingevuld>',targetNew:'Nieuw venster (_blank)',targetTop:'Hele venster (_top)',targetSelf:'Zelfde venster (_self)',targetParent:'Origineel venster (_parent)'},select:{title:'Eigenschappen selectieveld',selectInfo:'Informatie',opAvail:'Beschikbare opties',value:'Waarde',size:'Grootte',lines:'Regels',chkMulti:'Gecombineerde selecties toestaan',opText:'Tekst',opValue:'Waarde',btnAdd:'Toevoegen',btnModify:'Wijzigen',btnUp:'Omhoog',btnDown:'Omlaag',btnSetValue:'Als geselecteerde waarde instellen',btnDelete:'Verwijderen'},textarea:{title:'Eigenschappen tekstvak',cols:'Kolommen',rows:'Rijen'},textfield:{title:'Eigenschappen tekstveld',name:'Naam',value:'Waarde',charWidth:'Breedte (tekens)',maxChars:'Maximum aantal tekens',type:'Soort',typeText:'Tekst',typePass:'Wachtwoord'},hidden:{title:'Eigenschappen verborgen veld',name:'Naam',value:'Waarde'},image:{title:'Eigenschappen afbeelding',titleButton:'Eigenschappen afbeeldingsknop',menu:'Eigenschappen afbeelding',infoTab:'Informatie afbeelding',btnUpload:'Naar server verzenden',url:'URL',upload:'Upload',alt:'Alternatieve tekst',width:'Breedte',height:'Hoogte',lockRatio:'Afmetingen vergrendelen',resetSize:'Afmetingen resetten',border:'Rand',hSpace:'HSpace',vSpace:'VSpace',align:'Uitlijning',alignLeft:'Links',alignAbsBottom:'Absoluut-onder',alignAbsMiddle:'Absoluut-midden',alignBaseline:'Basislijn',alignBottom:'Beneden',alignMiddle:'Midden',alignRight:'Rechts',alignTextTop:'Boven tekst',alignTop:'Boven',preview:'Voorbeeld',alertUrl:'Geef de URL van de afbeelding',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Eigenschappen Flash',propertiesTab:'Properties',title:'Eigenschappen Flash',chkPlay:'Automatisch afspelen',chkLoop:'Herhalen',chkMenu:"Flashmenu's inschakelen",chkFull:'Allow Fullscreen',scale:'Schaal',scaleAll:'Alles tonen',scaleNoBorder:'Geen rand',scaleFit:'Precies passend',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Uitlijning',alignLeft:'Links',alignAbsBottom:'Absoluut-onder',alignAbsMiddle:'Absoluut-midden',alignBaseline:'Basislijn',alignBottom:'Beneden',alignMiddle:'Midden',alignRight:'Rechts',alignTextTop:'Boven tekst',alignTop:'Boven',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Achtergrondkleur',width:'Breedte',height:'Hoogte',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Geef de link van de URL',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Spellingscontrole',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Niet in het woordenboek',changeTo:'Wijzig in',btnIgnore:'Negeren',btnIgnoreAll:'Alles negeren',btnReplace:'Vervangen',btnReplaceAll:'Alles vervangen',btnUndo:'Ongedaan maken',noSuggestions:'-Geen suggesties-',progress:'Bezig met spellingscontrole...',noMispell:'Klaar met spellingscontrole: geen fouten gevonden',noChanges:'Klaar met spellingscontrole: geen woorden aangepast',oneChange:'Klaar met spellingscontrole: één woord aangepast',manyChanges:'Klaar met spellingscontrole: %1 woorden aangepast',ieSpellDownload:'De spellingscontrole niet geïnstalleerd. Wilt u deze nu downloaden?'},smiley:{toolbar:'Smiley',title:'Smiley invoegen'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Genummerde lijst',bulletedlist:'Opsomming',indent:'Inspringen vergroten',outdent:'Inspringen verkleinen',justify:{left:'Links uitlijnen',center:'Centreren',right:'Rechts uitlijnen',block:'Uitvullen'},blockquote:'Citaatblok',clipboard:{title:'Plakken',cutError:'De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl+X van het toetsenbord.',copyError:'De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl+C van het toetsenbord.',pasteMsg:'Plak de tekst in het volgende vak gebruik makend van uw toetsenbord (<strong>Ctrl+V</strong>) en klik op <strong>OK</strong>.',securityMsg:'Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.'},pastefromword:{toolbar:'Plakken als Word-gegevens',title:'Plakken als Word-gegevens',advice:'Plak de tekst in het volgende vak gebruik makend van uw toetsenbord (<strong>Ctrl+V</strong>) en klik op <strong>OK</strong>.',ignoreFontFace:'Negeer "Font Face"-definities',removeStyle:'Verwijder "Style"-definities'},pasteText:{button:'Plakken als platte tekst',title:'Plakken als platte tekst'},templates:{button:'Sjablonen',title:'Inhoud sjabonen',insertOption:'Vervang de huidige inhoud',selectPromptMsg:'Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):',emptyListMsg:'(Geen sjablonen gedefinieerd)'},showBlocks:'Toon blokken',stylesCombo:{label:'Stijl',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Opmaak',voiceLabel:'Format',panelTitle:'Opmaak',panelVoiceLabel:'Select a paragraph format',tag_p:'Normaal',tag_pre:'Met opmaak',tag_address:'Adres',tag_h1:'Kop 1',tag_h2:'Kop 2',tag_h3:'Kop 3',tag_h4:'Kop 4',tag_h5:'Kop 5',tag_h6:'Kop 6',tag_div:'Normaal (DIV)'},font:{label:'Lettertype',voiceLabel:'Font',panelTitle:'Lettertype',panelVoiceLabel:'Select a font'},fontSize:{label:'Grootte',voiceLabel:'Font Size',panelTitle:'Grootte',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Tekstkleur',bgColorTitle:'Achtergrondkleur',auto:'Automatisch',more:'Meer kleuren...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/no.js b/lang/no.js
new file mode 100644 (file)
index 0000000..98d3e88
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.no={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Kilde',newPage:'Ny Side',save:'Lagre',preview:'Forhåndsvis',cut:'Klipp ut',copy:'Kopier',paste:'Lim inn',print:'Skriv ut',underline:'Understrek',bold:'Fet',italic:'Kursiv',selectAll:'Merk alt',removeFormat:'Fjern format',strike:'Gjennomstrek',subscript:'Senket skrift',superscript:'Hevet skrift',horizontalrule:'Sett inn horisontal linje',pagebreak:'Sett inn sideskift',unlink:'Fjern lenke',undo:'Angre',redo:'Gjør om',common:{browseServer:'Bla igjennom server',url:'URL',protocol:'Protokoll',upload:'Last opp',uploadSubmit:'Send det til serveren',image:'Bilde',flash:'Flash',form:'Skjema',checkbox:'Avmerkingsboks',radio:'Alternativknapp',textField:'Tekstboks',textarea:'Tekstområde',hiddenField:'Skjult felt',button:'Knapp',select:'Rullegardinliste',imageButton:'Bildeknapp',notSet:'<ikke satt>',id:'Id',name:'Navn',langDir:'Språkretning',langDirLtr:'Venstre til høyre (VTH)',langDirRtl:'Høyre til venstre (HTV)',langCode:'Språkkode',longDescr:'Utvidet beskrivelse',cssClass:'Stilarkklasser',advisoryTitle:'Tittel',cssStyle:'Stil',ok:'OK',cancel:'Avbryt',generalTab:'Generelt',advancedTab:'Avansert',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Sett inn spesielt tegn',title:'Velg spesielt tegn'},link:{toolbar:'Sett inn/Rediger lenke',menu:'Rediger lenke',title:'Lenke',info:'Lenkeinfo',target:'Mål',upload:'Last opp',advanced:'Avansert',type:'Lenketype',toAnchor:'Lenke til anker i teksten',toEmail:'E-post',target:'Mål',targetNotSet:'<ikke satt>',targetFrame:'<ramme>',targetPopup:'<popup vindu>',targetNew:'Nytt vindu (_blank)',targetTop:'Hele vindu (_top)',targetSelf:'Samme vindu (_self)',targetParent:'Foreldrevindu (_parent)',targetFrameName:'Målramme',targetPopupName:'Navn på popup-vindus',popupFeatures:'Egenskaper for popup-vindu',popupResizable:'Resizable',popupStatusBar:'Statuslinje',popupLocationBar:'Adresselinje',popupToolbar:'Verktøylinje',popupMenuBar:'Menylinje',popupFullScreen:'Full skjerm (IE)',popupScrollBars:'Scrollbar',popupDependent:'Avhenging (Netscape)',popupWidth:'Bredde',popupLeft:'Venstre posisjon',popupHeight:'Høyde',popupTop:'Topp-posisjon',id:'Id',langDir:'Språkretning',langDirNotSet:'<ikke satt>',langDirLTR:'Venstre til høyre (VTH)',langDirRTL:'Høyre til venstre (HTV)',acccessKey:'Aksessknapp',name:'Navn',langCode:'Språkretning',tabIndex:'Tab Indeks',advisoryTitle:'Tittel',advisoryContentType:'Type',cssClasses:'Stilarkklasser',charset:'Lenket språkkart',styles:'Stil',selectAnchor:'Velg et anker',anchorName:'Anker etter navn',anchorId:'Element etter ID',emailAddress:'E-postadresse',emailSubject:'Meldingsemne',emailBody:'Melding',noAnchors:'(Ingen anker i dokumentet)',noUrl:'Vennligst skriv inn lenkens url',noEmail:'Vennligst skriv inn e-postadressen'},anchor:{toolbar:'Sett inn/Rediger anker',menu:'Egenskaper for anker',title:'Egenskaper for anker',name:'Ankernavn',errorName:'Vennligst skriv inn ankernavnet'},findAndReplace:{title:'Søk og erstatt',find:'Søk',replace:'Erstatt',findWhat:'Søk etter:',replaceWith:'Erstatt med:',notFoundMsg:'Fant ikke søketeksten.',matchCase:'Skill mellom store og små bokstaver',matchWord:'Bare hele ord',matchCyclic:'Match cyclic',replaceAll:'Erstatt alle',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabell',title:'Egenskaper for tabell',menu:'Egenskaper for tabell',deleteTable:'Slett tabell',rows:'Rader',columns:'Kolonner',border:'Rammestørrelse',align:'Justering',alignNotSet:'<Ikke satt>',alignLeft:'Venstre',alignCenter:'Midtjuster',alignRight:'Høyre',width:'Bredde',widthPx:'piksler',widthPc:'prosent',height:'Høyde',cellSpace:'Cellemarg',cellPad:'Cellepolstring',caption:'Tittel',summary:'Sammendrag',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Celle',insertBefore:'Sett inn celle før',insertAfter:'Sett inn celle etter',deleteCell:'Slett celler',merge:'Slå sammen celler',mergeRight:'Slå sammen høyre',mergeDown:'Slå sammen ned',splitHorizontal:'Del celle horisontalt',splitVertical:'Del celle vertikalt',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Rader',insertBefore:'Sett inn rad før',insertAfter:'Sett inn rad etter',deleteRow:'Slett rader'},column:{menu:'Kolonne',insertBefore:'Sett inn kolonne før',insertAfter:'Sett inn kolonne etter',deleteColumn:'Slett kolonner'}},button:{title:'Egenskaper for knapp',text:'Tekst (verdi)',type:'Type',typeBtn:'Knapp',typeSbm:'Send',typeRst:'Nullstill'},checkboxAndRadio:{checkboxTitle:'Egenskaper for avmerkingsboks',radioTitle:'Egenskaper for alternativknapp',value:'Verdi',selected:'Valgt'},form:{title:'Egenskaper for skjema',menu:'Egenskaper for skjema',action:'Handling',method:'Metode',encoding:'Encoding',target:'Mål',targetNotSet:'<ikke satt>',targetNew:'Nytt vindu (_blank)',targetTop:'Hele vindu (_top)',targetSelf:'Samme vindu (_self)',targetParent:'Foreldrevindu (_parent)'},select:{title:'Egenskaper for rullegardinliste',selectInfo:'Info',opAvail:'Tilgjenglige alternativer',value:'Verdi',size:'Størrelse',lines:'Linjer',chkMulti:'Tillat flervalg',opText:'Tekst',opValue:'Verdi',btnAdd:'Legg til',btnModify:'Endre',btnUp:'Opp',btnDown:'Ned',btnSetValue:'Sett som valgt',btnDelete:'Slett'},textarea:{title:'Egenskaper for tekstområde',cols:'Kolonner',rows:'Rader'},textfield:{title:'Egenskaper for tekstfelt',name:'Navn',value:'Verdi',charWidth:'Tegnbredde',maxChars:'Maks antall tegn',type:'Type',typeText:'Tekst',typePass:'Passord'},hidden:{title:'Egenskaper for skjult felt',name:'Navn',value:'Verdi'},image:{title:'Bildeegenskaper',titleButton:'Egenskaper for bildeknapp',menu:'Bildeegenskaper',infoTab:'Bildeinformasjon',btnUpload:'Send det til serveren',url:'URL',upload:'Last opp',alt:'Alternativ tekst',width:'Bredde',height:'Høyde',lockRatio:'Lås forhold',resetSize:'Tilbakestill størrelse',border:'Ramme',hSpace:'HMarg',vSpace:'VMarg',align:'Juster',alignLeft:'Venstre',alignAbsBottom:'Abs bunn',alignAbsMiddle:'Abs midten',alignBaseline:'Bunnlinje',alignBottom:'Bunn',alignMiddle:'Midten',alignRight:'Høyre',alignTextTop:'Tekst topp',alignTop:'Topp',preview:'Forhåndsvis',alertUrl:'Vennligst skriv bilde-urlen',linkTab:'Lenke',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Egenskaper for Flash-objekt',propertiesTab:'Properties',title:'Flash-egenskaper',chkPlay:'Autospill',chkLoop:'Loop',chkMenu:'Slå på Flash-meny',chkFull:'Allow Fullscreen',scale:'Skaler',scaleAll:'Vis alt',scaleNoBorder:'Ingen ramme',scaleFit:'Skaler til å passe',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Juster',alignLeft:'Venstre',alignAbsBottom:'Abs bunn',alignAbsMiddle:'Abs midten',alignBaseline:'Bunnlinje',alignBottom:'Bunn',alignMiddle:'Midten',alignRight:'Høyre',alignTextTop:'Tekst topp',alignTop:'Topp',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Bakgrunnsfarge',width:'Bredde',height:'Høyde',hSpace:'HMarg',vSpace:'VMarg',validateSrc:'Vennligst skriv inn lenkens url',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Stavekontroll',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ikke i ordboken',changeTo:'Endre til',btnIgnore:'Ignorer',btnIgnoreAll:'Ignorer alle',btnReplace:'Erstatt',btnReplaceAll:'Erstatt alle',btnUndo:'Angre',noSuggestions:'- Ingen forslag -',progress:'Stavekontroll pågår...',noMispell:'Stavekontroll fullført: ingen feilstavinger funnet',noChanges:'Stavekontroll fullført: ingen ord endret',oneChange:'Stavekontroll fullført: Ett ord endret',manyChanges:'Stavekontroll fullført: %1 ord endret',ieSpellDownload:'Stavekontroll er ikke installert. Vil du laste den ned nå?'},smiley:{toolbar:'Smil',title:'Sett inn smil'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Nummerert liste',bulletedlist:'Uordnet liste',indent:'Øk nivå',outdent:'Senk nivå',justify:{left:'Venstrejuster',center:'Midtjuster',right:'Høyrejuster',block:'Blokkjuster'},blockquote:'Blockquote',clipboard:{title:'Lim inn',cutError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl+X).',copyError:'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl+C).',pasteMsg:'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',securityMsg:'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må lime det igjen i dette vinduet.'},pastefromword:{toolbar:'Lim inn fra Word',title:'Lim inn fra Word',advice:'Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.',ignoreFontFace:'Fjern skrifttyper',removeStyle:'Fjern stildefinisjoner'},pasteText:{button:'Lim inn som ren tekst',title:'Lim inn som ren tekst'},templates:{button:'Maler',title:'Innholdsmaler',insertOption:'Erstatt faktisk innold',selectPromptMsg:'Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):',emptyListMsg:'(Ingen maler definert)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stil',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Format',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatert',tag_address:'Adresse',tag_h1:'Tittel 1',tag_h2:'Tittel 2',tag_h3:'Tittel 3',tag_h4:'Tittel 4',tag_h5:'Tittel 5',tag_h6:'Tittel 6',tag_div:'Normal (DIV)'},font:{label:'Skrift',voiceLabel:'Font',panelTitle:'Skrift',panelVoiceLabel:'Select a font'},fontSize:{label:'Størrelse',voiceLabel:'Font Size',panelTitle:'Størrelse',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Tekstfarge',bgColorTitle:'Bakgrunnsfarge',auto:'Automatisk',more:'Flere farger...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/pl.js b/lang/pl.js
new file mode 100644 (file)
index 0000000..26ccbb2
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.pl={dir:'ltr',editorTitle:'Wzbogacony edytor treści, %1',source:'Źródło dokumentu',newPage:'Nowa strona',save:'Zapisz',preview:'Podgląd',cut:'Wytnij',copy:'Kopiuj',paste:'Wklej',print:'Drukuj',underline:'Podkreślenie',bold:'Pogrubienie',italic:'Kursywa',selectAll:'Zaznacz wszystko',removeFormat:'Usuń formatowanie',strike:'Przekreślenie',subscript:'Indeks dolny',superscript:'Indeks górny',horizontalrule:'Wstaw poziomą linię',pagebreak:'Wstaw odstęp',unlink:'Usuń hiperłącze',undo:'Cofnij',redo:'Ponów',common:{browseServer:'Przeglądaj',url:'Adres URL',protocol:'Protokół',upload:'Wyślij',uploadSubmit:'Wyślij',image:'Obrazek',flash:'Flash',form:'Formularz',checkbox:'Pole wyboru (checkbox)',radio:'Pole wyboru (radio)',textField:'Pole tekstowe',textarea:'Obszar tekstowy',hiddenField:'Pole ukryte',button:'Przycisk',select:'Lista wyboru',imageButton:'Przycisk-obrazek',notSet:'<nie ustawione>',id:'Id',name:'Nazwa',langDir:'Kierunek tekstu',langDirLtr:'Od lewej do prawej (LTR)',langDirRtl:'Od prawej do lewej (RTL)',langCode:'Kod języka',longDescr:'Długi opis hiperłącza',cssClass:'Nazwa klasy CSS',advisoryTitle:'Opis obiektu docelowego',cssStyle:'Styl',ok:'OK',cancel:'Anuluj',generalTab:'Ogólne',advancedTab:'Zaawansowane',validateNumberFailed:'Ta wartość nie jest liczbą.',confirmNewPage:'Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno wczytać nową stronę ?',confirmCancel:'Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe ?',unavailable:'%1<span class="cke_accessibility">, niedostępne</span>'},specialChar:{toolbar:'Wstaw znak specjalny',title:'Wybierz znak specjalny'},link:{toolbar:'Wstaw/edytuj hiperłącze',menu:'Edytuj hiperłącze',title:'Hiperłącze',info:'Informacje ',target:'Cel',upload:'Wyślij',advanced:'Zaawansowane',type:'Typ hiperłącza',toAnchor:'Odnośnik wewnątrz strony',toEmail:'Adres e-mail',target:'Cel',targetNotSet:'<nie ustawione>',targetFrame:'<ramka>',targetPopup:'<wyskakujące okno>',targetNew:'Nowe okno (_blank)',targetTop:'Okno najwyższe w hierarchii (_top)',targetSelf:'To samo okno (_self)',targetParent:'Okno nadrzędne (_parent)',targetFrameName:'Nazwa Ramki Docelowej',targetPopupName:'Nazwa wyskakującego okna',popupFeatures:'Właściwości wyskakującego okna',popupResizable:'Skalowalny',popupStatusBar:'Pasek statusu',popupLocationBar:'Pasek adresu',popupToolbar:'Pasek narzędzi',popupMenuBar:'Pasek menu',popupFullScreen:'Pełny ekran (IE)',popupScrollBars:'Paski przewijania',popupDependent:'Okno zależne (Netscape)',popupWidth:'Szerokość',popupLeft:'Pozycja w poziomie',popupHeight:'Wysokość',popupTop:'Pozycja w pionie',id:'Id',langDir:'Kierunek tekstu',langDirNotSet:'<nie ustawione>',langDirLTR:'Od lewej do prawej (LTR)',langDirRTL:'Od prawej do lewej (RTL)',acccessKey:'Klawisz dostępu',name:'Nazwa',langCode:'Kierunek tekstu',tabIndex:'Indeks tabeli',advisoryTitle:'Opis obiektu docelowego',advisoryContentType:'Typ MIME obiektu docelowego',cssClasses:'Nazwa klasy CSS',charset:'Kodowanie znaków obiektu docelowego',styles:'Styl',selectAnchor:'Wybierz etykietę',anchorName:'Wg etykiety',anchorId:'Wg identyfikatora elementu',emailAddress:'Adres e-mail',emailSubject:'Temat',emailBody:'Treść',noAnchors:'(W dokumencie nie zdefiniowano żadnych etykiet)',noUrl:'Podaj adres URL',noEmail:'Podaj adres e-mail'},anchor:{toolbar:'Wstaw/edytuj kotwicę',menu:'Właściwości kotwicy',title:'Właściwości kotwicy',name:'Nazwa kotwicy',errorName:'Wpisz nazwę kotwicy'},findAndReplace:{title:'Znajdź i zamień',find:'Znajdź',replace:'Zamień',findWhat:'Znajdź:',replaceWith:'Zastąp przez:',notFoundMsg:'Nie znaleziono szukanego hasła.',matchCase:'Uwzględnij wielkość liter',matchWord:'Całe słowa',matchCyclic:'Cykliczne dopasowanie',replaceAll:'Zastąp wszystko',replaceSuccessMsg:'%1 wystąpień zastąpionych.'},table:{toolbar:'Tabela',title:'Właściwości tabeli',menu:'Właściwości tabeli',deleteTable:'Usuń tabelę',rows:'Liczba wierszy',columns:'Liczba kolumn',border:'Grubość ramki',align:'Wyrównanie',alignNotSet:'<brak ustawień>',alignLeft:'Do lewej',alignCenter:'Do środka',alignRight:'Do prawej',width:'Szerokość',widthPx:'piksele',widthPc:'%',height:'Wysokość',cellSpace:'Odstęp pomiędzy komórkami',cellPad:'Margines wewnętrzny komórek',caption:'Tytuł',summary:'Podsumowanie',headers:'Nagłowki',headersNone:'Brak',headersColumn:'Pierwsza kolumna',headersRow:'Pierwszy wiersz',headersBoth:'Oba',invalidRows:'Liczba wierszy musi być liczbą większą niż 0.',invalidCols:'Liczba kolumn musi być liczbą większą niż 0.',invalidBorder:'Liczba obramowań musi być liczbą.',invalidWidth:'Szerokość tabeli musi być liczbą.',invalidHeight:'Wysokość tabeli musi być liczbą.',invalidCellSpacing:'Odstęp komórek musi być liczbą.',invalidCellPadding:'Dopełnienie komórek musi być liczbą.',cell:{menu:'Komórka',insertBefore:'Wstaw komórkę z lewej',insertAfter:'Wstaw komórkę z prawej',deleteCell:'Usuń komórki',merge:'Połącz komórki',mergeRight:'Połącz z komórką z prawej',mergeDown:'Połącz z komórką poniżej',splitHorizontal:'Podziel komórkę poziomo',splitVertical:'Podziel komórkę pionowo',title:'Właściwości komórki',cellType:'Typ komórki',rowSpan:'Scalenie wierszy',colSpan:'Scalenie komórek',wordWrap:'Zawijanie słów',hAlign:'Wyrównanie poziome',vAlign:'Wyrównanie pionowe',alignTop:'Góra',alignMiddle:'Środek',alignBottom:'Dół',alignBaseline:'Linia bazowa',bgColor:'Kolor tła',borderColor:'Kolor obramowania',data:'Dane',header:'Nagłowek',yes:'Tak',no:'Nie',invalidWidth:'Szerokość komórki musi być liczbą.',invalidHeight:'Wysokość komórki musi być liczbą.',invalidRowSpan:'Scalenie wierszy musi być liczbą całkowitą.',invalidColSpan:'Scalenie komórek musi być liczbą całkowitą.'},row:{menu:'Wiersz',insertBefore:'Wstaw wiersz powyżej',insertAfter:'Wstaw wiersz poniżej',deleteRow:'Usuń wiersze'},column:{menu:'Kolumna',insertBefore:'Wstaw kolumnę z lewej',insertAfter:'Wstaw kolumnę z prawej',deleteColumn:'Usuń kolumny'}},button:{title:'Właściwości przycisku',text:'Tekst (Wartość)',type:'Typ',typeBtn:'Przycisk',typeSbm:'Wyślij',typeRst:'Wyzeruj'},checkboxAndRadio:{checkboxTitle:'Właściwości pola wyboru (checkbox)',radioTitle:'Właściwości pola wyboru (radio)',value:'Wartość',selected:'Zaznaczone'},form:{title:'Właściwości formularza',menu:'Właściwości formularza',action:'Akcja',method:'Metoda',encoding:'Kodowanie',target:'Cel',targetNotSet:'<nie ustawione>',targetNew:'Nowe okno (_blank)',targetTop:'Okno najwyższe w hierarchii (_top)',targetSelf:'To samo okno (_self)',targetParent:'Okno nadrzędne (_parent)'},select:{title:'Właściwości listy wyboru',selectInfo:'Informacje',opAvail:'Dostępne opcje',value:'Wartość',size:'Rozmiar',lines:'linii',chkMulti:'Wielokrotny wybór',opText:'Tekst',opValue:'Wartość',btnAdd:'Dodaj',btnModify:'Zmień',btnUp:'Do góry',btnDown:'Do dołu',btnSetValue:'Ustaw wartość zaznaczoną',btnDelete:'Usuń'},textarea:{title:'Właściwości obszaru tekstowego',cols:'Kolumnu',rows:'Wiersze'},textfield:{title:'Właściwości pola tekstowego',name:'Nazwa',value:'Wartość',charWidth:'Szerokość w znakach',maxChars:'Max. szerokość',type:'Typ',typeText:'Tekst',typePass:'Hasło'},hidden:{title:'Właściwości pola ukrytego',name:'Nazwa',value:'Wartość'},image:{title:'Właściwości obrazka',titleButton:'Właściwości przycisku obrazka',menu:'Właściwości obrazka',infoTab:'Informacje o obrazku',btnUpload:'Wyślij',url:'Adres URL',upload:'Wyślij',alt:'Tekst zastępczy',width:'Szerokość',height:'Wysokość',lockRatio:'Zablokuj proporcje',resetSize:'Przywróć rozmiar',border:'Ramka',hSpace:'Odstęp poziomy',vSpace:'Odstęp pionowy',align:'Wyrównaj',alignLeft:'Do lewej',alignAbsBottom:'Do dołu',alignAbsMiddle:'Do środka w pionie',alignBaseline:'Do linii bazowej',alignBottom:'Do dołu',alignMiddle:'Do środka',alignRight:'Do prawej',alignTextTop:'Do góry tekstu',alignTop:'Do góry',preview:'Podgląd',alertUrl:'Podaj adres obrazka.',linkTab:'Hiperłącze',button2Img:'Czy chcesz przekonwertować zaznaczony przycisk graficzny do zwykłego obrazka?',img2Button:'Czy chcesz przekonwertować zaznaczony obrazek do przycisku graficznego?'},flash:{properties:'Właściwości elementu Flash',propertiesTab:'Właściwości',title:'Właściwości elementu Flash',chkPlay:'Auto Odtwarzanie',chkLoop:'Pętla',chkMenu:'Włącz menu',chkFull:'Dopuść pełny ekran',scale:'Skaluj',scaleAll:'Pokaż wszystko',scaleNoBorder:'Bez Ramki',scaleFit:'Dokładne dopasowanie',access:'Dostęp skryptów',accessAlways:'Zawsze',accessSameDomain:'Ta sama domena',accessNever:'Nigdy',align:'Wyrównaj',alignLeft:'Do lewej',alignAbsBottom:'Do dołu',alignAbsMiddle:'Do środka w pionie',alignBaseline:'Do linii bazowej',alignBottom:'Do dołu',alignMiddle:'Do środka',alignRight:'Do prawej',alignTextTop:'Do góry tekstu',alignTop:'Do góry',quality:'Jakość',qualityBest:'Najlepsza',qualityHigh:'Wysoka',qualityAutoHigh:'Auto wysoka',qualityMedium:'Średnia',qualityAutoLow:'Auto niska',qualityLow:'Niska',windowModeWindow:'Okno',windowModeOpaque:'Nieprzeźroczyste',windowModeTransparent:'Przeźroczyste',windowMode:'Tryb okna',flashvars:"Zmienne dla Flash'a",bgcolor:'Kolor tła',width:'Szerokość',height:'Wysokość',hSpace:'Odstęp poziomy',vSpace:'Odstęp pionowy',validateSrc:'Podaj adres URL',validateWidth:'Szerokość musi być liczbą.',validateHeight:'Wysokość musi być liczbą.',validateHSpace:'Odstęp poziomy musi być liczbą.',validateVSpace:'Odstęp pionowy musi być liczbą.'},spellCheck:{toolbar:'Sprawdź pisownię',title:'Sprawdź pisownię',notAvailable:'Przepraszamy, ale usługa jest obecnie niedostępna.',errorLoading:'Błąd wczytywania hosta aplikacji usługi: %s.',notInDic:'Słowa nie ma w słowniku',changeTo:'Zmień na',btnIgnore:'Ignoruj',btnIgnoreAll:'Ignoruj wszystkie',btnReplace:'Zmień',btnReplaceAll:'Zmień wszystkie',btnUndo:'Cofnij',noSuggestions:'- Brak sugestii -',progress:'Trwa sprawdzanie ...',noMispell:'Sprawdzanie zakończone: nie znaleziono błędów',noChanges:'Sprawdzanie zakończone: nie zmieniono żadnego słowa',oneChange:'Sprawdzanie zakończone: zmieniono jedno słowo',manyChanges:'Sprawdzanie zakończone: zmieniono %l słów',ieSpellDownload:'Słownik nie jest zainstalowany. Chcesz go ściągnąć?'},smiley:{toolbar:'Emotikona',title:'Wstaw emotikonę'},elementsPath:{eleTitle:'element %1'},numberedlist:'Lista numerowana',bulletedlist:'Lista wypunktowana',indent:'Zwiększ wcięcie',outdent:'Zmniejsz wcięcie',justify:{left:'Wyrównaj do lewej',center:'Wyrównaj do środka',right:'Wyrównaj do prawej',block:'Wyrównaj do lewej i prawej'},blockquote:'Cytat',clipboard:{title:'Wklej',cutError:'Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl+X.',copyError:'Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl+C.',pasteMsg:'Proszę wkleić w poniższym polu używając klawiaturowego skrótu (<STRONG>Ctrl+V</STRONG>) i kliknąć <STRONG>OK</STRONG>.',securityMsg:'Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę dane wkleić ponownie w tym okienku.'},pastefromword:{toolbar:'Wklej z Worda',title:'Wklej z Worda',advice:'Proszę wkleić w poniższym polu używając klawiaturowego skrótu (<STRONG>Ctrl+V</STRONG>) i kliknąć <STRONG>OK</STRONG>.',ignoreFontFace:"Ignoruj definicje 'Font Face'",removeStyle:'Usuń definicje Stylów'},pasteText:{button:'Wklej jako czysty tekst',title:'Wklej jako czysty tekst'},templates:{button:'Sablony',title:'Szablony zawartości',insertOption:'Zastąp aktualną zawartość',selectPromptMsg:'Wybierz szablon do otwarcia w edytorze<br>(obecna zawartość okna edytora zostanie utracona):',emptyListMsg:'(Brak zdefiniowanych szablonów)'},showBlocks:'Pokaż bloki',stylesCombo:{label:'Styl',voiceLabel:'Style',panelVoiceLabel:'Wybierz styl',panelTitle1:'Style blokowe',panelTitle2:'Style liniowe',panelTitle3:'Style obiektowe'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Format',panelVoiceLabel:'Wybierz paragraf do sformatowania',tag_p:'Normalny',tag_pre:'Tekst sformatowany',tag_address:'Adres',tag_h1:'Nagłówek 1',tag_h2:'Nagłówek 2',tag_h3:'Nagłówek 3',tag_h4:'Nagłówek 4',tag_h5:'Nagłówek 5',tag_h6:'Nagłówek 6',tag_div:'Normalny (DIV)'},font:{label:'Czcionka',voiceLabel:'Czcionka',panelTitle:'Czcionka',panelVoiceLabel:'Select a font'},fontSize:{label:'Rozmiar',voiceLabel:'Rozmiar czcionki',panelTitle:'Rozmiar',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Kolor tekstu',bgColorTitle:'Kolor tła',auto:'Automatycznie',more:'Więcej kolorów...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Sprawdź pisowanie podczas pisania (SCAYT)',enable:'Włącz SCAYT',disable:'Wyłącz SCAYT',about:'Na temat SCAYT',toggle:'Toggle SCAYT',options:'Opcje',langs:'Języki',moreSuggestions:'Więcej sugestii',ignore:'Ignoruj',ignoreAll:'Ignoruj wszystkie',addWord:'Dodaj słowo',emptyDic:'Nazwa słownika nie może być pusta.',optionsTab:'Opcje',languagesTab:'Języki',dictionariesTab:'Słowniki',aboutTab:'Na temat SCAYT'},about:{title:'Na temat CKEditor',dlgTitle:'Na temat CKEditor',moreInfo:'Informacje na temat licencji można znaleźć na naszej stronie:',copy:'Copyright &copy; $1. Wszelkie prawa zastrzeżone.'},maximize:'Maksymalizuj',fakeobjects:{anchor:'Kotwica',flash:'Animacja Flash',div:'Separator stron',unknown:'Nieznany obiekt'},resize:'Przeciągnij, aby zmienić rozmiar'};\r
diff --git a/lang/pt-br.js b/lang/pt-br.js
new file mode 100644 (file)
index 0000000..8285d67
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang['pt-br']={dir:'ltr',editorTitle:'Editor de texto formatado, %1',source:'Código-Fonte',newPage:'Novo',save:'Salvar',preview:'Visualizar',cut:'Recortar',copy:'Copiar',paste:'Colar',print:'Imprimir',underline:'Sublinhado',bold:'Negrito',italic:'Itálico',selectAll:'Selecionar Tudo',removeFormat:'Remover Formatação',strike:'Tachado',subscript:'Subscrito',superscript:'Sobrescrito',horizontalrule:'Inserir Linha Horizontal',pagebreak:'Inserir Quebra de Página',unlink:'Remover Hiperlink',undo:'Desfazer',redo:'Refazer',common:{browseServer:'Localizar no Servidor',url:'URL',protocol:'Protocolo',upload:'Enviar ao Servidor',uploadSubmit:'Enviar para o Servidor',image:'Figura',flash:'Flash',form:'Formulário',checkbox:'Caixa de Seleção',radio:'Botão de Opção',textField:'Caixa de Texto',textarea:'Área de Texto',hiddenField:'Campo Oculto',button:'Botão',select:'Caixa de Listagem',imageButton:'Botão de Imagem',notSet:'<não ajustado>',id:'Id',name:'Nome',langDir:'Direção do idioma',langDirLtr:'Esquerda para Direita (LTR)',langDirRtl:'Direita para Esquerda (RTL)',langCode:'Idioma',longDescr:'Descrição da URL',cssClass:'Classe de Folhas de Estilo',advisoryTitle:'Título',cssStyle:'Estilos',ok:'OK',cancel:'Cancelar',generalTab:'Geral',advancedTab:'Avançado',validateNumberFailed:'Este valor não é um número.',confirmNewPage:'Todas as mudanças não salvas serão perdidas. Tem certeza de que quer carregar outra página?',confirmCancel:'Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?',unavailable:'%1<span class="cke_accessibility">, indisponível</span>'},specialChar:{toolbar:'Inserir Caractere Especial',title:'Selecione um Caractere Especial'},link:{toolbar:'Inserir/Editar Hiperlink',menu:'Editar Hiperlink',title:'Hiperlink',info:'Informações',target:'Destino',upload:'Enviar ao Servidor',advanced:'Avançado',type:'Tipo de hiperlink',toAnchor:'Âncora nesta página',toEmail:'E-Mail',target:'Destino',targetNotSet:'<não ajustado>',targetFrame:'<frame>',targetPopup:'<janela popup>',targetNew:'Nova Janela (_blank)',targetTop:'Janela Superior (_top)',targetSelf:'Mesma Janela (_self)',targetParent:'Janela Pai (_parent)',targetFrameName:'Nome do Frame de Destino',targetPopupName:'Nome da Janela Pop-up',popupFeatures:'Atributos da Janela Pop-up',popupResizable:'Redimensionável',popupStatusBar:'Barra de Status',popupLocationBar:'Barra de Endereços',popupToolbar:'Barra de Ferramentas',popupMenuBar:'Barra de Menus',popupFullScreen:'Modo Tela Cheia (IE)',popupScrollBars:'Barras de Rolagem',popupDependent:'Dependente (Netscape)',popupWidth:'Largura',popupLeft:'Esquerda',popupHeight:'Altura',popupTop:'Superior',id:'Id',langDir:'Direção do idioma',langDirNotSet:'<não ajustado>',langDirLTR:'Esquerda para Direita (LTR)',langDirRTL:'Direita para Esquerda (RTL)',acccessKey:'Chave de Acesso',name:'Nome',langCode:'Direção do idioma',tabIndex:'Índice de Tabulação',advisoryTitle:'Título',advisoryContentType:'Tipo de Conteúdo',cssClasses:'Classe de Folhas de Estilo',charset:'Conjunto de Caracteres do Hiperlink',styles:'Estilos',selectAnchor:'Selecione uma âncora',anchorName:'Pelo Nome da âncora',anchorId:'Pelo Id do Elemento',emailAddress:'Endereço E-Mail',emailSubject:'Assunto da Mensagem',emailBody:'Corpo da Mensagem',noAnchors:'(Não há âncoras disponíveis neste documento)',noUrl:'Por favor, digite o endereço do Hiperlink',noEmail:'Por favor, digite o endereço de e-mail'},anchor:{toolbar:'Inserir/Editar Âncora',menu:'Formatar Âncora',title:'Formatar Âncora',name:'Nome da Âncora',errorName:'Por favor, digite o nome da âncora'},findAndReplace:{title:'Localizar e Substituir',find:'Localizar',replace:'Substituir',findWhat:'Procurar por:',replaceWith:'Substituir por:',notFoundMsg:'O texto especificado não foi encontrado.',matchCase:'Coincidir Maiúsculas/Minúsculas',matchWord:'Coincidir a palavra inteira',matchCyclic:'Coincidir cíclico',replaceAll:'Substituir Tudo',replaceSuccessMsg:'%1 ocorrência(s) substituída(s).'},table:{toolbar:'Tabela',title:'Formatar Tabela',menu:'Formatar Tabela',deleteTable:'Apagar Tabela',rows:'Linhas',columns:'Colunas',border:'Borda',align:'Alinhamento',alignNotSet:'<Não ajustado>',alignLeft:'Esquerda',alignCenter:'Centralizado',alignRight:'Direita',width:'Largura',widthPx:'pixels',widthPc:'%',height:'Altura',cellSpace:'Espaçamento',cellPad:'Enchimento',caption:'Legenda',summary:'Resumo',headers:'Cabeçalho',headersNone:'Nenhum',headersColumn:'Primeira coluna',headersRow:'Primeira linha',headersBoth:'Ambos',invalidRows:'"Número de linhas" tem que ser um número maior que 0.',invalidCols:'"Número de colunas" tem que ser um número maior que 0.',invalidBorder:'"Tamanho da borda" tem que ser um número.',invalidWidth:'"Largura da tabela" tem que ser um número.',invalidHeight:'"Altura da tabela" tem que ser um número.',invalidCellSpacing:'"Espaçamento das células" tem que ser um número.',invalidCellPadding:'"Margem interna das células" tem que ser um número.',cell:{menu:'Célula',insertBefore:'Inserir célula à esquerda',insertAfter:'Inserir célula à direita',deleteCell:'Remover Células',merge:'Mesclar Células',mergeRight:'Mesclar com célula à direita',mergeDown:'Mesclar com célula abaixo',splitHorizontal:'Dividir célula horizontalmente',splitVertical:'Dividir célula verticalmente',title:'Propriedades da célula',cellType:'Tipo de célula',rowSpan:'Linhas cobertas',colSpan:'Colunas cobertas',wordWrap:'Quebra de palavra',hAlign:'Alinhamento horizontal',vAlign:'Alinhamento vertical',alignTop:'Alinhar no topo',alignMiddle:'Centralizado verticalmente',alignBottom:'Alinhar na base',alignBaseline:'Patamar de alinhamento',bgColor:'Cor de fundo',borderColor:'Cor das bordas',data:'Dados',header:'Cabeçalho',yes:'Sim',no:'Não',invalidWidth:'A largura da célula tem que ser um número.',invalidHeight:'A altura da célula tem que ser um número.',invalidRowSpan:'"Linhas cobertas" tem que ser um número inteiro.',invalidColSpan:'"Colunas cobertas" tem que ser um número inteiro.'},row:{menu:'Linha',insertBefore:'Inserir linha acima',insertAfter:'Inserir linha abaixo',deleteRow:'Remover Linhas'},column:{menu:'Coluna',insertBefore:'Inserir coluna à esquerda',insertAfter:'Inserir coluna à direita',deleteColumn:'Remover Colunas'}},button:{title:'Formatar Botão',text:'Texto (Valor)',type:'Tipo',typeBtn:'Botão',typeSbm:'Enviar',typeRst:'Limpar'},checkboxAndRadio:{checkboxTitle:'Formatar Caixa de Seleção',radioTitle:'Formatar Botão de Opção',value:'Valor',selected:'Selecionado'},form:{title:'Formatar Formulário',menu:'Formatar Formulário',action:'Action',method:'Método',encoding:'Codificação',target:'Destino',targetNotSet:'<não ajustado>',targetNew:'Nova Janela (_blank)',targetTop:'Janela Superior (_top)',targetSelf:'Mesma Janela (_self)',targetParent:'Janela Pai (_parent)'},select:{title:'Formatar Caixa de Listagem',selectInfo:'Info',opAvail:'Opções disponíveis',value:'Valor',size:'Tamanho',lines:'linhas',chkMulti:'Permitir múltiplas seleções',opText:'Texto',opValue:'Valor',btnAdd:'Adicionar',btnModify:'Modificar',btnUp:'Para cima',btnDown:'Para baixo',btnSetValue:'Definir como selecionado',btnDelete:'Remover'},textarea:{title:'Formatar Área de Texto',cols:'Colunas',rows:'Linhas'},textfield:{title:'Formatar Caixa de Texto',name:'Nome',value:'Valor',charWidth:'Comprimento (em caracteres)',maxChars:'Número Máximo de Caracteres',type:'Tipo',typeText:'Texto',typePass:'Senha'},hidden:{title:'Formatar Campo Oculto',name:'Nome',value:'Valor'},image:{title:'Formatar Figura',titleButton:'Formatar Botão de Imagem',menu:'Formatar Figura',infoTab:'Informações da Figura',btnUpload:'Enviar para o Servidor',url:'URL',upload:'Submeter',alt:'Texto Alternativo',width:'Largura',height:'Altura',lockRatio:'Manter proporções',resetSize:'Redefinir para o Tamanho Original',border:'Borda',hSpace:'Horizontal',vSpace:'Vertical',align:'Alinhamento',alignLeft:'Esquerda',alignAbsBottom:'Inferior Absoluto',alignAbsMiddle:'Centralizado Absoluto',alignBaseline:'Baseline',alignBottom:'Inferior',alignMiddle:'Centralizado',alignRight:'Direita',alignTextTop:'Superior Absoluto',alignTop:'Superior',preview:'Visualização',alertUrl:'Por favor, digite o URL da figura.',linkTab:'Hiperlink',button2Img:'Você deseja transformar o botão de imagem selecionado em uma imagem comum?',img2Button:'Você deseja transformar a imagem selecionada em um botão de imagem?'},flash:{properties:'Propriedades do Flash',propertiesTab:'Propriedades',title:'Propriedades do Flash',chkPlay:'Tocar Automaticamente',chkLoop:'Loop',chkMenu:'Habilita Menu Flash',chkFull:'Permitir tela cheia',scale:'Escala',scaleAll:'Mostrar tudo',scaleNoBorder:'Sem Borda',scaleFit:'Escala Exata',access:'Acesso ao script',accessAlways:'Sempre',accessSameDomain:'Mesmo domínio',accessNever:'Nunca',align:'Alinhamento',alignLeft:'Esquerda',alignAbsBottom:'Inferior Absoluto',alignAbsMiddle:'Centralizado Absoluto',alignBaseline:'Baseline',alignBottom:'Inferior',alignMiddle:'Centralizado',alignRight:'Direita',alignTextTop:'Superior Absoluto',alignTop:'Superior',quality:'Qualidade',qualityBest:'Melhor',qualityHigh:'Alta',qualityAutoHigh:'Alta automático',qualityMedium:'Média',qualityAutoLow:'Média automático',qualityLow:'Baixa',windowModeWindow:'Janela',windowModeOpaque:'Opaca',windowModeTransparent:'Transparente',windowMode:'Modo da janela',flashvars:'Variáveis do Flash',bgcolor:'Cor do Plano de Fundo',width:'Largura',height:'Altura',hSpace:'Horizontal',vSpace:'Vertical',validateSrc:'Por favor, digite o endereço do Hiperlink',validateWidth:'"Largura" tem que ser um número.',validateHeight:'"Altura" tem que ser um número',validateHSpace:'"HSpace" tem que ser um número',validateVSpace:'"VSpace" tem que ser um número.'},spellCheck:{toolbar:'Verificar Ortografia',title:'Corretor gramatical',notAvailable:'Desculpe, o serviço não está disponível no momento.',errorLoading:'Erro carregando servidor de aplicação: %s.',notInDic:'Não encontrada',changeTo:'Alterar para',btnIgnore:'Ignorar uma vez',btnIgnoreAll:'Ignorar Todas',btnReplace:'Alterar',btnReplaceAll:'Alterar Todas',btnUndo:'Desfazer',noSuggestions:'-sem sugestões de ortografia-',progress:'Verificação ortográfica em andamento...',noMispell:'Verificação encerrada: Não foram encontrados erros de ortografia',noChanges:'Verificação ortográfica encerrada: Não houve alterações',oneChange:'Verificação ortográfica encerrada: Uma palavra foi alterada',manyChanges:'Verificação ortográfica encerrada: %1 foram alteradas',ieSpellDownload:'A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?'},smiley:{toolbar:'Emoticon',title:'Inserir Emoticon'},elementsPath:{eleTitle:'Elemento %1'},numberedlist:'Numeração',bulletedlist:'Marcadores',indent:'Aumentar Recuo',outdent:'Diminuir Recuo',justify:{left:'Alinhar Esquerda',center:'Centralizar',right:'Alinhar Direita',block:'Justificado'},blockquote:'Recuo',clipboard:{title:'Colar',cutError:'As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl+X).',copyError:'As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl+C).',pasteMsg:'Transfira o link usado no box usando o teclado com (<STRONG>Ctrl+V</STRONG>) e <STRONG>OK</STRONG>.',securityMsg:'As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo novamente nesta janela.'},pastefromword:{toolbar:'Colar do Word',title:'Colar do Word',advice:'Transfira o link usado no box usando o teclado com (<STRONG>Ctrl+V</STRONG>) e <STRONG>OK</STRONG>.',ignoreFontFace:'Ignorar definições de fonte',removeStyle:'Remove definições de estilo'},pasteText:{button:'Colar como Texto sem Formatação',title:'Colar como Texto sem Formatação'},templates:{button:'Modelos de layout',title:'Modelo de layout do conteúdo',insertOption:'Substituir o conteúdo atual',selectPromptMsg:'Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):',emptyListMsg:'(Não foram definidos modelos de layout)'},showBlocks:'Mostrar blocos',stylesCombo:{label:'Estilo',voiceLabel:'Estilo',panelVoiceLabel:'Selecione um estilo',panelTitle1:'Estilos de bloco',panelTitle2:'Estilos em texto corrido',panelTitle3:'Estilos de objeto'},format:{label:'Formatação',voiceLabel:'Formatação',panelTitle:'Formatação',panelVoiceLabel:'Selecione uma formatação de parágrafo',tag_p:'Normal',tag_pre:'Formatado',tag_address:'Endereço',tag_h1:'Título 1',tag_h2:'Título 2',tag_h3:'Título 3',tag_h4:'Título 4',tag_h5:'Título 5',tag_h6:'Título 6',tag_div:'Normal (DIV)'},font:{label:'Fonte',voiceLabel:'Fonte',panelTitle:'Fonte',panelVoiceLabel:'Selecione uma fonte'},fontSize:{label:'Tamanho',voiceLabel:'Tamanho da fonte',panelTitle:'Tamanho',panelVoiceLabel:'Selecione um tamanho de fonte'},colorButton:{textColorTitle:'Cor do Texto',bgColorTitle:'Cor do Plano de Fundo',auto:'Automático',more:'Mais Cores...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Correção gramatical durante a digitação',enable:'Habilitar SCAYT',disable:'Desabilitar SCAYT',about:'Sobre o SCAYT',toggle:'Ativar/desativar SCAYT',options:'Opções',langs:'Línguas',moreSuggestions:'Mais sugestões',ignore:'Ignorar',ignoreAll:'Ignorar todas',addWord:'Adicionar palavra',emptyDic:'O nome do dicionário não deveria estar vazio.',optionsTab:'Opções',languagesTab:'Línguas',dictionariesTab:'Dicionários',aboutTab:'Sobre'},about:{title:'Sobre o CKEditor',dlgTitle:'About CKEditor',moreInfo:'Para informações sobre a licença, por favor, visite o nosso site na Internet:',copy:'Direito de reprodução &copy; $1. Todos os direitos reservados.'},maximize:'Maximizar',fakeobjects:{anchor:'Âncora',flash:'Animação em Flash',div:'Quebra de página',unknown:'Objeto desconhecido'},resize:'Arraste para redimensionar'};\r
diff --git a/lang/pt.js b/lang/pt.js
new file mode 100644 (file)
index 0000000..1181847
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.pt={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Fonte',newPage:'Nova Página',save:'Guardar',preview:'Pré-visualizar',cut:'Cortar',copy:'Copiar',paste:'Colar',print:'Imprimir',underline:'Sublinhado',bold:'Negrito',italic:'Itálico',selectAll:'Seleccionar Tudo',removeFormat:'Eliminar Formato',strike:'Rasurado',subscript:'Superior à Linha',superscript:'Inferior à Linha',horizontalrule:'Inserir Linha Horizontal',pagebreak:'Inserir Quebra de Página',unlink:'Eliminar Hiperligação',undo:'Anular',redo:'Repetir',common:{browseServer:'Navegar no Servidor',url:'URL',protocol:'Protocolo',upload:'Carregar',uploadSubmit:'Enviar para o Servidor',image:'Imagem',flash:'Flash',form:'Formulário',checkbox:'Caixa de Verificação',radio:'Botão de Opção',textField:'Campo de Texto',textarea:'Área de Texto',hiddenField:'Campo Escondido',button:'Botão',select:'Caixa de Combinação',imageButton:'Botão de Imagem',notSet:'<Não definido>',id:'Id',name:'Nome',langDir:'Orientação de idioma',langDirLtr:'Esquerda à Direita (LTR)',langDirRtl:'Direita a Esquerda (RTL)',langCode:'Código de Idioma',longDescr:'Descrição Completa do URL',cssClass:'Classes de Estilo de Folhas Classes',advisoryTitle:'Título',cssStyle:'Estilo',ok:'OK',cancel:'Cancelar',generalTab:'General',advancedTab:'Avançado',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Inserir Caracter Especial',title:'Seleccione um caracter especial'},link:{toolbar:'Inserir/Editar Hiperligação',menu:'Editar Hiperligação',title:'Hiperligação',info:'Informação de Hiperligação',target:'Destino',upload:'Carregar',advanced:'Avançado',type:'Tipo de Hiperligação',toAnchor:'Referência a esta página',toEmail:'E-Mail',target:'Destino',targetNotSet:'<Não definido>',targetFrame:'<Frame>',targetPopup:'<Janela de popup>',targetNew:'Nova Janela(_blank)',targetTop:'Janela primaria (_top)',targetSelf:'Mesma janela (_self)',targetParent:'Janela Pai (_parent)',targetFrameName:'Nome do Frame Destino',targetPopupName:'Nome da Janela de Popup',popupFeatures:'Características de Janela de Popup',popupResizable:'Resizable',popupStatusBar:'Barra de Estado',popupLocationBar:'Barra de localização',popupToolbar:'Barra de Ferramentas',popupMenuBar:'Barra de Menu',popupFullScreen:'Janela Completa (IE)',popupScrollBars:'Barras de deslocamento',popupDependent:'Dependente (Netscape)',popupWidth:'Largura',popupLeft:'Posição Esquerda',popupHeight:'Altura',popupTop:'Posição Direita',id:'Id',langDir:'Orientação de idioma',langDirNotSet:'<Não definido>',langDirLTR:'Esquerda à Direita (LTR)',langDirRTL:'Direita a Esquerda (RTL)',acccessKey:'Chave de Acesso',name:'Nome',langCode:'Orientação de idioma',tabIndex:'Índice de Tubulação',advisoryTitle:'Título',advisoryContentType:'Tipo de Conteúdo',cssClasses:'Classes de Estilo de Folhas Classes',charset:'Fonte de caracteres vinculado',styles:'Estilo',selectAnchor:'Seleccionar una referência',anchorName:'Por Nome de Referência',anchorId:'Por ID de elemento',emailAddress:'Endereço de E-Mail',emailSubject:'Título de Mensagem',emailBody:'Corpo da Mensagem',noAnchors:'(Não há referências disponíveis no documento)',noUrl:'Por favor introduza a hiperligação URL',noEmail:'Por favor introduza o endereço de e-mail'},anchor:{toolbar:' Inserir/Editar Âncora',menu:'Propriedades da Âncora',title:'Propriedades da Âncora',name:'Nome da Âncora',errorName:'Por favor, introduza o nome da âncora'},findAndReplace:{title:'Find and Replace',find:'Procurar',replace:'Substituir',findWhat:'Texto a Procurar:',replaceWith:'Substituir por:',notFoundMsg:'O texto especificado não foi encontrado.',matchCase:'Maiúsculas/Minúsculas',matchWord:'Coincidir com toda a palavra',matchCyclic:'Match cyclic',replaceAll:'Substituir Tudo',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabela',title:'Propriedades da Tabela',menu:'Propriedades da Tabela',deleteTable:'Eliminar Tabela',rows:'Linhas',columns:'Colunas',border:'Tamanho do Limite',align:'Alinhamento',alignNotSet:'<Não definido>',alignLeft:'Esquerda',alignCenter:'Centrado',alignRight:'Direita',width:'Largura',widthPx:'pixeis',widthPc:'percentagem',height:'Altura',cellSpace:'Esp. e/células',cellPad:'Esp. interior',caption:'Título',summary:'Sumário',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Célula',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Eliminar Célula',merge:'Unir Células',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Linha',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Eliminar Linhas'},column:{menu:'Coluna',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Eliminar Coluna'}},button:{title:'Propriedades do Botão',text:'Texto (Valor)',type:'Tipo',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Propriedades da Caixa de Verificação',radioTitle:'Propriedades do Botão de Opção',value:'Valor',selected:'Seleccionado'},form:{title:'Propriedades do Formulário',menu:'Propriedades do Formulário',action:'Acção',method:'Método',encoding:'Encoding',target:'Destino',targetNotSet:'<Não definido>',targetNew:'Nova Janela(_blank)',targetTop:'Janela primaria (_top)',targetSelf:'Mesma janela (_self)',targetParent:'Janela Pai (_parent)'},select:{title:'Propriedades da Caixa de Combinação',selectInfo:'Informação',opAvail:'Opções Possíveis',value:'Valor',size:'Tamanho',lines:'linhas',chkMulti:'Permitir selecções múltiplas',opText:'Texto',opValue:'Valor',btnAdd:'Adicionar',btnModify:'Modificar',btnUp:'Para cima',btnDown:'Para baixo',btnSetValue:'Definir um valor por defeito',btnDelete:'Apagar'},textarea:{title:'Propriedades da Área de Texto',cols:'Colunas',rows:'Linhas'},textfield:{title:'Propriedades do Campo de Texto',name:'Nome',value:'Valor',charWidth:'Tamanho do caracter',maxChars:'Nr. Máximo de Caracteres',type:'Tipo',typeText:'Texto',typePass:'Palavra-chave'},hidden:{title:'Propriedades do Campo Escondido',name:'Nome',value:'Valor'},image:{title:'Propriedades da Imagem',titleButton:'Propriedades do Botão de imagens',menu:'Propriedades da Imagem',infoTab:'Informação da Imagem',btnUpload:'Enviar para o Servidor',url:'URL',upload:'Carregar',alt:'Texto Alternativo',width:'Largura',height:'Altura',lockRatio:'Proporcional',resetSize:'Tamanho Original',border:'Limite',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',align:'Alinhamento',alignLeft:'Esquerda',alignAbsBottom:'Abs inferior',alignAbsMiddle:'Abs centro',alignBaseline:'Linha de base',alignBottom:'Fundo',alignMiddle:'Centro',alignRight:'Direita',alignTextTop:'Topo do texto',alignTop:'Topo',preview:'Pré-visualizar',alertUrl:'Por favor introduza o URL da imagem',linkTab:'Hiperligação',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Propriedades do Flash',propertiesTab:'Properties',title:'Propriedades do Flash',chkPlay:'Reproduzir automaticamente',chkLoop:'Loop',chkMenu:'Permitir Menu do Flash',chkFull:'Allow Fullscreen',scale:'Escala',scaleAll:'Mostrar tudo',scaleNoBorder:'Sem Limites',scaleFit:'Tamanho Exacto',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Alinhamento',alignLeft:'Esquerda',alignAbsBottom:'Abs inferior',alignAbsMiddle:'Abs centro',alignBaseline:'Linha de base',alignBottom:'Fundo',alignMiddle:'Centro',alignRight:'Direita',alignTextTop:'Topo do texto',alignTop:'Topo',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Cor de Fundo',width:'Largura',height:'Altura',hSpace:'Esp.Horiz',vSpace:'Esp.Vert',validateSrc:'Por favor introduza a hiperligação URL',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Verificação Ortográfica',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Não está num directório',changeTo:'Mudar para',btnIgnore:'Ignorar',btnIgnoreAll:'Ignorar Tudo',btnReplace:'Substituir',btnReplaceAll:'Substituir Tudo',btnUndo:'Anular',noSuggestions:'- Sem sugestões -',progress:'Verificação ortográfica em progresso…',noMispell:'Verificação ortográfica completa: não foram encontrados erros',noChanges:'Verificação ortográfica completa: não houve alteração de palavras',oneChange:'Verificação ortográfica completa: uma palavra alterada',manyChanges:'Verificação ortográfica completa: %1 palavras alteradas',ieSpellDownload:' Verificação ortográfica não instalada. Quer descarregar agora?'},smiley:{toolbar:'Emoticons',title:'Inserir um Emoticon'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Numeração',bulletedlist:'Marcas',indent:'Aumentar Avanço',outdent:'Diminuir Avanço',justify:{left:'Alinhar à Esquerda',center:'Alinhar ao Centro',right:'Alinhar à Direita',block:'Justificado'},blockquote:'Blockquote',clipboard:{title:'Colar',cutError:'A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl+X).',copyError:'A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl+C).',pasteMsg:'Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl+V</STRONG>) e prima <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Colar do Word',title:'Colar do Word',advice:'Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl+V</STRONG>) e prima <STRONG>OK</STRONG>.',ignoreFontFace:'Ignorar da definições do Tipo de Letra ',removeStyle:'Remover as definições de Estilos'},pasteText:{button:'Colar como Texto Simples',title:'Colar como Texto Simples'},templates:{button:'Modelos',title:'Modelo de Conteúdo',insertOption:'Replace actual contents',selectPromptMsg:'Por favor, seleccione o modelo a abrir no editor<br>(o conteúdo actual será perdido):',emptyListMsg:'(Sem modelos definidos)'},showBlocks:'Show Blocks',stylesCombo:{label:'Estilo',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formato',voiceLabel:'Format',panelTitle:'Formato',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatado',tag_address:'Endereço',tag_h1:'Título 1',tag_h2:'Título 2',tag_h3:'Título 3',tag_h4:'Título 4',tag_h5:'Título 5',tag_h6:'Título 6',tag_div:'Normal (DIV)'},font:{label:'Tipo de Letra',voiceLabel:'Font',panelTitle:'Tipo de Letra',panelVoiceLabel:'Select a font'},fontSize:{label:'Tamanho',voiceLabel:'Font Size',panelTitle:'Tamanho',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Cor do Texto',bgColorTitle:'Cor de Fundo',auto:'Automático',more:'Mais Cores...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/ro.js b/lang/ro.js
new file mode 100644 (file)
index 0000000..544daa2
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.ro={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Sursa',newPage:'Pagină nouă',save:'Salvează',preview:'Previzualizare',cut:'Taie',copy:'Copiază',paste:'Adaugă',print:'Printează',underline:'Subliniat (underline)',bold:'Îngroşat (bold)',italic:'Înclinat (italic)',selectAll:'Selectează tot',removeFormat:'Înlătură formatarea',strike:'Tăiat (strike through)',subscript:'Indice (subscript)',superscript:'Putere (superscript)',horizontalrule:'Inserează linie orizontă',pagebreak:'Inserează separator de pagină (Page Break)',unlink:'Înlătură link (legătură web)',undo:'Starea anterioară (undo)',redo:'Starea ulterioară (redo)',common:{browseServer:'Răsfoieşte server',url:'URL',protocol:'Protocol',upload:'Încarcă',uploadSubmit:'Trimite la server',image:'Imagine',flash:'Flash',form:'Formular (Form)',checkbox:'Bifă (Checkbox)',radio:'Buton radio (RadioButton)',textField:'Câmp text (TextField)',textarea:'Suprafaţă text (Textarea)',hiddenField:'Câmp ascuns (HiddenField)',button:'Buton',select:'Câmp selecţie (SelectionField)',imageButton:'Buton imagine (ImageButton)',notSet:'<nesetat>',id:'Id',name:'Nume',langDir:'Direcţia cuvintelor',langDirLtr:'stânga-dreapta (LTR)',langDirRtl:'dreapta-stânga (RTL)',langCode:'Codul limbii',longDescr:'Descrierea lungă URL',cssClass:'Clasele cu stilul paginii (CSS)',advisoryTitle:'Titlul consultativ',cssStyle:'Stil',ok:'Bine',cancel:'Anulare',generalTab:'General',advancedTab:'Avansat',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Inserează caracter special',title:'Selectează caracter special'},link:{toolbar:'Inserează/Editează link (legătură web)',menu:'Editează Link',title:'Link (Legătură web)',info:'Informaţii despre link (Legătură web)',target:'Ţintă (Target)',upload:'Încarcă',advanced:'Avansat',type:'Tipul link-ului (al legăturii web)',toAnchor:'Ancoră în această pagină',toEmail:'E-Mail',target:'Ţintă (Target)',targetNotSet:'<nesetat>',targetFrame:'<frame>',targetPopup:'<fereastra popup>',targetNew:'Fereastră nouă (_blank)',targetTop:'Fereastra din topul ierarhiei (_top)',targetSelf:'Aceeaşi fereastră (_self)',targetParent:'Fereastra părinte (_parent)',targetFrameName:'Numele frame-ului ţintă',targetPopupName:'Numele ferestrei popup',popupFeatures:'Proprietăţile ferestrei popup',popupResizable:'Resizable',popupStatusBar:'Bara de status',popupLocationBar:'Bara de locaţie',popupToolbar:'Bara de opţiuni',popupMenuBar:'Bara de meniu',popupFullScreen:'Tot ecranul (Full Screen)(IE)',popupScrollBars:'Scroll Bars',popupDependent:'Dependent (Netscape)',popupWidth:'Lăţime',popupLeft:'Poziţia la stânga',popupHeight:'Înălţime',popupTop:'Poziţia la dreapta',id:'Id',langDir:'Direcţia cuvintelor',langDirNotSet:'<nesetat>',langDirLTR:'stânga-dreapta (LTR)',langDirRTL:'dreapta-stânga (RTL)',acccessKey:'Tasta de acces',name:'Nume',langCode:'Direcţia cuvintelor',tabIndex:'Indexul tabului',advisoryTitle:'Titlul consultativ',advisoryContentType:'Tipul consultativ al titlului',cssClasses:'Clasele cu stilul paginii (CSS)',charset:'Setul de caractere al resursei legate',styles:'Stil',selectAnchor:'Selectaţi o ancoră',anchorName:'după numele ancorei',anchorId:'după Id-ul elementului',emailAddress:'Adresă de e-mail',emailSubject:'Subiectul mesajului',emailBody:'Conţinutul mesajului',noAnchors:'(Nicio ancoră disponibilă în document)',noUrl:'Vă rugăm să scrieţi URL-ul',noEmail:'Vă rugăm să scrieţi adresa de e-mail'},anchor:{toolbar:'Inserează/Editează ancoră',menu:'Proprietăţi ancoră',title:'Proprietăţi ancoră',name:'Numele ancorei',errorName:'Vă rugăm scrieţi numele ancorei'},findAndReplace:{title:'Găseşte şi înlocuieşte',find:'Găseşte',replace:'Înlocuieşte',findWhat:'Găseşte:',replaceWith:'Înlocuieşte cu:',notFoundMsg:'Textul specificat nu a fost găsit.',matchCase:'Deosebeşte majuscule de minuscule (Match case)',matchWord:'Doar cuvintele întregi',matchCyclic:'Match cyclic',replaceAll:'Înlocuieşte tot',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabel',title:'Proprietăţile tabelului',menu:'Proprietăţile tabelului',deleteTable:'Şterge tabel',rows:'Linii',columns:'Coloane',border:'Mărimea marginii',align:'Aliniament',alignNotSet:'<Nesetat>',alignLeft:'Stânga',alignCenter:'Centru',alignRight:'Dreapta',width:'Lăţime',widthPx:'pixeli',widthPc:'procente',height:'Înălţime',cellSpace:'Spaţiu între celule',cellPad:'Spaţiu în cadrul celulei',caption:'Titlu (Caption)',summary:'Rezumat',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Celulă',insertBefore:'Inserează celulă înainte',insertAfter:'Inserează celulă după',deleteCell:'Şterge celule',merge:'Uneşte celule',mergeRight:'Uneşte la dreapta',mergeDown:'Uneşte jos',splitHorizontal:'Împarte celula pe orizontală',splitVertical:'Împarte celula pe verticală',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Linie',insertBefore:'Inserează linie înainte',insertAfter:'Inserează linie după',deleteRow:'Şterge linii'},column:{menu:'Coloană',insertBefore:'Inserează coloană înainte',insertAfter:'Inserează coloană după',deleteColumn:'Şterge celule'}},button:{title:'Proprietăţi buton',text:'Text (Valoare)',type:'Tip',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Proprietăţi bifă (Checkbox)',radioTitle:'Proprietăţi buton radio (Radio Button)',value:'Valoare',selected:'Selectat'},form:{title:'Proprietăţi formular (Form)',menu:'Proprietăţi formular (Form)',action:'Acţiune',method:'Metodă',encoding:'Encoding',target:'Ţintă (Target)',targetNotSet:'<nesetat>',targetNew:'Fereastră nouă (_blank)',targetTop:'Fereastra din topul ierarhiei (_top)',targetSelf:'Aceeaşi fereastră (_self)',targetParent:'Fereastra părinte (_parent)'},select:{title:'Proprietăţi câmp selecţie (Selection Field)',selectInfo:'Informaţii',opAvail:'Opţiuni disponibile',value:'Valoare',size:'Mărime',lines:'linii',chkMulti:'Permite selecţii multiple',opText:'Text',opValue:'Valoare',btnAdd:'Adaugă',btnModify:'Modifică',btnUp:'Sus',btnDown:'Jos',btnSetValue:'Setează ca valoare selectată',btnDelete:'Şterge'},textarea:{title:'Proprietăţi suprafaţă text (Textarea)',cols:'Coloane',rows:'Linii'},textfield:{title:'Proprietăţi câmp text (Text Field)',name:'Nume',value:'Valoare',charWidth:'Lărgimea caracterului',maxChars:'Caractere maxime',type:'Tip',typeText:'Text',typePass:'Parolă'},hidden:{title:'Proprietăţi câmp ascuns (Hidden Field)',name:'Nume',value:'Valoare'},image:{title:'Proprietăţile imaginii',titleButton:'Proprietăţi buton imagine (Image Button)',menu:'Proprietăţile imaginii',infoTab:'Informaţii despre imagine',btnUpload:'Trimite la server',url:'URL',upload:'Încarcă',alt:'Text alternativ',width:'Lăţime',height:'Înălţime',lockRatio:'Păstrează proporţiile',resetSize:'Resetează mărimea',border:'Margine',hSpace:'HSpace',vSpace:'VSpace',align:'Aliniere',alignLeft:'Stânga',alignAbsBottom:'Jos absolut (Abs Bottom)',alignAbsMiddle:'Mijloc absolut (Abs Middle)',alignBaseline:'Linia de jos (Baseline)',alignBottom:'Jos',alignMiddle:'Mijloc',alignRight:'Dreapta',alignTextTop:'Text sus',alignTop:'Sus',preview:'Previzualizare',alertUrl:'Vă rugăm să scrieţi URL-ul imaginii',linkTab:'Link (Legătură web)',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Proprietăţile flash-ului',propertiesTab:'Properties',title:'Proprietăţile flash-ului',chkPlay:'Rulează automat',chkLoop:'Repetă (Loop)',chkMenu:'Activează meniul flash',chkFull:'Allow Fullscreen',scale:'Scală',scaleAll:'Arată tot',scaleNoBorder:'Fără margini (No border)',scaleFit:'Potriveşte',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Aliniere',alignLeft:'Stânga',alignAbsBottom:'Jos absolut (Abs Bottom)',alignAbsMiddle:'Mijloc absolut (Abs Middle)',alignBaseline:'Linia de jos (Baseline)',alignBottom:'Jos',alignMiddle:'Mijloc',alignRight:'Dreapta',alignTextTop:'Text sus',alignTop:'Sus',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Coloarea fundalului',width:'Lăţime',height:'Înălţime',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Vă rugăm să scrieţi URL-ul',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Verifică text',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Nu e în dicţionar',changeTo:'Schimbă în',btnIgnore:'Ignoră',btnIgnoreAll:'Ignoră toate',btnReplace:'Înlocuieşte',btnReplaceAll:'Înlocuieşte tot',btnUndo:'Starea anterioară (undo)',noSuggestions:'- Fără sugestii -',progress:'Verificarea textului în desfăşurare...',noMispell:'Verificarea textului terminată: Nicio greşeală găsită',noChanges:'Verificarea textului terminată: Niciun cuvânt modificat',oneChange:'Verificarea textului terminată: Un cuvânt modificat',manyChanges:'Verificarea textului terminată: 1% cuvinte modificate',ieSpellDownload:'Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?'},smiley:{toolbar:'Figură expresivă (Emoticon)',title:'Inserează o figură expresivă (Emoticon)'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Listă numerotată',bulletedlist:'Listă cu puncte',indent:'Creşte indentarea',outdent:'Scade indentarea',justify:{left:'Aliniere la stânga',center:'Aliniere centrală',right:'Aliniere la dreapta',block:'Aliniere în bloc (Block Justify)'},blockquote:'Citat',clipboard:{title:'Adaugă',cutError:'Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl+X).',copyError:'Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl+C).',pasteMsg:'Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<STRONG>Ctrl+V</STRONG>) şi apăsaţi <STRONG>OK</STRONG>.',securityMsg:'Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.'},pastefromword:{toolbar:'Adaugă din Word',title:'Adaugă din Word',advice:'Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<STRONG>Ctrl+V</STRONG>) şi apăsaţi <STRONG>OK</STRONG>.',ignoreFontFace:'Ignoră definiţiile Font Face',removeStyle:'Şterge definiţiile stilurilor'},pasteText:{button:'Adaugă ca text simplu (Plain Text)',title:'Adaugă ca text simplu (Plain Text)'},templates:{button:'Template-uri (şabloane)',title:'Template-uri (şabloane) de conţinut',insertOption:'Înlocuieşte cuprinsul actual',selectPromptMsg:'Vă rugăm selectaţi template-ul (şablonul) ce se va deschide în editor<br>(conţinutul actual va fi pierdut):',emptyListMsg:'(Niciun template (şablon) definit)'},showBlocks:'Arată blocurile',stylesCombo:{label:'Stil',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formatare',voiceLabel:'Format',panelTitle:'Formatare',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font',panelVoiceLabel:'Select a font'},fontSize:{label:'Mărime',voiceLabel:'Font Size',panelTitle:'Mărime',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Culoarea textului',bgColorTitle:'Coloarea fundalului',auto:'Automatic',more:'Mai multe culori...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/ru.js b/lang/ru.js
new file mode 100644 (file)
index 0000000..f13298f
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.ru={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Источник',newPage:'Новая страница',save:'Сохранить',preview:'Предварительный просмотр',cut:'Вырезать',copy:'Копировать',paste:'Вставить',print:'Печать',underline:'Подчеркнутый',bold:'Жирный',italic:'Курсив',selectAll:'Выделить все',removeFormat:'Убрать форматирование',strike:'Зачеркнутый',subscript:'Подстрочный индекс',superscript:'Надстрочный индекс',horizontalrule:'Вставить горизонтальную линию',pagebreak:'Вставить разрыв страницы',unlink:'Убрать ссылку',undo:'Отменить',redo:'Повторить',common:{browseServer:'Просмотреть на сервере',url:'URL',protocol:'Протокол',upload:'Закачать',uploadSubmit:'Послать на сервер',image:'Изображение',flash:'Flash',form:'Форма',checkbox:'Флаговая кнопка',radio:'Кнопка выбора',textField:'Текстовое поле',textarea:'Текстовая область',hiddenField:'Скрытое поле',button:'Кнопка',select:'Список',imageButton:'Кнопка с изображением',notSet:'<не определено>',id:'Идентификатор',name:'Имя',langDir:'Направление языка',langDirLtr:'Слева на право (LTR)',langDirRtl:'Справа на лево (RTL)',langCode:'Язык',longDescr:'Длинное описание URL',cssClass:'Класс CSS',advisoryTitle:'Заголовок',cssStyle:'Стиль CSS',ok:'ОК',cancel:'Отмена',generalTab:'Информация',advancedTab:'Расширенный',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Вставить специальный символ',title:'Выберите специальный символ'},link:{toolbar:'Вставить/Редактировать ссылку',menu:'Вставить ссылку',title:'Ссылка',info:'Информация ссылки',target:'Цель',upload:'Закачать',advanced:'Расширенный',type:'Тип ссылки',toAnchor:'Якорь на эту страницу',toEmail:'Эл. почта',target:'Цель',targetNotSet:'<не определено>',targetFrame:'<фрейм>',targetPopup:'<всплывающее окно>',targetNew:'Новое окно (_blank)',targetTop:'Самое верхнее окно (_top)',targetSelf:'Тоже окно (_self)',targetParent:'Родительское окно (_parent)',targetFrameName:'Имя целевого фрейма',targetPopupName:'Имя всплывающего окна',popupFeatures:'Свойства всплывающего окна',popupResizable:'Resizable',popupStatusBar:'Строка состояния',popupLocationBar:'Панель локации',popupToolbar:'Панель инструментов',popupMenuBar:'Панель меню',popupFullScreen:'Полный экран (IE)',popupScrollBars:'Полосы прокрутки',popupDependent:'Зависимый (Netscape)',popupWidth:'Ширина',popupLeft:'Позиция слева',popupHeight:'Высота',popupTop:'Позиция сверху',id:'Id',langDir:'Направление языка',langDirNotSet:'<не определено>',langDirLTR:'Слева на право (LTR)',langDirRTL:'Справа на лево (RTL)',acccessKey:'Горячая клавиша',name:'Имя',langCode:'Направление языка',tabIndex:'Последовательность перехода',advisoryTitle:'Заголовок',advisoryContentType:'Тип содержимого',cssClasses:'Класс CSS',charset:'Кодировка',styles:'Стиль CSS',selectAnchor:'Выберите якорь',anchorName:'По имени якоря',anchorId:'По идентификатору элемента',emailAddress:'Адрес эл. почты',emailSubject:'Заголовок сообщения',emailBody:'Тело сообщения',noAnchors:'(Нет якорей доступных в этом документе)',noUrl:'Пожалуйста, введите URL ссылки',noEmail:'Пожалуйста, введите адрес эл. почты'},anchor:{toolbar:'Вставить/Редактировать якорь',menu:'Свойства якоря',title:'Свойства якоря',name:'Имя якоря',errorName:'Пожалуйста, введите имя якоря'},findAndReplace:{title:'Найти и заменить',find:'Найти',replace:'Заменить',findWhat:'Найти:',replaceWith:'Заменить на:',notFoundMsg:'Указанный текст не найден.',matchCase:'Учитывать регистр',matchWord:'Совпадение целых слов',matchCyclic:'Match cyclic',replaceAll:'Заменить все',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Таблица',title:'Свойства таблицы',menu:'Свойства таблицы',deleteTable:'Удалить таблицу',rows:'Строки',columns:'Колонки',border:'Размер бордюра',align:'Выравнивание',alignNotSet:'<Не уст.>',alignLeft:'Слева',alignCenter:'По центру',alignRight:'Справа',width:'Ширина',widthPx:'пикселей',widthPc:'процентов',height:'Высота',cellSpace:'Промежуток (spacing)',cellPad:'Отступ (padding)',caption:'Заголовок',summary:'Резюме',headers:'Заголовки',headersNone:'Нет',headersColumn:'Первый столбец',headersRow:'Первая строка',headersBoth:'Оба варианта',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Ячейка',insertBefore:'Вставить ячейку до',insertAfter:'Вставить ячейку после',deleteCell:'Удалить ячейки',merge:'Соединить ячейки',mergeRight:'Соединить вправо',mergeDown:'Соединить вниз',splitHorizontal:'Разбить ячейку горизонтально',splitVertical:'Разбить ячейку вертикально',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Строка',insertBefore:'Вставить строку до',insertAfter:'Вставить строку после',deleteRow:'Удалить строки'},column:{menu:'Колонка',insertBefore:'Вставить колонку до',insertAfter:'Вставить колонку после',deleteColumn:'Удалить колонки'}},button:{title:'Свойства кнопки',text:'Текст (Значение)',type:'Тип',typeBtn:'Кнопка',typeSbm:'Отправить',typeRst:'Сбросить'},checkboxAndRadio:{checkboxTitle:'Свойства флаговой кнопки',radioTitle:'Свойства кнопки выбора',value:'Значение',selected:'Выбранная'},form:{title:'Свойства формы',menu:'Свойства формы',action:'Действие',method:'Метод',encoding:'Encoding',target:'Цель',targetNotSet:'<не определено>',targetNew:'Новое окно (_blank)',targetTop:'Самое верхнее окно (_top)',targetSelf:'Тоже окно (_self)',targetParent:'Родительское окно (_parent)'},select:{title:'Свойства списка',selectInfo:'Информация',opAvail:'Доступные варианты',value:'Значение',size:'Размер',lines:'линии',chkMulti:'Разрешить множественный выбор',opText:'Текст',opValue:'Значение',btnAdd:'Добавить',btnModify:'Модифицировать',btnUp:'Вверх',btnDown:'Вниз',btnSetValue:'Установить как выбранное значение',btnDelete:'Удалить'},textarea:{title:'Свойства текстовой области',cols:'Колонки',rows:'Строки'},textfield:{title:'Свойства текстового поля',name:'Имя',value:'Значение',charWidth:'Ширина',maxChars:'Макс. кол-во символов',type:'Тип',typeText:'Текст',typePass:'Пароль'},hidden:{title:'Свойства скрытого поля',name:'Имя',value:'Значение'},image:{title:'Свойства изображения',titleButton:'Свойства кнопки с изображением',menu:'Свойства изображения',infoTab:'Информация о изображении',btnUpload:'Послать на сервер',url:'URL',upload:'Закачать',alt:'Альтернативный текст',width:'Ширина',height:'Высота',lockRatio:'Сохранять пропорции',resetSize:'Сбросить размер',border:'Бордюр',hSpace:'Горизонтальный отступ',vSpace:'Вертикальный отступ',align:'Выравнивание',alignLeft:'По левому краю',alignAbsBottom:'Абс понизу',alignAbsMiddle:'Абс посередине',alignBaseline:'По базовой линии',alignBottom:'Понизу',alignMiddle:'Посередине',alignRight:'По правому краю',alignTextTop:'Текст наверху',alignTop:'По верху',preview:'Предварительный просмотр',alertUrl:'Пожалуйста, введите URL изображения',linkTab:'Ссылка',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Свойства Flash',propertiesTab:'Properties',title:'Свойства Flash',chkPlay:'Авто проигрывание',chkLoop:'Повтор',chkMenu:'Включить меню Flash',chkFull:'Allow Fullscreen',scale:'Масштабировать',scaleAll:'Показывать все',scaleNoBorder:'Без бордюра',scaleFit:'Точное совпадение',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Выравнивание',alignLeft:'По левому краю',alignAbsBottom:'Абс понизу',alignAbsMiddle:'Абс посередине',alignBaseline:'По базовой линии',alignBottom:'Понизу',alignMiddle:'Посередине',alignRight:'По правому краю',alignTextTop:'Текст наверху',alignTop:'По верху',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Цвет фона',width:'Ширина',height:'Высота',hSpace:'Горизонтальный отступ',vSpace:'Вертикальный отступ',validateSrc:'Пожалуйста, введите URL ссылки',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Проверить орфографию',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Нет в словаре',changeTo:'Заменить на',btnIgnore:'Игнорировать',btnIgnoreAll:'Игнорировать все',btnReplace:'Заменить',btnReplaceAll:'Заменить все',btnUndo:'Отменить',noSuggestions:'- Нет предположений -',progress:'Идет проверка орфографии...',noMispell:'Проверка орфографии закончена: ошибок не найдено',noChanges:'Проверка орфографии закончена: ни одного слова не изменено',oneChange:'Проверка орфографии закончена: одно слово изменено',manyChanges:'Проверка орфографии закончена: 1% слов изменен',ieSpellDownload:'Модуль проверки орфографии не установлен. Хотите скачать его сейчас?'},smiley:{toolbar:'Смайлик',title:'Вставить смайлик'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Нумерованный список',bulletedlist:'Маркированный список',indent:'Увеличить отступ',outdent:'Уменьшить отступ',justify:{left:'По левому краю',center:'По центру',right:'По правому краю',block:'По ширине'},blockquote:'Цитата',clipboard:{title:'Вставить',cutError:'Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции вырезания. Пожалуйста, используйте клавиатуру для этого (Ctrl+X).',copyError:'Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции копирования. Пожалуйста, используйте клавиатуру для этого (Ctrl+C).',pasteMsg:'Пожалуйста, вставьте текст в прямоугольник, используя сочетание клавиш (<STRONG>Ctrl+V</STRONG>), и нажмите <STRONG>OK</STRONG>.',securityMsg:'По причине настроек безопасности браузера, редактор не имеет доступа к данным буфера обмена напрямую. Вам необходимо вставить текст снова в это окно.'},pastefromword:{toolbar:'Вставить из Word',title:'Вставить из Word',advice:'Пожалуйста, вставьте текст в прямоугольник, используя сочетание клавиш (<STRONG>Ctrl+V</STRONG>), и нажмите <STRONG>OK</STRONG>.',ignoreFontFace:'Игнорировать определения гарнитуры',removeStyle:'Убрать определения стилей'},pasteText:{button:'Вставить только текст',title:'Вставить только текст'},templates:{button:'Шаблоны',title:'Шаблоны содержимого',insertOption:'Заменить текущее содержание',selectPromptMsg:'Пожалуйста, выберете шаблон для открытия в редакторе<br>(текущее содержимое будет потеряно):',emptyListMsg:'(Ни одного шаблона не определено)'},showBlocks:'Показать блоки',stylesCombo:{label:'Стиль',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Форматирование',voiceLabel:'Format',panelTitle:'Форматирование',panelVoiceLabel:'Select a paragraph format',tag_p:'Нормальный',tag_pre:'Форматированный',tag_address:'Адрес',tag_h1:'Заголовок 1',tag_h2:'Заголовок 2',tag_h3:'Заголовок 3',tag_h4:'Заголовок 4',tag_h5:'Заголовок 5',tag_h6:'Заголовок 6',tag_div:'Нормальный (DIV)'},font:{label:'Шрифт',voiceLabel:'Font',panelTitle:'Шрифт',panelVoiceLabel:'Select a font'},fontSize:{label:'Размер',voiceLabel:'Font Size',panelTitle:'Размер',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Цвет текста',bgColorTitle:'Цвет фона',auto:'Автоматический',more:'Цвета...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/sk.js b/lang/sk.js
new file mode 100644 (file)
index 0000000..4851a28
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.sk={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Zdroj',newPage:'Nová stránka',save:'Uložiť',preview:'Náhľad',cut:'Vystrihnúť',copy:'Kopírovať',paste:'Vložiť',print:'Tlač',underline:'Podčiarknuté',bold:'Tučné',italic:'Kurzíva',selectAll:'Vybrať všetko',removeFormat:'Odstrániť formátovanie',strike:'Prečiarknuté',subscript:'Dolný index',superscript:'Horný index',horizontalrule:'Vložiť vodorovnú čiaru',pagebreak:'Vložiť oddeľovač stránky',unlink:'Odstrániť odkaz',undo:'Späť',redo:'Znovu',common:{browseServer:'Prechádzať server',url:'URL',protocol:'Protokol',upload:'Odoslať',uploadSubmit:'Odoslať na server',image:'Obrázok',flash:'Flash',form:'Formulár',checkbox:'Zaškrtávacie políčko',radio:'Prepínač',textField:'Textové pole',textarea:'Textová oblasť',hiddenField:'Skryté pole',button:'Tlačidlo',select:'Rozbaľovací zoznam',imageButton:'Obrázkové tlačidlo',notSet:'<nenastavené>',id:'Id',name:'Meno',langDir:'Orientácia jazyka',langDirLtr:'Zľava doprava (LTR)',langDirRtl:'Sprava doľava (RTL)',langCode:'Kód jazyka',longDescr:'Dlhý popis URL',cssClass:'Trieda štýlu',advisoryTitle:'Pomocný titulok',cssStyle:'Štýl',ok:'OK',cancel:'Zrušiť',generalTab:'Hlavné',advancedTab:'Rozšírené',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Vložiť špeciálne znaky',title:'Výber špeciálneho znaku'},link:{toolbar:'Vložiť/zmeniť odkaz',menu:'Zmeniť odkaz',title:'Odkaz',info:'Informácie o odkaze',target:'Cieľ',upload:'Odoslať',advanced:'Rozšírené',type:'Typ odkazu',toAnchor:'Kotva v tejto stránke',toEmail:'E-Mail',target:'Cieľ',targetNotSet:'<nenastavené>',targetFrame:'<rámec>',targetPopup:'<vyskakovacie okno>',targetNew:'Nové okno (_blank)',targetTop:'Hlavné okno (_top)',targetSelf:'Rovnaké okno (_self)',targetParent:'Rodičovské okno (_parent)',targetFrameName:'Meno rámu cieľa',targetPopupName:'Názov vyskakovacieho okna',popupFeatures:'Vlastnosti vyskakovacieho okna',popupResizable:'Resizable',popupStatusBar:'Stavový riadok',popupLocationBar:'Panel umiestnenia',popupToolbar:'Panel nástrojov',popupMenuBar:'Panel ponuky',popupFullScreen:'Celá obrazovka (IE)',popupScrollBars:'Posuvníky',popupDependent:'Závislosť (Netscape)',popupWidth:'Šírka',popupLeft:'Ľavý okraj',popupHeight:'Výška',popupTop:'Horný okraj',id:'Id',langDir:'Orientácia jazyka',langDirNotSet:'<nenastavené>',langDirLTR:'Zľava doprava (LTR)',langDirRTL:'Sprava doľava (RTL)',acccessKey:'Prístupový kľúč',name:'Meno',langCode:'Orientácia jazyka',tabIndex:'Poradie prvku',advisoryTitle:'Pomocný titulok',advisoryContentType:'Pomocný typ obsahu',cssClasses:'Trieda štýlu',charset:'Priradená znaková sada',styles:'Štýl',selectAnchor:'Vybrať kotvu',anchorName:'Podľa mena kotvy',anchorId:'Podľa Id objektu',emailAddress:'E-Mailová adresa',emailSubject:'Predmet správy',emailBody:'Telo správy',noAnchors:'(V stránke nie je definovaná žiadna kotva)',noUrl:'Zadajte prosím URL odkazu',noEmail:'Zadajte prosím e-mailovú adresu'},anchor:{toolbar:'Vložiť/zmeniť kotvu',menu:'Vlastnosti kotvy',title:'Vlastnosti kotvy',name:'Meno kotvy',errorName:'Zadajte prosím meno kotvy'},findAndReplace:{title:'Nájsť a nahradiť',find:'Hľadať',replace:'Nahradiť',findWhat:'Čo hľadať:',replaceWith:'Čím nahradiť:',notFoundMsg:'Hľadaný text nebol nájdený.',matchCase:'Rozlišovať malé/veľké písmená',matchWord:'Len celé slová',matchCyclic:'Match cyclic',replaceAll:'Nahradiť všetko',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabuľka',title:'Vlastnosti tabuľky',menu:'Vlastnosti tabuľky',deleteTable:'Vymazať tabuľku',rows:'Riadky',columns:'Stĺpce',border:'Ohraničenie',align:'Zarovnanie',alignNotSet:'<nenastavené>',alignLeft:'Vľavo',alignCenter:'Na stred',alignRight:'Vpravo',width:'Šírka',widthPx:'pixelov',widthPc:'percent',height:'Výška',cellSpace:'Vzdialenosť buniek',cellPad:'Odsadenie obsahu',caption:'Popis',summary:'Prehľad',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Bunka',insertBefore:'Vložiť bunku pred',insertAfter:'Vložiť bunku za',deleteCell:'Vymazať bunky',merge:'Zlúčiť bunky',mergeRight:'Zlúčiť doprava',mergeDown:'Zlúčiť dole',splitHorizontal:'Rozdeliť bunky horizontálne',splitVertical:'Rozdeliť bunky vertikálne',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Riadok',insertBefore:'Vložiť riadok za',insertAfter:'Vložiť riadok pred',deleteRow:'Vymazať riadok'},column:{menu:'Stĺpec',insertBefore:'Vložiť stĺpec za',insertAfter:'Vložiť stĺpec pred',deleteColumn:'Zmazať stĺpec'}},button:{title:'Vlastnosti tlačidla',text:'Text',type:'Typ',typeBtn:'Tlačidlo',typeSbm:'Odoslať',typeRst:'Vymazať'},checkboxAndRadio:{checkboxTitle:'Vlastnosti zaškrtávacieho políčka',radioTitle:'Vlastnosti prepínača',value:'Hodnota',selected:'Vybrané'},form:{title:'Vlastnosti formulára',menu:'Vlastnosti formulára',action:'Akcie',method:'Metóda',encoding:'Encoding',target:'Cieľ',targetNotSet:'<nenastavené>',targetNew:'Nové okno (_blank)',targetTop:'Hlavné okno (_top)',targetSelf:'Rovnaké okno (_self)',targetParent:'Rodičovské okno (_parent)'},select:{title:'Vlastnosti rozbaľovacieho zoznamu',selectInfo:'Info',opAvail:'Dostupné možnosti',value:'Hodnota',size:'Veľkosť',lines:'riadkov',chkMulti:'Povoliť viacnásobný výber',opText:'Text',opValue:'Hodnota',btnAdd:'Pridať',btnModify:'Zmeniť',btnUp:'Hore',btnDown:'Dole',btnSetValue:'Nastaviť ako vybranú hodnotu',btnDelete:'Zmazať'},textarea:{title:'Vlastnosti textovej oblasti',cols:'Stĺpce',rows:'Riadky'},textfield:{title:'Vlastnosti textového poľa',name:'Názov',value:'Hodnota',charWidth:'Šírka pola (znakov)',maxChars:'Maximálny počet znakov',type:'Typ',typeText:'Text',typePass:'Heslo'},hidden:{title:'Vlastnosti skrytého poľa',name:'Názov',value:'Hodnota'},image:{title:'Vlastnosti obrázku',titleButton:'Vlastnosti obrázkového tlačidla',menu:'Vlastnosti obrázku',infoTab:'Informácie o obrázku',btnUpload:'Odoslať na server',url:'URL',upload:'Odoslať',alt:'Alternatívny text',width:'Šírka',height:'Výška',lockRatio:'Zámok',resetSize:'Pôvodná veľkosť',border:'Okraje',hSpace:'H-medzera',vSpace:'V-medzera',align:'Zarovnanie',alignLeft:'Vľavo',alignAbsBottom:'Úplne dole',alignAbsMiddle:'Do stredu',alignBaseline:'Na základňu',alignBottom:'Dole',alignMiddle:'Na stred',alignRight:'Vpravo',alignTextTop:'Na horný okraj textu',alignTop:'Nahor',preview:'Náhľad',alertUrl:'Zadajte prosím URL obrázku',linkTab:'Odkaz',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Vlastnosti Flashu',propertiesTab:'Properties',title:'Vlastnosti Flashu',chkPlay:'Automatické prehrávanie',chkLoop:'Opakovanie',chkMenu:'Povoliť Flash Menu',chkFull:'Allow Fullscreen',scale:'Mierka',scaleAll:'Zobraziť mierku',scaleNoBorder:'Bez okrajov',scaleFit:'Roztiahnuť na celé',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Zarovnanie',alignLeft:'Vľavo',alignAbsBottom:'Úplne dole',alignAbsMiddle:'Do stredu',alignBaseline:'Na základňu',alignBottom:'Dole',alignMiddle:'Na stred',alignRight:'Vpravo',alignTextTop:'Na horný okraj textu',alignTop:'Nahor',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Farba pozadia',width:'Šírka',height:'Výška',hSpace:'H-medzera',vSpace:'V-medzera',validateSrc:'Zadajte prosím URL odkazu',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Kontrola pravopisu',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Nie je v slovníku',changeTo:'Zmeniť na',btnIgnore:'Ignorovať',btnIgnoreAll:'Ignorovať všetko',btnReplace:'Prepísat',btnReplaceAll:'Prepísat všetko',btnUndo:'Späť',noSuggestions:'- Žiadny návrh -',progress:'Prebieha kontrola pravopisu...',noMispell:'Kontrola pravopisu dokončená: bez chýb',noChanges:'Kontrola pravopisu dokončená: žiadne slová nezmenené',oneChange:'Kontrola pravopisu dokončená: zmenené jedno slovo',manyChanges:'Kontrola pravopisu dokončená: zmenených %1 slov',ieSpellDownload:'Kontrola pravopisu nie je naištalovaná. Chcete ju hneď stiahnuť?'},smiley:{toolbar:'Smajlíky',title:'Vkladanie smajlíkov'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Číslovanie',bulletedlist:'Odrážky',indent:'Zväčšiť odsadenie',outdent:'Zmenšiť odsadenie',justify:{left:'Zarovnať vľavo',center:'Zarovnať na stred',right:'Zarovnať vpravo',block:'Zarovnať do bloku'},blockquote:'Citácia',clipboard:{title:'Vložiť',cutError:'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru spustiť funkciu pre vystrihnutie zvoleného textu do schránky. Prosím vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl+X).',copyError:'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru spustiť funkciu pre kopírovanie zvoleného textu do schránky. Prosím skopírujte zvolený text do schránky pomocou klávesnice (Ctrl+C).',pasteMsg:'Prosím vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl+V</STRONG>) a stlačte <STRONG>OK</STRONG>.',securityMsg:'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru pristupovať priamo k datám v schránke. Musíte ich vložiť znovu do tohto okna.'},pastefromword:{toolbar:'Vložiť z Wordu',title:'Vložiť z Wordu',advice:'Prosím vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl+V</STRONG>) a stlačte <STRONG>OK</STRONG>.',ignoreFontFace:'Ignorovať nastavenia typu písma',removeStyle:'Odstrániť formátovanie'},pasteText:{button:'Vložiť ako čistý text',title:'Vložiť ako čistý text'},templates:{button:'Šablóny',title:'Šablóny obsahu',insertOption:'Nahradiť aktuálny obsah',selectPromptMsg:'Prosím vyberte šablóny na otvorenie v editore<br>(súšasný obsah bude stratený):',emptyListMsg:'(žiadne šablóny nenájdené)'},showBlocks:'Ukázať bloky',stylesCombo:{label:'Štýl',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Formát',voiceLabel:'Format',panelTitle:'Formát',panelVoiceLabel:'Select a paragraph format',tag_p:'Normálny',tag_pre:'Formátovaný',tag_address:'Adresa',tag_h1:'Nadpis 1',tag_h2:'Nadpis 2',tag_h3:'Nadpis 3',tag_h4:'Nadpis 4',tag_h5:'Nadpis 5',tag_h6:'Nadpis 6',tag_div:'Odsek (DIV)'},font:{label:'Písmo',voiceLabel:'Font',panelTitle:'Písmo',panelVoiceLabel:'Select a font'},fontSize:{label:'Veľkosť',voiceLabel:'Font Size',panelTitle:'Veľkosť',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Farba textu',bgColorTitle:'Farba pozadia',auto:'Automaticky',more:'Viac farieb...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/sl.js b/lang/sl.js
new file mode 100644 (file)
index 0000000..3d71bd9
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.sl={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Izvorna koda',newPage:'Nova stran',save:'Shrani',preview:'Predogled',cut:'Izreži',copy:'Kopiraj',paste:'Prilepi',print:'Natisni',underline:'Podčrtano',bold:'Krepko',italic:'Ležeče',selectAll:'Izberi vse',removeFormat:'Odstrani oblikovanje',strike:'Prečrtano',subscript:'Podpisano',superscript:'Nadpisano',horizontalrule:'Vstavi vodoravno črto',pagebreak:'Vstavi prelom strani',unlink:'Odstrani povezavo',undo:'Razveljavi',redo:'Ponovi',common:{browseServer:'Prebrskaj na strežniku',url:'URL',protocol:'Protokol',upload:'Prenesi',uploadSubmit:'Pošlji na strežnik',image:'Slika',flash:'Flash',form:'Obrazec',checkbox:'Potrditveno polje',radio:'Izbirno polje',textField:'Vnosno polje',textarea:'Vnosno območje',hiddenField:'Skrito polje',button:'Gumb',select:'Spustni seznam',imageButton:'Gumb s sliko',notSet:'<ni postavljen>',id:'Id',name:'Ime',langDir:'Smer jezika',langDirLtr:'Od leve proti desni (LTR)',langDirRtl:'Od desne proti levi (RTL)',langCode:'Oznaka jezika',longDescr:'Dolg opis URL-ja',cssClass:'Razred stilne predloge',advisoryTitle:'Predlagani naslov',cssStyle:'Slog',ok:'V redu',cancel:'Prekliči',generalTab:'General',advancedTab:'Napredno',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Vstavi posebni znak',title:'Izberi posebni znak'},link:{toolbar:'Vstavi/uredi povezavo',menu:'Uredi povezavo',title:'Povezava',info:'Podatki o povezavi',target:'Cilj',upload:'Prenesi',advanced:'Napredno',type:'Vrsta povezave',toAnchor:'Zaznamek na tej strani',toEmail:'Elektronski naslov',target:'Cilj',targetNotSet:'<ni postavljen>',targetFrame:'<okvir>',targetPopup:'<pojavno okno>',targetNew:'Novo okno (_blank)',targetTop:'Najvišje okno (_top)',targetSelf:'Isto okno (_self)',targetParent:'Starševsko okno (_parent)',targetFrameName:'Ime ciljnega okvirja',targetPopupName:'Ime pojavnega okna',popupFeatures:'Značilnosti pojavnega okna',popupResizable:'Resizable',popupStatusBar:'Vrstica stanja',popupLocationBar:'Naslovna vrstica',popupToolbar:'Orodna vrstica',popupMenuBar:'Menijska vrstica',popupFullScreen:'Celozaslonska slika (IE)',popupScrollBars:'Drsniki',popupDependent:'Podokno (Netscape)',popupWidth:'Širina',popupLeft:'Lega levo',popupHeight:'Višina',popupTop:'Lega na vrhu',id:'Id',langDir:'Smer jezika',langDirNotSet:'<ni postavljen>',langDirLTR:'Od leve proti desni (LTR)',langDirRTL:'Od desne proti levi (RTL)',acccessKey:'Vstopno geslo',name:'Ime',langCode:'Smer jezika',tabIndex:'Številka tabulatorja',advisoryTitle:'Predlagani naslov',advisoryContentType:'Predlagani tip vsebine (content-type)',cssClasses:'Razred stilne predloge',charset:'Kodna tabela povezanega vira',styles:'Slog',selectAnchor:'Izberi zaznamek',anchorName:'Po imenu zaznamka',anchorId:'Po ID-ju elementa',emailAddress:'Elektronski naslov',emailSubject:'Predmet sporočila',emailBody:'Vsebina sporočila',noAnchors:'(V tem dokumentu ni zaznamkov)',noUrl:'Vnesite URL povezave',noEmail:'Vnesite elektronski naslov'},anchor:{toolbar:'Vstavi/uredi zaznamek',menu:'Lastnosti zaznamka',title:'Lastnosti zaznamka',name:'Ime zaznamka',errorName:'Prosim vnesite ime zaznamka'},findAndReplace:{title:'Najdi in zamenjaj',find:'Najdi',replace:'Zamenjaj',findWhat:'Najdi:',replaceWith:'Zamenjaj z:',notFoundMsg:'Navedeno besedilo ni bilo najdeno.',matchCase:'Razlikuj velike in male črke',matchWord:'Samo cele besede',matchCyclic:'Match cyclic',replaceAll:'Zamenjaj vse',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabela',title:'Lastnosti tabele',menu:'Lastnosti tabele',deleteTable:'Izbriši tabelo',rows:'Vrstice',columns:'Stolpci',border:'Velikost obrobe',align:'Poravnava',alignNotSet:'<Ni nastavljeno>',alignLeft:'Levo',alignCenter:'Sredinsko',alignRight:'Desno',width:'Širina',widthPx:'pik',widthPc:'procentov',height:'Višina',cellSpace:'Razmik med celicami',cellPad:'Polnilo med celicami',caption:'Naslov',summary:'Povzetek',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Celica',insertBefore:'Vstavi celico pred',insertAfter:'Vstavi celico za',deleteCell:'Izbriši celice',merge:'Združi celice',mergeRight:'Združi desno',mergeDown:'Druži navzdol',splitHorizontal:'Razdeli celico vodoravno',splitVertical:'Razdeli celico navpično',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Vrstica',insertBefore:'Vstavi vrstico pred',insertAfter:'Vstavi vrstico za',deleteRow:'Izbriši vrstice'},column:{menu:'Stolpec',insertBefore:'Vstavi stolpec pred',insertAfter:'Vstavi stolpec za',deleteColumn:'Izbriši stolpce'}},button:{title:'Lastnosti gumba',text:'Besedilo (Vrednost)',type:'Tip',typeBtn:'Gumb',typeSbm:'Potrdi',typeRst:'Ponastavi'},checkboxAndRadio:{checkboxTitle:'Lastnosti potrditvenega polja',radioTitle:'Lastnosti izbirnega polja',value:'Vrednost',selected:'Izbrano'},form:{title:'Lastnosti obrazca',menu:'Lastnosti obrazca',action:'Akcija',method:'Metoda',encoding:'Encoding',target:'Cilj',targetNotSet:'<ni postavljen>',targetNew:'Novo okno (_blank)',targetTop:'Najvišje okno (_top)',targetSelf:'Isto okno (_self)',targetParent:'Starševsko okno (_parent)'},select:{title:'Lastnosti spustnega seznama',selectInfo:'Podatki',opAvail:'Razpoložljive izbire',value:'Vrednost',size:'Velikost',lines:'vrstic',chkMulti:'Dovoli izbor večih vrstic',opText:'Besedilo',opValue:'Vrednost',btnAdd:'Dodaj',btnModify:'Spremeni',btnUp:'Gor',btnDown:'Dol',btnSetValue:'Postavi kot privzeto izbiro',btnDelete:'Izbriši'},textarea:{title:'Lastnosti vnosnega območja',cols:'Stolpcev',rows:'Vrstic'},textfield:{title:'Lastnosti vnosnega polja',name:'Ime',value:'Vrednost',charWidth:'Dolžina',maxChars:'Največje število znakov',type:'Tip',typeText:'Besedilo',typePass:'Geslo'},hidden:{title:'Lastnosti skritega polja',name:'Ime',value:'Vrednost'},image:{title:'Lastnosti slike',titleButton:'Lastnosti gumba s sliko',menu:'Lastnosti slike',infoTab:'Podatki o sliki',btnUpload:'Pošlji na strežnik',url:'URL',upload:'Pošlji',alt:'Nadomestno besedilo',width:'Širina',height:'Višina',lockRatio:'Zakleni razmerje',resetSize:'Ponastavi velikost',border:'Obroba',hSpace:'Vodoravni razmik',vSpace:'Navpični razmik',align:'Poravnava',alignLeft:'Levo',alignAbsBottom:'Popolnoma na dno',alignAbsMiddle:'Popolnoma v sredino',alignBaseline:'Na osnovno črto',alignBottom:'Na dno',alignMiddle:'V sredino',alignRight:'Desno',alignTextTop:'Besedilo na vrh',alignTop:'Na vrh',preview:'Predogled',alertUrl:'Vnesite URL slike',linkTab:'Povezava',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Lastnosti Flash',propertiesTab:'Properties',title:'Lastnosti Flash',chkPlay:'Samodejno predvajaj',chkLoop:'Ponavljanje',chkMenu:'Omogoči Flash Meni',chkFull:'Allow Fullscreen',scale:'Povečava',scaleAll:'Pokaži vse',scaleNoBorder:'Brez obrobe',scaleFit:'Natančno prileganje',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Poravnava',alignLeft:'Levo',alignAbsBottom:'Popolnoma na dno',alignAbsMiddle:'Popolnoma v sredino',alignBaseline:'Na osnovno črto',alignBottom:'Na dno',alignMiddle:'V sredino',alignRight:'Desno',alignTextTop:'Besedilo na vrh',alignTop:'Na vrh',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Barva ozadja',width:'Širina',height:'Višina',hSpace:'Vodoravni razmik',vSpace:'Navpični razmik',validateSrc:'Vnesite URL povezave',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Preveri črkovanje',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Ni v slovarju',changeTo:'Spremeni v',btnIgnore:'Prezri',btnIgnoreAll:'Prezri vse',btnReplace:'Zamenjaj',btnReplaceAll:'Zamenjaj vse',btnUndo:'Razveljavi',noSuggestions:'- Ni predlogov -',progress:'Preverjanje črkovanja se izvaja...',noMispell:'Črkovanje je končano: Brez napak',noChanges:'Črkovanje je končano: Nobena beseda ni bila spremenjena',oneChange:'Črkovanje je končano: Spremenjena je bila ena beseda',manyChanges:'Črkovanje je končano: Spremenjenih je bilo %1 besed',ieSpellDownload:'Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?'},smiley:{toolbar:'Smeško',title:'Vstavi smeška'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Oštevilčen seznam',bulletedlist:'Označen seznam',indent:'Povečaj zamik',outdent:'Zmanjšaj zamik',justify:{left:'Leva poravnava',center:'Sredinska poravnava',right:'Desna poravnava',block:'Obojestranska poravnava'},blockquote:'Citat',clipboard:{title:'Prilepi',cutError:'Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+X).',copyError:'Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+C).',pasteMsg:'Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.',securityMsg:'Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.'},pastefromword:{toolbar:'Prilepi iz Worda',title:'Prilepi iz Worda',advice:'Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.',ignoreFontFace:'Prezri obliko pisave',removeStyle:'Odstrani nastavitve stila'},pasteText:{button:'Prilepi kot golo besedilo',title:'Prilepi kot golo besedilo'},templates:{button:'Predloge',title:'Vsebinske predloge',insertOption:'Zamenjaj trenutno vsebino',selectPromptMsg:'Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):',emptyListMsg:'(Ni pripravljenih predlog)'},showBlocks:'Prikaži ograde',stylesCombo:{label:'Slog',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Oblika',voiceLabel:'Format',panelTitle:'Oblika',panelVoiceLabel:'Select a paragraph format',tag_p:'Navaden',tag_pre:'Oblikovan',tag_address:'Napis',tag_h1:'Naslov 1',tag_h2:'Naslov 2',tag_h3:'Naslov 3',tag_h4:'Naslov 4',tag_h5:'Naslov 5',tag_h6:'Naslov 6',tag_div:'Normal (DIV)'},font:{label:'Pisava',voiceLabel:'Font',panelTitle:'Pisava',panelVoiceLabel:'Select a font'},fontSize:{label:'Velikost',voiceLabel:'Font Size',panelTitle:'Velikost',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Barva besedila',bgColorTitle:'Barva ozadja',auto:'Samodejno',more:'Več barv...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/sr-latn.js b/lang/sr-latn.js
new file mode 100644 (file)
index 0000000..c1c0ee6
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang['sr-latn']={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Kôd',newPage:'Nova stranica',save:'Sačuvaj',preview:'Izgled stranice',cut:'Iseci',copy:'Kopiraj',paste:'Zalepi',print:'Štampa',underline:'Podvučeno',bold:'Podebljano',italic:'Kurziv',selectAll:'Označi sve',removeFormat:'Ukloni formatiranje',strike:'Precrtano',subscript:'Indeks',superscript:'Stepen',horizontalrule:'Unesi horizontalnu liniju',pagebreak:'Insert Page Break for Printing',unlink:'Ukloni link',undo:'Poni�ti akciju',redo:'Ponovi akciju',common:{browseServer:'Pretraži server',url:'URL',protocol:'Protokol',upload:'Pošalji',uploadSubmit:'Pošalji na server',image:'Slika',flash:'Fleš',form:'Forma',checkbox:'Polje za potvrdu',radio:'Radio-dugme',textField:'Tekstualno polje',textarea:'Zona teksta',hiddenField:'Skriveno polje',button:'Dugme',select:'Izborno polje',imageButton:'Dugme sa slikom',notSet:'<nije postavljeno>',id:'Id',name:'Naziv',langDir:'Smer jezika',langDirLtr:'S leva na desno (LTR)',langDirRtl:'S desna na levo (RTL)',langCode:'Kôd jezika',longDescr:'Pun opis URL',cssClass:'Stylesheet klase',advisoryTitle:'Advisory naslov',cssStyle:'Stil',ok:'OK',cancel:'Otkaži',generalTab:'General',advancedTab:'Napredni tagovi',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Unesi specijalni karakter',title:'Odaberite specijalni karakter'},link:{toolbar:'Unesi/izmeni link',menu:'Izmeni link',title:'Link',info:'Link Info',target:'Meta',upload:'Pošalji',advanced:'Napredni tagovi',type:'Vrsta linka',toAnchor:'Sidro na ovoj stranici',toEmail:'E-Mail',target:'Meta',targetNotSet:'<nije postavljeno>',targetFrame:'<okvir>',targetPopup:'<popup prozor>',targetNew:'Novi prozor (_blank)',targetTop:'Prozor na vrhu (_top)',targetSelf:'Isti prozor (_self)',targetParent:'Roditeljski prozor (_parent)',targetFrameName:'Naziv odredišnog frejma',targetPopupName:'Naziv popup prozora',popupFeatures:'Mogućnosti popup prozora',popupResizable:'Resizable',popupStatusBar:'Statusna linija',popupLocationBar:'Lokacija',popupToolbar:'Toolbar',popupMenuBar:'Kontekstni meni',popupFullScreen:'Prikaz preko celog ekrana (IE)',popupScrollBars:'Scroll bar',popupDependent:'Zavisno (Netscape)',popupWidth:'Širina',popupLeft:'Od leve ivice ekrana (px)',popupHeight:'Visina',popupTop:'Od vrha ekrana (px)',id:'Id',langDir:'Smer jezika',langDirNotSet:'<nije postavljeno>',langDirLTR:'S leva na desno (LTR)',langDirRTL:'S desna na levo (RTL)',acccessKey:'Pristupni taster',name:'Naziv',langCode:'Smer jezika',tabIndex:'Tab indeks',advisoryTitle:'Advisory naslov',advisoryContentType:'Advisory vrsta sadržaja',cssClasses:'Stylesheet klase',charset:'Linked Resource Charset',styles:'Stil',selectAnchor:'Odaberi sidro',anchorName:'Po nazivu sidra',anchorId:'Po Id-ju elementa',emailAddress:'E-Mail adresa',emailSubject:'Naslov',emailBody:'Sadržaj poruke',noAnchors:'(Nema dostupnih sidra)',noUrl:'Unesite URL linka',noEmail:'Otkucajte adresu elektronske pote'},anchor:{toolbar:'Unesi/izmeni sidro',menu:'Osobine sidra',title:'Osobine sidra',name:'Ime sidra',errorName:'Unesite ime sidra'},findAndReplace:{title:'Find and Replace',find:'Pretraga',replace:'Zamena',findWhat:'Pronadi:',replaceWith:'Zameni sa:',notFoundMsg:'Traženi tekst nije pronađen.',matchCase:'Razlikuj mala i velika slova',matchWord:'Uporedi cele reci',matchCyclic:'Match cyclic',replaceAll:'Zameni sve',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabela',title:'Osobine tabele',menu:'Osobine tabele',deleteTable:'Delete Table',rows:'Redova',columns:'Kolona',border:'Veličina okvira',align:'Ravnanje',alignNotSet:'<nije postavljeno>',alignLeft:'Levo',alignCenter:'Sredina',alignRight:'Desno',width:'Širina',widthPx:'piksela',widthPc:'procenata',height:'Visina',cellSpace:'Ćelijski prostor',cellPad:'Razmak ćelija',caption:'Naslov tabele',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Obriši ćelije',merge:'Spoj celije',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Obriši redove'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Obriši kolone'}},button:{title:'Osobine dugmeta',text:'Tekst (vrednost)',type:'Tip',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Osobine polja za potvrdu',radioTitle:'Osobine radio-dugmeta',value:'Vrednost',selected:'Označeno'},form:{title:'Osobine forme',menu:'Osobine forme',action:'Akcija',method:'Metoda',encoding:'Encoding',target:'Meta',targetNotSet:'<nije postavljeno>',targetNew:'Novi prozor (_blank)',targetTop:'Prozor na vrhu (_top)',targetSelf:'Isti prozor (_self)',targetParent:'Roditeljski prozor (_parent)'},select:{title:'Osobine izbornog polja',selectInfo:'Info',opAvail:'Dostupne opcije',value:'Vrednost',size:'Veličina',lines:'linija',chkMulti:'Dozvoli višestruku selekciju',opText:'Tekst',opValue:'Vrednost',btnAdd:'Dodaj',btnModify:'Izmeni',btnUp:'Gore',btnDown:'Dole',btnSetValue:'Podesi kao označenu vrednost',btnDelete:'Obriši'},textarea:{title:'Osobine zone teksta',cols:'Broj kolona',rows:'Broj redova'},textfield:{title:'Osobine tekstualnog polja',name:'Naziv',value:'Vrednost',charWidth:'Širina (karaktera)',maxChars:'Maksimalno karaktera',type:'Tip',typeText:'Tekst',typePass:'Lozinka'},hidden:{title:'Osobine skrivenog polja',name:'Naziv',value:'Vrednost'},image:{title:'Osobine slika',titleButton:'Osobine dugmeta sa slikom',menu:'Osobine slika',infoTab:'Info slike',btnUpload:'Pošalji na server',url:'URL',upload:'Pošalji',alt:'Alternativni tekst',width:'Širina',height:'Visina',lockRatio:'Zaključaj odnos',resetSize:'Resetuj veličinu',border:'Okvir',hSpace:'HSpace',vSpace:'VSpace',align:'Ravnanje',alignLeft:'Levo',alignAbsBottom:'Abs dole',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignBottom:'Dole',alignMiddle:'Sredina',alignRight:'Desno',alignTextTop:'Vrh teksta',alignTop:'Vrh',preview:'Izgled',alertUrl:'Unesite URL slike',linkTab:'Link',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Osobine fleša',propertiesTab:'Properties',title:'Osobine fleša',chkPlay:'Automatski start',chkLoop:'Ponavljaj',chkMenu:'Uključi fleš meni',chkFull:'Allow Fullscreen',scale:'Skaliraj',scaleAll:'Prikaži sve',scaleNoBorder:'Bez ivice',scaleFit:'Popuni površinu',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Ravnanje',alignLeft:'Levo',alignAbsBottom:'Abs dole',alignAbsMiddle:'Abs sredina',alignBaseline:'Bazno',alignBottom:'Dole',alignMiddle:'Sredina',alignRight:'Desno',alignTextTop:'Vrh teksta',alignTop:'Vrh',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Boja pozadine',width:'Širina',height:'Visina',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Unesite URL linka',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Proveri spelovanje',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Nije u rečniku',changeTo:'Izmeni',btnIgnore:'Ignoriši',btnIgnoreAll:'Ignoriši sve',btnReplace:'Zameni',btnReplaceAll:'Zameni sve',btnUndo:'Vrati akciju',noSuggestions:'- Bez sugestija -',progress:'Provera spelovanja u toku...',noMispell:'Provera spelovanja završena: greške nisu pronadene',noChanges:'Provera spelovanja završena: Nije izmenjena nijedna rec',oneChange:'Provera spelovanja završena: Izmenjena je jedna reč',manyChanges:'Provera spelovanja završena: %1 reč(i) je izmenjeno',ieSpellDownload:'Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?'},smiley:{toolbar:'Smajli',title:'Unesi smajlija'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Nabrojiva lista',bulletedlist:'Nenabrojiva lista',indent:'Uvećaj levu marginu',outdent:'Smanji levu marginu',justify:{left:'Levo ravnanje',center:'Centriran tekst',right:'Desno ravnanje',block:'Obostrano ravnanje'},blockquote:'Blockquote',clipboard:{title:'Zalepi',cutError:'Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+X).',copyError:'Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+C).',pasteMsg:'Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Zalepi iz Worda',title:'Zalepi iz Worda',advice:'Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.',ignoreFontFace:'Ignoriši definicije fontova',removeStyle:'Ukloni definicije stilova'},pasteText:{button:'Zalepi kao čist tekst',title:'Zalepi kao čist tekst'},templates:{button:'Obrasci',title:'Obrasci za sadržaj',insertOption:'Replace actual contents',selectPromptMsg:'Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):',emptyListMsg:'(Nema definisanih obrazaca)'},showBlocks:'Show Blocks',stylesCombo:{label:'Stil',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Format',voiceLabel:'Format',panelTitle:'Format',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatirano',tag_address:'Adresa',tag_h1:'Naslov 1',tag_h2:'Naslov 2',tag_h3:'Naslov 3',tag_h4:'Naslov 4',tag_h5:'Naslov 5',tag_h6:'Naslov 6',tag_div:'Normal (DIV)'},font:{label:'Font',voiceLabel:'Font',panelTitle:'Font',panelVoiceLabel:'Select a font'},fontSize:{label:'Veličina fonta',voiceLabel:'Font Size',panelTitle:'Veličina fonta',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Boja teksta',bgColorTitle:'Boja pozadine',auto:'Automatski',more:'Više boja...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/sr.js b/lang/sr.js
new file mode 100644 (file)
index 0000000..45eab14
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.sr={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Kôд',newPage:'Нова страница',save:'Сачувај',preview:'Изглед странице',cut:'Исеци',copy:'Копирај',paste:'Залепи',print:'Штампа',underline:'Подвучено',bold:'Подебљано',italic:'Курзив',selectAll:'Означи све',removeFormat:'Уклони форматирање',strike:'Прецртано',subscript:'Индекс',superscript:'Степен',horizontalrule:'Унеси хоризонталну линију',pagebreak:'Insert Page Break for Printing',unlink:'Уклони линк',undo:'Поништи акцију',redo:'Понови акцију',common:{browseServer:'Претражи сервер',url:'УРЛ',protocol:'Протокол',upload:'Пошаљи',uploadSubmit:'Пошаљи на сервер',image:'Слика',flash:'Флеш елемент',form:'Форма',checkbox:'Поље за потврду',radio:'Радио-дугме',textField:'Текстуално поље',textarea:'Зона текста',hiddenField:'Скривено поље',button:'Дугме',select:'Изборно поље',imageButton:'Дугме са сликом',notSet:'<није постављено>',id:'Ид',name:'Назив',langDir:'Смер језика',langDirLtr:'С лева на десно (LTR)',langDirRtl:'С десна на лево (RTL)',langCode:'Kôд језика',longDescr:'Пун опис УРЛ',cssClass:'Stylesheet класе',advisoryTitle:'Advisory наслов',cssStyle:'Стил',ok:'OK',cancel:'Oткажи',generalTab:'General',advancedTab:'Напредни тагови',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Унеси специјални карактер',title:'Одаберите специјални карактер'},link:{toolbar:'Унеси/измени линк',menu:'Промени линк',title:'Линк',info:'Линк инфо',target:'Meтa',upload:'Пошаљи',advanced:'Напредни тагови',type:'Врста линка',toAnchor:'Сидро на овој страници',toEmail:'Eлектронска пошта',target:'Meтa',targetNotSet:'<није постављено>',targetFrame:'<оквир>',targetPopup:'<искачући прозор>',targetNew:'Нови прозор (_blank)',targetTop:'Прозор на врху (_top)',targetSelf:'Исти прозор (_self)',targetParent:'Родитељски прозор (_parent)',targetFrameName:'Назив одредишног фрејма',targetPopupName:'Назив искачућег прозора',popupFeatures:'Могућности искачућег прозора',popupResizable:'Resizable',popupStatusBar:'Статусна линија',popupLocationBar:'Локација',popupToolbar:'Toolbar',popupMenuBar:'Контекстни мени',popupFullScreen:'Приказ преко целог екрана (ИE)',popupScrollBars:'Скрол бар',popupDependent:'Зависно (Netscape)',popupWidth:'Ширина',popupLeft:'Од леве ивице екрана (пиксела)',popupHeight:'Висина',popupTop:'Од врха екрана (пиксела)',id:'Id',langDir:'Смер језика',langDirNotSet:'<није постављено>',langDirLTR:'С лева на десно (LTR)',langDirRTL:'С десна на лево (RTL)',acccessKey:'Приступни тастер',name:'Назив',langCode:'Смер језика',tabIndex:'Таб индекс',advisoryTitle:'Advisory наслов',advisoryContentType:'Advisory врста садржаја',cssClasses:'Stylesheet класе',charset:'Linked Resource Charset',styles:'Стил',selectAnchor:'Одабери сидро',anchorName:'По називу сидра',anchorId:'Пo Ид-jу елемента',emailAddress:'Адреса електронске поште',emailSubject:'Наслов',emailBody:'Садржај поруке',noAnchors:'(Нема доступних сидра)',noUrl:'Унесите УРЛ линка',noEmail:'Откуцајте адресу електронске поште'},anchor:{toolbar:'Унеси/измени сидро',menu:'Особине сидра',title:'Особине сидра',name:'Име сидра',errorName:'Молимо Вас да унесете име сидра'},findAndReplace:{title:'Find and Replace',find:'Претрага',replace:'Замена',findWhat:'Пронађи:',replaceWith:'Замени са:',notFoundMsg:'Тражени текст није пронађен.',matchCase:'Разликуј велика и мала слова',matchWord:'Упореди целе речи',matchCyclic:'Match cyclic',replaceAll:'Замени све',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Табела',title:'Особине табеле',menu:'Особине табеле',deleteTable:'Delete Table',rows:'Редова',columns:'Kолона',border:'Величина оквира',align:'Равнање',alignNotSet:'<није постављено>',alignLeft:'Лево',alignCenter:'Средина',alignRight:'Десно',width:'Ширина',widthPx:'пиксела',widthPc:'процената',height:'Висина',cellSpace:'Ћелијски простор',cellPad:'Размак ћелија',caption:'Наслов табеле',summary:'Summary',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'Обриши ћелије',merge:'Спој ћелије',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Row',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'Обриши редове'},column:{menu:'Column',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'Обриши колоне'}},button:{title:'Особине дугмета',text:'Текст (вредност)',type:'Tип',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'Особине поља за потврду',radioTitle:'Особине радио-дугмета',value:'Вредност',selected:'Означено'},form:{title:'Особине форме',menu:'Особине форме',action:'Aкција',method:'Mетода',encoding:'Encoding',target:'Meтa',targetNotSet:'<није постављено>',targetNew:'Нови прозор (_blank)',targetTop:'Прозор на врху (_top)',targetSelf:'Исти прозор (_self)',targetParent:'Родитељски прозор (_parent)'},select:{title:'Особине изборног поља',selectInfo:'Инфо',opAvail:'Доступне опције',value:'Вредност',size:'Величина',lines:'линија',chkMulti:'Дозволи вишеструку селекцију',opText:'Текст',opValue:'Вредност',btnAdd:'Додај',btnModify:'Измени',btnUp:'Горе',btnDown:'Доле',btnSetValue:'Подеси као означену вредност',btnDelete:'Обриши'},textarea:{title:'Особине зоне текста',cols:'Број колона',rows:'Број редова'},textfield:{title:'Особине текстуалног поља',name:'Назив',value:'Вредност',charWidth:'Ширина (карактера)',maxChars:'Максимално карактера',type:'Тип',typeText:'Текст',typePass:'Лозинка'},hidden:{title:'Особине скривеног поља',name:'Назив',value:'Вредност'},image:{title:'Особине слика',titleButton:'Особине дугмета са сликом',menu:'Особине слика',infoTab:'Инфо слике',btnUpload:'Пошаљи на сервер',url:'УРЛ',upload:'Пошаљи',alt:'Алтернативни текст',width:'Ширина',height:'Висина',lockRatio:'Закључај однос',resetSize:'Ресетуј величину',border:'Оквир',hSpace:'HSpace',vSpace:'VSpace',align:'Равнање',alignLeft:'Лево',alignAbsBottom:'Abs доле',alignAbsMiddle:'Abs средина',alignBaseline:'Базно',alignBottom:'Доле',alignMiddle:'Средина',alignRight:'Десно',alignTextTop:'Врх текста',alignTop:'Врх',preview:'Изглед',alertUrl:'Унесите УРЛ слике',linkTab:'Линк',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Особине Флеша',propertiesTab:'Properties',title:'Особине флеша',chkPlay:'Аутоматски старт',chkLoop:'Понављај',chkMenu:'Укључи флеш мени',chkFull:'Allow Fullscreen',scale:'Скалирај',scaleAll:'Прикажи све',scaleNoBorder:'Без ивице',scaleFit:'Попуни површину',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Равнање',alignLeft:'Лево',alignAbsBottom:'Abs доле',alignAbsMiddle:'Abs средина',alignBaseline:'Базно',alignBottom:'Доле',alignMiddle:'Средина',alignRight:'Десно',alignTextTop:'Врх текста',alignTop:'Врх',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Боја позадине',width:'Ширина',height:'Висина',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Унесите УРЛ линка',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Провери спеловање',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Није у речнику',changeTo:'Измени',btnIgnore:'Игнориши',btnIgnoreAll:'Игнориши све',btnReplace:'Замени',btnReplaceAll:'Замени све',btnUndo:'Врати акцију',noSuggestions:'- Без сугестија -',progress:'Провера спеловања у току...',noMispell:'Провера спеловања завршена: грешке нису пронађене',noChanges:'Провера спеловања завршена: Није измењена ниједна реч',oneChange:'Провера спеловања завршена: Измењена је једна реч',manyChanges:'Провера спеловања завршена:  %1 реч(и) је измењено',ieSpellDownload:'Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?'},smiley:{toolbar:'Смајли',title:'Унеси смајлија'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Набројиву листу',bulletedlist:'Ненабројива листа',indent:'Увећај леву маргину',outdent:'Смањи леву маргину',justify:{left:'Лево равнање',center:'Центриран текст',right:'Десно равнање',block:'Обострано равнање'},blockquote:'Blockquote',clipboard:{title:'Залепи',cutError:'Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+X).',copyError:'Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+C).',pasteMsg:'Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'Залепи из Worda',title:'Залепи из Worda',advice:'Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.',ignoreFontFace:'Игнориши Font Face дефиниције',removeStyle:'Уклони дефиниције стилова'},pasteText:{button:'Залепи као чист текст',title:'Залепи као чист текст'},templates:{button:'Обрасци',title:'Обрасци за садржај',insertOption:'Replace actual contents',selectPromptMsg:'Молимо Вас да одаберете образац који ће бити примењен на страницу (тренутни садржај ће бити обрисан):',emptyListMsg:'(Нема дефинисаних образаца)'},showBlocks:'Show Blocks',stylesCombo:{label:'Стил',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Формат',voiceLabel:'Format',panelTitle:'Формат',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatirano',tag_address:'Adresa',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},font:{label:'Фонт',voiceLabel:'Font',panelTitle:'Фонт',panelVoiceLabel:'Select a font'},fontSize:{label:'Величина фонта',voiceLabel:'Font Size',panelTitle:'Величина фонта',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Боја текста',bgColorTitle:'Боја позадине',auto:'Аутоматски',more:'Више боја...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/sv.js b/lang/sv.js
new file mode 100644 (file)
index 0000000..4da196b
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.sv={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Källa',newPage:'Ny sida',save:'Spara',preview:'Förhandsgranska',cut:'Klipp ut',copy:'Kopiera',paste:'Klistra in',print:'Skriv ut',underline:'Understruken',bold:'Fet',italic:'Kursiv',selectAll:'Markera allt',removeFormat:'Radera formatering',strike:'Genomstruken',subscript:'Nedsänkta tecken',superscript:'Upphöjda tecken',horizontalrule:'Infoga horisontal linje',pagebreak:'Infoga sidbrytning',unlink:'Radera länk',undo:'Ångra',redo:'Gör om',common:{browseServer:'Bläddra på server',url:'URL',protocol:'Protokoll',upload:'Ladda upp',uploadSubmit:'Skicka till server',image:'Bild',flash:'Flash',form:'Formulär',checkbox:'Kryssruta',radio:'Alternativknapp',textField:'Textfält',textarea:'Textruta',hiddenField:'Dolt fält',button:'Knapp',select:'Flervalslista',imageButton:'Bildknapp',notSet:'<ej angivet>',id:'Id',name:'Namn',langDir:'Språkriktning',langDirLtr:'Vänster till Höger (VTH)',langDirRtl:'Höger till Vänster (HTV)',langCode:'Språkkod',longDescr:'URL-beskrivning',cssClass:'Stylesheet class',advisoryTitle:'Titel',cssStyle:'Style',ok:'OK',cancel:'Avbryt',generalTab:'General',advancedTab:'Avancerad',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Klistra in utökat tecken',title:'Välj utökat tecken'},link:{toolbar:'Infoga/Redigera länk',menu:'Redigera länk',title:'Länk',info:'Länkinformation',target:'Mål',upload:'Ladda upp',advanced:'Avancerad',type:'Länktyp',toAnchor:'Ankare i sidan',toEmail:'E-post',target:'Mål',targetNotSet:'<ej angivet>',targetFrame:'<ram>',targetPopup:'<popup-fönster>',targetNew:'Nytt fönster (_blank)',targetTop:'Översta fönstret (_top)',targetSelf:'Detta fönstret (_self)',targetParent:'Föregående Window (_parent)',targetFrameName:'Målets ramnamn',targetPopupName:'Popup-fönstrets namn',popupFeatures:'Popup-fönstrets egenskaper',popupResizable:'Resizable',popupStatusBar:'Statusfält',popupLocationBar:'Adressfält',popupToolbar:'Verktygsfält',popupMenuBar:'Menyfält',popupFullScreen:'Helskärm (endast IE)',popupScrollBars:'Scrolllista',popupDependent:'Beroende (endest Netscape)',popupWidth:'Bredd',popupLeft:'Position från vänster',popupHeight:'Höjd',popupTop:'Position från sidans topp',id:'Id',langDir:'Språkriktning',langDirNotSet:'<ej angivet>',langDirLTR:'Vänster till Höger (VTH)',langDirRTL:'Höger till Vänster (HTV)',acccessKey:'Behörighetsnyckel',name:'Namn',langCode:'Språkriktning',tabIndex:'Tabindex',advisoryTitle:'Titel',advisoryContentType:'Innehållstyp',cssClasses:'Stylesheet class',charset:'Teckenuppställning',styles:'Style',selectAnchor:'Välj ett ankare',anchorName:'efter ankarnamn',anchorId:'efter objektid',emailAddress:'E-postadress',emailSubject:'Ämne',emailBody:'Innehåll',noAnchors:'(Inga ankare kunde hittas)',noUrl:'Var god ange länkens URL',noEmail:'Var god ange E-postadress'},anchor:{toolbar:'Infoga/Redigera ankarlänk',menu:'Egenskaper för ankarlänk',title:'Egenskaper för ankarlänk',name:'Ankarnamn',errorName:'Var god ange ett ankarnamn'},findAndReplace:{title:'Sök och ersätt',find:'Sök',replace:'Ersätt',findWhat:'Sök efter:',replaceWith:'Ersätt med:',notFoundMsg:'Angiven text kunde ej hittas.',matchCase:'Skiftläge',matchWord:'Inkludera hela ord',matchCyclic:'Match cyclic',replaceAll:'Ersätt alla',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tabell',title:'Tabellegenskaper',menu:'Tabellegenskaper',deleteTable:'Radera tabell',rows:'Rader',columns:'Kolumner',border:'Kantstorlek',align:'Justering',alignNotSet:'<ej angivet>',alignLeft:'Vänster',alignCenter:'Centrerad',alignRight:'Höger',width:'Bredd',widthPx:'pixlar',widthPc:'procent',height:'Höjd',cellSpace:'Cellavstånd',cellPad:'Cellutfyllnad',caption:'Rubrik',summary:'Sammanfattning',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Cell',insertBefore:'Lägg till Cell Före',insertAfter:'Lägg till Cell Efter',deleteCell:'Radera celler',merge:'Sammanfoga celler',mergeRight:'Sammanfoga Höger',mergeDown:'Sammanfoga Ner',splitHorizontal:'Dela Cell Horisontellt',splitVertical:'Dela Cell Vertikalt',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Rad',insertBefore:'Lägg till Rad Före',insertAfter:'Lägg till Rad Efter',deleteRow:'Radera rad'},column:{menu:'Kolumn',insertBefore:'Lägg till Kolumn Före',insertAfter:'Lägg till Kolumn Efter',deleteColumn:'Radera kolumn'}},button:{title:'Egenskaper för knapp',text:'Text (Värde)',type:'Typ',typeBtn:'Knapp',typeSbm:'Skicka',typeRst:'Återställ'},checkboxAndRadio:{checkboxTitle:'Egenskaper för kryssruta',radioTitle:'Egenskaper för alternativknapp',value:'Värde',selected:'Vald'},form:{title:'Egenskaper för formulär',menu:'Egenskaper för formulär',action:'Funktion',method:'Metod',encoding:'Encoding',target:'Mål',targetNotSet:'<ej angivet>',targetNew:'Nytt fönster (_blank)',targetTop:'Översta fönstret (_top)',targetSelf:'Detta fönstret (_self)',targetParent:'Föregående Window (_parent)'},select:{title:'Egenskaper för flervalslista',selectInfo:'Information',opAvail:'Befintliga val',value:'Värde',size:'Storlek',lines:'Linjer',chkMulti:'Tillåt flerval',opText:'Text',opValue:'Värde',btnAdd:'Lägg till',btnModify:'Redigera',btnUp:'Upp',btnDown:'Ner',btnSetValue:'Markera som valt värde',btnDelete:'Radera'},textarea:{title:'Egenskaper för textruta',cols:'Kolumner',rows:'Rader'},textfield:{title:'Egenskaper för textfält',name:'Namn',value:'Värde',charWidth:'Teckenbredd',maxChars:'Max antal tecken',type:'Typ',typeText:'Text',typePass:'Lösenord'},hidden:{title:'Egenskaper för dolt fält',name:'Namn',value:'Värde'},image:{title:'Bildegenskaper',titleButton:'Egenskaper för bildknapp',menu:'Bildegenskaper',infoTab:'Bildinformation',btnUpload:'Skicka till server',url:'URL',upload:'Ladda upp',alt:'Alternativ text',width:'Bredd',height:'Höjd',lockRatio:'Lås höjd/bredd förhållanden',resetSize:'Återställ storlek',border:'Kant',hSpace:'Horis. marginal',vSpace:'Vert. marginal',align:'Justering',alignLeft:'Vänster',alignAbsBottom:'Absolut nederkant',alignAbsMiddle:'Absolut centrering',alignBaseline:'Baslinje',alignBottom:'Nederkant',alignMiddle:'Mitten',alignRight:'Höger',alignTextTop:'Text överkant',alignTop:'Överkant',preview:'Förhandsgranska',alertUrl:'Var god och ange bildens URL',linkTab:'Länk',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flashegenskaper',propertiesTab:'Properties',title:'Flashegenskaper',chkPlay:'Automatisk uppspelning',chkLoop:'Upprepa/Loopa',chkMenu:'Aktivera Flashmeny',chkFull:'Allow Fullscreen',scale:'Skala',scaleAll:'Visa allt',scaleNoBorder:'Ingen ram',scaleFit:'Exakt passning',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Justering',alignLeft:'Vänster',alignAbsBottom:'Absolut nederkant',alignAbsMiddle:'Absolut centrering',alignBaseline:'Baslinje',alignBottom:'Nederkant',alignMiddle:'Mitten',alignRight:'Höger',alignTextTop:'Text överkant',alignTop:'Överkant',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Bakgrundsfärg',width:'Bredd',height:'Höjd',hSpace:'Horis. marginal',vSpace:'Vert. marginal',validateSrc:'Var god ange länkens URL',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Stavningskontroll',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Saknas i ordlistan',changeTo:'Ändra till',btnIgnore:'Ignorera',btnIgnoreAll:'Ignorera alla',btnReplace:'Ersätt',btnReplaceAll:'Ersätt alla',btnUndo:'Ångra',noSuggestions:'- Förslag saknas -',progress:'Stavningskontroll pågår...',noMispell:'Stavningskontroll slutförd: Inga stavfel påträffades.',noChanges:'Stavningskontroll slutförd: Inga ord rättades.',oneChange:'Stavningskontroll slutförd: Ett ord rättades.',manyChanges:'Stavningskontroll slutförd: %1 ord rättades.',ieSpellDownload:'Stavningskontrollen är ej installerad. Vill du göra det nu?'},smiley:{toolbar:'Smiley',title:'Infoga smiley'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Numrerad lista',bulletedlist:'Punktlista',indent:'Öka indrag',outdent:'Minska indrag',justify:{left:'Vänsterjustera',center:'Centrera',right:'Högerjustera',block:'Justera till marginaler'},blockquote:'Blockquote',clipboard:{title:'Klistra in',cutError:'Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klipp ut. Använd (Ctrl+X) istället.',copyError:'Säkerhetsinställningar i Er webläsare tillåter inte åtgården Kopiera. Använd (Ctrl+C) istället',pasteMsg:'Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.',securityMsg:'På grund av din webläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.'},pastefromword:{toolbar:'Klistra in från Word',title:'Klistra in från Word',advice:'Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.',ignoreFontFace:'Ignorera typsnittsdefinitioner',removeStyle:'Radera Stildefinitioner'},pasteText:{button:'Klistra in som vanlig text',title:'Klistra in som vanlig text'},templates:{button:'Sidmallar',title:'Sidmallar',insertOption:'Ersätt aktuellt innehåll',selectPromptMsg:'Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):',emptyListMsg:'(Ingen mall är vald)'},showBlocks:'Show Blocks',stylesCombo:{label:'Anpassad stil',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Teckenformat',voiceLabel:'Format',panelTitle:'Teckenformat',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formaterad',tag_address:'Adress',tag_h1:'Rubrik 1',tag_h2:'Rubrik 2',tag_h3:'Rubrik 3',tag_h4:'Rubrik 4',tag_h5:'Rubrik 5',tag_h6:'Rubrik 6',tag_div:'Normal (DIV)'},font:{label:'Typsnitt',voiceLabel:'Font',panelTitle:'Typsnitt',panelVoiceLabel:'Select a font'},fontSize:{label:'Storlek',voiceLabel:'Font Size',panelTitle:'Storlek',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Textfärg',bgColorTitle:'Bakgrundsfärg',auto:'Automatisk',more:'Fler färger...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/th.js b/lang/th.js
new file mode 100644 (file)
index 0000000..53f17d3
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.th={dir:'ltr',editorTitle:'Rich text editor, %1',source:'ดูรหัส HTML',newPage:'สร้างหน้าเอกสารใหม่',save:'บันทึก',preview:'ดูหน้าเอกสารตัวอย่าง',cut:'ตัด',copy:'สำเนา',paste:'วาง',print:'สั่งพิมพ์',underline:'ตัวขีดเส้นใต้',bold:'ตัวหนา',italic:'ตัวเอียง',selectAll:'เลือกทั้งหมด',removeFormat:'ล้างรูปแบบ',strike:'ตัวขีดเส้นทับ',subscript:'ตัวห้อย',superscript:'ตัวยก',horizontalrule:'แทรกเส้นคั่นบรรทัด',pagebreak:'แทรกตัวแบ่งหน้า Page Break',unlink:'ลบ ลิงค์',undo:'ยกเลิกคำสั่ง',redo:'ทำซ้ำคำสั่ง',common:{browseServer:'เปิดหน้าต่างจัดการไฟล์อัพโหลด',url:'ที่อยู่อ้างอิง URL',protocol:'โปรโตคอล',upload:'อัพโหลดไฟล์',uploadSubmit:'อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)',image:'รูปภาพ',flash:'ไฟล์ Flash',form:'แบบฟอร์ม',checkbox:'เช็คบ๊อก',radio:'เรดิโอบัตตอน',textField:'เท็กซ์ฟิลด์',textarea:'เท็กซ์แอเรีย',hiddenField:'ฮิดเดนฟิลด์',button:'ปุ่ม',select:'แถบตัวเลือก',imageButton:'ปุ่มแบบรูปภาพ',notSet:'<ไม่ระบุ>',id:'ไอดี',name:'ชื่อ',langDir:'การเขียน-อ่านภาษา',langDirLtr:'จากซ้ายไปขวา (LTR)',langDirRtl:'จากขวามาซ้าย (RTL)',langCode:'รหัสภาษา',longDescr:'คำอธิบายประกอบ URL',cssClass:'คลาสของไฟล์กำหนดลักษณะการแสดงผล',advisoryTitle:'คำเกริ่นนำ',cssStyle:'ลักษณะการแสดงผล',ok:'ตกลง',cancel:'ยกเลิก',generalTab:'General',advancedTab:'ขั้นสูง',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'แทรกตัวอักษรพิเศษ',title:'แทรกตัวอักษรพิเศษ'},link:{toolbar:'แทรก/แก้ไข ลิงค์',menu:'แก้ไข ลิงค์',title:'ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ',info:'รายละเอียด',target:'การเปิดหน้าลิงค์',upload:'อัพโหลดไฟล์',advanced:'ขั้นสูง',type:'ประเภทของลิงค์',toAnchor:'จุดเชื่อมโยง (Anchor)',toEmail:'ส่งอีเมล์ (E-Mail)',target:'การเปิดหน้าลิงค์',targetNotSet:'<ไม่ระบุ>',targetFrame:'<เปิดในเฟรม>',targetPopup:'<เปิดหน้าจอเล็ก (Pop-up)>',targetNew:'เปิดหน้าจอใหม่ (_blank)',targetTop:'เปิดในหน้าบนสุด (_top)',targetSelf:'เปิดในหน้าปัจจุบัน (_self)',targetParent:'เปิดในหน้าหลัก (_parent)',targetFrameName:'ชื่อทาร์เก็ตเฟรม',targetPopupName:'ระบุชื่อหน้าจอเล็ก (Pop-up)',popupFeatures:'คุณสมบัติของหน้าจอเล็ก (Pop-up)',popupResizable:'Resizable',popupStatusBar:'แสดงแถบสถานะ',popupLocationBar:'แสดงที่อยู่ของไฟล์',popupToolbar:'แสดงแถบเครื่องมือ',popupMenuBar:'แสดงแถบเมนู',popupFullScreen:'แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)',popupScrollBars:'แสดงแถบเลื่อน',popupDependent:'แสดงเต็มหน้าจอ (Netscape)',popupWidth:'กว้าง',popupLeft:'พิกัดซ้าย (Left Position)',popupHeight:'สูง',popupTop:'พิกัดบน (Top Position)',id:'Id',langDir:'การเขียน-อ่านภาษา',langDirNotSet:'<ไม่ระบุ>',langDirLTR:'จากซ้ายไปขวา (LTR)',langDirRTL:'จากขวามาซ้าย (RTL)',acccessKey:'แอคเซส คีย์',name:'ชื่อ',langCode:'การเขียน-อ่านภาษา',tabIndex:'ลำดับของ แท็บ',advisoryTitle:'คำเกริ่นนำ',advisoryContentType:'ชนิดของคำเกริ่นนำ',cssClasses:'คลาสของไฟล์กำหนดลักษณะการแสดงผล',charset:'ลิงค์เชื่อมโยงไปยังชุดตัวอักษร',styles:'ลักษณะการแสดงผล',selectAnchor:'ระบุข้อมูลของจุดเชื่อมโยง (Anchor)',anchorName:'ชื่อ',anchorId:'ไอดี',emailAddress:'อีเมล์ (E-Mail)',emailSubject:'หัวเรื่อง',emailBody:'ข้อความ',noAnchors:'(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)',noUrl:'กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)',noEmail:'กรุณาระบุอีเมล์ (E-mail)'},anchor:{toolbar:'แทรก/แก้ไข Anchor',menu:'รายละเอียด Anchor',title:'รายละเอียด Anchor',name:'ชื่อ Anchor',errorName:'กรุณาระบุชื่อของ Anchor'},findAndReplace:{title:'Find and Replace',find:'ค้นหา',replace:'ค้นหาและแทนที่',findWhat:'ค้นหาคำว่า:',replaceWith:'แทนที่ด้วย:',notFoundMsg:'ไม่พบคำที่ค้นหา.',matchCase:'ตัวโหญ่-เล็ก ต้องตรงกัน',matchWord:'ต้องตรงกันทุกคำ',matchCyclic:'Match cyclic',replaceAll:'แทนที่ทั้งหมดที่พบ',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'ตาราง',title:'คุณสมบัติของ ตาราง',menu:'คุณสมบัติของ ตาราง',deleteTable:'ลบตาราง',rows:'แถว',columns:'สดมน์',border:'ขนาดเส้นขอบ',align:'การจัดตำแหน่ง',alignNotSet:'<ไม่ระบุ>',alignLeft:'ชิดซ้าย',alignCenter:'กึ่งกลาง',alignRight:'ชิดขวา',width:'กว้าง',widthPx:'จุดสี',widthPc:'เปอร์เซ็น',height:'สูง',cellSpace:'ระยะแนวนอนน',cellPad:'ระยะแนวตั้ง',caption:'หัวเรื่องของตาราง',summary:'สรุปความ',headers:'Headers',headersNone:'None',headersColumn:'First column',headersRow:'First Row',headersBoth:'Both',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'ช่องตาราง',insertBefore:'Insert Cell Before',insertAfter:'Insert Cell After',deleteCell:'ลบช่อง',merge:'ผสานช่อง',mergeRight:'Merge Right',mergeDown:'Merge Down',splitHorizontal:'Split Cell Horizontally',splitVertical:'Split Cell Vertically',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'แถว',insertBefore:'Insert Row Before',insertAfter:'Insert Row After',deleteRow:'ลบแถว'},column:{menu:'คอลัมน์',insertBefore:'Insert Column Before',insertAfter:'Insert Column After',deleteColumn:'ลบสดมน์'}},button:{title:'รายละเอียดของ ปุ่ม',text:'ข้อความ (ค่าตัวแปร)',type:'ข้อความ',typeBtn:'Button',typeSbm:'Submit',typeRst:'Reset'},checkboxAndRadio:{checkboxTitle:'คุณสมบัติของ เช็คบ๊อก',radioTitle:'คุณสมบัติของ เรดิโอบัตตอน',value:'ค่าตัวแปร',selected:'เลือกเป็นค่าเริ่มต้น'},form:{title:'คุณสมบัติของ แบบฟอร์ม',menu:'คุณสมบัติของ แบบฟอร์ม',action:'แอคชั่น',method:'เมธอด',encoding:'Encoding',target:'การเปิดหน้าลิงค์',targetNotSet:'<ไม่ระบุ>',targetNew:'เปิดหน้าจอใหม่ (_blank)',targetTop:'เปิดในหน้าบนสุด (_top)',targetSelf:'เปิดในหน้าปัจจุบัน (_self)',targetParent:'เปิดในหน้าหลัก (_parent)'},select:{title:'คุณสมบัติของ แถบตัวเลือก',selectInfo:'อินโฟ',opAvail:'รายการตัวเลือก',value:'ค่าตัวแปร',size:'ขนาด',lines:'บรรทัด',chkMulti:'เลือกหลายค่าได้',opText:'ข้อความ',opValue:'ค่าตัวแปร',btnAdd:'เพิ่ม',btnModify:'แก้ไข',btnUp:'บน',btnDown:'ล่าง',btnSetValue:'เลือกเป็นค่าเริ่มต้น',btnDelete:'ลบ'},textarea:{title:'คุณสมบัติของ เท็กแอเรีย',cols:'สดมภ์',rows:'แถว'},textfield:{title:'คุณสมบัติของ เท็กซ์ฟิลด์',name:'ชื่อ',value:'ค่าตัวแปร',charWidth:'ความกว้าง',maxChars:'จำนวนตัวอักษรสูงสุด',type:'ชนิด',typeText:'ข้อความ',typePass:'รหัสผ่าน'},hidden:{title:'คุณสมบัติของ ฮิดเดนฟิลด์',name:'ชื่อ',value:'ค่าตัวแปร'},image:{title:'คุณสมบัติของ รูปภาพ',titleButton:'คุณสมบัติของ ปุ่มแบบรูปภาพ',menu:'คุณสมบัติของ รูปภาพ',infoTab:'ข้อมูลของรูปภาพ',btnUpload:'อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)',url:'ที่อยู่อ้างอิง URL',upload:'อัพโหลดไฟล์',alt:'คำประกอบรูปภาพ',width:'ความกว้าง',height:'ความสูง',lockRatio:'กำหนดอัตราส่วน กว้าง-สูง แบบคงที่',resetSize:'กำหนดรูปเท่าขนาดจริง',border:'ขนาดขอบรูป',hSpace:'ระยะแนวนอน',vSpace:'ระยะแนวตั้ง',align:'การจัดวาง',alignLeft:'ชิดซ้าย',alignAbsBottom:'ชิดด้านล่างสุด',alignAbsMiddle:'กึ่งกลาง',alignBaseline:'ชิดบรรทัด',alignBottom:'ชิดด้านล่าง',alignMiddle:'กึ่งกลางแนวตั้ง',alignRight:'ชิดขวา',alignTextTop:'ใต้ตัวอักษร',alignTop:'บนสุด',preview:'หน้าเอกสารตัวอย่าง',alertUrl:'กรุณาระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)',linkTab:'ลิ้งค์',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'คุณสมบัติของไฟล์ Flash',propertiesTab:'Properties',title:'คุณสมบัติของไฟล์ Flash',chkPlay:'เล่นอัตโนมัติ Auto Play',chkLoop:'เล่นวนรอบ Loop',chkMenu:'ให้ใช้งานเมนูของ Flash',chkFull:'Allow Fullscreen',scale:'อัตราส่วน Scale',scaleAll:'แสดงให้เห็นทั้งหมด Show all',scaleNoBorder:'ไม่แสดงเส้นขอบ No Border',scaleFit:'แสดงให้พอดีกับพื้นที่ Exact Fit',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'การจัดวาง',alignLeft:'ชิดซ้าย',alignAbsBottom:'ชิดด้านล่างสุด',alignAbsMiddle:'กึ่งกลาง',alignBaseline:'ชิดบรรทัด',alignBottom:'ชิดด้านล่าง',alignMiddle:'กึ่งกลางแนวตั้ง',alignRight:'ชิดขวา',alignTextTop:'ใต้ตัวอักษร',alignTop:'บนสุด',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'สีพื้นหลัง',width:'ความกว้าง',height:'ความสูง',hSpace:'ระยะแนวนอน',vSpace:'ระยะแนวตั้ง',validateSrc:'กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)',validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'ตรวจการสะกดคำ',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'ไม่พบในดิกชันนารี',changeTo:'แก้ไขเป็น',btnIgnore:'ยกเว้น',btnIgnoreAll:'ยกเว้นทั้งหมด',btnReplace:'แทนที่',btnReplaceAll:'แทนที่ทั้งหมด',btnUndo:'ยกเลิก',noSuggestions:'- ไม่มีคำแนะนำใดๆ -',progress:'กำลังตรวจสอบคำสะกด...',noMispell:'ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด',noChanges:'ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ',oneChange:'ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ',manyChanges:'ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ',ieSpellDownload:'ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?'},smiley:{toolbar:'รูปสื่ออารมณ์',title:'แทรกสัญลักษณ์สื่ออารมณ์'},elementsPath:{eleTitle:'%1 element'},numberedlist:'ลำดับรายการแบบตัวเลข',bulletedlist:'ลำดับรายการแบบสัญลักษณ์',indent:'เพิ่มระยะย่อหน้า',outdent:'ลดระยะย่อหน้า',justify:{left:'จัดชิดซ้าย',center:'จัดกึ่งกลาง',right:'จัดชิดขวา',block:'จัดพอดีหน้ากระดาษ'},blockquote:'Blockquote',clipboard:{title:'วาง',cutError:'ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว X พร้อมกัน).',copyError:'ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว C พร้อมกัน).',pasteMsg:'กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.',securityMsg:'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'},pastefromword:{toolbar:'วางสำเนาจากตัวอักษรเวิร์ด',title:'วางสำเนาจากตัวอักษรเวิร์ด',advice:'กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.',ignoreFontFace:'ไม่สนใจ Font Face definitions',removeStyle:'ลบ Styles definitions'},pasteText:{button:'วางแบบตัวอักษรธรรมดา',title:'วางแบบตัวอักษรธรรมดา'},templates:{button:'เทมเพลต',title:'เทมเพลตของส่วนเนื้อหาเว็บไซต์',insertOption:'แทนที่เนื้อหาเว็บไซต์ที่เลือก',selectPromptMsg:'กรุณาเลือก เทมเพลต เพื่อนำไปแก้ไขในอีดิตเตอร์<br />(เนื้อหาส่วนนี้จะหายไป):',emptyListMsg:'(ยังไม่มีการกำหนดเทมเพลต)'},showBlocks:'Show Blocks',stylesCombo:{label:'ลักษณะ',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'รูปแบบ',voiceLabel:'Format',panelTitle:'รูปแบบ',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Paragraph (DIV)'},font:{label:'แบบอักษร',voiceLabel:'Font',panelTitle:'แบบอักษร',panelVoiceLabel:'Select a font'},fontSize:{label:'ขนาด',voiceLabel:'Font Size',panelTitle:'ขนาด',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'สีตัวอักษร',bgColorTitle:'สีพื้นหลัง',auto:'สีอัตโนมัติ',more:'เลือกสีอื่นๆ...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/tr.js b/lang/tr.js
new file mode 100644 (file)
index 0000000..9ed199b
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.tr={dir:'ltr',editorTitle:'Rich text editor, %1',source:'Kaynak',newPage:'Yeni Sayfa',save:'Kaydet',preview:'Ön İzleme',cut:'Kes',copy:'Kopyala',paste:'Yapıştır',print:'Yazdır',underline:'Altı Çizgili',bold:'Kalın',italic:'İtalik',selectAll:'Tümünü Seç',removeFormat:'Biçimi Kaldır',strike:'Üstü Çizgili',subscript:'Alt Simge',superscript:'Üst Simge',horizontalrule:'Yatay Satır Ekle',pagebreak:'Sayfa Sonu Ekle',unlink:'Köprü Kaldır',undo:'Geri Al',redo:'Tekrarla',common:{browseServer:'Sunucuyu Gez',url:'URL',protocol:'Protokol',upload:'Karşıya Yükle',uploadSubmit:'Sunucuya Yolla',image:'Resim',flash:'Flash',form:'Form',checkbox:'Onay Kutusu',radio:'Seçenek Düğmesi',textField:'Metin Girişi',textarea:'Çok Satırlı Metin',hiddenField:'Gizli Veri',button:'Düğme',select:'Seçim Menüsü',imageButton:'Resimli Düğme',notSet:'<tanımlanmamış>',id:'Kimlik',name:'Ad',langDir:'Dil Yönü',langDirLtr:'Soldan Sağa (LTR)',langDirRtl:'Sağdan Sola (RTL)',langCode:'Dil Kodlaması',longDescr:'Uzun Tanımlı URL',cssClass:'Biçem Sayfası Sınıfları',advisoryTitle:'Danışma Başlığı',cssStyle:'Biçem',ok:'Tamam',cancel:'İptal',generalTab:'Genel',advancedTab:'Gelişmiş',validateNumberFailed:'This value is not a number.',confirmNewPage:'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',confirmCancel:'Some of the options have been changed. Are you sure to close the dialog?',unavailable:'%1<span class="cke_accessibility">, unavailable</span>'},specialChar:{toolbar:'Özel Karakter Ekle',title:'Özel Karakter Seç'},link:{toolbar:'Köprü Ekle/Düzenle',menu:'Köprü Düzenle',title:'Köprü',info:'Köprü Bilgisi',target:'Hedef',upload:'Karşıya Yükle',advanced:'Gelişmiş',type:'Köprü Türü',toAnchor:'Bu sayfada çapa',toEmail:'E-Posta',target:'Hedef',targetNotSet:'<tanımlanmamış>',targetFrame:'<çerçeve>',targetPopup:'<yeni açılan pencere>',targetNew:'Yeni Pencere(_blank)',targetTop:'En Üst Pencere (_top)',targetSelf:'Kendi Penceresi (_self)',targetParent:'Anne Pencere (_parent)',targetFrameName:'Hedef Çerçeve Adı',targetPopupName:'Yeni Açılan Pencere Adı',popupFeatures:'Yeni Açılan Pencere Özellikleri',popupResizable:'Resizable',popupStatusBar:'Durum Çubuğu',popupLocationBar:'Yer Çubuğu',popupToolbar:'Araç Çubuğu',popupMenuBar:'Menü Çubuğu',popupFullScreen:'Tam Ekran (IE)',popupScrollBars:'Kaydırma Çubukları',popupDependent:'Bağımlı (Netscape)',popupWidth:'Genişlik',popupLeft:'Sola Göre Konum',popupHeight:'Yükseklik',popupTop:'Yukarıya Göre Konum',id:'Id',langDir:'Dil Yönü',langDirNotSet:'<tanımlanmamış>',langDirLTR:'Soldan Sağa (LTR)',langDirRTL:'Sağdan Sola (RTL)',acccessKey:'Erişim Tuşu',name:'Ad',langCode:'Dil Yönü',tabIndex:'Sekme İndeksi',advisoryTitle:'Danışma Başlığı',advisoryContentType:'Danışma İçerik Türü',cssClasses:'Biçem Sayfası Sınıfları',charset:'Bağlı Kaynak Karakter Gurubu',styles:'Biçem',selectAnchor:'Çapa Seç',anchorName:'Çapa Adı ile',anchorId:'Eleman Kimlik Numarası ile',emailAddress:'E-Posta Adresi',emailSubject:'İleti Konusu',emailBody:'İleti Gövdesi',noAnchors:'(Bu belgede hiç çapa yok)',noUrl:"Lütfen köprü URL'sini yazın",noEmail:'Lütfen E-posta adresini yazın'},anchor:{toolbar:'Çapa Ekle/Düzenle',menu:'Çapa Özellikleri',title:'Çapa Özellikleri',name:'Çapa Adı',errorName:'Lütfen çapa için ad giriniz'},findAndReplace:{title:'Bul ve Değiştir',find:'Bul',replace:'Değiştir',findWhat:'Aranan:',replaceWith:'Bununla değiştir:',notFoundMsg:'Belirtilen yazı bulunamadı.',matchCase:'Büyük/küçük harf duyarlı',matchWord:'Kelimenin tamamı uysun',matchCyclic:'Match cyclic',replaceAll:'Tümünü Değiştir',replaceSuccessMsg:'%1 occurrence(s) replaced.'},table:{toolbar:'Tablo',title:'Tablo Özellikleri',menu:'Tablo Özellikleri',deleteTable:'Tabloyu Sil',rows:'Satırlar',columns:'Sütunlar',border:'Kenar Kalınlığı',align:'Hizalama',alignNotSet:'<Tanımlanmamış>',alignLeft:'Sol',alignCenter:'Merkez',alignRight:'Sağ',width:'Genişlik',widthPx:'piksel',widthPc:'yüzde',height:'Yükseklik',cellSpace:'Izgara kalınlığı',cellPad:'Izgara yazı arası',caption:'Başlık',summary:'Özet',headers:'Başlıklar',headersNone:'Yok',headersColumn:'İlk Sütun',headersRow:'İlk Satır',headersBoth:'Her İkisi',invalidRows:'Number of rows must be a number greater than 0.',invalidCols:'Number of columns must be a number greater than 0.',invalidBorder:'Border size must be a number.',invalidWidth:'Table width must be a number.',invalidHeight:'Table height must be a number.',invalidCellSpacing:'Cell spacing must be a number.',invalidCellPadding:'Cell padding must be a number.',cell:{menu:'Hücre',insertBefore:'Hücre Ekle - Önce',insertAfter:'Hücre Ekle - Sonra',deleteCell:'Hücre Sil',merge:'Hücreleri Birleştir',mergeRight:'Birleştir - Sağdaki İle ',mergeDown:'Birleştir - Aşağıdaki İle ',splitHorizontal:'Hücreyi Yatay Böl',splitVertical:'Hücreyi Dikey Böl',title:'Cell Properties',cellType:'Cell Type',rowSpan:'Rows Span',colSpan:'Columns Span',wordWrap:'Word Wrap',hAlign:'Horizontal Alignment',vAlign:'Vertical Alignment',alignTop:'Top',alignMiddle:'Middle',alignBottom:'Bottom',alignBaseline:'Baseline',bgColor:'Background Color',borderColor:'Border Color',data:'Data',header:'Header',yes:'Yes',no:'No',invalidWidth:'Cell width must be a number.',invalidHeight:'Cell height must be a number.',invalidRowSpan:'Rows span must be a whole number.',invalidColSpan:'Columns span must be a whole number.'},row:{menu:'Satır',insertBefore:'Satır Ekle - Önce',insertAfter:'Satır Ekle - Sonra',deleteRow:'Satır Sil'},column:{menu:'Sütun',insertBefore:'Kolon Ekle - Önce',insertAfter:'Kolon Ekle - Sonra',deleteColumn:'Sütun Sil'}},button:{title:'Düğme Özellikleri',text:'Metin (Değer)',type:'Tip',typeBtn:'Düğme',typeSbm:'Gönder',typeRst:'Sıfırla'},checkboxAndRadio:{checkboxTitle:'Onay Kutusu Özellikleri',radioTitle:'Seçenek Düğmesi Özellikleri',value:'Değer',selected:'Seçili'},form:{title:'Form Özellikleri',menu:'Form Özellikleri',action:'İşlem',method:'Yöntem',encoding:'Encoding',target:'Hedef',targetNotSet:'<tanımlanmamış>',targetNew:'Yeni Pencere(_blank)',targetTop:'En Üst Pencere (_top)',targetSelf:'Kendi Penceresi (_self)',targetParent:'Anne Pencere (_parent)'},select:{title:'Seçim Menüsü Özellikleri',selectInfo:'Bilgi',opAvail:'Mevcut Seçenekler',value:'Değer',size:'Boyut',lines:'satır',chkMulti:'Çoklu seçime izin ver',opText:'Metin',opValue:'Değer',btnAdd:'Ekle',btnModify:'Düzenle',btnUp:'Yukarı',btnDown:'Aşağı',btnSetValue:'Seçili değer olarak ata',btnDelete:'Sil'},textarea:{title:'Çok Satırlı Metin Özellikleri',cols:'Sütunlar',rows:'Satırlar'},textfield:{title:'Metin Girişi Özellikleri',name:'Ad',value:'Değer',charWidth:'Karakter Genişliği',maxChars:'En Fazla Karakter',type:'Tür',typeText:'Metin',typePass:'Parola'},hidden:{title:'Gizli Veri Özellikleri',name:'Ad',value:'Değer'},image:{title:'Resim Özellikleri',titleButton:'Resimli Düğme Özellikleri',menu:'Resim Özellikleri',infoTab:'Resim Bilgisi',btnUpload:'Sunucuya Yolla',url:'URL',upload:'Karşıya Yükle',alt:'Alternatif Yazı',width:'Genişlik',height:'Yükseklik',lockRatio:'Oranı Kilitle',resetSize:'Boyutu Başa Döndür',border:'Kenar',hSpace:'Yatay Boşluk',vSpace:'Dikey Boşluk',align:'Hizalama',alignLeft:'Sol',alignAbsBottom:'Tam Altı',alignAbsMiddle:'Tam Ortası',alignBaseline:'Taban Çizgisi',alignBottom:'Alt',alignMiddle:'Orta',alignRight:'Sağ',alignTextTop:'Yazı Tepeye',alignTop:'Tepe',preview:'Ön İzleme',alertUrl:"Lütfen resmin URL'sini yazınız",linkTab:'Köprü',button2Img:'Do you want to transform the selected image button on a simple image?',img2Button:'Do you want to transform the selected image on a image button?'},flash:{properties:'Flash Özellikleri',propertiesTab:'Properties',title:'Flash Özellikleri',chkPlay:'Otomatik Oynat',chkLoop:'Döngü',chkMenu:'Flash Menüsünü Kullan',chkFull:'Allow Fullscreen',scale:'Boyutlandır',scaleAll:'Hepsini Göster',scaleNoBorder:'Kenar Yok',scaleFit:'Tam Sığdır',access:'Script Access',accessAlways:'Always',accessSameDomain:'Same domain',accessNever:'Never',align:'Hizalama',alignLeft:'Sol',alignAbsBottom:'Tam Altı',alignAbsMiddle:'Tam Ortası',alignBaseline:'Taban Çizgisi',alignBottom:'Alt',alignMiddle:'Orta',alignRight:'Sağ',alignTextTop:'Yazı Tepeye',alignTop:'Tepe',quality:'Quality',qualityBest:'Best',qualityHigh:'High',qualityAutoHigh:'Auto High',qualityMedium:'Medium',qualityAutoLow:'Auto Low',qualityLow:'Low',windowModeWindow:'Window',windowModeOpaque:'Opaque',windowModeTransparent:'Transparent',windowMode:'Window mode',flashvars:'Variables for Flash',bgcolor:'Arka Renk',width:'Genişlik',height:'Yükseklik',hSpace:'Yatay Boşluk',vSpace:'Dikey Boşluk',validateSrc:"Lütfen köprü URL'sini yazın",validateWidth:'Width must be a number.',validateHeight:'Height must be a number.',validateHSpace:'HSpace must be a number.',validateVSpace:'VSpace must be a number.'},spellCheck:{toolbar:'Yazım Denetimi',title:'Spell Check',notAvailable:'Sorry, but service is unavailable now.',errorLoading:'Error loading application service host: %s.',notInDic:'Sözlükte Yok',changeTo:'Şuna değiştir:',btnIgnore:'Yoksay',btnIgnoreAll:'Tümünü Yoksay',btnReplace:'Değiştir',btnReplaceAll:'Tümünü Değiştir',btnUndo:'Geri Al',noSuggestions:'- Öneri Yok -',progress:'Yazım denetimi işlemde...',noMispell:'Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı',noChanges:'Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi',oneChange:'Yazım denetimi tamamlandı: Bir kelime değiştirildi',manyChanges:'Yazım denetimi tamamlandı: %1 kelime değiştirildi',ieSpellDownload:'Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?'},smiley:{toolbar:'İfade',title:'İfade Ekle'},elementsPath:{eleTitle:'%1 element'},numberedlist:'Numaralı Liste',bulletedlist:'Simgeli Liste',indent:'Sekme Arttır',outdent:'Sekme Azalt',justify:{left:'Sola Dayalı',center:'Ortalanmış',right:'Sağa Dayalı',block:'İki Kenara Yaslanmış'},blockquote:'Blok Oluştur',clipboard:{title:'Yapıştır',cutError:'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl+X) tuşlarını kullanın.',copyError:'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl+C) tuşlarını kullanın.',pasteMsg:'Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.',securityMsg:'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..'},pastefromword:{toolbar:"Word'den Yapıştır",title:"Word'den Yapıştır",advice:'Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.',ignoreFontFace:'Yazı Tipi tanımlarını yoksay',removeStyle:'Biçem Tanımlarını çıkar'},pasteText:{button:'Düz Metin Olarak Yapıştır',title:'Düz Metin Olarak Yapıştır'},templates:{button:'Şablonlar',title:'İçerik Şablonları',insertOption:'Mevcut içerik ile değiştir',selectPromptMsg:'Düzenleyicide açmak için lütfen bir şablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):',emptyListMsg:'(Belirli bir şablon seçilmedi)'},showBlocks:'Blokları Göster',stylesCombo:{label:'Biçem',voiceLabel:'Styles',panelVoiceLabel:'Select a style',panelTitle1:'Block Styles',panelTitle2:'Inline Styles',panelTitle3:'Object Styles'},format:{label:'Biçim',voiceLabel:'Format',panelTitle:'Biçim',panelVoiceLabel:'Select a paragraph format',tag_p:'Normal',tag_pre:'Biçimli',tag_address:'Adres',tag_h1:'Başlık 1',tag_h2:'Başlık 2',tag_h3:'Başlık 3',tag_h4:'Başlık 4',tag_h5:'Başlık 5',tag_h6:'Başlık 6',tag_div:'Paragraf (DIV)'},font:{label:'Yazı Türü',voiceLabel:'Font',panelTitle:'Yazı Türü',panelVoiceLabel:'Select a font'},fontSize:{label:'Boyut',voiceLabel:'Font Size',panelTitle:'Boyut',panelVoiceLabel:'Select a font size'},colorButton:{textColorTitle:'Yazı Rengi',bgColorTitle:'Arka Renk',auto:'Otomatik',more:'Diğer renkler...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Spell Check As You Type',enable:'Enable SCAYT',disable:'Disable SCAYT',about:'About SCAYT',toggle:'Toggle SCAYT',options:'Options',langs:'Languages',moreSuggestions:'More suggestions',ignore:'Ignore',ignoreAll:'Ignore All',addWord:'Add Word',emptyDic:'Dictionary name should not be empty.',optionsTab:'Options',languagesTab:'Languages',dictionariesTab:'Dictionaries',aboutTab:'About'},about:{title:'About CKEditor',dlgTitle:'About CKEditor',moreInfo:'For licensing information please visit our web site:',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'Maximize',fakeobjects:{anchor:'Anchor',flash:'Flash Animation',div:'Page Break',unknown:'Unknown Object'},resize:'Drag to resize'};\r
diff --git a/lang/uk.js b/lang/uk.js
new file mode 100644 (file)
index 0000000..16d5c7f
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.uk={dir:'ltr',editorTitle:'Візуальний текстовий редактор, %1',source:'Джерело',newPage:'Нова сторінка',save:'Зберегти',preview:'Попередній перегляд',cut:'Вирізати',copy:'Копіювати',paste:'Вставити',print:'Друк',underline:'Підкреслений',bold:'Жирний',italic:'Курсив',selectAll:'Виділити все',removeFormat:'Прибрати форматування',strike:'Закреслений',subscript:'Підрядковий індекс',superscript:'Надрядковий индекс',horizontalrule:'Вставити горизонтальну лінію',pagebreak:'Вставити розривши сторінки',unlink:'Знищити посилання',undo:'Повернути',redo:'Повторити',common:{browseServer:'Передивитися на сервері',url:'URL',protocol:'Протокол',upload:'Закачати',uploadSubmit:'Надіслати на сервер',image:'Зображення',flash:'Flash',form:'Форма',checkbox:'Флагова кнопка',radio:'Кнопка вибору',textField:'Текстове поле',textarea:'Текстова область',hiddenField:'Приховане поле',button:'Кнопка',select:'Список',imageButton:'Кнопка із зображенням',notSet:'<не визначено>',id:'Ідентифікатор',name:"Им'я",langDir:'Напрямок мови',langDirLtr:'Зліва на право (LTR)',langDirRtl:'Зправа на ліво (RTL)',langCode:'Мова',longDescr:'Довгий опис URL',cssClass:'Клас CSS',advisoryTitle:'Заголовок',cssStyle:'Стиль CSS',ok:'ОК',cancel:'Скасувати',generalTab:'Загальна',advancedTab:'Розширений',validateNumberFailed:'Значення не є числом.',confirmNewPage:'Всі не збережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову сторінку?',confirmCancel:'Деякі опції були змінені. Закрити вікно?',unavailable:'%1<span class="cke_accessibility">, не доступне</span>'},specialChar:{toolbar:'Вставити спеціальний символ',title:'Оберіть спеціальний символ'},link:{toolbar:'Вставити/Редагувати посилання',menu:'Вставити посилання',title:'Посилання',info:'Інформація посилання',target:'Ціль',upload:'Закачати',advanced:'Розширений',type:'Тип посилання',toAnchor:'Якір на цю сторінку',toEmail:'Эл. пошта',target:'Ціль',targetNotSet:'<не визначено>',targetFrame:'<фрейм>',targetPopup:'<спливаюче вікно>',targetNew:'Нове вікно (_blank)',targetTop:'Найвище вікно (_top)',targetSelf:'Теж вікно (_self)',targetParent:'Батьківське вікно (_parent)',targetFrameName:"Ім'я целевого фрейма",targetPopupName:"Ім'я спливаючого вікна",popupFeatures:'Властивості спливаючого вікна',popupResizable:'Масштабоване',popupStatusBar:'Строка статусу',popupLocationBar:'Панель локації',popupToolbar:'Панель інструментів',popupMenuBar:'Панель меню',popupFullScreen:'Повний екран (IE)',popupScrollBars:'Полоси прокрутки',popupDependent:'Залежний (Netscape)',popupWidth:'Ширина',popupLeft:'Позиція зліва',popupHeight:'Висота',popupTop:'Позиція зверху',id:'Ідентифікатор (Id)',langDir:'Напрямок мови',langDirNotSet:'<не визначено>',langDirLTR:'Зліва на право (LTR)',langDirRTL:'Зправа на ліво (RTL)',acccessKey:'Гаряча клавіша',name:"Им'я",langCode:'Напрямок мови',tabIndex:'Послідовність переходу',advisoryTitle:'Заголовок',advisoryContentType:'Тип вмісту',cssClasses:'Клас CSS',charset:'Кодировка',styles:'Стиль CSS',selectAnchor:'Оберіть якір',anchorName:"За ім'ям якоря",anchorId:'За ідентифікатором елемента',emailAddress:'Адреса ел. пошти',emailSubject:'Тема листа',emailBody:'Тіло повідомлення',noAnchors:'(Немає якорів доступних в цьому документі)',noUrl:'Будь ласка, занесіть URL посилання',noEmail:'Будь ласка, занесіть адрес эл. почты'},anchor:{toolbar:'Вставити/Редагувати якір',menu:'Властивості якоря',title:'Властивості якоря',name:"Ім'я якоря",errorName:"Будь ласка, занесіть ім'я якоря"},findAndReplace:{title:'Знайти і замінити',find:'Пошук',replace:'Заміна',findWhat:'Шукати:',replaceWith:'Замінити на:',notFoundMsg:'Вказаний текст не знайдений.',matchCase:'Враховувати регістр',matchWord:'Збіг цілих слів',matchCyclic:'Циклічна заміна',replaceAll:'Замінити все',replaceSuccessMsg:'%1 співпадінь(я) замінено.'},table:{toolbar:'Таблиця',title:'Властивості таблиці',menu:'Властивості таблиці',deleteTable:'Видалити таблицю',rows:'Строки',columns:'Колонки',border:'Розмір бордюра',align:'Вирівнювання',alignNotSet:'<Не вст.>',alignLeft:'Зліва',alignCenter:'По центру',alignRight:'Зправа',width:'Ширина',widthPx:'пікселів',widthPc:'відсотків',height:'Висота',cellSpace:'Проміжок (spacing)',cellPad:'Відступ (padding)',caption:'Заголовок',summary:'Резюме',headers:'Заголовки',headersNone:'Жодного',headersColumn:'Перша колонка',headersRow:'Перший рядок',headersBoth:'Обидва',invalidRows:'Кількість рядків повинна бути числом більше за 0.',invalidCols:'Кількість колонок повинна бути числом більше за  0.',invalidBorder:'Розмір бордюра повинен бути числом.',invalidWidth:'Ширина таблиці повинна бути числом.',invalidHeight:'Висота таблиці повинна бути числом.',invalidCellSpacing:'Проміжок (spacing) комірки повинен бути числом.',invalidCellPadding:'Відступ (padding) комірки повинен бути числом.',cell:{menu:'Осередок',insertBefore:'Вставити комірку до',insertAfter:'Вставити комірку після',deleteCell:'Видалити комірки',merge:"Об'єднати комірки",mergeRight:"Об'єднати зправа",mergeDown:"Об'єднати до низу",splitHorizontal:'Розділити комірку по горизонталі',splitVertical:'Розділити комірку по вертикалі',title:'Властивості комірки',cellType:'Тип комірки',rowSpan:'Обєднання рядків (Rows Span)',colSpan:'Обєднання стовпчиків (Columns Span)',wordWrap:'Авто згортання тексту (Word Wrap)',hAlign:'Горизонтальне вирівнювання',vAlign:'Вертикальне вирівнювання',alignTop:'До верху',alignMiddle:'Посередині',alignBottom:'До низу',alignBaseline:'По базовій лінії',bgColor:'Колір фону',borderColor:'Колір бордюру',data:'Дані',header:'Заголовок',yes:'Так',no:'Ні',invalidWidth:'Ширина комірки повинна бути числом.',invalidHeight:'Висота комірки повинна бути числом.',invalidRowSpan:'Кількість обєднуваних рядків повинна бути цілим числом.',invalidColSpan:'Кількість обєднуваних стовпчиків повинна бути цілим числом.'},row:{menu:'Рядок',insertBefore:'Вставити рядок до',insertAfter:'Вставити рядок після',deleteRow:'Видалити строки'},column:{menu:'Колонка',insertBefore:'Вставити колонку до',insertAfter:'Вставити колонку після',deleteColumn:'Видалити колонки'}},button:{title:'Властивості кнопки',text:'Текст (Значення)',type:'Тип',typeBtn:'Кнопка',typeSbm:'Відправити',typeRst:'Скинути'},checkboxAndRadio:{checkboxTitle:'Властивості флагової кнопки',radioTitle:'Властивості кнопки вибору',value:'Значення',selected:'Обрана'},form:{title:'Властивості форми',menu:'Властивості форми',action:'Дія',method:'Метод',encoding:'Кодування',target:'Ціль',targetNotSet:'<не визначено>',targetNew:'Нове вікно (_blank)',targetTop:'Найвище вікно (_top)',targetSelf:'Теж вікно (_self)',targetParent:'Батьківське вікно (_parent)'},select:{title:'Властивості списку',selectInfo:'Інфо',opAvail:'Доступні варіанти',value:'Значення',size:'Розмір',lines:'лінії',chkMulti:'Дозволити обрання декількох позицій',opText:'Текст',opValue:'Значення',btnAdd:'Добавити',btnModify:'Змінити',btnUp:'Вгору',btnDown:'Вниз',btnSetValue:'Встановити як вибране значення',btnDelete:'Видалити'},textarea:{title:'Властивості текстової області',cols:'Колонки',rows:'Строки'},textfield:{title:'Властивості текстового поля',name:"Ім'я",value:'Значення',charWidth:'Ширина',maxChars:'Макс. кіл-ть символів',type:'Тип',typeText:'Текст',typePass:'Пароль'},hidden:{title:'Властивості прихованого поля',name:"Ім'я",value:'Значення'},image:{title:'Властивості зображення',titleButton:'Властивості кнопки із зображенням',menu:'Властивості зображення',infoTab:'Інформація про изображении',btnUpload:'Надіслати на сервер',url:'URL',upload:'Закачати',alt:'Альтернативний текст',width:'Ширина',height:'Висота',lockRatio:'Зберегти пропорції',resetSize:'Скинути розмір',border:'Бордюр',hSpace:'Горизонтальний відступ',vSpace:'Вертикальний відступ',align:'Вирівнювання',alignLeft:'По лівому краю',alignAbsBottom:'Абс по низу',alignAbsMiddle:'Абс по середині',alignBaseline:'По базовій лінії',alignBottom:'По низу',alignMiddle:'По середині',alignRight:'По правому краю',alignTextTop:'Текст на верху',alignTop:'По верху',preview:'Попередній перегляд',alertUrl:'Будь ласка, введіть URL зображення',linkTab:'Посилання',button2Img:'Ви хочете перетворити обрану кнопку-зображення на просте зображення?',img2Button:'Ви хочете перетворити обране зображення на кнопку-зображення?'},flash:{properties:'Властивості Flash',propertiesTab:'Властивості',title:'Властивості Flash',chkPlay:'Авто програвання',chkLoop:'Зациклити',chkMenu:'Дозволити меню Flash',chkFull:'Дозволити повноекранний перегляд',scale:'Масштаб',scaleAll:'Показати всі',scaleNoBorder:'Без рамки',scaleFit:'Дійсний розмір',access:'Доступ до скрипта',accessAlways:'Завжди',accessSameDomain:'З того ж домена',accessNever:'Ніколи',align:'Вирівнювання',alignLeft:'По лівому краю',alignAbsBottom:'Абс по низу',alignAbsMiddle:'Абс по середині',alignBaseline:'По базовій лінії',alignBottom:'По низу',alignMiddle:'По середині',alignRight:'По правому краю',alignTextTop:'Текст на верху',alignTop:'По верху',quality:'Якість',qualityBest:'Відмінна',qualityHigh:'Висока',qualityAutoHigh:'Авто відмінна',qualityMedium:'Середня',qualityAutoLow:'Авто низька',qualityLow:'Низька',windowModeWindow:'Вікно',windowModeOpaque:'Непрозорість (Opaque)',windowModeTransparent:'Прозорість (Transparent)',windowMode:'Режим вікна',flashvars:'Змінні Flash',bgcolor:'Колір фону',width:'Ширина',height:'Висота',hSpace:'Горизонтальний відступ',vSpace:'Вертикальний відступ',validateSrc:'Будь ласка, занесіть URL посилання',validateWidth:'Ширина повинна бути числом.',validateHeight:'Висота повинна бути числом.',validateHSpace:'HSpace повинна бути числом.',validateVSpace:'VSpace повинна бути числом.'},spellCheck:{toolbar:'Перевірити орфографію',title:'Перевірка орфографії',notAvailable:'Вибачте, але сервіс наразі недоступний.',errorLoading:'Помилка завантаження : %s.',notInDic:'Не має в словнику',changeTo:'Замінити на',btnIgnore:'Ігнорувати',btnIgnoreAll:'Ігнорувати все',btnReplace:'Замінити',btnReplaceAll:'Замінити все',btnUndo:'Назад',noSuggestions:'- Немає припущень -',progress:'Виконується перевірка орфографії...',noMispell:'Перевірку орфографії завершено: помилок не знайдено',noChanges:'Перевірку орфографії завершено: жодне слово не змінено',oneChange:'Перевірку орфографії завершено: змінено одно слово',manyChanges:'Перевірку орфографії завершено: 1% слів змінено',ieSpellDownload:'Модуль перевірки орфографії не встановлено. Бажаєтн завантажити його зараз?'},smiley:{toolbar:'Смайлик',title:'Вставити смайлик'},elementsPath:{eleTitle:'%1 елемент'},numberedlist:'Нумерований список',bulletedlist:'Маркований список',indent:'Збільшити відступ',outdent:'Зменшити відступ',justify:{left:'По лівому краю',center:'По центру',right:'По правому краю',block:'По ширині'},blockquote:'Цитата',clipboard:{title:'Вставити',cutError:'Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl+X).',copyError:'Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl+C).',pasteMsg:'Будь ласка, вставте з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl+V</STRONG>) та натисніть <STRONG>OK</STRONG>.',securityMsg:"Редактор не може отримати прямий доступ до буферу обміну у зв'язку з налаштуваннями вашого браузера. Вам потрібно вставити інформацію повторно в це вікно."},pastefromword:{toolbar:'Вставити з Word',title:'Вставити з Word',advice:'Будь-ласка, вставте з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl+V</STRONG>) та натисніть <STRONG>OK</STRONG>.',ignoreFontFace:'Ігнорувати налаштування шрифтів',removeStyle:'Видалити налаштування стилів'},pasteText:{button:'Вставити тільки текст',title:'Вставити тільки текст'},templates:{button:'Шаблони',title:'Шаблони змісту',insertOption:'Замінити поточний вміст',selectPromptMsg:'Оберіть, будь ласка, шаблон для відкриття в редакторі<br>(поточний зміст буде втрачено):',emptyListMsg:'(Не визначено жодного шаблону)'},showBlocks:'Показувати блоки',stylesCombo:{label:'Стиль',voiceLabel:'Стилі',panelVoiceLabel:'Оберіть стиль',panelTitle1:'Block стилі',panelTitle2:'Inline стилі',panelTitle3:'Object стилі'},format:{label:'Форматування',voiceLabel:'Формат',panelTitle:'Форматування',panelVoiceLabel:'Оберіть формат абзацу',tag_p:'Нормальний',tag_pre:'Форматований',tag_address:'Адреса',tag_h1:'Заголовок 1',tag_h2:'Заголовок 2',tag_h3:'Заголовок 3',tag_h4:'Заголовок 4',tag_h5:'Заголовок 5',tag_h6:'Заголовок 6',tag_div:'Нормальний (DIV)'},font:{label:'Шрифт',voiceLabel:'Шрифт',panelTitle:'Шрифт',panelVoiceLabel:'Оберіть шрифт'},fontSize:{label:'Розмір',voiceLabel:'Розмір шрифта',panelTitle:'Розмір',panelVoiceLabel:'Оберіть розмір шрифта'},colorButton:{textColorTitle:'Колір тексту',bgColorTitle:'Колір фону',auto:'Автоматичний',more:'Кольори...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Перефірка орфографії по мірі набору',enable:'Включити SCAYT',disable:'Відключити SCAYT',about:'Про SCAYT',toggle:'Перемкнути SCAYT',options:'Опції',langs:'Мови',moreSuggestions:'Більше пропозицій',ignore:'Ігнорувати',ignoreAll:'Ігнорувати всі',addWord:'Додати слово',emptyDic:'Назва словника повинна бути заповнена.',optionsTab:'Опції',languagesTab:'Мови',dictionariesTab:'Словники',aboutTab:'Про'},about:{title:'Про CKEditor',dlgTitle:'Про CKEditor',moreInfo:'Щодо інформації з ліцензування завітайте до нашого сайту:',copy:'Copyright &copy; $1. Всі права застережено.'},maximize:'Максимізувати',fakeobjects:{anchor:'Якір',flash:'Flash анімація',div:'Розрив сторінки',unknown:'Невідомий об`єкт'},resize:'Пересувайте для зміни розміру'};\r
diff --git a/lang/vi.js b/lang/vi.js
new file mode 100644 (file)
index 0000000..82cbc45
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.vi={dir:'ltr',editorTitle:'Trình biên tập trực quan, %1',source:'Mã HTML',newPage:'Trang mới',save:'Lưu',preview:'Xem trước',cut:'Cắt',copy:'Sao chép',paste:'Dán',print:'In',underline:'Gạch chân',bold:'Đậm',italic:'Nghiêng',selectAll:'Chọn Tất cả',removeFormat:'Xoá Định dạng',strike:'Gạch xuyên ngang',subscript:'Chỉ số dưới',superscript:'Chỉ số trên',horizontalrule:'Chèn Đường phân cách ngang',pagebreak:'Chèn Ngắt trang',unlink:'Xoá Liên kết',undo:'Khôi phục thao tác',redo:'Làm lại thao tác',common:{browseServer:'Duyệt trên máy chủ',url:'URL',protocol:'Giao thức',upload:'Tải lên',uploadSubmit:'Tải lên Máy chủ',image:'Hình ảnh',flash:'Flash',form:'Biểu mẫu',checkbox:'Nút kiểm',radio:'Nút chọn',textField:'Trường văn bản',textarea:'Vùng văn bản',hiddenField:'Trường ẩn',button:'Nút',select:'Ô chọn',imageButton:'Nút hình ảnh',notSet:'<không thiết lập>',id:'Định danh',name:'Tên',langDir:'Đường dẫn Ngôn ngữ',langDirLtr:'Trái sang Phải (LTR)',langDirRtl:'Phải sang Trái (RTL)',langCode:'Mã Ngôn ngữ',longDescr:'Mô tả URL',cssClass:'Lớp Stylesheet',advisoryTitle:'Advisory Title',cssStyle:'Mẫu',ok:'Đồng ý',cancel:'Bỏ qua',generalTab:'Chung',advancedTab:'Mở rộng',validateNumberFailed:'Giá trị này không phải là số.',confirmNewPage:'Mọi thay đổi không được không được lưu lại của nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?',confirmCancel:'Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?',unavailable:'%1<span class="cke_accessibility">, không có</span>'},specialChar:{toolbar:'Chèn Ký tự đặc biệt',title:'Hãy chọn Ký tự đặc biệt'},link:{toolbar:'Chèn/Sửa Liên kết',menu:'Sửa Liên kết',title:'Liên kết',info:'Thông tin Liên kết',target:'Đích',upload:'Tải lên',advanced:'Mở rộng',type:'Kiểu Liên kết',toAnchor:'Neo trong trang này',toEmail:'Thư điện tử',target:'Đích',targetNotSet:'<không thiết lập>',targetFrame:'<khung>',targetPopup:'<cửa sổ popup>',targetNew:'Cửa sổ mới (_blank)',targetTop:'Cửa sổ trên cùng(_top)',targetSelf:'Cùng cửa sổ (_self)',targetParent:'Cửa sổ cha (_parent)',targetFrameName:'Tên Khung đích',targetPopupName:'Tên Cửa sổ Popup',popupFeatures:'Đặc điểm của Cửa sổ Popup',popupResizable:'Có thể thay đổi kích cỡ',popupStatusBar:'Thanh trạng thái',popupLocationBar:'Thanh vị trí',popupToolbar:'Thanh công cụ',popupMenuBar:'Thanh Menu',popupFullScreen:'Toàn màn hình (IE)',popupScrollBars:'Thanh cuộn',popupDependent:'Phụ thuộc (Netscape)',popupWidth:'Rộng',popupLeft:'Vị trí Trái',popupHeight:'Cao',popupTop:'Vị trí Trên',id:'Định danh',langDir:'Đường dẫn Ngôn ngữ',langDirNotSet:'<không thiết lập>',langDirLTR:'Trái sang Phải (LTR)',langDirRTL:'Phải sang Trái (RTL)',acccessKey:'Phím Hỗ trợ truy cập',name:'Tên',langCode:'Đường dẫn Ngôn ngữ',tabIndex:'Chỉ số của Tab',advisoryTitle:'Advisory Title',advisoryContentType:'Advisory Content Type',cssClasses:'Lớp Stylesheet',charset:'Bảng mã của tài nguyên được liên kết đến',styles:'Mẫu',selectAnchor:'Chọn một Neo',anchorName:'Theo Tên Neo',anchorId:'Theo Định danh Thành phần',emailAddress:'Thư điện tử',emailSubject:'Tiêu đề Thông điệp',emailBody:'Nội dung Thông điệp',noAnchors:'(Không có Neo nào trong tài liệu)',noUrl:'Hãy đưa vào Liên kết URL',noEmail:'Hãy đưa vào địa chỉ thư điện tử'},anchor:{toolbar:'Chèn/Sửa Neo',menu:'Thuộc tính Neo',title:'Thuộc tính Neo',name:'Tên của Neo',errorName:'Hãy nhập vào tên của Neo'},findAndReplace:{title:'Tìm kiếm và Thay Thế',find:'Tìm kiếm',replace:'Thay thế',findWhat:'Tìm chuỗi:',replaceWith:'Thay bằng:',notFoundMsg:'Không tìm thấy chuỗi cần tìm.',matchCase:'Phân biệt chữ hoa/thường',matchWord:'Giống toàn bộ từ',matchCyclic:'Giống một phần',replaceAll:'Thay thế Tất cả',replaceSuccessMsg:'%1 vị trí đã được thay thế.'},table:{toolbar:'Bảng',title:'Thuộc tính bảng',menu:'Thuộc tính bảng',deleteTable:'Xóa Bảng',rows:'Hàng',columns:'Cột',border:'Cỡ Đường viền',align:'Canh lề',alignNotSet:'<Chưa thiết lập>',alignLeft:'Trái',alignCenter:'Giữa',alignRight:'Phải',width:'Rộng',widthPx:'điểm (px)',widthPc:'%',height:'Cao',cellSpace:'Khoảng cách Ô',cellPad:'Đệm Ô',caption:'Đầu đề',summary:'Tóm lược',headers:'Đầu đề',headersNone:'Không có',headersColumn:'Cột Đầu tiên',headersRow:'Hàng Đầu tiên',headersBoth:'Cả hai',invalidRows:'Số lượng hàng phải là một số lớn hơn 0.',invalidCols:'Số lượng cột phải là một số lớn hơn 0.',invalidBorder:'Kích cỡ của đường biên phải là một số nguyên.',invalidWidth:'Chiều rộng của Bảng phải là một số nguyên.',invalidHeight:'Chiều cao của Bảng phải là một số nguyên.',invalidCellSpacing:'Khoảng cách giữa các ô phải là một số nguyên.',invalidCellPadding:'Đệm giữa các ô phải là một số nguyên.',cell:{menu:'Ô',insertBefore:'Chèn Ô Phía trước',insertAfter:'Chèn Ô Phía sau',deleteCell:'Xoá Ô',merge:'Kết hợp Ô',mergeRight:'Kết hợp Sang phải',mergeDown:'Kết hợp Xuống dưới',splitHorizontal:'Tách ngang Ô',splitVertical:'Tách dọc Ô',title:'Thuộc tính của Ô',cellType:'Kiểu của Ô',rowSpan:'Kết hợp hàng',colSpan:'Kết hợp cột',wordWrap:'Word Wrap',hAlign:'Canh lề ngang',vAlign:'Canh lề dọc',alignTop:'Trên cùng',alignMiddle:'Chính giữa',alignBottom:'Dưới cùng',alignBaseline:'Đường cơ sở',bgColor:'Màu nền',borderColor:'Màu viền',data:'Dữ liệu',header:'Đầu đề',yes:'Có',no:'Không',invalidWidth:'Chiều rộng của Ô phải là một số nguyên.',invalidHeight:'Chiều cao của Ô phải là một số nguyên.',invalidRowSpan:'Số hàng kết hợp phải là một số nguyên.',invalidColSpan:'Số cột kết hợp phải là một số nguyên.'},row:{menu:'Hàng',insertBefore:'Chèn Hàng Phía trước',insertAfter:'Chèn Hàng Phía sau',deleteRow:'Xoá Hàng'},column:{menu:'Cột',insertBefore:'Chèn Cột Phía trước',insertAfter:'Chèn Cột Phía sau',deleteColumn:'Xoá Cột'}},button:{title:'Thuộc tính Nút',text:'Chuỗi hiển thị (Giá trị)',type:'Kiểu',typeBtn:'Nút Bấm',typeSbm:'Nút Gửi',typeRst:'Nút Nhập lại'},checkboxAndRadio:{checkboxTitle:'Thuộc tính Nút kiểm',radioTitle:'Thuộc tính Nút chọn',value:'Giá trị',selected:'Được chọn'},form:{title:'Thuộc tính Biểu mẫu',menu:'Thuộc tính Biểu mẫu',action:'Hành động',method:'Phương thức',encoding:'Bảng mã',target:'Đích',targetNotSet:'<không thiết lập>',targetNew:'Cửa sổ mới (_blank)',targetTop:'Cửa sổ trên cùng(_top)',targetSelf:'Cùng cửa sổ (_self)',targetParent:'Cửa sổ cha (_parent)'},select:{title:'Thuộc tính Ô chọn',selectInfo:'Thông tin',opAvail:'Các tùy chọn có thể sử dụng',value:'Giá trị',size:'Kích cỡ',lines:'dòng',chkMulti:'Cho phép chọn nhiều',opText:'Văn bản',opValue:'Giá trị',btnAdd:'Thêm',btnModify:'Thay đổi',btnUp:'Lên',btnDown:'Xuống',btnSetValue:'Giá trị được chọn',btnDelete:'Xoá'},textarea:{title:'Thuộc tính Vùng văn bản',cols:'Cột',rows:'Hàng'},textfield:{title:'Thuộc tính Trường văn bản',name:'Tên',value:'Giá trị',charWidth:'Rộng',maxChars:'Số Ký tự tối đa',type:'Kiểu',typeText:'Ký tự',typePass:'Mật khẩu'},hidden:{title:'Thuộc tính Trường ẩn',name:'Tên',value:'Giá trị'},image:{title:'Thuộc tính Hình ảnh',titleButton:'Thuộc tính Nút hình ảnh',menu:'Thuộc tính Hình ảnh',infoTab:'Thông tin Hình ảnh',btnUpload:'Tải lên Máy chủ',url:'URL',upload:'Tải lên',alt:'Chú thích Hình ảnh',width:'Rộng',height:'Cao',lockRatio:'Giữ nguyên tỷ lệ',resetSize:'Kích thước gốc',border:'Đường viền',hSpace:'HSpace',vSpace:'VSpace',align:'Vị trí',alignLeft:'Trái',alignAbsBottom:'Dưới tuyệt đối',alignAbsMiddle:'Giữa tuyệt đối',alignBaseline:'Đường cơ sở',alignBottom:'Dưới',alignMiddle:'Giữa',alignRight:'Phải',alignTextTop:'Phía trên chữ',alignTop:'Trên',preview:'Xem trước',alertUrl:'Hãy đưa vào URL của hình ảnh',linkTab:'Liên kết',button2Img:'Bạn có muốn chuyển nút bấm bằng hình ảnh được chọn thành hình ảnh?',img2Button:'Bạn có muốn chuyển đổi hình ảnh được chọn thành nút bấm bằng hình ảnh?'},flash:{properties:'Thuộc tính Flash',propertiesTab:'Thuộc tính',title:'Thuộc tính Flash',chkPlay:'Tự động chạy',chkLoop:'Lặp',chkMenu:'Cho phép bật Menu của Flash',chkFull:'Cho phép Toàn màn hình',scale:'Tỷ lệ',scaleAll:'Hiển thị tất cả',scaleNoBorder:'Không đường viền',scaleFit:'Vừa vặn',access:'Truy cập Mã',accessAlways:'Luôn luôn',accessSameDomain:'Cùng tên miền',accessNever:'Không bao giờ',align:'Vị trí',alignLeft:'Trái',alignAbsBottom:'Dưới tuyệt đối',alignAbsMiddle:'Giữa tuyệt đối',alignBaseline:'Đường cơ sở',alignBottom:'Dưới',alignMiddle:'Giữa',alignRight:'Phải',alignTextTop:'Phía trên chữ',alignTop:'Trên',quality:'Chất lượng',qualityBest:'TỐt nhất',qualityHigh:'Cao',qualityAutoHigh:'Cao Tự động',qualityMedium:'Trung bình',qualityAutoLow:'Thấp Tự động',qualityLow:'Thấp',windowModeWindow:'Cửa sổ',windowModeOpaque:'Mờ đục',windowModeTransparent:'Trong suốt',windowMode:'Chế độ Cửa sổ',flashvars:'Các biến số dành cho Flash',bgcolor:'Màu nền',width:'Rộng',height:'Cao',hSpace:'HSpace',vSpace:'VSpace',validateSrc:'Hãy đưa vào Liên kết URL',validateWidth:'Chiều rộng phải là số nguyên.',validateHeight:'Chiều cao phải là số nguyên.',validateHSpace:'HSpace phải là số nguyên.',validateVSpace:'VSpace phải là số nguyên.'},spellCheck:{toolbar:'Kiểm tra Chính tả',title:'Kiểm tra Chính tả',notAvailable:'Xin lỗi, dịch vụ này hiện tại không có.',errorLoading:'Lỗi khi đang nạp dịch vụ ứng dụng: %s.',notInDic:'Không có trong từ điển',changeTo:'Chuyển thành',btnIgnore:'Bỏ qua',btnIgnoreAll:'Bỏ qua Tất cả',btnReplace:'Thay thế',btnReplaceAll:'Thay thế Tất cả',btnUndo:'Phục hồi lại',noSuggestions:'- Không đưa ra gợi ý về từ -',progress:'Đang tiến hành kiểm tra chính tả...',noMispell:'Hoàn tất kiểm tra chính tả: Không có lỗi chính tả',noChanges:'Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi',oneChange:'Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi',manyChanges:'Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi',ieSpellDownload:'Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có muốn tải về ngay bây giờ?'},smiley:{toolbar:'Hình biểu lộ cảm xúc (mặt cười)',title:'Chèn Hình biểu lộ cảm xúc (mặt cười)'},elementsPath:{eleTitle:'%1 thành phần'},numberedlist:'Danh sách có thứ tự',bulletedlist:'Danh sách không thứ tự',indent:'Dịch vào trong',outdent:'Dịch ra ngoài',justify:{left:'Canh trái',center:'Canh giữa',right:'Canh phải',block:'Canh đều'},blockquote:'Khối Trích dẫn',clipboard:{title:'Dán',cutError:'Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl+X).',copyError:'Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl+C).',pasteMsg:'Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.',securityMsg:'Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trực tiếp vào nội dung đã sao chép. Bạn cần phải dán lại nội dung vào cửa sổ này.'},pastefromword:{toolbar:'Dán với định dạng Word',title:'Dán với định dạng Word',advice:'Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.',ignoreFontFace:'Chấp nhận các định dạng phông',removeStyle:'Gỡ bỏ các định dạng Styles'},pasteText:{button:'Dán theo định dạng văn bản thuần',title:'Dán theo định dạng văn bản thuần'},templates:{button:'Mẫu dựng sẵn',title:'Nội dung Mẫu dựng sẵn',insertOption:'Thay thế nội dung hiện tại',selectPromptMsg:'Hãy chọn Mẫu dựng sẵn để mở trong trình biên tập<br>(nội dung hiện tại sẽ bị mất):',emptyListMsg:'(Không có Mẫu dựng sẵn nào được định nghĩa)'},showBlocks:'Hiển thị các Khối',stylesCombo:{label:'Kiểu',voiceLabel:'Kiểu',panelVoiceLabel:'Chọn một kiểu',panelTitle1:'Kiểu Khối',panelTitle2:'Kiểu Trực tiếp',panelTitle3:'Kiểu Đối tượng'},format:{label:'Định dạng',voiceLabel:'Định dạng',panelTitle:'Định dạng',panelVoiceLabel:'Chọn định dạng đoạn văn bản',tag_p:'Normal',tag_pre:'Formatted',tag_address:'Address',tag_h1:'Heading 1',tag_h2:'Heading 2',tag_h3:'Heading 3',tag_h4:'Heading 4',tag_h5:'Heading 5',tag_h6:'Heading 6',tag_div:'Normal (DIV)'},font:{label:'Phông',voiceLabel:'Phông',panelTitle:'Phông',panelVoiceLabel:'Chọn phông'},fontSize:{label:'Cỡ chữ',voiceLabel:'Kích cỡ phông',panelTitle:'Cỡ chữ',panelVoiceLabel:'Chọn kích cỡ phông'},colorButton:{textColorTitle:'Màu chữ',bgColorTitle:'Màu nền',auto:'Tự động',more:'Màu khác...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'Kiểm tra chính tả ngay khi gõ chữ (SCAYT)',enable:'Bật SCAYT',disable:'Tắt SCAYT',about:'Thông tin về SCAYT',toggle:'Bật tắt SCAYT',options:'Tùy chọn',langs:'Ngôn ngữ',moreSuggestions:'Đề xuất thêm',ignore:'Bỏ qua',ignoreAll:'Bỏ qua Tất cả',addWord:'Thêm Từ',emptyDic:'Tên của từ điển không được để trống.',optionsTab:'Tùy chọn',languagesTab:'Ngôn ngữ',dictionariesTab:'Từ điển',aboutTab:'Thông tin'},about:{title:'Thông tin về CKEditor',dlgTitle:'Thông tin về CKEditor',moreInfo:'Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:',copy:'Bản quyền &copy; $1. Giữ toàn quyền.'},maximize:'Phóng to tối đa',fakeobjects:{anchor:'Neo',flash:'Hoạt họa Flash',div:'Ngắt Trang',unknown:'Đối tượng không rõ ràng'},resize:'Kéo rê để thay đổi kích cỡ'};\r
diff --git a/lang/zh-cn.js b/lang/zh-cn.js
new file mode 100644 (file)
index 0000000..56d1469
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang['zh-cn']={dir:'ltr',editorTitle:'富文本编辑器, %1',source:'源码',newPage:'新建',save:'保存',preview:'预览',cut:'剪切',copy:'复制',paste:'粘贴',print:'打印',underline:'下划线',bold:'加粗',italic:'倾斜',selectAll:'全选',removeFormat:'清除格式',strike:'删除线',subscript:'下标',superscript:'上标',horizontalrule:'插入水平线',pagebreak:'插入分页符',unlink:'取消超链接',undo:'撤消',redo:'重做',common:{browseServer:'浏览服务器',url:'源文件',protocol:'协议',upload:'上传',uploadSubmit:'发送到服务器上',image:'图象',flash:'Flash',form:'表单',checkbox:'复选框',radio:'单选按钮',textField:'单行文本',textarea:'多行文本',hiddenField:'隐藏域',button:'按钮',select:'列表/菜单',imageButton:'图像域',notSet:'<没有设置>',id:'ID',name:'名称',langDir:'语言方向',langDirLtr:'从左到右 (LTR)',langDirRtl:'从右到左 (RTL)',langCode:'语言代码',longDescr:'详细说明地址',cssClass:'样式类名称',advisoryTitle:'标题',cssStyle:'行内样式',ok:'确定',cancel:'取消',generalTab:'常规',advancedTab:'高级',validateNumberFailed:'需要输入数字格式',confirmNewPage:'当前文档内容未保存,是否确认新建文档?',confirmCancel:'部分选项尚未保存,是否确认关闭对话框?',unavailable:'%1<span class="cke_accessibility">, 不可用</span>'},specialChar:{toolbar:'插入特殊符号',title:'选择特殊符号'},link:{toolbar:'插入/编辑超链接',menu:'编辑超链接',title:'超链接',info:'超链接信息',target:'目标',upload:'上传',advanced:'高级',type:'超链接类型',toAnchor:'页内锚点链接',toEmail:'电子邮件',target:'目标',targetNotSet:'<没有设置>',targetFrame:'<框架>',targetPopup:'<弹出窗口>',targetNew:'新窗口 (_blank)',targetTop:'整页 (_top)',targetSelf:'本窗口 (_self)',targetParent:'父窗口 (_parent)',targetFrameName:'目标框架名称',targetPopupName:'弹出窗口名称',popupFeatures:'弹出窗口属性',popupResizable:'可缩放',popupStatusBar:'状态栏',popupLocationBar:'地址栏',popupToolbar:'工具栏',popupMenuBar:'菜单栏',popupFullScreen:'全屏 (IE)',popupScrollBars:'滚动条',popupDependent:'依附 (NS)',popupWidth:'宽',popupLeft:'左',popupHeight:'高',popupTop:'右',id:'ID',langDir:'语言方向',langDirNotSet:'<没有设置>',langDirLTR:'从左到右 (LTR)',langDirRTL:'从右到左 (RTL)',acccessKey:'访问键',name:'名称',langCode:'语言方向',tabIndex:'Tab 键次序',advisoryTitle:'标题',advisoryContentType:'内容类型',cssClasses:'样式类名称',charset:'字符编码',styles:'行内样式',selectAnchor:'选择一个锚点',anchorName:'按锚点名称',anchorId:'按锚点 ID',emailAddress:'地址',emailSubject:'主题',emailBody:'内容',noAnchors:'(此文档没有可用的锚点)',noUrl:'请输入超链接地址',noEmail:'请输入电子邮件地址'},anchor:{toolbar:'插入/编辑锚点链接',menu:'锚点链接属性',title:'锚点链接属性',name:'锚点名称',errorName:'请输入锚点名称'},findAndReplace:{title:'查找和替换',find:'查找',replace:'替换',findWhat:'查找:',replaceWith:'替换:',notFoundMsg:'指定文本没有找到',matchCase:'区分大小写',matchWord:'全字匹配',matchCyclic:'循环匹配',replaceAll:'全部替换',replaceSuccessMsg:'共完成 %1 处替换.'},table:{toolbar:'表格',title:'表格属性',menu:'表格属性',deleteTable:'删除表格',rows:'行数',columns:'列数',border:'边框',align:'对齐',alignNotSet:'<没有设置>',alignLeft:'左对齐',alignCenter:'居中',alignRight:'右对齐',width:'宽度',widthPx:'像素',widthPc:'百分比',height:'高度',cellSpace:'间距',cellPad:'边距',caption:'标题',summary:'摘要',headers:'标题单元格',headersNone:'无',headersColumn:'第一列',headersRow:'第一行',headersBoth:'第一列和第一行',invalidRows:'指定的列数必须大于零',invalidCols:'指定的行数必须大于零',invalidBorder:'边框粗细必须为数字格式',invalidWidth:'表格宽度必须为数字格式',invalidHeight:'表格高度必须为数字格式',invalidCellSpacing:'单元格间距必须为数字格式',invalidCellPadding:'单元格填充必须为数字格式',cell:{menu:'单元格',insertBefore:'在左侧插入单元格',insertAfter:'在右侧插入单元格',deleteCell:'删除单元格',merge:'合并单元格',mergeRight:'向右合并单元格',mergeDown:'向下合并单元格',splitHorizontal:'水平拆分单元格',splitVertical:'垂直拆分单元格',title:'单元格属性',cellType:'单元格类型',rowSpan:'行跨度',colSpan:'列跨度',wordWrap:'自动换行',hAlign:'水平对齐',vAlign:'垂直对齐',alignTop:'顶对齐',alignMiddle:'中对齐',alignBottom:'底对齐',alignBaseline:'基线对齐',bgColor:'背景颜色',borderColor:'边框颜色',data:'数据',header:'表头',yes:'是',no:'否',invalidWidth:'单元格宽度必须为数字格式',invalidHeight:'单元格高度必须为数字格式',invalidRowSpan:'行跨度必须为整数格式',invalidColSpan:'列跨度必须为整数格式'},row:{menu:'行',insertBefore:'在上方插入行',insertAfter:'在下方插入行',deleteRow:'删除行'},column:{menu:'列',insertBefore:'在左侧插入列',insertAfter:'在右侧插入列',deleteColumn:'删除列'}},button:{title:'按钮属性',text:'标签(值)',type:'类型',typeBtn:'按钮',typeSbm:'提交',typeRst:'重设'},checkboxAndRadio:{checkboxTitle:'复选框属性',radioTitle:'单选按钮属性',value:'选定值',selected:'已勾选'},form:{title:'表单属性',menu:'表单属性',action:'动作',method:'方法',encoding:'表单编码',target:'目标',targetNotSet:'<没有设置>',targetNew:'新窗口 (_blank)',targetTop:'整页 (_top)',targetSelf:'本窗口 (_self)',targetParent:'父窗口 (_parent)'},select:{title:'菜单/列表属性',selectInfo:'信息',opAvail:'列表值',value:'值',size:'高度',lines:'行',chkMulti:'允许多选',opText:'标签',opValue:'选定',btnAdd:'新增',btnModify:'修改',btnUp:'上移',btnDown:'下移',btnSetValue:'设为初始化时选定',btnDelete:'删除'},textarea:{title:'多行文本属性',cols:'字符宽度',rows:'行数'},textfield:{title:'单行文本属性',name:'名称',value:'初始值',charWidth:'字符宽度',maxChars:'最多字符数',type:'类型',typeText:'文本',typePass:'密码'},hidden:{title:'隐藏域属性',name:'名称',value:'初始值'},image:{title:'图象属性',titleButton:'图像域属性',menu:'图象属性',infoTab:'图象',btnUpload:'发送到服务器上',url:'源文件',upload:'上传',alt:'替换文本',width:'宽度',height:'高度',lockRatio:'锁定比例',resetSize:'恢复尺寸',border:'边框大小',hSpace:'水平间距',vSpace:'垂直间距',align:'对齐方式',alignLeft:'左对齐',alignAbsBottom:'绝对底边',alignAbsMiddle:'绝对居中',alignBaseline:'基线',alignBottom:'底边',alignMiddle:'居中',alignRight:'右对齐',alignTextTop:'文本上方',alignTop:'顶端',preview:'预览',alertUrl:'请输入图象地址',linkTab:'链接',button2Img:'确定要把当前按钮改变为图像吗?',img2Button:'确定要把当前图像改变为按钮吗?'},flash:{properties:'Flash 属性',propertiesTab:'属性',title:'标题',chkPlay:'自动播放',chkLoop:'循环',chkMenu:'启用 Flash 菜单',chkFull:'启用全屏',scale:'缩放',scaleAll:'全部显示',scaleNoBorder:'无边框',scaleFit:'严格匹配',access:'允许脚本访问',accessAlways:'总是',accessSameDomain:'同域',accessNever:'从不',align:'对齐方式',alignLeft:'左对齐',alignAbsBottom:'绝对底边',alignAbsMiddle:'绝对居中',alignBaseline:'基线',alignBottom:'底边',alignMiddle:'居中',alignRight:'右对齐',alignTextTop:'文本上方',alignTop:'顶端',quality:'质量',qualityBest:'最好',qualityHigh:'高',qualityAutoHigh:'高(自动)',qualityMedium:'中(自动)',qualityAutoLow:'低(自动)',qualityLow:'低',windowModeWindow:'窗体',windowModeOpaque:'不透明',windowModeTransparent:'透明',windowMode:'窗体模式',flashvars:'Flash变量',bgcolor:'背景颜色',width:'宽度',height:'高度',hSpace:'水平间距',vSpace:'垂直间距',validateSrc:'请输入超链接地址',validateWidth:'宽度必须为数字格式',validateHeight:'高度必须为数字格式',validateHSpace:'水平间距必须为数字格式',validateVSpace:'垂直间距必须为数字格式'},spellCheck:{toolbar:'拼写检查',title:'拼写检查',notAvailable:'抱歉,服务目前暂不可用',errorLoading:'无法联系该应用的主机: %s.',notInDic:'没有在字典里',changeTo:'更改为',btnIgnore:'忽略',btnIgnoreAll:'全部忽略',btnReplace:'替换',btnReplaceAll:'全部替换',btnUndo:'撤消',noSuggestions:'- 没有建议 -',progress:'正在进行拼写检查...',noMispell:'拼写检查完成:没有发现拼写错误',noChanges:'拼写检查完成:没有更改任何单词',oneChange:'拼写检查完成:更改了一个单词',manyChanges:'拼写检查完成:更改了 %1 个单词',ieSpellDownload:'拼写检查插件还没安装,你是否想现在就下载?'},smiley:{toolbar:'表情符',title:'插入表情图标'},elementsPath:{eleTitle:'%1 元素'},numberedlist:'编号列表',bulletedlist:'项目列表',indent:'增加缩进量',outdent:'减少缩进量',justify:{left:'左对齐',center:'居中对齐',right:'右对齐',block:'两端对齐'},blockquote:'块引用',clipboard:{title:'粘贴',cutError:'您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl+X)来完成',copyError:'您的浏览器安全设置不允许编辑器自动执行复制操作,请使用键盘快捷键(Ctrl+C)来完成',pasteMsg:'请使用键盘快捷键(<STRONG>Ctrl+V</STRONG>)把内容粘贴到下面的方框里,再按 <STRONG>确定</STRONG>',securityMsg:'因为你的浏览器的安全设置原因,本编辑器不能直接访问你的剪贴板内容,你需要在本窗口重新粘贴一次'},pastefromword:{toolbar:'从 MS Word 粘贴',title:'从 MS Word 粘贴',advice:'请使用键盘快捷键(<STRONG>Ctrl+V</STRONG>)把内容粘贴到下面的方框里,再按 <STRONG>确定</STRONG>',ignoreFontFace:'忽略 Font 标签',removeStyle:'清理 CSS 样式'},pasteText:{button:'粘贴为无格式文本',title:'粘贴为无格式文本'},templates:{button:'模板',title:'内容模板',insertOption:'替换当前内容',selectPromptMsg:'请选择编辑器内容模板:',emptyListMsg:'(没有模板)'},showBlocks:'显示区块',stylesCombo:{label:'样式',voiceLabel:'样式',panelVoiceLabel:'选择样式',panelTitle1:'块级元素样式',panelTitle2:'内联元素样式',panelTitle3:'对象元素样式'},format:{label:'格式',voiceLabel:'格式',panelTitle:'格式',panelVoiceLabel:'选择格式',tag_p:'普通',tag_pre:'已编排格式',tag_address:'地址',tag_h1:'标题 1',tag_h2:'标题 2',tag_h3:'标题 3',tag_h4:'标题 4',tag_h5:'标题 5',tag_h6:'标题 6',tag_div:'段落(DIV)'},font:{label:'字体',voiceLabel:'字体',panelTitle:'字体',panelVoiceLabel:'选择字体'},fontSize:{label:'大小',voiceLabel:'文字大小',panelTitle:'大小',panelVoiceLabel:'选择文字大小'},colorButton:{textColorTitle:'文本颜色',bgColorTitle:'背景颜色',auto:'自动',more:'其它颜色...'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'即时拼写检查',enable:'启用即时拼写检查',disable:'禁用即时拼写检查',about:'关于即时拼写检查',toggle:'暂停/启用即时拼写检查',options:'选项',langs:'语言',moreSuggestions:'更多拼写建议',ignore:'忽略',ignoreAll:'全部忽略',addWord:'添加单词',emptyDic:'字典名不应为空.',optionsTab:'选项',languagesTab:'语言',dictionariesTab:'字典',aboutTab:'关于'},about:{title:'关于CKEditor',dlgTitle:'关于CKEditor',moreInfo:'访问我们的网站以获取更多关于协议的信息',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'全屏',fakeobjects:{anchor:'锚点',flash:'Flash',div:'分页',unknown:'位置对象'},resize:'拖拽以改变尺寸'};\r
diff --git a/lang/zh.js b/lang/zh.js
new file mode 100644 (file)
index 0000000..f632cdc
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.lang.zh={dir:'ltr',editorTitle:'文書處理器, %1',source:'原始碼',newPage:'開新檔案',save:'儲存',preview:'預覽',cut:'剪下',copy:'複製',paste:'貼上',print:'列印',underline:'底線',bold:'粗體',italic:'斜體',selectAll:'全選',removeFormat:'清除格式',strike:'刪除線',subscript:'下標',superscript:'上標',horizontalrule:'插入水平線',pagebreak:'插入分頁符號',unlink:'移除超連結',undo:'復原',redo:'重複',common:{browseServer:'瀏覽伺服器端',url:'URL',protocol:'通訊協定',upload:'上傳',uploadSubmit:'上傳至伺服器',image:'影像',flash:'Flash',form:'表單',checkbox:'核取方塊',radio:'選項按鈕',textField:'文字方塊',textarea:'文字區域',hiddenField:'隱藏欄位',button:'按鈕',select:'清單/選單',imageButton:'影像按鈕',notSet:'<尚未設定>',id:'ID',name:'名稱',langDir:'語言方向',langDirLtr:'由左而右 (LTR)',langDirRtl:'由右而左 (RTL)',langCode:'語言代碼',longDescr:'詳細 URL',cssClass:'樣式表類別',advisoryTitle:'標題',cssStyle:'樣式',ok:'確定',cancel:'取消',generalTab:'一般',advancedTab:'進階',validateNumberFailed:'需要輸入數字格式',confirmNewPage:'現存的修改尚未儲存,要開新檔案?',confirmCancel:'部份選項尚未儲存,要關閉對話盒?',unavailable:'%1<span class="cke_accessibility">, 已關閉</span>'},specialChar:{toolbar:'插入特殊符號',title:'請選擇特殊符號'},link:{toolbar:'插入/編輯超連結',menu:'編輯超連結',title:'超連結',info:'超連結資訊',target:'目標',upload:'上傳',advanced:'進階',type:'超連接類型',toAnchor:'本頁錨點',toEmail:'電子郵件',target:'目標',targetNotSet:'<尚未設定>',targetFrame:'<框架>',targetPopup:'<快顯視窗>',targetNew:'新視窗 (_blank)',targetTop:'最上層視窗 (_top)',targetSelf:'本視窗 (_self)',targetParent:'父視窗 (_parent)',targetFrameName:'目標框架名稱',targetPopupName:'快顯視窗名稱',popupFeatures:'快顯視窗屬性',popupResizable:'可縮放',popupStatusBar:'狀態列',popupLocationBar:'網址列',popupToolbar:'工具列',popupMenuBar:'選單列',popupFullScreen:'全螢幕 (IE)',popupScrollBars:'捲軸',popupDependent:'從屬 (NS)',popupWidth:'寬',popupLeft:'左',popupHeight:'高',popupTop:'右',id:'ID',langDir:'語言方向',langDirNotSet:'<尚未設定>',langDirLTR:'由左而右 (LTR)',langDirRTL:'由右而左 (RTL)',acccessKey:'存取鍵',name:'名稱',langCode:'語言方向',tabIndex:'定位順序',advisoryTitle:'標題',advisoryContentType:'內容類型',cssClasses:'樣式表類別',charset:'連結資源之編碼',styles:'樣式',selectAnchor:'請選擇錨點',anchorName:'依錨點名稱',anchorId:'依元件 ID',emailAddress:'電子郵件',emailSubject:'郵件主旨',emailBody:'郵件內容',noAnchors:'(本文件尚無可用之錨點)',noUrl:'請輸入欲連結的 URL',noEmail:'請輸入電子郵件位址'},anchor:{toolbar:'插入/編輯錨點',menu:'錨點屬性',title:'錨點屬性',name:'錨點名稱',errorName:'請輸入錨點名稱'},findAndReplace:{title:'尋找與取代',find:'尋找',replace:'取代',findWhat:'尋找:',replaceWith:'取代:',notFoundMsg:'未找到指定的文字。',matchCase:'大小寫須相符',matchWord:'全字相符',matchCyclic:'循環搜索',replaceAll:'全部取代',replaceSuccessMsg:'共完成 %1 次取代'},table:{toolbar:'表格',title:'表格屬性',menu:'表格屬性',deleteTable:'刪除表格',rows:'列數',columns:'欄數',border:'邊框',align:'對齊',alignNotSet:'<未設定>',alignLeft:'靠左對齊',alignCenter:'置中',alignRight:'靠右對齊',width:'寬度',widthPx:'像素',widthPc:'百分比',height:'高度',cellSpace:'間距',cellPad:'內距',caption:'標題',summary:'摘要',headers:'標題',headersNone:'無標題',headersColumn:'第一欄',headersRow:'第一列',headersBoth:'第一欄和第一列',invalidRows:'必須有一或更多的列',invalidCols:'必須有一或更多的欄',invalidBorder:'邊框大小必須為數字格式',invalidWidth:'表格寬度必須為數字格式',invalidHeight:'表格高度必須為數字格式',invalidCellSpacing:'儲存格間距必須為數字格式',invalidCellPadding:'儲存格內距必須為數字格式',cell:{menu:'儲存格',insertBefore:'向左插入儲存格',insertAfter:'向右插入儲存格',deleteCell:'刪除儲存格',merge:'合併儲存格',mergeRight:'向右合併儲存格',mergeDown:'向下合併儲存格',splitHorizontal:'橫向分割儲存格',splitVertical:'縱向分割儲存格',title:'儲存格屬性',cellType:'儲存格類別',rowSpan:'儲存格列數',colSpan:'儲存格欄數',wordWrap:'自動換行',hAlign:'水平對齊',vAlign:'垂直對齊',alignTop:'向上對齊',alignMiddle:'置中對齊',alignBottom:'向下對齊',alignBaseline:'基線對齊',bgColor:'背景顏色',borderColor:'邊框顏色',data:'數據',header:'標題',yes:'是',no:'否',invalidWidth:'儲存格寬度必須為數字格式',invalidHeight:'儲存格高度必須為數字格式',invalidRowSpan:'儲存格列數必須為整數格式',invalidColSpan:'儲存格欄數度必須為整數格式'},row:{menu:'列',insertBefore:'向上插入列',insertAfter:'向下插入列',deleteRow:'刪除列'},column:{menu:'欄',insertBefore:'向左插入欄',insertAfter:'向右插入欄',deleteColumn:'刪除欄'}},button:{title:'按鈕屬性',text:'顯示文字 (值)',type:'類型',typeBtn:'按鈕 (Button)',typeSbm:'送出 (Submit)',typeRst:'重設 (Reset)'},checkboxAndRadio:{checkboxTitle:'核取方塊屬性',radioTitle:'選項按鈕屬性',value:'選取值',selected:'已選取'},form:{title:'表單屬性',menu:'表單屬性',action:'動作',method:'方法',encoding:'表單編碼',target:'目標',targetNotSet:'<尚未設定>',targetNew:'新視窗 (_blank)',targetTop:'最上層視窗 (_top)',targetSelf:'本視窗 (_self)',targetParent:'父視窗 (_parent)'},select:{title:'清單/選單屬性',selectInfo:'資訊',opAvail:'可用選項',value:'值',size:'大小',lines:'行',chkMulti:'可多選',opText:'顯示文字',opValue:'選取值',btnAdd:'新增',btnModify:'修改',btnUp:'上移',btnDown:'下移',btnSetValue:'設為預設值',btnDelete:'刪除'},textarea:{title:'文字區域屬性',cols:'字元寬度',rows:'列數'},textfield:{title:'文字方塊屬性',name:'名稱',value:'值',charWidth:'字元寬度',maxChars:'最多字元數',type:'類型',typeText:'文字',typePass:'密碼'},hidden:{title:'隱藏欄位屬性',name:'名稱',value:'值'},image:{title:'影像屬性',titleButton:'影像按鈕屬性',menu:'影像屬性',infoTab:'影像資訊',btnUpload:'上傳至伺服器',url:'URL',upload:'上傳',alt:'替代文字',width:'寬度',height:'高度',lockRatio:'等比例',resetSize:'重設為原大小',border:'邊框',hSpace:'水平距離',vSpace:'垂直距離',align:'對齊',alignLeft:'靠左對齊',alignAbsBottom:'絕對下方',alignAbsMiddle:'絕對中間',alignBaseline:'基準線',alignBottom:'靠下對齊',alignMiddle:'置中對齊',alignRight:'靠右對齊',alignTextTop:'文字上方',alignTop:'靠上對齊',preview:'預覽',alertUrl:'請輸入影像 URL',linkTab:'超連結',button2Img:'要把影像按鈕改成影像嗎?',img2Button:'要把影像改成影像按鈕嗎?'},flash:{properties:'Flash 屬性',propertiesTab:'屬性',title:'Flash 屬性',chkPlay:'自動播放',chkLoop:'重複',chkMenu:'開啟選單',chkFull:'啟動全螢幕顯示',scale:'縮放',scaleAll:'全部顯示',scaleNoBorder:'無邊框',scaleFit:'精確符合',access:'允許腳本訪問',accessAlways:'永遠',accessSameDomain:'相同域名',accessNever:'永不',align:'對齊',alignLeft:'靠左對齊',alignAbsBottom:'絕對下方',alignAbsMiddle:'絕對中間',alignBaseline:'基準線',alignBottom:'靠下對齊',alignMiddle:'置中對齊',alignRight:'靠右對齊',alignTextTop:'文字上方',alignTop:'靠上對齊',quality:'質素',qualityBest:'最好',qualityHigh:'高',qualityAutoHigh:'高(自動)',qualityMedium:'中(自動)',qualityAutoLow:'低(自動)',qualityLow:'低',windowModeWindow:'視窗',windowModeOpaque:'不透明',windowModeTransparent:'透明',windowMode:'視窗模式',flashvars:'Flash 變數',bgcolor:'背景顏色',width:'寬度',height:'高度',hSpace:'水平距離',vSpace:'垂直距離',validateSrc:'請輸入欲連結的 URL',validateWidth:'寬度必須為數字格式',validateHeight:'高度必須為數字格式',validateHSpace:'水平間距必須為數字格式',validateVSpace:'垂直間距必須為數字格式'},spellCheck:{toolbar:'拼字檢查',title:'拼字檢查',notAvailable:'抱歉,服務目前暫不可用',errorLoading:'無法聯系侍服器: %s.',notInDic:'不在字典中',changeTo:'更改為',btnIgnore:'忽略',btnIgnoreAll:'全部忽略',btnReplace:'取代',btnReplaceAll:'全部取代',btnUndo:'復原',noSuggestions:'- 無建議值 -',progress:'進行拼字檢查中…',noMispell:'拼字檢查完成:未發現拼字錯誤',noChanges:'拼字檢查完成:未更改任何單字',oneChange:'拼字檢查完成:更改了 1 個單字',manyChanges:'拼字檢查完成:更改了 %1 個單字',ieSpellDownload:'尚未安裝拼字檢查元件。您是否想要現在下載?'},smiley:{toolbar:'表情符號',title:'插入表情符號'},elementsPath:{eleTitle:'%1 元素'},numberedlist:'編號清單',bulletedlist:'項目清單',indent:'增加縮排',outdent:'減少縮排',justify:{left:'靠左對齊',center:'置中',right:'靠右對齊',block:'左右對齊'},blockquote:'引用文字',clipboard:{title:'貼上',cutError:'瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用快捷鍵 (Ctrl+X) 剪下。',copyError:'瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用快捷鍵 (Ctrl+C) 複製。',pasteMsg:'請使用快捷鍵 (<strong>Ctrl+V</strong>) 貼到下方區域中並按下 <strong>確定</strong>',securityMsg:'因為瀏覽器的安全性設定,本編輯器無法直接存取您的剪貼簿資料,請您自行在本視窗進行貼上動作。'},pastefromword:{toolbar:'自 Word 貼上',title:'自 Word 貼上',advice:'請使用快捷鍵 (<strong>Ctrl+V</strong>) 貼到下方區域中並按下 <strong>確定</strong>',ignoreFontFace:'移除字型設定',removeStyle:'移除樣式設定'},pasteText:{button:'貼為純文字格式',title:'貼為純文字格式'},templates:{button:'樣版',title:'內容樣版',insertOption:'取代原有內容',selectPromptMsg:'請選擇欲開啟的樣版<br> (原有的內容將會被清除):',emptyListMsg:'(無樣版)'},showBlocks:'顯示區塊',stylesCombo:{label:'樣式',voiceLabel:'樣式',panelVoiceLabel:'選擇樣式',panelTitle1:'塊級元素樣式',panelTitle2:'內聯元素樣式',panelTitle3:'物件元素樣式'},format:{label:'格式',voiceLabel:'格式',panelTitle:'格式',panelVoiceLabel:'選擇段落格式',tag_p:'一般',tag_pre:'已格式化',tag_address:'位址',tag_h1:'標題 1',tag_h2:'標題 2',tag_h3:'標題 3',tag_h4:'標題 4',tag_h5:'標題 5',tag_h6:'標題 6',tag_div:'一般 (DIV)'},font:{label:'字體',voiceLabel:'字體',panelTitle:'字體',panelVoiceLabel:'選擇字體'},fontSize:{label:'大小',voiceLabel:'文字大小',panelTitle:'大小',panelVoiceLabel:'選擇文字大小'},colorButton:{textColorTitle:'文字顏色',bgColorTitle:'背景顏色',auto:'自動',more:'更多顏色…'},colors:{'000':'Black',800000:'Maroon','8B4513':'Saddle Brown','2F4F4F':'Dark Slate Gray','008080':'Teal','000080':'Navy','4B0082':'Indigo',696969:'Dim Gray',B22222:'Fire Brick',A52A2A:'Brown',DAA520:'Golden Rod','006400':'Dark Green','40E0D0':'Turquoise','0000CD':'Medium Blue',800080:'Purple',808080:'Gray',F00:'Red',FF8C00:'Dark Orange',FFD700:'Gold','008000':'Green','0FF':'Cyan','00F':'Blue',EE82EE:'Violet',A9A9A9:'Dark Gray',FFA07A:'Light Salmon',FFA500:'Orange',FFFF00:'Yellow','00FF00':'Lime',AFEEEE:'Pale Turquoise',ADD8E6:'Light Blue',DDA0DD:'Plum',D3D3D3:'Light Grey',FFF0F5:'Lavender Blush',FAEBD7:'Antique White',FFFFE0:'Light Yellow',F0FFF0:'Honeydew',F0FFFF:'Azure',F0F8FF:'Alice Blue',E6E6FA:'Lavender',FFF:'White'},scayt:{title:'即時拼寫檢查',enable:'啟用即時拼寫檢查',disable:'關閉即時拼寫檢查',about:'關於即時拼寫檢查',toggle:'啟用/關閉即時拼寫檢查',options:'選項',langs:'語言',moreSuggestions:'更多拼寫建議',ignore:'忽略',ignoreAll:'全部忽略',addWord:'添加單詞',emptyDic:'字典名不應為空.',optionsTab:'選項',languagesTab:'語言',dictionariesTab:'字典',aboutTab:'關於'},about:{title:'關於 CKEditor',dlgTitle:'關於 CKEditor',moreInfo:'訪問我們的網站以獲取更多關於協議的信息',copy:'Copyright &copy; $1. All rights reserved.'},maximize:'最大化',fakeobjects:{anchor:'錨點',flash:'Flash 動畫',div:'分頁',unknown:'不明物件'},resize:'拖拽改變大小'};\r
diff --git a/plugins/about/dialogs/about.js b/plugins/about/dialogs/about.js
new file mode 100644 (file)
index 0000000..f3b6380
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('about',function(a){var b=a.lang.about;return{title:CKEDITOR.env.ie?b.dlgTitle:b.title,minWidth:390,minHeight:230,contents:[{id:'tab1',label:'',title:'',expand:true,padding:0,elements:[{type:'html',html:'<style type="text/css">.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+CKEDITOR.plugins.get('about').path+'dialogs/logo_ckeditor.png);'+'background-position:center; '+'background-repeat:no-repeat;'+'margin-bottom:10px;'+'}'+'.cke_about_container a'+'{'+'cursor:pointer !important;'+'color:blue !important;'+'text-decoration:underline !important;'+'}'+'</style>'+'<div class="cke_about_container">'+'<div class="cke_about_logo"></div>'+'<p>'+'CKEditor '+CKEDITOR.version+' (revision '+CKEDITOR.revision+')<br>'+'<a href="http://ckeditor.com/">http://ckeditor.com</a>'+'</p>'+'<p>'+b.moreInfo+'<br>'+'<a href="http://ckeditor.com/license">http://ckeditor.com/license</a>'+'</p>'+'<p>'+b.copy.replace('$1','<a href="http://cksource.com/">CKSource</a> - Frederico Knabben')+'</p>'+'</div>'}]}],buttons:[CKEDITOR.dialog.cancelButton]};});\r
diff --git a/plugins/about/dialogs/logo_ckeditor.png b/plugins/about/dialogs/logo_ckeditor.png
new file mode 100644 (file)
index 0000000..ad01902
Binary files /dev/null and b/plugins/about/dialogs/logo_ckeditor.png differ
diff --git a/plugins/about/plugin.js b/plugins/about/plugin.js
new file mode 100644 (file)
index 0000000..c3c52c3
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('about',{init:function(a){var b=a.addCommand('about',new CKEDITOR.dialogCommand('about'));b.modes={wysiwyg:1,source:1};b.canUndo=false;a.ui.addButton('About',{label:a.lang.about.title,command:'about'});CKEDITOR.dialog.add('about',this.path+'dialogs/about.js');}});\r
diff --git a/plugins/basicstyles/plugin.js b/plugins/basicstyles/plugin.js
new file mode 100644 (file)
index 0000000..bd9574b
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('basicstyles',{requires:['styles','button'],init:function(a){var b=function(e,f,g,h){var i=new CKEDITOR.style(h);a.attachStyleStateChange(i,function(j){a.getCommand(g).setState(j);});a.addCommand(g,new CKEDITOR.styleCommand(i));a.ui.addButton(e,{label:f,command:g});},c=a.config,d=a.lang;b('Bold',d.bold,'bold',c.coreStyles_bold);b('Italic',d.italic,'italic',c.coreStyles_italic);b('Underline',d.underline,'underline',c.coreStyles_underline);b('Strike',d.strike,'strike',c.coreStyles_strike);b('Subscript',d.subscript,'subscript',c.coreStyles_subscript);b('Superscript',d.superscript,'superscript',c.coreStyles_superscript);}});CKEDITOR.config.coreStyles_bold={element:'strong',overrides:'b'};CKEDITOR.config.coreStyles_italic={element:'em',overrides:'i'};CKEDITOR.config.coreStyles_underline={element:'u'};CKEDITOR.config.coreStyles_strike={element:'strike'};CKEDITOR.config.coreStyles_subscript={element:'sub'};CKEDITOR.config.coreStyles_superscript={element:'sup'};\r
diff --git a/plugins/blockquote/plugin.js b/plugins/blockquote/plugin.js
new file mode 100644 (file)
index 0000000..820203c
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){function a(e,f){var g=f.block||f.blockLimit;if(!g||g.getName()=='body')return CKEDITOR.TRISTATE_OFF;if(g.getAscendant('blockquote',true))return CKEDITOR.TRISTATE_ON;return CKEDITOR.TRISTATE_OFF;};function b(e){var f=e.editor,g=f.getCommand('blockquote');g.state=a(f,e.data.path);g.fire('state');};function c(e){for(var f=0,g=e.getChildCount(),h;f<g&&(h=e.getChild(f));f++)if(h.type==CKEDITOR.NODE_ELEMENT&&h.isBlockBoundary())return false;return true;};var d={exec:function(e){var f=e.getCommand('blockquote').state,g=e.getSelection(),h=g&&g.getRanges()[0];if(!h)return;var i=g.createBookmarks();if(CKEDITOR.env.ie){var j=i[0].startNode,k=i[0].endNode,l;if(j&&j.getParent().getName()=='blockquote'){l=j;while(l=l.getNext())if(l.type==CKEDITOR.NODE_ELEMENT&&l.isBlockBoundary()){j.move(l,true);break;}}if(k&&k.getParent().getName()=='blockquote'){l=k;while(l=l.getPrevious())if(l.type==CKEDITOR.NODE_ELEMENT&&l.isBlockBoundary()){k.move(l);break;}}}var m=h.createIterator(),n;if(f==CKEDITOR.TRISTATE_OFF){var o=[];while(n=m.getNextParagraph())o.push(n);if(o.length<1){var p=e.document.createElement(e.config.enterMode==CKEDITOR.ENTER_P?'p':'div'),q=i.shift();h.insertNode(p);p.append(new CKEDITOR.dom.text('',e.document));h.moveToBookmark(q);h.selectNodeContents(p);h.collapse(true);q=h.createBookmark();o.push(p);i.unshift(q);}var r=o[0].getParent(),s=[];for(var t=0;t<o.length;t++){n=o[t];r=r.getCommonAncestor(n.getParent());}var u={table:1,tbody:1,tr:1,ol:1,ul:1};while(u[r.getName()])r=r.getParent();var v=null;while(o.length>0){n=o.shift();while(!n.getParent().equals(r))n=n.getParent();if(!n.equals(v))s.push(n);v=n;}while(s.length>0){n=s.shift();if(n.getName()=='blockquote'){var w=new CKEDITOR.dom.documentFragment(e.document);while(n.getFirst()){w.append(n.getFirst().remove());o.push(w.getLast());}w.replace(n);}else o.push(n);}var x=e.document.createElement('blockquote');x.insertBefore(o[0]);while(o.length>0){n=o.shift();x.append(n);}}else if(f==CKEDITOR.TRISTATE_ON){var y=[],z={};while(n=m.getNextParagraph()){var A=null,B=null;while(n.getParent()){if(n.getParent().getName()=='blockquote'){A=n.getParent();B=n;break;}n=n.getParent();}if(A&&B&&!B.getCustomData('blockquote_moveout')){y.push(B);CKEDITOR.dom.element.setMarker(z,B,'blockquote_moveout',true);}}CKEDITOR.dom.element.clearAllMarkers(z);var C=[],D=[];z={};while(y.length>0){var E=y.shift();x=E.getParent();if(!E.getPrevious())E.remove().insertBefore(x);else if(!E.getNext())E.remove().insertAfter(x);else{E.breakParent(E.getParent());\r
+D.push(E.getNext());}if(!x.getCustomData('blockquote_processed')){D.push(x);CKEDITOR.dom.element.setMarker(z,x,'blockquote_processed',true);}C.push(E);}CKEDITOR.dom.element.clearAllMarkers(z);for(t=D.length-1;t>=0;t--){x=D[t];if(c(x))x.remove();}if(e.config.enterMode==CKEDITOR.ENTER_BR){var F=true;while(C.length){E=C.shift();if(E.getName()=='div'){w=new CKEDITOR.dom.documentFragment(e.document);var G=F&&E.getPrevious()&&!(E.getPrevious().type==CKEDITOR.NODE_ELEMENT&&E.getPrevious().isBlockBoundary());if(G)w.append(e.document.createElement('br'));var H=E.getNext()&&!(E.getNext().type==CKEDITOR.NODE_ELEMENT&&E.getNext().isBlockBoundary());while(E.getFirst())E.getFirst().remove().appendTo(w);if(H)w.append(e.document.createElement('br'));w.replace(E);F=false;}}}}g.selectBookmarks(i);e.focus();}};CKEDITOR.plugins.add('blockquote',{init:function(e){e.addCommand('blockquote',d);e.ui.addButton('Blockquote',{label:e.lang.blockquote,command:'blockquote'});e.on('selectionChange',b);},requires:['domiterator']});})();\r
diff --git a/plugins/button/plugin.js b/plugins/button/plugin.js
new file mode 100644 (file)
index 0000000..780d279
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('button',{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler);}});CKEDITOR.UI_BUTTON=1;CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,className:a.className||a.command&&'cke_button_'+a.command||'',click:a.click||(function(b){b.execCommand(a.command);})});this._={};};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a);}};CKEDITOR.ui.button.prototype={canGroup:true,render:function(a,b){var c=CKEDITOR.env,d=this._.id='cke_'+CKEDITOR.tools.getNextNumber();this._.editor=a;var e={id:d,button:this,editor:a,focus:function(){var k=CKEDITOR.document.getById(d);k.focus();},execute:function(){this.button.click(a);}},f=CKEDITOR.tools.addFunction(e.execute,e),g=CKEDITOR.ui.button._.instances.push(e)-1,h='',i=this.command;if(this.modes)a.on('mode',function(){this.setState(this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);},this);else if(i){i=a.getCommand(i);if(i){i.on('state',function(){this.setState(i.state);},this);h+='cke_'+(i.state==CKEDITOR.TRISTATE_ON?'on':i.state==CKEDITOR.TRISTATE_DISABLED?'disabled':'off');}}if(!i)h+='cke_off';if(this.className)h+=' '+this.className;b.push('<span class="cke_button">','<a id="',d,'" class="',h,'" href="javascript:void(\'',(this.title||'').replace("'",''),'\')" title="',this.title,'" tabindex="-1" hidefocus="true"');if(c.opera||c.gecko&&c.mac)b.push(' onkeypress="return false;"');if(c.gecko)b.push(' onblur="this.style.cssText = this.style.cssText;"');b.push(' onkeydown="return CKEDITOR.ui.button._.keydown(',g,', event);" onfocus="return CKEDITOR.ui.button._.focus(',g,', event);" onclick="CKEDITOR.tools.callFunction(',f,', this); return false;"><span class="cke_icon"');if(this.icon){var j=(this.iconOffset||0)*(-16);b.push(' style="background-image:url(',CKEDITOR.getUrl(this.icon),');background-position:0 '+j+'px;"');}b.push('></span><span class="cke_label">',this.label,'</span>');if(this.hasArrow)b.push('<span class="cke_buttonarrow"></span>');b.push('</a>','</span>');if(this.onRender)this.onRender();return e;},setState:function(a){var f=this;if(f._.state==a)return;var b=CKEDITOR.document.getById(f._.id);if(b){b.setState(a);var c=f.title,d=f._.editor.lang.common.unavailable,e=b.getChild(1);if(a==CKEDITOR.TRISTATE_DISABLED)c=d.replace('%1',f.title);e.setHtml(c);}f._.state=a;}};CKEDITOR.ui.button._={instances:[],keydown:function(a,b){var c=CKEDITOR.ui.button._.instances[a];if(c.onkey){b=new CKEDITOR.dom.event(b);\r
+return c.onkey(c,b.getKeystroke())!==false;}},focus:function(a,b){var c=CKEDITOR.ui.button._.instances[a],d;if(c.onfocus)d=c.onfocus(c,new CKEDITOR.dom.event(b))!==false;if(CKEDITOR.env.gecko&&CKEDITOR.env.version<10900)b.preventBubble();return d;}};CKEDITOR.ui.prototype.addButton=function(a,b){this.add(a,CKEDITOR.UI_BUTTON,b);};\r
diff --git a/plugins/clipboard/dialogs/paste.js b/plugins/clipboard/dialogs/paste.js
new file mode 100644 (file)
index 0000000..4541f08
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('paste',function(a){var b=CKEDITOR.env.ie&&document.domain!=window.location.hostname;return{title:a.lang.clipboard.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,htmlToLoad:'<!doctype html><script type="text/javascript">window.onload = function(){if ( '+CKEDITOR.env.ie+' ) '+'document.body.contentEditable = "true";'+'else '+'document.designMode = "on";'+'var iframe = new window.parent.CKEDITOR.dom.element( frameElement );'+'var dialog = iframe.getCustomData( "dialog" );'+''+'iframe.getFrameDocument().on( "keydown", function( e )\t\t\t\t\t\t{\t\t\t\t\t\t\tif ( e.data.getKeystroke() == 27 )\t\t\t\t\t\t\t\tdialog.hide();\t\t\t\t\t\t});'+'};'+'</script><style>body { margin: 3px; height: 95%; } </style><body></body>',onShow:function(){var h=this;if(CKEDITOR.env.ie)h.getParentEditor().document.getBody().$.contentEditable='false';h.parts.dialog.$.offsetHeight;var c=h.getContentElement('general','editing_area').getElement(),d=CKEDITOR.dom.element.createFromHtml('<iframe src="javascript:void(0)" frameborder="0" allowtransparency="1"></iframe>'),e=h.getParentEditor().lang;d.setStyles({width:'346px',height:'130px','background-color':'white',border:'1px solid black'});d.setCustomData('dialog',h);var f=e.editorTitle.replace('%1',e.clipboard.title);if(CKEDITOR.env.ie)c.setHtml('<legend style="position:absolute;top:-1000000px;left:-1000000px;">'+CKEDITOR.tools.htmlEncode(f)+'</legend>');else{c.setHtml('');c.setAttributes({role:'region',title:f});d.setAttributes({role:'region',title:' '});}c.append(d);if(CKEDITOR.env.ie)c.setStyle('height',d.$.offsetHeight+2+'px');if(b){CKEDITOR._cke_htmlToLoad=h.definition.htmlToLoad;d.setAttribute('src','javascript:void( (function(){document.open();document.domain="'+document.domain+'";'+'document.write( window.parent.CKEDITOR._cke_htmlToLoad );'+'delete window.parent.CKEDITOR._cke_htmlToLoad;'+'document.close();'+'})() )');}else{var g=d.$.contentWindow.document;g.open();g.write(h.definition.htmlToLoad);g.close();}},onHide:function(){if(CKEDITOR.env.ie)this.getParentEditor().document.getBody().$.contentEditable='true';},onLoad:function(){if((CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&(a.lang.dir=='rtl'))this.parts.contents.setStyle('overflow','hidden');},onOk:function(){var c=this.getContentElement('general','editing_area').getElement(),d=c.getElementsByTag('iframe').getItem(0),e=this.getParentEditor(),f=d.$.contentWindow.document.body.innerHTML;setTimeout(function(){e.insertHtml(f);\r
+},0);},contents:[{id:'general',label:a.lang.common.generalTab,elements:[{type:'html',id:'securityMsg',html:'<div style="white-space:normal;width:340px;">'+a.lang.clipboard.securityMsg+'</div>'},{type:'html',id:'pasteMsg',html:'<div style="white-space:normal;width:340px;">'+a.lang.clipboard.pasteMsg+'</div>'},{type:'html',id:'editing_area',style:'width: 100%; height: 100%;',html:'<fieldset></fieldset>',focus:function(){var c=this.getElement(),d=c.getElementsByTag('iframe');if(d.count()<1)return;d=d.getItem(0);setTimeout(function(){d.$.contentWindow.focus();},500);}}]}]};});\r
diff --git a/plugins/clipboard/plugin.js b/plugins/clipboard/plugin.js
new file mode 100644 (file)
index 0000000..323ac82
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a=function(f,g){var h=f.document,i=h.getBody(),j=false,k=function(){j=true;};i.on(g,k);h.$.execCommand(g);i.removeListener(g,k);return j;},b=CKEDITOR.env.ie?function(f,g){return a(f,g);}:function(f,g){try{return f.document.$.execCommand(g);}catch(h){return false;}},c=function(f){this.type=f;this.canUndo=this.type=='cut';};c.prototype={exec:function(f,g){var h=b(f,this.type);if(!h)alert(f.lang.clipboard[this.type+'Error']);return h;}};var d=CKEDITOR.env.ie?{exec:function(f,g){f.focus();if(!f.fire('beforePaste')&&!a(f,'paste'))f.openDialog('paste');}}:{exec:function(f){try{if(!f.fire('beforePaste')&&!f.document.$.execCommand('Paste',false,null))throw 0;}catch(g){f.openDialog('paste');}}},e=function(f){switch(f.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:var g=this;g.fire('saveSnapshot');if(g.fire('beforePaste'))f.cancel();setTimeout(function(){g.fire('saveSnapshot');},0);return;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:g=this;g.fire('saveSnapshot');setTimeout(function(){g.fire('saveSnapshot');},0);}};CKEDITOR.plugins.add('clipboard',{init:function(f){function g(i,j,k,l){var m=f.lang[j];f.addCommand(j,k);f.ui.addButton(i,{label:m,command:j});if(f.addMenuItems)f.addMenuItem(j,{label:m,command:j,group:'clipboard',order:l});};g('Cut','cut',new c('cut'),1);g('Copy','copy',new c('copy'),4);g('Paste','paste',d,8);CKEDITOR.dialog.add('paste',CKEDITOR.getUrl(this.path+'dialogs/paste.js'));f.on('key',e,f);if(f.contextMenu){function h(i){return f.document.$.queryCommandEnabled(i)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;};f.contextMenu.addListener(function(){return{cut:h('Cut'),copy:h('Cut'),paste:CKEDITOR.env.webkit?CKEDITOR.TRISTATE_OFF:h('Paste')};});}}});})();\r
diff --git a/plugins/colorbutton/plugin.js b/plugins/colorbutton/plugin.js
new file mode 100644 (file)
index 0000000..4880344
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('colorbutton',{requires:['panelbutton','floatpanel','styles'],init:function(a){var b=a.config,c=a.lang.colorButton,d;if(!CKEDITOR.env.hc){e('TextColor','fore',c.textColorTitle);e('BGColor','back',c.bgColorTitle);}function e(g,h,i){a.ui.add(g,CKEDITOR.UI_PANELBUTTON,{label:i,title:i,className:'cke_button_'+g.toLowerCase(),modes:{wysiwyg:1},panel:{css:[CKEDITOR.getUrl(a.skinPath+'editor.css')]},onBlock:function(j,k){var l=j.addBlock(k);l.autoSize=true;l.element.addClass('cke_colorblock');l.element.setHtml(f(j,h));var m=l.keys;m[39]='next';m[9]='next';m[37]='prev';m[CKEDITOR.SHIFT+9]='prev';m[32]='click';}});};function f(g,h){var i=[],j=b.colorButton_colors.split(','),k=CKEDITOR.tools.addFunction(function(o,p){if(o=='?')return;a.focus();g.hide();var q=new CKEDITOR.style(b['colorButton_'+p+'Style'],o&&{color:o});a.fire('saveSnapshot');if(o)q.apply(a.document);else q.remove(a.document);a.fire('saveSnapshot');});i.push('<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="',c.auto,'" onclick="CKEDITOR.tools.callFunction(',k,",null,'",h,"');return false;\" href=\"javascript:void('",c.auto,'\')"><table cellspacing=0 cellpadding=0 width="100%"><tr><td><span class="cke_colorbox" style="background-color:#000"></span></td><td colspan=7 align=center>',c.auto,'</td></tr></table></a><table cellspacing=0 cellpadding=0 width="100%">');for(var l=0;l<j.length;l++){if(l%8===0)i.push('</tr><tr>');var m=j[l],n=a.lang.colors[m]||m;i.push('<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="',n,'" onclick="CKEDITOR.tools.callFunction(',k,",'#",m,"','",h,"'); return false;\" href=\"javascript:void('",n,'\')"><span class="cke_colorbox" style="background-color:#',m,'"></span></a></td>');}if(b.colorButton_enableMore)i.push('</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="',c.more,'" onclick="CKEDITOR.tools.callFunction(',k,",'?','",h,"');return false;\" href=\"javascript:void('",c.more,"')\">",c.more,'</a></td>');i.push('</tr></table>');return i.join('');};}});CKEDITOR.config.colorButton_enableMore=false;CKEDITOR.config.colorButton_colors='000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF';CKEDITOR.config.colorButton_foreStyle={element:'span',styles:{color:'#(color)'},overrides:[{element:'font',attributes:{color:null}}]};\r
+CKEDITOR.config.colorButton_backStyle={element:'span',styles:{'background-color':'#(color)'}};\r
diff --git a/plugins/contextmenu/plugin.js b/plugins/contextmenu/plugin.js
new file mode 100644 (file)
index 0000000..ee4c3d0
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('contextmenu',{requires:['menu'],beforeInit:function(a){a.contextMenu=new CKEDITOR.plugins.contextMenu(a);a.addCommand('contextMenu',{exec:function(){a.contextMenu.show();}});}});CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({$:function(a){this.id='cke_'+CKEDITOR.tools.getNextNumber();this.editor=a;this._.listeners=[];this._.functionId=CKEDITOR.tools.addFunction(function(b){this._.panel.hide();a.focus();a.execCommand(b);},this);},_:{onMenu:function(a,b,c,d){var e=this._.menu,f=this.editor;if(e){e.hide();e.removeAll();}else{e=this._.menu=new CKEDITOR.menu(f);e.onClick=CKEDITOR.tools.bind(function(o){var p=true;e.hide();if(CKEDITOR.env.ie)e.onEscape();if(o.onClick)o.onClick();else if(o.command)f.execCommand(o.command);p=false;},this);e.onEscape=function(){f.focus();if(CKEDITOR.env.ie)f.getSelection().unlock(true);};}var g=this._.listeners,h=[],i=this.editor.getSelection(),j=i&&i.getStartElement();if(CKEDITOR.env.ie)i.lock();e.onHide=CKEDITOR.tools.bind(function(){e.onHide=null;if(CKEDITOR.env.ie)f.getSelection().unlock();this.onHide&&this.onHide();},this);for(var k=0;k<g.length;k++){var l=g[k](j,i);if(l)for(var m in l){var n=this.editor.getMenuItem(m);if(n){n.state=l[m];e.add(n);}}}e.show(a,b||(f.lang.dir=='rtl'?2:1),c,d);}},proto:{addTarget:function(a){a.on('contextmenu',function(b){var c=b.data;c.preventDefault();var d=c.getTarget().getDocument().getDocumentElement(),e=c.$.clientX,f=c.$.clientY;CKEDITOR.tools.setTimeout(function(){this._.onMenu(d,null,e,f);},0,this);},this);},addListener:function(a){this._.listeners.push(a);},show:function(a,b,c,d){this.editor.focus();this._.onMenu(a||CKEDITOR.document.getDocumentElement(),b,c||0,d||0);}}});\r
diff --git a/plugins/dialog/dialogDefinition.js b/plugins/dialog/dialogDefinition.js
new file mode 100644 (file)
index 0000000..daab9e3
--- /dev/null
@@ -0,0 +1,4 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
diff --git a/plugins/dialog/plugin.js b/plugins/dialog/plugin.js
new file mode 100644 (file)
index 0000000..49c4fa9
--- /dev/null
@@ -0,0 +1,17 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('dialog',{requires:['dialogui']});CKEDITOR.DIALOG_RESIZE_NONE=0;CKEDITOR.DIALOG_RESIZE_WIDTH=1;CKEDITOR.DIALOG_RESIZE_HEIGHT=2;CKEDITOR.DIALOG_RESIZE_BOTH=3;(function(){function a(y){return!!this._.tabs[y][0].$.offsetHeight;};function b(){var C=this;var y=C._.currentTabId,z=C._.tabIdList.length,A=CKEDITOR.tools.indexOf(C._.tabIdList,y)+z;for(var B=A-1;B>A-z;B--)if(a.call(C,C._.tabIdList[B%z]))return C._.tabIdList[B%z];return null;};function c(){var C=this;var y=C._.currentTabId,z=C._.tabIdList.length,A=CKEDITOR.tools.indexOf(C._.tabIdList,y);for(var B=A+1;B<A+z;B++)if(a.call(C,C._.tabIdList[B%z]))return C._.tabIdList[B%z];return null;};var d={};CKEDITOR.dialog=function(y,z){var A=CKEDITOR.dialog._.dialogDefinitions[z];if(!A){console.log('Error: The dialog "'+z+'" is not defined.');return;}A=CKEDITOR.tools.extend(A(y),f);A=CKEDITOR.tools.clone(A);A=new j(this,A);this.definition=A=CKEDITOR.fire('dialogDefinition',{name:z,definition:A},y).definition;var B=CKEDITOR.document,C=y.theme.buildDialog(y);this._={editor:y,element:C.element,name:z,contentSize:{width:0,height:0},size:{width:0,height:0},updateSize:false,contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:false,focusList:[],currentFocusIndex:0,hasFocus:false};this.parts=C.parts;this.parts.dialog.setStyles({position:CKEDITOR.env.ie6Compat?'absolute':'fixed',top:0,left:0,visibility:'hidden'});CKEDITOR.event.call(this);if(A.onLoad)this.on('load',A.onLoad);if(A.onShow)this.on('show',A.onShow);if(A.onHide)this.on('hide',A.onHide);if(A.onOk)this.on('ok',function(M){if(A.onOk.call(this,M)===false)M.data.hide=false;});if(A.onCancel)this.on('cancel',function(M){if(A.onCancel.call(this,M)===false)M.data.hide=false;});var D=this,E=function(M){var N=D._.contents,O=false;for(var P in N)for(var Q in N[P]){O=M.call(this,N[P][Q]);if(O)return;}};this.on('ok',function(M){E(function(N){if(N.validate){var O=N.validate(this);if(typeof O=='string'){alert(O);O=false;}if(O===false){if(N.select)N.select();else N.focus();M.data.hide=false;M.stop();return true;}}});},this,null,0);this.on('cancel',function(M){E(function(N){if(N.isChanged()){if(!confirm(y.lang.common.confirmCancel))M.data.hide=false;return true;}});},this,null,0);this.parts.close.on('click',function(M){if(this.fire('cancel',{hide:true}).hide!==false)this.hide();},this);function F(M){var N=D._.focusList,O=M?1:-1;if(N.length<1)return;var P=(D._.currentFocusIndex+O+N.length)%(N.length);\r
+while(!N[P].isFocusable()){P=(P+O+N.length)%(N.length);if(P==D._.currentFocusIndex)break;}N[P].focus();};function G(M){if(D!=CKEDITOR.dialog._.currentTop)return;var N=M.data.getKeystroke(),O=false;if(N==9||N==CKEDITOR.SHIFT+9){var P=N==CKEDITOR.SHIFT+9;if(D._.tabBarMode){var Q=P?b.call(D):c.call(D);D.selectPage(Q);D._.tabs[Q][0].focus();}else F(!P);O=true;}else if(N==CKEDITOR.ALT+121&&!D._.tabBarMode){D._.tabBarMode=true;D._.tabs[D._.currentTabId][0].focus();O=true;}else if((N==37||N==39)&&(D._.tabBarMode)){Q=N==37?b.call(D):c.call(D);D.selectPage(Q);D._.tabs[Q][0].focus();O=true;}if(O){M.stop();M.data.preventDefault();}};this.on('show',function(){CKEDITOR.document.on('keydown',G,this,null,0);if(CKEDITOR.env.ie6Compat){var M=o.getChild(0).getFrameDocument();M.on('keydown',G,this,null,0);}});this.on('hide',function(){CKEDITOR.document.removeListener('keydown',G);});this.on('iframeAdded',function(M){var N=new CKEDITOR.dom.document(M.data.iframe.$.contentWindow.document);N.on('keydown',G,this,null,0);});this.on('show',function(){var P=this;if(!P._.hasFocus){P._.currentFocusIndex=-1;F(true);if(P._.editor.mode=='wysiwyg'&&CKEDITOR.env.ie){var M=y.document.$.selection,N=M.createRange();if(N)if(N.parentElement&&N.parentElement().ownerDocument==y.document.$||N.item&&N.item(0).ownerDocument==y.document.$){var O=document.body.createTextRange();O.moveToElementText(P.getElement().getFirst().$);O.collapse(true);O.select();}}}},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on('load',function(M){var N=this.getElement(),O=N.getFirst();O.remove();O.appendTo(N);},this);l(this);m(this);new CKEDITOR.dom.text(A.title,CKEDITOR.document).appendTo(this.parts.title);for(var H=0;H<A.contents.length;H++)this.addPage(A.contents[H]);var I=/cke_dialog_tab(\s|$|_)/,J=/cke_dialog_tab(\s|$)/;this.parts.tabs.on('click',function(M){var R=this;var N=M.data.getTarget(),O=N,P,Q;if(!(I.test(N.$.className)||N.getName()=='a'))return;P=N.$.id.substr(0,N.$.id.lastIndexOf('_'));R.selectPage(P);if(R._.tabBarMode){R._.tabBarMode=false;R._.currentFocusIndex=-1;F(true);}M.data.preventDefault();},this);var K=[],L=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:'hbox',className:'cke_dialog_footer_buttons',widths:[],children:A.buttons},K).getChild();this.parts.footer.setHtml(K.join(''));for(H=0;H<L.length;H++)this._.buttons[L[H].id]=L[H];CKEDITOR.skins.load(y,'dialog');};function e(y,z,A){this.element=z;this.focusIndex=A;this.isFocusable=function(){return true;};this.focus=function(){y._.currentFocusIndex=this.focusIndex;\r
+this.element.focus();};z.on('keydown',function(B){if(B.data.getKeystroke() in {32:1,13:1})this.fire('click');});z.on('focus',function(){this.fire('mouseover');});z.on('blur',function(){this.fire('mouseout');});};CKEDITOR.dialog.prototype={resize:(function(){return function(y,z){var A=this;if(A._.contentSize&&A._.contentSize.width==y&&A._.contentSize.height==z)return;CKEDITOR.dialog.fire('resize',{dialog:A,skin:A._.editor.skinName,width:y,height:z},A._.editor);A._.contentSize={width:y,height:z};A._.updateSize=true;};})(),getSize:function(){var A=this;if(!A._.updateSize)return A._.size;var y=A._.element.getFirst(),z=A._.size={width:y.$.offsetWidth||0,height:y.$.offsetHeight||0};A._.updateSize=!z.width||!z.height;return z;},move:(function(){var y;return function(z,A){var D=this;var B=D._.element.getFirst();if(y===undefined)y=B.getComputedStyle('position')=='fixed';if(y&&D._.position&&D._.position.x==z&&D._.position.y==A)return;D._.position={x:z,y:A};if(!y){var C=CKEDITOR.document.getWindow().getScrollPosition();z+=C.x;A+=C.y;}B.setStyles({left:(z>0?z:0)+('px'),top:(A>0?A:0)+('px')});};})(),getPosition:function(){return CKEDITOR.tools.extend({},this._.position);},show:function(){if(this._.editor.mode=='wysiwyg'&&CKEDITOR.env.ie)this._.editor.getSelection().lock();var y=this._.element,z=this.definition;if(!(y.getParent()&&y.getParent().equals(CKEDITOR.document.getBody())))y.appendTo(CKEDITOR.document.getBody());else return;if(CKEDITOR.env.gecko&&CKEDITOR.env.version<10900){var A=this.parts.dialog;A.setStyle('position','absolute');setTimeout(function(){A.setStyle('position','fixed');},0);}this.resize(z.minWidth,z.minHeight);this.selectPage(this.definition.contents[0].id);this.reset();if(CKEDITOR.dialog._.currentZIndex===null)CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex;this._.element.getFirst().setStyle('z-index',CKEDITOR.dialog._.currentZIndex+=10);if(CKEDITOR.dialog._.currentTop===null){CKEDITOR.dialog._.currentTop=this;this._.parentDialog=null;p(this._.editor);CKEDITOR.document.on('keydown',s);CKEDITOR.document.on('keyup',t);}else{this._.parentDialog=CKEDITOR.dialog._.currentTop;var B=this._.parentDialog.getElement().getFirst();B.$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2);CKEDITOR.dialog._.currentTop=this;}u(this,this,'\x1b',null,function(){this.getButton('cancel')&&this.getButton('cancel').click();});this._.hasFocus=false;CKEDITOR.tools.setTimeout(function(){var C=CKEDITOR.document.getWindow().getViewPaneSize(),D=this.getSize();\r
+this.move((C.width-z.minWidth)/(2),(C.height-D.height)/(2));this.parts.dialog.setStyle('visibility','');this.fireOnce('load',{});this.fire('show',{});this.foreach(function(E){E.setInitValue&&E.setInitValue();});},100,this);},foreach:function(y){var B=this;for(var z in B._.contents)for(var A in B._.contents[z])y(B._.contents[z][A]);return B;},reset:(function(){var y=function(z){if(z.reset)z.reset();};return function(){this.foreach(y);return this;};})(),setupContent:function(){var y=arguments;this.foreach(function(z){if(z.setup)z.setup.apply(z,y);});},commitContent:function(){var y=arguments;this.foreach(function(z){if(z.commit)z.commit.apply(z,y);});},hide:function(){this.fire('hide',{});var y=this._.element;if(!y.getParent())return;y.remove();this.parts.dialog.setStyle('visibility','hidden');v(this);if(!this._.parentDialog)q();else{var z=this._.parentDialog.getElement().getFirst();z.setStyle('z-index',parseInt(z.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2));}CKEDITOR.dialog._.currentTop=this._.parentDialog;if(!this._.parentDialog){CKEDITOR.dialog._.currentZIndex=null;CKEDITOR.document.removeListener('keydown',s);CKEDITOR.document.removeListener('keyup',t);var A=this._.editor;A.focus();if(A.mode=='wysiwyg'&&CKEDITOR.env.ie)A.getSelection().unlock(true);}else CKEDITOR.dialog._.currentZIndex-=10;this.foreach(function(B){B.resetInitValue&&B.resetInitValue();});},addPage:function(y){var I=this;var z=[],A=y.label?' title="'+CKEDITOR.tools.htmlEncode(y.label)+'"':'',B=y.elements,C=CKEDITOR.dialog._.uiElementBuilders.vbox.build(I,{type:'vbox',className:'cke_dialog_page_contents',children:y.elements,expand:!!y.expand,padding:y.padding,style:y.style||'width: 100%; height: 100%;'},z),D=CKEDITOR.dom.element.createFromHtml(z.join('')),E=CKEDITOR.dom.element.createFromHtml(['<a class="cke_dialog_tab"',I._.pageCount>0?' cke_last':'cke_first',A,!!y.hidden?' style="display:none"':'',' id="',y.id+'_',CKEDITOR.tools.getNextNumber(),'" href="javascript:void(0)"',' hidefocus="true">',y.label,'</a>'].join(''));if(I._.pageCount===0)I.parts.dialog.addClass('cke_single_page');else I.parts.dialog.removeClass('cke_single_page');I._.tabs[y.id]=[E,D];I._.tabIdList.push(y.id);I._.pageCount++;I._.lastTab=E;var F=I._.contents[y.id]={},G,H=C.getChild();while(G=H.shift()){F[G.id]=G;if(typeof G.getChild=='function')H.push.apply(H,G.getChild());}D.setAttribute('name',y.id);D.appendTo(I.parts.contents);E.unselectable();I.parts.tabs.append(E);if(y.accessKey){u(I,I,'CTRL+'+y.accessKey,x,w);\r
+I._.accessKeyMap['CTRL+'+y.accessKey]=y.id;}},selectPage:function(y){var D=this;for(var z in D._.tabs){var A=D._.tabs[z][0],B=D._.tabs[z][1];if(z!=y){A.removeClass('cke_dialog_tab_selected');B.hide();}}var C=D._.tabs[y];C[0].addClass('cke_dialog_tab_selected');C[1].show();D._.currentTabId=y;D._.currentTabIndex=CKEDITOR.tools.indexOf(D._.tabIdList,y);},hidePage:function(y){var z=this._.tabs[y]&&this._.tabs[y][0];if(!z)return;z.hide();},showPage:function(y){var z=this._.tabs[y]&&this._.tabs[y][0];if(!z)return;z.show();},getElement:function(){return this._.element;},getName:function(){return this._.name;},getContentElement:function(y,z){return this._.contents[y][z];},getValueOf:function(y,z){return this.getContentElement(y,z).getValue();},setValueOf:function(y,z,A){return this.getContentElement(y,z).setValue(A);},getButton:function(y){return this._.buttons[y];},click:function(y){return this._.buttons[y].click();},disableButton:function(y){return this._.buttons[y].disable();},enableButton:function(y){return this._.buttons[y].enable();},getPageCount:function(){return this._.pageCount;},getParentEditor:function(){return this._.editor;},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement();},addFocusable:function(y,z){var B=this;if(typeof z=='undefined'){z=B._.focusList.length;B._.focusList.push(new e(B,y,z));}else{B._.focusList.splice(z,0,new e(B,y,z));for(var A=z+1;A<B._.focusList.length;A++)B._.focusList[A].focusIndex++;}}};CKEDITOR.tools.extend(CKEDITOR.dialog,{add:function(y,z){if(!this._.dialogDefinitions[y]||typeof z=='function')this._.dialogDefinitions[y]=z;},exists:function(y){return!!this._.dialogDefinitions[y];},getCurrent:function(){return CKEDITOR.dialog._.currentTop;},okButton:(function(){var y=function(z,A){A=A||{};return CKEDITOR.tools.extend({id:'ok',type:'button',label:z.lang.common.ok,'class':'cke_dialog_ui_button_ok',onClick:function(B){var C=B.data.dialog;if(C.fire('ok',{hide:true}).hide!==false)C.hide();}},A,true);};y.type='button';y.override=function(z){return CKEDITOR.tools.extend(function(A){return y(A,z);},{type:'button'},true);};return y;})(),cancelButton:(function(){var y=function(z,A){A=A||{};return CKEDITOR.tools.extend({id:'cancel',type:'button',label:z.lang.common.cancel,'class':'cke_dialog_ui_button_cancel',onClick:function(B){var C=B.data.dialog;if(C.fire('cancel',{hide:true}).hide!==false)C.hide();}},A,true);};y.type='button';y.override=function(z){return CKEDITOR.tools.extend(function(A){return y(A,z);\r
+},{type:'button'},true);};return y;})(),addUIElement:function(y,z){this._.uiElementBuilders[y]=z;}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype,true);var f={resizable:CKEDITOR.DIALOG_RESIZE_NONE,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},g=function(y,z,A){for(var B=0,C;C=y[B];B++){if(C.id==z)return C;if(A&&C[A]){var D=g(C[A],z,A);if(D)return D;}}return null;},h=function(y,z,A,B,C){if(A){for(var D=0,E;E=y[D];D++){if(E.id==A){y.splice(D,0,z);return z;}if(B&&E[B]){var F=h(E[B],z,A,B,true);if(F)return F;}}if(C)return null;}y.push(z);return z;},i=function(y,z,A){for(var B=0,C;C=y[B];B++){if(C.id==z)return y.splice(B,1);if(A&&C[A]){var D=i(C[A],z,A);if(D)return D;}}return null;},j=function(y,z){this.dialog=y;var A=z.contents;for(var B=0,C;C=A[B];B++)A[B]=new k(y,C);CKEDITOR.tools.extend(this,z);};j.prototype={getContents:function(y){return g(this.contents,y);},getButton:function(y){return g(this.buttons,y);},addContents:function(y,z){return h(this.contents,y,z);},addButton:function(y,z){return h(this.buttons,y,z);},removeContents:function(y){i(this.contents,y);},removeButton:function(y){i(this.buttons,y);}};function k(y,z){this._={dialog:y};CKEDITOR.tools.extend(this,z);};k.prototype={get:function(y){return g(this.elements,y,'children');},add:function(y,z){return h(this.elements,y,z,'children');},remove:function(y){i(this.elements,y,'children');}};function l(y){var z=null,A=null,B=y.getElement().getFirst(),C=y.getParentEditor(),D=C.config.dialog_magnetDistance,E=d[C.skinName].margins||[0,0,0,0];function F(H){var I=y.getSize(),J=CKEDITOR.document.getWindow().getViewPaneSize(),K=H.data.$.screenX,L=H.data.$.screenY,M=K-z.x,N=L-z.y,O,P;z={x:K,y:L};A.x+=M;A.y+=N;if(A.x+E[3]<D)O=-E[3];else if(A.x-E[1]>J.width-I.width-D)O=J.width-I.width+E[1];else O=A.x;if(A.y+E[0]<D)P=-E[0];else if(A.y-E[2]>J.height-I.height-D)P=J.height-I.height+E[2];else P=A.y;y.move(O,P);H.data.preventDefault();};function G(H){CKEDITOR.document.removeListener('mousemove',F);CKEDITOR.document.removeListener('mouseup',G);if(CKEDITOR.env.ie6Compat){var I=o.getChild(0).getFrameDocument();I.removeListener('mousemove',F);I.removeListener('mouseup',G);}};y.parts.title.on('mousedown',function(H){y._.updateSize=true;z={x:H.data.$.screenX,y:H.data.$.screenY};CKEDITOR.document.on('mousemove',F);CKEDITOR.document.on('mouseup',G);\r
+A=y.getPosition();if(CKEDITOR.env.ie6Compat){var I=o.getChild(0).getFrameDocument();I.on('mousemove',F);I.on('mouseup',G);}H.data.preventDefault();},y);};function m(y){var z=y.definition,A=z.minWidth||0,B=z.minHeight||0,C=z.resizable,D=d[y.getParentEditor().skinName].margins||[0,0,0,0];function E(P,Q){P.y+=Q;};function F(P,Q){P.x2+=Q;};function G(P,Q){P.y2+=Q;};function H(P,Q){P.x+=Q;};var I=null,J=null,K=y._.editor.config.magnetDistance,L=['tl','t','tr','l','r','bl','b','br'];function M(P){var Q=P.listenerData.part,R=y.getSize();J=y.getPosition();CKEDITOR.tools.extend(J,{x2:J.x+R.width,y2:J.y+R.height});I={x:P.data.$.screenX,y:P.data.$.screenY};CKEDITOR.document.on('mousemove',N,y,{part:Q});CKEDITOR.document.on('mouseup',O,y,{part:Q});if(CKEDITOR.env.ie6Compat){var S=o.getChild(0).getFrameDocument();S.on('mousemove',N,y,{part:Q});S.on('mouseup',O,y,{part:Q});}P.data.preventDefault();};function N(P){var Q=P.data.$.screenX,R=P.data.$.screenY,S=Q-I.x,T=R-I.y,U=CKEDITOR.document.getWindow().getViewPaneSize(),V=P.listenerData.part;if(V.search('t')!=-1)E(J,T);if(V.search('l')!=-1)H(J,S);if(V.search('b')!=-1)G(J,T);if(V.search('r')!=-1)F(J,S);I={x:Q,y:R};var W,X,Y,Z;if(J.x+D[3]<K)W=-D[3];else if(V.search('l')!=-1&&J.x2-J.x<A+K)W=J.x2-A;else W=J.x;if(J.y+D[0]<K)X=-D[0];else if(V.search('t')!=-1&&J.y2-J.y<B+K)X=J.y2-B;else X=J.y;if(J.x2-D[1]>U.width-K)Y=U.width+D[1];else if(V.search('r')!=-1&&J.x2-J.x<A+K)Y=J.x+A;else Y=J.x2;if(J.y2-D[2]>U.height-K)Z=U.height+D[2];else if(V.search('b')!=-1&&J.y2-J.y<B+K)Z=J.y+B;else Z=J.y2;y.move(W,X);y.resize(Y-W,Z-X);P.data.preventDefault();};function O(P){CKEDITOR.document.removeListener('mouseup',O);CKEDITOR.document.removeListener('mousemove',N);if(CKEDITOR.env.ie6Compat){var Q=o.getChild(0).getFrameDocument();Q.removeListener('mouseup',O);Q.removeListener('mousemove',N);}};};var n,o,p=function(y){var z=CKEDITOR.document.getWindow();if(!o){var A=['<div style="position: ',CKEDITOR.env.ie6Compat?'absolute':'fixed','; z-index: ',y.config.baseFloatZIndex,'; top: 0px; left: 0px; ','background-color: ',y.config.dialog_backgroundCoverColor,'" id="cke_dialog_background_cover">'];if(CKEDITOR.env.ie6Compat){var B=CKEDITOR.env.isCustomDomain();A.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:');A.push(B?"void((function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})())':"''");A.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>');\r
+}A.push('</div>');o=CKEDITOR.dom.element.createFromHtml(A.join(''));}var C=o,D=function(){var G=z.getViewPaneSize();C.setStyles({width:G.width+'px',height:G.height+'px'});},E=function(){var G=z.getScrollPosition(),H=CKEDITOR.dialog._.currentTop;C.setStyles({left:G.x+'px',top:G.y+'px'});do{var I=H.getPosition();H.move(I.x,I.y);}while(H=H._.parentDialog)};n=D;z.on('resize',D);D();if(CKEDITOR.env.ie6Compat){var F=function(){E();arguments.callee.prevScrollHandler.apply(this,arguments);};z.$.setTimeout(function(){F.prevScrollHandler=window.onscroll||(function(){});window.onscroll=F;},0);E();}C.setOpacity(y.config.dialog_backgroundCoverOpacity);C.appendTo(CKEDITOR.document.getBody());},q=function(){if(!o)return;var y=CKEDITOR.document.getWindow();o.remove();y.removeListener('resize',n);if(CKEDITOR.env.ie6Compat)y.$.setTimeout(function(){var z=window.onscroll&&window.onscroll.prevScrollHandler;window.onscroll=z||null;},0);n=null;},r={},s=function(y){var z=y.data.$.ctrlKey||y.data.$.metaKey,A=y.data.$.altKey,B=y.data.$.shiftKey,C=String.fromCharCode(y.data.$.keyCode),D=r[(z?'CTRL+':'')+(A?'ALT+':'')+(B?'SHIFT+':'')+C];if(!D||!D.length)return;D=D[D.length-1];D.keydown&&D.keydown.call(D.uiElement,D.dialog,D.key);y.data.preventDefault();},t=function(y){var z=y.data.$.ctrlKey||y.data.$.metaKey,A=y.data.$.altKey,B=y.data.$.shiftKey,C=String.fromCharCode(y.data.$.keyCode),D=r[(z?'CTRL+':'')+(A?'ALT+':'')+(B?'SHIFT+':'')+C];if(!D||!D.length)return;D=D[D.length-1];D.keyup&&D.keyup.call(D.uiElement,D.dialog,D.key);y.data.preventDefault();},u=function(y,z,A,B,C){var D=r[A]||(r[A]=[]);D.push({uiElement:y,dialog:z,key:A,keyup:C||y.accessKeyUp,keydown:B||y.accessKeyDown});},v=function(y){for(var z in r){var A=r[z];for(var B=A.length-1;B>=0;B--)if(A[B].dialog==y||A[B].uiElement==y)A.splice(B,1);if(A.length===0)delete r[z];}},w=function(y,z){if(y._.accessKeyMap[z])y.selectPage(y._.accessKeyMap[z]);},x=function(y,z){};(function(){CKEDITOR.ui.dialog={uiElement:function(y,z,A,B,C,D,E){if(arguments.length<4)return;var F=(B.call?B(z):B)||('div'),G=['<',F,' '],H=(C&&C.call?C(z):C)||({}),I=(D&&D.call?D(z):D)||({}),J=(E&&E.call?E(y,z):E)||(''),K=this.domId=I.id||CKEDITOR.tools.getNextNumber()+'_uiElement',L=this.id=z.id,M;I.id=K;var N={};if(z.type)N['cke_dialog_ui_'+z.type]=1;if(z.className)N[z.className]=1;var O=I['class']&&I['class'].split?I['class'].split(' '):[];for(M=0;M<O.length;M++)if(O[M])N[O[M]]=1;var P=[];for(M in N)P.push(M);I['class']=P.join(' ');if(z.title)I.title=z.title;var Q=(z.style||'').split(';');\r
+for(M in H)Q.push(M+':'+H[M]);if(z.hidden)Q.push('display:none');for(M=Q.length-1;M>=0;M--)if(Q[M]==='')Q.splice(M,1);if(Q.length>0)I.style=(I.style?I.style+'; ':'')+(Q.join('; '));for(M in I)G.push(M+'="'+CKEDITOR.tools.htmlEncode(I[M])+'" ');G.push('>',J,'</',F,'>');A.push(G.join(''));(this._||(this._={})).dialog=y;if(typeof z.isChanged=='boolean')this.isChanged=function(){return z.isChanged;};if(typeof z.isChanged=='function')this.isChanged=z.isChanged;CKEDITOR.event.implementOn(this);this.registerEvents(z);if(this.accessKeyUp&&this.accessKeyDown&&z.accessKey)u(this,y,'CTRL+'+z.accessKey);var R=this;y.on('load',function(){if(R.getInputElement())R.getInputElement().on('focus',function(){y._.tabBarMode=false;y._.hasFocus=true;R.fire('focus');},R);});if(this.keyboardFocusable){this.focusIndex=y._.focusList.push(this)-1;this.on('focus',function(){y._.currentFocusIndex=R.focusIndex;});}CKEDITOR.tools.extend(this,z);},hbox:function(y,z,A,B,C){if(arguments.length<4)return;this._||(this._={});var D=this._.children=z,E=C&&C.widths||null,F=C&&C.height||null,G={},H,I=function(){var J=['<tbody><tr class="cke_dialog_ui_hbox">'];for(H=0;H<A.length;H++){var K='cke_dialog_ui_hbox_child',L=[];if(H===0)K='cke_dialog_ui_hbox_first';if(H==A.length-1)K='cke_dialog_ui_hbox_last';J.push('<td class="',K,'" ');if(E){if(E[H])L.push('width:'+CKEDITOR.tools.cssLength(E[H]));}else L.push('width:'+Math.floor(100/A.length)+'%');if(F)L.push('height:'+CKEDITOR.tools.cssLength(F));if(C&&C.padding!=undefined)L.push('padding:'+CKEDITOR.tools.cssLength(C.padding));if(L.length>0)J.push('style="'+L.join('; ')+'" ');J.push('>',A[H],'</td>');}J.push('</tr></tbody>');return J.join('');};CKEDITOR.ui.dialog.uiElement.call(this,y,C||{type:'hbox'},B,'table',G,C&&C.align&&{align:C.align}||null,I);},vbox:function(y,z,A,B,C){if(arguments.length<3)return;this._||(this._={});var D=this._.children=z,E=C&&C.width||null,F=C&&C.heights||null,G=function(){var H=['<table cellspacing="0" border="0" '];H.push('style="');if(C&&C.expand)H.push('height:100%;');H.push('width:'+CKEDITOR.tools.cssLength(E||'100%'),';');H.push('"');H.push('align="',CKEDITOR.tools.htmlEncode(C&&C.align||(y.getParentEditor().lang.dir=='ltr'?'left':'right')),'" ');H.push('><tbody>');for(var I=0;I<A.length;I++){var J=[];H.push('<tr><td ');if(E)J.push('width:'+CKEDITOR.tools.cssLength(E||'100%'));if(F)J.push('height:'+CKEDITOR.tools.cssLength(F[I]));else if(C&&C.expand)J.push('height:'+Math.floor(100/A.length)+'%');if(C&&C.padding!=undefined)J.push('padding:'+CKEDITOR.tools.cssLength(C.padding));\r
+if(J.length>0)H.push('style="',J.join('; '),'" ');H.push(' class="cke_dialog_ui_vbox_child">',A[I],'</td></tr>');}H.push('</tbody></table>');return H.join('');};CKEDITOR.ui.dialog.uiElement.call(this,y,C||{type:'vbox'},B,'div',null,null,G);}};})();CKEDITOR.ui.dialog.uiElement.prototype={getElement:function(){return CKEDITOR.document.getById(this.domId);},getInputElement:function(){return this.getElement();},getDialog:function(){return this._.dialog;},setValue:function(y){this.getInputElement().setValue(y);this.fire('change',{value:y});return this;},getValue:function(){return this.getInputElement().getValue();},isChanged:function(){return false;},selectParentTab:function(){var B=this;var y=B.getInputElement(),z=y,A;while((z=z.getParent())&&(z.$.className.search('cke_dialog_page_contents')==-1)){}if(!z)return B;A=z.getAttribute('name');if(B._.dialog._.currentTabId!=A)B._.dialog.selectPage(A);return B;},focus:function(){this.selectParentTab().getInputElement().focus();return this;},registerEvents:function(y){var z=/^on([A-Z]\w+)/,A,B=function(D,E,F,G){E.on('load',function(){D.getInputElement().on(F,G,D);});};for(var C in y){if(!(A=C.match(z)))continue;if(this.eventProcessors[C])this.eventProcessors[C].call(this,this._.dialog,y[C]);else B(this,this._.dialog,A[1].toLowerCase(),y[C]);}return this;},eventProcessors:{onLoad:function(y,z){y.on('load',z,this);},onShow:function(y,z){y.on('show',z,this);},onHide:function(y,z){y.on('hide',z,this);}},accessKeyDown:function(y,z){this.focus();},accessKeyUp:function(y,z){},disable:function(){var y=this.getInputElement();y.setAttribute('disabled','true');y.addClass('cke_disabled');},enable:function(){var y=this.getInputElement();y.removeAttribute('disabled');y.removeClass('cke_disabled');},isEnabled:function(){return!this.getInputElement().getAttribute('disabled');},isVisible:function(){return!!this.getInputElement().$.offsetHeight;},isFocusable:function(){if(!this.isEnabled()||!this.isVisible())return false;return true;}};CKEDITOR.ui.dialog.hbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement(),{getChild:function(y){var z=this;if(arguments.length<1)return z._.children.concat();if(!y.splice)y=[y];if(y.length<2)return z._.children[y[0]];else return z._.children[y[0]]&&z._.children[y[0]].getChild?z._.children[y[0]].getChild(y.slice(1,y.length)):null;}},true);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox();(function(){var y={build:function(z,A,B){var C=A.children,D,E=[],F=[];for(var G=0;G<C.length&&(D=C[G]);\r
+G++){var H=[];E.push(H);F.push(CKEDITOR.dialog._.uiElementBuilders[D.type].build(z,D,H));}return new CKEDITOR.ui.dialog[A.type](z,F,E,B,A);}};CKEDITOR.dialog.addUIElement('hbox',y);CKEDITOR.dialog.addUIElement('vbox',y);})();CKEDITOR.dialogCommand=function(y){this.dialogName=y;};CKEDITOR.dialogCommand.prototype={exec:function(y){y.openDialog(this.dialogName);},canUndo:false};(function(){var y=/^([a]|[^a])+$/,z=/^\d*$/,A=/^\d*(?:\.\d+)?$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){return function(){var H=this;var B=H&&H.getValue?H.getValue():arguments[0],C=undefined,D=CKEDITOR.VALIDATE_AND,E=[],F;for(F=0;F<arguments.length;F++)if(typeof arguments[F]=='function')E.push(arguments[F]);else break;if(F<arguments.length&&typeof arguments[F]=='string'){C=arguments[F];F++;}if(F<arguments.length&&typeof arguments[F]=='number')D=arguments[F];var G=D==CKEDITOR.VALIDATE_AND?true:false;for(F=0;F<E.length;F++)if(D==CKEDITOR.VALIDATE_AND)G=G&&E[F](B);else G=G||E[F](B);if(!G){if(C!==undefined)alert(C);if(H&&(H.select||H.focus))H.select||H.focus();return false;}return true;};},regex:function(B,C){return function(){var E=this;var D=E&&E.getValue?E.getValue():arguments[0];if(!B.test(D)){if(C!==undefined)alert(C);if(E&&(E.select||E.focus))if(E.select)E.select();else E.focus();return false;}return true;};},notEmpty:function(B){return this.regex(y,B);},integer:function(B){return this.regex(z,B);},number:function(B){return this.regex(A,B);},equals:function(B,C){return this.functions(function(D){return D==B;},C);},notEqual:function(B,C){return this.functions(function(D){return D!=B;},C);}};})();CKEDITOR.skins.add=(function(){var y=CKEDITOR.skins.add;return function(z,A){d[z]={margins:A.margins};return y.apply(this,arguments);};})();})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a){var b=CKEDITOR.dialog._.dialogDefinitions[a];if(typeof b=='function'){var c=this._.storedDialogs||(this._.storedDialogs={}),d=c[a]||(c[a]=new CKEDITOR.dialog(this,a));d.show();return d;}else if(b=='failed')throw new Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');var e=CKEDITOR.document.getBody(),f=e.$.style.cursor,g=this;e.setStyle('cursor','wait');CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(b),function(){if(typeof CKEDITOR.dialog._.dialogDefinitions[a]!='function')CKEDITOR.dialog._.dialogDefinitions[a]='failed';g.openDialog(a);e.setStyle('cursor',f);});return null;}});CKEDITOR.config.dialog_backgroundCoverColor='white';\r
+CKEDITOR.config.dialog_backgroundCoverOpacity=0.5;CKEDITOR.config.dialog_magnetDistance=20;\r
diff --git a/plugins/dialogui/plugin.js b/plugins/dialogui/plugin.js
new file mode 100644 (file)
index 0000000..35bbaa9
--- /dev/null
@@ -0,0 +1,11 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('dialogui');(function(){var a=function(h){var k=this;k._||(k._={});k._['default']=k._.initValue=h['default']||'';var i=[k._];for(var j=1;j<arguments.length;j++)i.push(arguments[j]);i.push(true);CKEDITOR.tools.extend.apply(CKEDITOR.tools,i);return k._;},b={build:function(h,i,j){return new CKEDITOR.ui.dialog.textInput(h,i,j);}},c={build:function(h,i,j){return new CKEDITOR.ui.dialog[i.type](h,i,j);}},d={isChanged:function(){return this.getValue()!=this.getInitValue();},reset:function(){this.setValue(this.getInitValue());},setInitValue:function(){this._.initValue=this.getValue();},resetInitValue:function(){this._.initValue=this._['default'];},getInitValue:function(){return this._.initValue;}},e=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(h,i){if(!this._.domOnChangeRegistered){h.on('load',function(){this.getInputElement().on('change',function(){this.fire('change',{value:this.getValue()});},this);},this);this._.domOnChangeRegistered=true;}this.on('change',i);}},true),f=/^on([A-Z]\w+)/,g=function(h){for(var i in h)if(f.test(i)||i=='title'||i=='type')delete h[i];return h;};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(h,i,j,k){if(arguments.length<4)return;var l=a.call(this,i);l.labelId=CKEDITOR.tools.getNextNumber()+'_label';var m=this._.children=[],n=function(){var o=[];if(i.labelLayout!='horizontal')o.push('<div class="cke_dialog_ui_labeled_label" id="',l.labelId,'" >',i.label,'</div>','<div class="cke_dialog_ui_labeled_content">',k(h,i),'</div>');else{var p={type:'hbox',widths:i.widths,padding:0,children:[{type:'html',html:'<span class="cke_dialog_ui_labeled_label" id="'+l.labelId+'">'+CKEDITOR.tools.htmlEncode(i.label)+'</span>'},{type:'html',html:'<span class="cke_dialog_ui_labeled_content">'+k(h,i)+'</span>'}]};CKEDITOR.dialog._.uiElementBuilders.hbox.build(h,p,o);}return o.join('');};CKEDITOR.ui.dialog.uiElement.call(this,h,i,j,'div',null,null,n);},textInput:function(h,i,j){if(arguments.length<3)return;a.call(this,i);var k=this._.inputId=CKEDITOR.tools.getNextNumber()+'_textInput',l={'class':'cke_dialog_ui_input_'+i.type,id:k,type:'text'},m;if(i.validate)this.validate=i.validate;if(i.maxLength)l.maxlength=i.maxLength;if(i.size)l.size=i.size;var n=this,o=false;h.on('load',function(){n.getInputElement().on('keydown',function(q){if(q.data.getKeystroke()==13)o=true;});n.getInputElement().on('keyup',function(q){if(q.data.getKeystroke()==13&&o){h.getButton('ok')&&h.getButton('ok').click();\r
+o=false;}},null,null,1000);});var p=function(){var q=['<div class="cke_dialog_ui_input_',i.type,'"'];if(i.width)q.push('style="width:'+i.width+'" ');q.push('><input ');for(var r in l)q.push(r+'="'+l[r]+'" ');q.push(' /></div>');return q.join('');};CKEDITOR.ui.dialog.labeledElement.call(this,h,i,j,p);},textarea:function(h,i,j){if(arguments.length<3)return;a.call(this,i);var k=this,l=this._.inputId=CKEDITOR.tools.getNextNumber()+'_textarea',m={};if(i.validate)this.validate=i.validate;m.rows=i.rows||5;m.cols=i.cols||20;var n=function(){var o=['<div class="cke_dialog_ui_input_textarea"><textarea class="cke_dialog_ui_input_textarea" id="',l,'" '];for(var p in m)o.push(p+'="'+CKEDITOR.tools.htmlEncode(m[p])+'" ');o.push('>',CKEDITOR.tools.htmlEncode(k._['default']),'</textarea></div>');return o.join('');};CKEDITOR.ui.dialog.labeledElement.call(this,h,i,j,n);},checkbox:function(h,i,j){if(arguments.length<3)return;var k=a.call(this,i,{'default':!!i['default']});if(i.validate)this.validate=i.validate;var l=function(){var m=CKEDITOR.tools.extend({},i,{id:i.id?i.id+'_checkbox':CKEDITOR.tools.getNextNumber()+'_checkbox'},true),n=[],o={'class':'cke_dialog_ui_checkbox_input',type:'checkbox'};g(m);if(i['default'])o.checked='checked';k.checkbox=new CKEDITOR.ui.dialog.uiElement(h,m,n,'input',null,o);n.push(' <label for="',o.id,'">',CKEDITOR.tools.htmlEncode(i.label),'</label>');return n.join('');};CKEDITOR.ui.dialog.uiElement.call(this,h,i,j,'span',null,null,l);},radio:function(h,i,j){if(arguments.length<3)return;a.call(this,i);if(!this._['default'])this._['default']=this._.initValue=i.items[0][1];if(i.validate)this.validate=i.valdiate;var k=[],l=this,m=function(){var n=[],o=[],p={'class':'cke_dialog_ui_radio_item'},q=i.id?i.id+'_radio':CKEDITOR.tools.getNextNumber()+'_radio';for(var r=0;r<i.items.length;r++){var s=i.items[r],t=s[2]!==undefined?s[2]:s[0],u=s[1]!==undefined?s[1]:s[0],v=CKEDITOR.tools.extend({},i,{id:CKEDITOR.tools.getNextNumber()+'_radio_input',title:null,type:null},true),w=CKEDITOR.tools.extend({},v,{id:null,title:t},true),x={type:'radio','class':'cke_dialog_ui_radio_input',name:q,value:u},y=[];if(l._['default']==u)x.checked='checked';g(v);g(w);k.push(new CKEDITOR.ui.dialog.uiElement(h,v,y,'input',null,x));y.push(' ');new CKEDITOR.ui.dialog.uiElement(h,w,y,'label',null,{'for':x.id},s[0]);n.push(y.join(''));}new CKEDITOR.ui.dialog.hbox(h,[],n,o);return o.join('');};CKEDITOR.ui.dialog.labeledElement.call(this,h,i,j,m);this._.children=k;},button:function(h,i,j){if(!arguments.length)return;\r
+if(typeof i=='function')i=i(h.getParentEditor());a.call(this,i,{disabled:i.disabled||false});CKEDITOR.event.implementOn(this);var k=this;h.on('load',function(m){var n=this.getElement();(function(){n.on('click',function(o){k.fire('click',{dialog:k.getDialog()});o.data.preventDefault();});})();n.unselectable();},this);var l=CKEDITOR.tools.extend({},i);delete l.style;CKEDITOR.ui.dialog.uiElement.call(this,h,l,j,'a',null,{style:i.style,href:'javascript:void(0)',title:i.label,hidefocus:'true','class':i['class']},'<span class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(i.label)+'</span>');},select:function(h,i,j){if(arguments.length<3)return;var k=a.call(this,i);if(i.validate)this.validate=i.validate;var l=function(){var m=CKEDITOR.tools.extend({},i,{id:i.id?i.id+'_select':CKEDITOR.tools.getNextNumber()+'_select'},true),n=[],o=[],p={'class':'cke_dialog_ui_input_select'};if(i.size!=undefined)p.size=i.size;if(i.multiple!=undefined)p.multiple=i.multiple;g(m);for(var q=0,r;q<i.items.length&&(r=i.items[q]);q++)o.push('<option value="',CKEDITOR.tools.htmlEncode(r[1]!==undefined?r[1]:r[0]),'" /> ',CKEDITOR.tools.htmlEncode(r[0]));k.select=new CKEDITOR.ui.dialog.uiElement(h,m,n,'select',null,p,o.join(''));return n.join('');};CKEDITOR.ui.dialog.labeledElement.call(this,h,i,j,l);},file:function(h,i,j){if(arguments.length<3)return;if(i['default']===undefined)i['default']='';var k=CKEDITOR.tools.extend(a.call(this,i),{definition:i,buttons:[]});if(i.validate)this.validate=i.validate;var l=function(){k.frameId=CKEDITOR.tools.getNextNumber()+'_fileInput';var m=CKEDITOR.env.ie&&document.domain!=window.location.hostname,n=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" id="',k.frameId,'" title="',i.label,'" src="javascript:void('];n.push(m?"(function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})()':'0');n.push(')"></iframe>');return n.join('');};h.on('load',function(){var m=CKEDITOR.document.getById(k.frameId),n=m.getParent();n.addClass('cke_dialog_ui_input_file');});CKEDITOR.ui.dialog.labeledElement.call(this,h,i,j,l);},fileButton:function(h,i,j){if(arguments.length<3)return;var k=a.call(this,i),l=this;if(i.validate)this.validate=i.validate;var m=CKEDITOR.tools.extend({},i),n=m.onClick;m.className=(m.className?m.className+' ':'')+('cke_dialog_ui_button');m.onClick=function(o){var p=i['for'];if(!n||n.call(this,o)!==false){h.getContentElement(p[0],p[1]).submit();this.disable();}};h.on('load',function(){h.getContentElement(i['for'][0],i['for'][1])._.buttons.push(l);\r
+});CKEDITOR.ui.dialog.button.call(this,h,m,j);},html:(function(){var h=/^\s*<[\w:]+\s+([^>]*)?>/,i=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,j=/\/$/;return function(k,l,m){if(arguments.length<3)return;var n=[],o,p=l.html,q,r;if(p.charAt(0)!='<')p='<span>'+p+'</span>';if(l.focus){var s=this.focus;this.focus=function(){s.call(this);l.focus.call(this);this.fire('focus');};if(l.isFocusable){var t=this.isFocusable;this.isFocusable=t;}this.keyboardFocusable=true;}CKEDITOR.ui.dialog.uiElement.call(this,k,l,n,'span',null,null,'');o=n.join('');q=o.match(h);r=p.match(i)||['','',''];if(j.test(r[1])){r[1]=r[1].slice(0,-1);r[2]='/'+r[2];}m.push([r[1],' ',q[1]||'',r[2]].join(''));};})()},true);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement();CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement(),{setLabel:function(h){var i=CKEDITOR.document.getById(this._.labelId);if(i.getChildCount()<1)new CKEDITOR.dom.text(h,CKEDITOR.document).appendTo(i);else i.getChild(0).$.nodeValue=h;return this;},getLabel:function(){var h=CKEDITOR.document.getById(this._.labelId);if(!h||h.getChildCount()<1)return '';else return h.getChild(0).getText();},eventProcessors:e},true);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement(),{click:function(){var h=this;if(!h._.disabled)return h.fire('click',{dialog:h._.dialog});h.getElement().$.blur();return false;},enable:function(){this._.disabled=false;var h=this.getElement();h&&h.removeClass('disabled');},disable:function(){this._.disabled=true;this.getElement().addClass('disabled');},isVisible:function(){return!!this.getElement().$.firstChild.offsetHeight;},isEnabled:function(){return!this._.disabled;},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(h,i){this.on('click',i);}},true),accessKeyUp:function(){this.click();},accessKeyDown:function(){this.focus();},keyboardFocusable:true},true);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement(),{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId);},focus:function(){var h=this.selectParentTab();setTimeout(function(){var i=h.getInputElement();i&&i.$.focus();},0);},select:function(){var h=this.selectParentTab();setTimeout(function(){var i=h.getInputElement();if(i){i.$.focus();i.$.select();}},0);},accessKeyUp:function(){this.select();},setValue:function(h){h=h||'';return CKEDITOR.ui.dialog.uiElement.prototype.setValue.call(this,h);\r
+},keyboardFocusable:true},d,true);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput();CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement(),{getInputElement:function(){return this._.select.getElement();},add:function(h,i,j){var k=new CKEDITOR.dom.element('option',this.getDialog().getParentEditor().document),l=this.getInputElement().$;k.$.text=h;k.$.value=i===undefined||i===null?h:i;if(j===undefined||j===null){if(CKEDITOR.env.ie)l.add(k.$);else l.add(k.$,null);}else l.add(k.$,j);return this;},remove:function(h){var i=this.getInputElement().$;i.remove(h);return this;},clear:function(){var h=this.getInputElement().$;while(h.length>0)h.remove(0);return this;},keyboardFocusable:true},d,true);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement(),{getInputElement:function(){return this._.checkbox.getElement();},setValue:function(h){this.getInputElement().$.checked=h;this.fire('change',{value:h});},getValue:function(){return this.getInputElement().$.checked;},accessKeyUp:function(){this.setValue(!this.getValue());},eventProcessors:{onChange:function(h,i){if(!CKEDITOR.env.ie)return e.onChange.apply(this,arguments);else{h.on('load',function(){var j=this._.checkbox.getElement();j.on('propertychange',function(k){k=k.data.$;if(k.propertyName=='checked')this.fire('change',{value:j.$.checked});},this);},this);this.on('change',i);}return null;}},keyboardFocusable:true},d,true);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement(),{setValue:function(h){var i=this._.children,j;for(var k=0;k<i.length&&(j=i[k]);k++)j.getElement().$.checked=j.getValue()==h;this.fire('change',{value:h});},getValue:function(){var h=this._.children;for(var i=0;i<h.length;i++)if(h[i].getElement().$.checked)return h[i].getValue();return null;},accessKeyUp:function(){var h=this._.children,i;for(i=0;i<h.length;i++)if(h[i].getElement().$.checked){h[i].getElement().focus();return;}h[0].getElement().focus();},eventProcessors:{onChange:function(h,i){if(!CKEDITOR.env.ie)return e.onChange.apply(this,arguments);else{h.on('load',function(){var j=this._.children,k=this;for(var l=0;l<j.length;l++){var m=j[l].getElement();m.on('propertychange',function(n){n=n.data.$;if(n.propertyName=='checked'&&this.$.checked)k.fire('change',{value:this.getAttribute('value')});});}},this);this.on('change',i);}return null;}},keyboardFocusable:true},d,true);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement(),d,{getInputElement:function(){var h=CKEDITOR.document.getById(this._.frameId).getFrameDocument();\r
+return h.$.forms.length>0?new CKEDITOR.dom.element(h.$.forms[0].elements[0]):this.getElement();},submit:function(){this.getInputElement().getParent().$.submit();return this;},getAction:function(h){return this.getInputElement().getParent().$.action;},reset:function(){var h=CKEDITOR.document.getById(this._.frameId),i=h.getFrameDocument(),j=this._.definition,k=this._.buttons;function l(){i.$.open();if(CKEDITOR.env.isCustomDomain())i.$.domain=document.domain;var m='';if(j.size)m=j.size-(CKEDITOR.env.ie?7:0);i.$.write(['<html><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">','<form enctype="multipart/form-data" method="POST" action="',CKEDITOR.tools.htmlEncode(j.action),'">','<input type="file" name="',CKEDITOR.tools.htmlEncode(j.id||'cke_upload'),'" size="',CKEDITOR.tools.htmlEncode(m>0?m:''),'" />','</form>','</body></html>'].join(''));i.$.close();for(var n=0;n<k.length;n++)k[n].enable();};if(CKEDITOR.env.gecko)setTimeout(l,500);else l();},getValue:function(){return '';},eventProcessors:e,keyboardFocusable:true},true);CKEDITOR.ui.dialog.fileButton.prototype=new CKEDITOR.ui.dialog.button();CKEDITOR.dialog.addUIElement('text',b);CKEDITOR.dialog.addUIElement('password',b);CKEDITOR.dialog.addUIElement('textarea',c);CKEDITOR.dialog.addUIElement('checkbox',c);CKEDITOR.dialog.addUIElement('radio',c);CKEDITOR.dialog.addUIElement('button',c);CKEDITOR.dialog.addUIElement('select',c);CKEDITOR.dialog.addUIElement('file',c);CKEDITOR.dialog.addUIElement('fileButton',c);CKEDITOR.dialog.addUIElement('html',c);})();\r
diff --git a/plugins/domiterator/plugin.js b/plugins/domiterator/plugin.js
new file mode 100644 (file)
index 0000000..dd4f119
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('domiterator');(function(){var a=function(c){var d=this;if(arguments.length<1)return;d.range=c;d.forceBrBreak=false;d.enlargeBr=true;d.enforceRealBlocks=false;d._||(d._={});},b=/^[\r\n\t ]+$/;a.prototype={getNextParagraph:function(c){var D=this;var d,e,f,g,h;if(!D._.lastNode){e=D.range.clone();e.enlarge(D.forceBrBreak||!D.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);var i=new CKEDITOR.dom.walker(e),j=CKEDITOR.dom.walker.bookmark(true,true);i.evaluator=j;D._.nextNode=i.next();i=new CKEDITOR.dom.walker(e);i.evaluator=j;var k=i.previous();D._.lastNode=k.getNextSourceNode(true);if(D._.lastNode&&D._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(D._.lastNode.getText())&&D._.lastNode.getParent().isBlockBoundary()){var l=new CKEDITOR.dom.range(e.document);l.moveToPosition(D._.lastNode,CKEDITOR.POSITION_AFTER_END);if(l.checkEndOfBlock()){var m=new CKEDITOR.dom.elementPath(l.endContainer),n=m.block||m.blockLimit;D._.lastNode=n.getNextSourceNode(true);}}if(!D._.lastNode){D._.lastNode=D._.docEndMarker=e.document.createText('');D._.lastNode.insertAfter(k);}e=null;}var o=D._.nextNode;k=D._.lastNode;D._.nextNode=null;while(o){var p=false,q=o.type!=CKEDITOR.NODE_ELEMENT,r=false;if(!q){var s=o.getName();if(o.isBlockBoundary(D.forceBrBreak&&{br:1})){if(s=='br')q=true;else if(!e&&!o.getChildCount()&&s!='hr'){d=o;f=o.equals(k);break;}if(e){e.setEndAt(o,CKEDITOR.POSITION_BEFORE_START);if(s!='br')D._.nextNode=o;}p=true;}else{if(o.getFirst()){if(!e){e=new CKEDITOR.dom.range(D.range.document);e.setStartAt(o,CKEDITOR.POSITION_BEFORE_START);}o=o.getFirst();continue;}q=true;}}else if(o.type==CKEDITOR.NODE_TEXT)if(b.test(o.getText()))q=false;if(q&&!e){e=new CKEDITOR.dom.range(D.range.document);e.setStartAt(o,CKEDITOR.POSITION_BEFORE_START);}f=(!p||q)&&(o.equals(k));if(e&&!p)while(!o.getNext()&&!f){var t=o.getParent();if(t.isBlockBoundary(D.forceBrBreak&&{br:1})){p=true;f=f||t.equals(k);break;}o=t;q=true;f=o.equals(k);r=true;}if(q)e.setEndAt(o,CKEDITOR.POSITION_AFTER_END);o=o.getNextSourceNode(r,null,k);f=!o;if((p||f)&&(e)){var u=e.getBoundaryNodes(),v=new CKEDITOR.dom.elementPath(e.startContainer),w=new CKEDITOR.dom.elementPath(e.endContainer);if(u.startNode.equals(u.endNode)&&u.startNode.getParent().equals(v.blockLimit)&&u.startNode.type==CKEDITOR.NODE_ELEMENT&&u.startNode.getAttribute('_fck_bookmark')){e=null;D._.nextNode=null;}else break;}if(f)break;}if(!d){if(!e){D._.docEndMarker&&D._.docEndMarker.remove();D._.nextNode=null;\r
+return null;}v=new CKEDITOR.dom.elementPath(e.startContainer);var x=v.blockLimit,y={div:1,th:1,td:1};d=v.block;if(!d&&!D.enforceRealBlocks&&y[x.getName()]&&e.checkStartOfBlock()&&e.checkEndOfBlock())d=x;else if(!d||D.enforceRealBlocks&&d.getName()=='li'){d=D.range.document.createElement(c||'p');e.extractContents().appendTo(d);d.trim();e.insertNode(d);g=h=true;}else if(d.getName()!='li'){if(!e.checkStartOfBlock()||!e.checkEndOfBlock()){d=d.clone(false);e.extractContents().appendTo(d);d.trim();var z=e.splitBlock();g=!z.wasStartOfBlock;h=!z.wasEndOfBlock;e.insertNode(d);}}else if(!f)D._.nextNode=d.equals(k)?null:e.getBoundaryNodes().endNode.getNextSourceNode(true,null,k);}if(g){var A=d.getPrevious();if(A&&A.type==CKEDITOR.NODE_ELEMENT)if(A.getName()=='br')A.remove();else if(A.getLast()&&A.getLast().$.nodeName.toLowerCase()=='br')A.getLast().remove();}if(h){var B=CKEDITOR.dom.walker.bookmark(false,true),C=d.getLast();if(C&&C.type==CKEDITOR.NODE_ELEMENT&&C.getName()=='br')if(CKEDITOR.env.ie||C.getPrevious(B)||C.getNext(B))C.remove();}if(!D._.nextNode)D._.nextNode=f||d.equals(k)?null:d.getNextSourceNode(true,null,k);return d;}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this);};})();\r
diff --git a/plugins/editingblock/plugin.js b/plugins/editingblock/plugin.js
new file mode 100644 (file)
index 0000000..987a23a
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a=function(c,d){return c._.modes&&c._.modes[d||c.mode];},b;CKEDITOR.plugins.add('editingblock',{init:function(c){if(!c.config.editingBlock)return;c.on('themeSpace',function(d){if(d.data.space=='contents')d.data.html+='<br>';});c.on('themeLoaded',function(){c.fireOnce('editingBlockReady');});c.on('uiReady',function(){c.setMode(c.config.startupMode);});c.on('afterSetData',function(){if(!b){function d(){b=true;a(c).loadData(c.getData());b=false;};if(c.mode)d();else c.on('mode',function(){d();c.removeListener('mode',arguments.callee);});}});c.on('beforeGetData',function(){if(!b&&c.mode){b=true;c.setData(a(c).getData());b=false;}});c.on('getSnapshot',function(d){if(c.mode)d.data=a(c).getSnapshotData();});c.on('loadSnapshot',function(d){if(c.mode)a(c).loadSnapshotData(d.data);});c.on('mode',function(d){d.removeListener();var e=c.container;if(CKEDITOR.env.webkit&&CKEDITOR.env.version<528){var f=c.config.tabIndex||c.element.getAttribute('tabindex')||0;e=e.append(CKEDITOR.dom.element.createFromHtml('<input tabindex="'+f+'"'+' style="position:absolute; left:-10000">'));}e.on('focus',function(){c.focus();});if(c.config.startupFocus)c.focus();setTimeout(function(){c.fireOnce('instanceReady');CKEDITOR.fire('instanceReady',null,c);});});}});CKEDITOR.editor.prototype.mode='';CKEDITOR.editor.prototype.addMode=function(c,d){d.name=c;(this._.modes||(this._.modes={}))[c]=d;};CKEDITOR.editor.prototype.setMode=function(c){var d,e=this.getThemeSpace('contents'),f=this.checkDirty();if(this.mode){if(c==this.mode)return;this.fire('beforeModeUnload');var g=a(this);d=g.getData();g.unload(e);this.mode='';}e.setHtml('');var h=a(this,c);if(!h)throw '[CKEDITOR.editor.setMode] Unknown mode "'+c+'".';if(!f)this.on('mode',function(){this.resetDirty();this.removeListener('mode',arguments.callee);});h.load(e,typeof d!='string'?this.getData():d);};CKEDITOR.editor.prototype.focus=function(){var c=a(this);if(c)c.focus();};})();CKEDITOR.config.startupMode='wysiwyg';CKEDITOR.config.startupFocus=false;CKEDITOR.config.editingBlock=true;\r
diff --git a/plugins/elementspath/plugin.js b/plugins/elementspath/plugin.js
new file mode 100644 (file)
index 0000000..022b59e
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a={toolbarFocus:{exec:function(c){var d=c._.elementsPath.idBase,e=CKEDITOR.document.getById(d+'0');if(e)e.focus();}}},b='<span class="cke_empty">&nbsp;</span>';CKEDITOR.plugins.add('elementspath',{requires:['selection'],init:function(c){var d='cke_path_'+c.name,e,f=function(){if(!e)e=CKEDITOR.document.getById(d);return e;},g='cke_elementspath_'+CKEDITOR.tools.getNextNumber()+'_';c._.elementsPath={idBase:g};c.on('themeSpace',function(h){if(h.data.space=='bottom')h.data.html+='<div id="'+d+'" class="cke_path">'+b+'</div>';});c.on('selectionChange',function(h){var i=CKEDITOR.env,j=h.data.selection,k=j.getStartElement(),l=[],m=this._.elementsPath.list=[];while(k){var n=m.push(k)-1,o;if(k.getAttribute('_cke_real_element_type'))o=k.getAttribute('_cke_real_element_type');else o=k.getName();var p='';if(i.opera||i.gecko&&i.mac)p+=' onkeypress="return false;"';if(i.gecko)p+=' onblur="this.style.cssText = this.style.cssText;"';l.unshift('<a id="',g,n,'" href="javascript:void(\'',o,'\')" tabindex="-1" title="',c.lang.elementsPath.eleTitle.replace(/%1/,o),'"'+(CKEDITOR.env.gecko&&CKEDITOR.env.version<10900?' onfocus="event.preventBubble();"':'')+' hidefocus="true" '+" onkeydown=\"return CKEDITOR._.elementsPath.keydown('",this.name,"',",n,', event);"'+p," onclick=\"return CKEDITOR._.elementsPath.click('",this.name,"',",n,');">',o,'</a>');if(o=='body')break;k=k.getParent();}f().setHtml(l.join('')+b);});c.on('contentDomUnload',function(){f().setHtml(b);});c.addCommand('elementsPathFocus',a.toolbarFocus);}});})();CKEDITOR._.elementsPath={click:function(a,b){var c=CKEDITOR.instances[a];c.focus();var d=c._.elementsPath.list[b];c.getSelection().selectElement(d);return false;},keydown:function(a,b,c){var d=CKEDITOR.ui.button._.instances[b],e=CKEDITOR.instances[a],f=e._.elementsPath.idBase,g;c=new CKEDITOR.dom.event(c);switch(c.getKeystroke()){case 37:case 9:g=CKEDITOR.document.getById(f+(b+1));if(!g)g=CKEDITOR.document.getById(f+'0');g.focus();return false;case 39:case CKEDITOR.SHIFT+9:g=CKEDITOR.document.getById(f+(b-1));if(!g)g=CKEDITOR.document.getById(f+(e._.elementsPath.list.length-1));g.focus();return false;case 27:e.focus();return false;case 13:case 32:this.click(a,b);return false;}return true;}};\r
diff --git a/plugins/enterkey/plugin.js b/plugins/enterkey/plugin.js
new file mode 100644 (file)
index 0000000..e91f6ed
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){CKEDITOR.plugins.add('enterkey',{requires:['keystrokes','indent'],init:function(h){var i=h.specialKeys;i[13]=d;i[CKEDITOR.SHIFT+13]=c;}});var a,b=/^h[1-6]$/;function c(h){a=1;return d(h,h.config.shiftEnterMode);};function d(h,i){if(h.mode!='wysiwyg')return false;if(!i)i=h.config.enterMode;setTimeout(function(){h.fire('saveSnapshot');if(i==CKEDITOR.ENTER_BR||h.getSelection().getStartElement().hasAscendant('pre',true))f(h,i);else e(h,i);a=0;},0);return true;};function e(h,i,j){j=j||g(h);var k=j.document,l=i==CKEDITOR.ENTER_DIV?'div':'p',m=j.splitBlock(l);if(!m)return;var n=m.previousBlock,o=m.nextBlock,p=m.wasStartOfBlock,q=m.wasEndOfBlock,r;if(o){r=o.getParent();if(r.is('li')){o.breakParent(r);o.move(o.getNext(),true);}}else if(n&&(r=n.getParent())&&(r.is('li'))){n.breakParent(r);j.moveToElementEditStart(n.getNext());n.move(n.getPrevious());}if(!p&&!q){if(o.is('li')&&(r=o.getFirst())&&(r.is&&r.is('ul','ol')))o.insertBefore(k.createText('\xa0'),r);if(o)j.moveToElementEditStart(o);}else{if(p&&q&&n.is('li')){h.execCommand('outdent');return;}var s;if(n){if(!a&&!b.test(n.getName()))s=n.clone();}else if(o)s=o.clone();if(!s)s=k.createElement(l);var t=m.elementPath;if(t)for(var u=0,v=t.elements.length;u<v;u++){var w=t.elements[u];if(w.equals(t.block)||w.equals(t.blockLimit))break;if(CKEDITOR.dtd.$removeEmpty[w.getName()]){w=w.clone();s.moveChildren(w);s.append(w);}}if(!CKEDITOR.env.ie)s.appendBogus();j.insertNode(s);if(CKEDITOR.env.ie&&p&&(!q||!n.getChildCount())){j.moveToElementEditStart(q?n:s);j.select();}j.moveToElementEditStart(p&&!q?o:s);}if(!CKEDITOR.env.ie)if(o){var x=k.createElement('span');x.setHtml('&nbsp;');j.insertNode(x);x.scrollIntoView();j.deleteContents();}else s.scrollIntoView();j.select();};function f(h,i){var j=g(h),k=j.document,l=i==CKEDITOR.ENTER_DIV?'div':'p',m=j.checkEndOfBlock(),n=new CKEDITOR.dom.elementPath(h.getSelection().getStartElement()),o=n.block,p=o&&n.block.getName(),q=false;if(!a&&p=='li'){e(h,i,j);return;}if(!a&&m&&b.test(p)){k.createElement('br').insertAfter(o);if(CKEDITOR.env.gecko)k.createText('').insertAfter(o);j.setStartAt(o.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START);}else{var r;q=p=='pre';if(q)r=k.createText(CKEDITOR.env.ie?'\r':'\n');else r=k.createElement('br');j.deleteContents();j.insertNode(r);if(!CKEDITOR.env.ie)k.createText('').insertAfter(r);if(m&&!CKEDITOR.env.ie)r.getParent().appendBogus();if(!CKEDITOR.env.ie)r.getNext().$.nodeValue='';if(CKEDITOR.env.ie)j.setStartAt(r,CKEDITOR.POSITION_AFTER_END);\r
+else j.setStartAt(r.getNext(),CKEDITOR.POSITION_AFTER_START);if(!CKEDITOR.env.ie){var s=null;if(!CKEDITOR.env.gecko){s=k.createElement('span');s.setHtml('&nbsp;');}else s=k.createElement('br');s.insertBefore(r.getNext());s.scrollIntoView();s.remove();}}j.collapse(true);j.select(q);};function g(h){var i=h.getSelection().getRanges();for(var j=i.length-1;j>0;j--)i[j].deleteContents();return i[0];};})();\r
diff --git a/plugins/entities/plugin.js b/plugins/entities/plugin.js
new file mode 100644 (file)
index 0000000..8596721
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a='nbsp,gt,lt,quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro',b='Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml',c='Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv';function d(e){var f={},g=[],h={nbsp:'\xa0',shy:'­',gt:'>',lt:'<'};e=e.replace(/\b(nbsp|shy|gt|lt|amp)(?:,|$)/g,function(m,n){f[h[n]]='&'+n+';';g.push(h[n]);return '';});e=e.split(',');var i=document.createElement('div'),j;i.innerHTML='&'+e.join(';&')+';';j=i.innerHTML;i=null;for(var k=0;k<j.length;k++){var l=j.charAt(k);f[l]='&'+e[k]+';';g.push(l);}f.regex=g.join('');return f;};CKEDITOR.plugins.add('entities',{afterInit:function(e){var f=e.config;if(!f.entities)return;var g=e.dataProcessor,h=g&&g.htmlFilter;if(h){var i=a;if(f.entities_latin)i+=','+b;if(f.entities_greek)i+=','+c;if(f.entities_additional)i+=','+f.entities_additional;var j=d(i),k='['+j.regex+']';delete j.regex;if(f.entities_processNumerical)k='[^ -~]|'+k;k=new RegExp(k,'g');function l(m){return j[m]||'&#'+m.charCodeAt(0)+';';};h.addRules({text:function(m){return m.replace(k,l);}});}}});})();CKEDITOR.config.entities=true;CKEDITOR.config.entities_latin=true;CKEDITOR.config.entities_greek=true;CKEDITOR.config.entities_processNumerical=false;CKEDITOR.config.entities_additional='#39';\r
diff --git a/plugins/fakeobjects/plugin.js b/plugins/fakeobjects/plugin.js
new file mode 100644 (file)
index 0000000..475044a
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a={elements:{$:function(b){var c=b.attributes._cke_realelement,d=c&&new CKEDITOR.htmlParser.fragment.fromHtml(decodeURIComponent(c)),e=d&&d.children[0];if(e){var f=b.attributes.style;if(f){var g=/(?:^|\s)width\s*:\s*(\d+)/.exec(f),h=g&&g[1];g=/(?:^|\s)height\s*:\s*(\d+)/.exec(f);var i=g&&g[1];if(h)e.attributes.width=h;if(i)e.attributes.height=i;}}return e;}}};CKEDITOR.plugins.add('fakeobjects',{requires:['htmlwriter'],afterInit:function(b){var c=b.dataProcessor,d=c&&c.htmlFilter;if(d)d.addRules(a);}});})();CKEDITOR.editor.prototype.createFakeElement=function(a,b,c,d){var e=this.lang.fakeobjects,f={'class':b,src:CKEDITOR.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(a.getOuterHtml()),alt:e[c]||e.unknown};if(c)f._cke_real_element_type=c;if(d)f._cke_resizable=d;return this.document.createElement('img',{attributes:f});};CKEDITOR.editor.prototype.createFakeParserElement=function(a,b,c,d){var e=new CKEDITOR.htmlParser.basicWriter();a.writeHtml(e);var f=e.getHtml(),g=this.lang.fakeobjects,h={'class':b,src:CKEDITOR.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(f),alt:g[c]||g.unknown};if(c)h._cke_real_element_type=c;if(d)h._cke_resizable=d;return new CKEDITOR.htmlParser.element('img',h);};CKEDITOR.editor.prototype.restoreRealElement=function(a){var b=decodeURIComponent(a.getAttribute('_cke_realelement'));return CKEDITOR.dom.element.createFromHtml(b,this.document);};\r
diff --git a/plugins/filebrowser/plugin.js b/plugins/filebrowser/plugin.js
new file mode 100644 (file)
index 0000000..3206f19
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){function a(j,k){var l=[];if(!k)return j;else for(var m in k)l.push(m+'='+encodeURIComponent(k[m]));return j+(j.indexOf('?')!=-1?'&':'?')+l.join('&');};function b(j){j+='';var k=j.charAt(0).toUpperCase();return k+j.substr(1);};function c(j){var q=this;var k=q.getDialog(),l=k.getParentEditor();l._.filebrowserSe=q;var m=l.config['filebrowser'+b(k.getName())+'WindowWidth']||l.config.filebrowserWindowWidth||'80%',n=l.config['filebrowser'+b(k.getName())+'WindowHeight']||l.config.filebrowserWindowHeight||'70%',o=q.filebrowser.params||{};o.CKEditor=l.name;o.CKEditorFuncNum=l._.filebrowserFn;if(!o.langCode)o.langCode=l.langCode;var p=a(q.filebrowser.url,o);l.popup(p,m,n);};function d(j){var m=this;var k=m.getDialog(),l=k.getParentEditor();l._.filebrowserSe=m;if(!k.getContentElement(m['for'][0],m['for'][1]).getInputElement().$.value)return false;if(!k.getContentElement(m['for'][0],m['for'][1]).getAction())return false;return true;};function e(j,k,l){var m=l.params||{};m.CKEditor=j.name;m.CKEditorFuncNum=j._.filebrowserFn;if(!m.langCode)m.langCode=j.langCode;k.action=a(l.url,m);k.filebrowser=l;};function f(j,k,l,m){var n,o;for(var p in m){n=m[p];if(n.type=='hbox'||n.type=='vbox')f(j,k,l,n.children);if(!n.filebrowser)continue;if(typeof n.filebrowser=='string'){var q={action:n.type=='fileButton'?'QuickUpload':'Browse',target:n.filebrowser};n.filebrowser=q;}if(n.filebrowser.action=='Browse'){var r=n.filebrowser.url||j.config['filebrowser'+b(k)+'BrowseUrl']||j.config.filebrowserBrowseUrl;if(r){n.onClick=c;n.filebrowser.url=r;n.hidden=false;}}else if(n.filebrowser.action=='QuickUpload'&&n['for']){r=n.filebrowser.url||j.config['filebrowser'+b(k)+'UploadUrl']||j.config.filebrowserUploadUrl;if(r){n.onClick=d;n.filebrowser.url=r;n.hidden=false;e(j,l.getContents(n['for'][0]).get(n['for'][1]),n.filebrowser);}}}};function g(j,k){var l=k.getDialog(),m=k.filebrowser.target||null;j=j.replace(/#/g,'%23');if(m){var n=m.split(':'),o=l.getContentElement(n[0],n[1]);if(o){o.setValue(j);l.selectPage(n[0]);}}};function h(j,k,l){if(l.indexOf(';')!==-1){var m=l.split(';');for(var n=0;n<m.length;n++)if(h(j,k,m[n]))return true;return false;}return j.getContents(k).get(l).filebrowser&&j.getContents(k).get(l).filebrowser.url;};function i(j,k){var o=this;var l=o._.filebrowserSe.getDialog(),m=o._.filebrowserSe['for'],n=o._.filebrowserSe.filebrowser.onSelect;if(m)l.getContentElement(m[0],m[1]).reset();if(n&&n.call(o._.filebrowserSe,j,k)===false)return;if(typeof k=='string'&&k)alert(k);if(j)g(j,o._.filebrowserSe);\r
+};CKEDITOR.plugins.add('filebrowser',{init:function(j,k){j._.filebrowserFn=CKEDITOR.tools.addFunction(i,j);CKEDITOR.on('dialogDefinition',function(l){for(var m in l.data.definition.contents){f(l.editor,l.data.name,l.data.definition,l.data.definition.contents[m].elements);if(l.data.definition.contents[m].hidden&&l.data.definition.contents[m].filebrowser)l.data.definition.contents[m].hidden=!h(l.data.definition,l.data.definition.contents[m].id,l.data.definition.contents[m].filebrowser);}});}});})();\r
diff --git a/plugins/find/dialogs/find.js b/plugins/find/dialogs/find.js
new file mode 100644 (file)
index 0000000..dde04b4
--- /dev/null
@@ -0,0 +1,9 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){function a(h){return h.type==CKEDITOR.NODE_TEXT&&h.getLength()>0;};function b(h){var i=CKEDITOR.dtd;return h.isBlockBoundary(CKEDITOR.tools.extend({},i.$empty,i.$nonEditable));};var c=function(){var h=this;return{textNode:h.textNode,offset:h.offset,character:h.textNode?h.textNode.getText().charAt(h.offset):null,hitMatchBoundary:h._.matchBoundary};},d=['find','replace'],e=[['txtFindFind','txtFindReplace'],['txtFindCaseChk','txtReplaceCaseChk'],['txtFindWordChk','txtReplaceWordChk'],['txtFindCyclic','txtReplaceCyclic']];function f(h){var i,j,k,l;i=h==='find'?1:0;j=1-i;var m,n=e.length;for(m=0;m<n;m++){k=this.getContentElement(d[i],e[m][i]);l=this.getContentElement(d[j],e[m][j]);l.setValue(k.getValue());}};var g=function(h,i){var j=new CKEDITOR.style(h.config.find_highlight),k=function(w,x){var y=new CKEDITOR.dom.walker(w);y[x?'guard':'evaluator']=a;y.breakOnFalse=true;this._={matchWord:x,walker:y,matchBoundary:false};};k.prototype={next:function(){return this.move();},back:function(){return this.move(true);},move:function(w){var y=this;var x=y.textNode;if(x===null)return c.call(y);y._.matchBoundary=false;if(x&&w&&y.offset>0){y.offset--;return c.call(y);}else if(x&&y.offset<x.getLength()-1){y.offset++;return c.call(y);}else{x=null;while(!x){x=y._.walker[w?'previous':'next'].call(y._.walker);if(y._.matchWord&&!x||y._.walker._.end)break;if(!x&&b(y._.walker.current))y._.matchBoundary=true;}y.textNode=x;if(x)y.offset=w?x.getLength()-1:0;else y.offset=0;}return c.call(y);}};var l=function(w,x){this._={walker:w,cursors:[],rangeLength:x,highlightRange:null,isMatched:false};};l.prototype={toDomRange:function(){var w=this._.cursors;if(w.length<1)return null;var x=w[0],y=w[w.length-1],z=new CKEDITOR.dom.range(h.document);z.setStart(x.textNode,x.offset);z.setEnd(y.textNode,y.offset+1);return z;},updateFromDomRange:function(w){var z=this;var x,y=new k(w);z._.cursors=[];do{x=y.next();if(x.character)z._.cursors.push(x);}while(x.character)z._.rangeLength=z._.cursors.length;},setMatched:function(){this._.isMatched=true;},clearMatched:function(){this._.isMatched=false;},isMatched:function(){return this._.isMatched;},highlight:function(){var y=this;if(y._.cursors.length<1)return;if(y._.highlightRange)y.removeHighlight();var w=y.toDomRange();j.applyToRange(w);y._.highlightRange=w;var x=w.startContainer;if(x.type!=CKEDITOR.NODE_ELEMENT)x=x.getParent();x.scrollIntoView();y.updateFromDomRange(w);},removeHighlight:function(){var w=this;if(!w._.highlightRange)return;j.removeFromRange(w._.highlightRange);\r
+w.updateFromDomRange(w._.highlightRange);w._.highlightRange=null;},moveBack:function(){var y=this;var w=y._.walker.back(),x=y._.cursors;if(w.hitMatchBoundary)y._.cursors=x=[];x.unshift(w);if(x.length>y._.rangeLength)x.pop();return w;},moveNext:function(){var y=this;var w=y._.walker.next(),x=y._.cursors;if(w.hitMatchBoundary)y._.cursors=x=[];x.push(w);if(x.length>y._.rangeLength)x.shift();return w;},getEndCharacter:function(){var w=this._.cursors;if(w.length<1)return null;return w[w.length-1].character;},getNextCharacterRange:function(w){var x,y=this._.cursors;if(!(x=y[y.length-1]))return null;return new l(new k(m(x)),w);},getCursors:function(){return this._.cursors;}};function m(w,x){var y=new CKEDITOR.dom.range();y.setStart(w.textNode,x?w.offset:w.offset+1);y.setEndAt(h.document.getBody(),CKEDITOR.POSITION_BEFORE_END);return y;};function n(w){var x=new CKEDITOR.dom.range();x.setStartAt(h.document.getBody(),CKEDITOR.POSITION_AFTER_START);x.setEnd(w.textNode,w.offset);return x;};var o=0,p=1,q=2,r=function(w,x){var y=[-1];if(x)w=w.toLowerCase();for(var z=0;z<w.length;z++){y.push(y[z]+1);while(y[z+1]>0&&w.charAt(z)!=w.charAt(y[z+1]-1))y[z+1]=y[y[z+1]-1]+1;}this._={overlap:y,state:0,ignoreCase:!!x,pattern:w};};r.prototype={feedCharacter:function(w){var x=this;if(x._.ignoreCase)w=w.toLowerCase();for(;;)if(w==x._.pattern.charAt(x._.state)){x._.state++;if(x._.state==x._.pattern.length){x._.state=0;return q;}return p;}else if(!x._.state)return o;else x._.state=x._.overlap[x._.state];return null;},reset:function(){this._.state=0;}};var s=/[.,"'?!;: \u0085\u00a0\u1680\u280e\u2028\u2029\u202f\u205f\u3000]/,t=function(w){if(!w)return true;var x=w.charCodeAt(0);return x>=9&&x<=13||x>=8192&&x<=8202||s.test(w);},u={searchRange:null,matchRange:null,find:function(w,x,y,z,A){var J=this;if(!J.matchRange)J.matchRange=new l(new k(J.searchRange),w.length);else{J.matchRange.removeHighlight();J.matchRange=J.matchRange.getNextCharacterRange(w.length);}var B=new r(w,!x),C=o,D='%';while(D!==null){J.matchRange.moveNext();while(D=J.matchRange.getEndCharacter()){C=B.feedCharacter(D);if(C==q)break;if(J.matchRange.moveNext().hitMatchBoundary)B.reset();}if(C==q){if(y){var E=J.matchRange.getCursors(),F=E[E.length-1],G=E[0],H=new k(n(G),true),I=new k(m(F),true);if(!(t(H.back().character)&&t(I.next().character)))continue;}J.matchRange.setMatched();if(A!==false)J.matchRange.highlight();return true;}}J.matchRange.clearMatched();J.matchRange.removeHighlight();if(z){J.searchRange=v(true);J.matchRange=null;\r
+}return false;},replaceCounter:0,replace:function(w,x,y,z,A,B,C){var H=this;var D=false;if(H.matchRange&&H.matchRange.isMatched()&&!H.matchRange._.isReplaced){H.matchRange.removeHighlight();var E=H.matchRange.toDomRange(),F=h.document.createText(y);if(!C){var G=h.getSelection();G.selectRanges([E]);h.fire('saveSnapshot');}E.deleteContents();E.insertNode(F);if(!C){G.selectRanges([E]);h.fire('saveSnapshot');}H.matchRange.updateFromDomRange(E);if(!C)H.matchRange.highlight();H.matchRange._.isReplaced=true;H.replaceCounter++;D=true;}else D=H.find(x,z,A,B,!C);return D;}};function v(w){var x,y=h.getSelection(),z=h.document.getBody();if(y&&!w){x=y.getRanges()[0].clone();x.collapse(true);}else{x=new CKEDITOR.dom.range();x.setStartAt(z,CKEDITOR.POSITION_AFTER_START);}x.setEndAt(z,CKEDITOR.POSITION_BEFORE_END);return x;};return{title:h.lang.findAndReplace.title,resizable:CKEDITOR.DIALOG_RESIZE_NONE,minWidth:350,minHeight:165,buttons:[CKEDITOR.dialog.cancelButton],contents:[{id:'find',label:h.lang.findAndReplace.find,title:h.lang.findAndReplace.find,accessKey:'',elements:[{type:'hbox',widths:['230px','90px'],children:[{type:'text',id:'txtFindFind',label:h.lang.findAndReplace.findWhat,isChanged:false,labelLayout:'horizontal',accessKey:'F'},{type:'button',align:'left',style:'width:100%',label:h.lang.findAndReplace.find,onClick:function(){var w=this.getDialog();if(!u.find(w.getValueOf('find','txtFindFind'),w.getValueOf('find','txtFindCaseChk'),w.getValueOf('find','txtFindWordChk'),w.getValueOf('find','txtFindCyclic')))alert(h.lang.findAndReplace.notFoundMsg);}}]},{type:'vbox',padding:0,children:[{type:'checkbox',id:'txtFindCaseChk',isChanged:false,style:'margin-top:28px',label:h.lang.findAndReplace.matchCase},{type:'checkbox',id:'txtFindWordChk',isChanged:false,label:h.lang.findAndReplace.matchWord},{type:'checkbox',id:'txtFindCyclic',isChanged:false,'default':true,label:h.lang.findAndReplace.matchCyclic}]}]},{id:'replace',label:h.lang.findAndReplace.replace,accessKey:'M',elements:[{type:'hbox',widths:['230px','90px'],children:[{type:'text',id:'txtFindReplace',label:h.lang.findAndReplace.findWhat,isChanged:false,labelLayout:'horizontal',accessKey:'F'},{type:'button',align:'left',style:'width:100%',label:h.lang.findAndReplace.replace,onClick:function(){var w=this.getDialog();if(!u.replace(w,w.getValueOf('replace','txtFindReplace'),w.getValueOf('replace','txtReplace'),w.getValueOf('replace','txtReplaceCaseChk'),w.getValueOf('replace','txtReplaceWordChk'),w.getValueOf('replace','txtReplaceCyclic')))alert(h.lang.findAndReplace.notFoundMsg);\r
+}}]},{type:'hbox',widths:['230px','90px'],children:[{type:'text',id:'txtReplace',label:h.lang.findAndReplace.replaceWith,isChanged:false,labelLayout:'horizontal',accessKey:'R'},{type:'button',align:'left',style:'width:100%',label:h.lang.findAndReplace.replaceAll,isChanged:false,onClick:function(){var w=this.getDialog(),x;u.replaceCounter=0;u.searchRange=v(true);if(u.matchRange){u.matchRange.removeHighlight();u.matchRange=null;}h.fire('saveSnapshot');while(u.replace(w,w.getValueOf('replace','txtFindReplace'),w.getValueOf('replace','txtReplace'),w.getValueOf('replace','txtReplaceCaseChk'),w.getValueOf('replace','txtReplaceWordChk'),false,true)){}if(u.replaceCounter){alert(h.lang.findAndReplace.replaceSuccessMsg.replace(/%1/,u.replaceCounter));h.fire('saveSnapshot');}else alert(h.lang.findAndReplace.notFoundMsg);}}]},{type:'vbox',padding:0,children:[{type:'checkbox',id:'txtReplaceCaseChk',isChanged:false,label:h.lang.findAndReplace.matchCase},{type:'checkbox',id:'txtReplaceWordChk',isChanged:false,label:h.lang.findAndReplace.matchWord},{type:'checkbox',id:'txtReplaceCyclic',isChanged:false,'default':true,label:h.lang.findAndReplace.matchCyclic}]}]}],onLoad:function(){var w=this,x,y,z=false;this.on('hide',function(){z=false;});this.on('show',function(){z=true;});this.selectPage=CKEDITOR.tools.override(this.selectPage,function(A){return function(B){A.call(w,B);var C=w._.tabs[B],D,E,F;E=B==='find'?'txtFindFind':'txtFindReplace';F=B==='find'?'txtFindWordChk':'txtReplaceWordChk';x=w.getContentElement(B,E);y=w.getContentElement(B,F);if(!C.initialized){D=CKEDITOR.document.getById(x._.inputId);C.initialized=true;}if(z)f.call(this,B);};});},onShow:function(){u.searchRange=v();if(i=='replace')this.getContentElement('replace','txtFindReplace').focus();else this.getContentElement('find','txtFindFind').focus();},onHide:function(){if(u.matchRange&&u.matchRange.isMatched()){u.matchRange.removeHighlight();h.focus();h.getSelection().selectRanges([u.matchRange.toDomRange()]);}delete u.matchRange;}};};CKEDITOR.dialog.add('find',function(h){return g(h,'find');});CKEDITOR.dialog.add('replace',function(h){return g(h,'replace');});})();\r
diff --git a/plugins/find/plugin.js b/plugins/find/plugin.js
new file mode 100644 (file)
index 0000000..ddfbfbf
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('find',{init:function(a){var b=CKEDITOR.plugins.find;a.ui.addButton('Find',{label:a.lang.findAndReplace.find,command:'find'});var c=a.addCommand('find',new CKEDITOR.dialogCommand('find'));c.canUndo=false;a.ui.addButton('Replace',{label:a.lang.findAndReplace.replace,command:'replace'});var d=a.addCommand('replace',new CKEDITOR.dialogCommand('replace'));d.canUndo=false;CKEDITOR.dialog.add('find',this.path+'dialogs/find.js');CKEDITOR.dialog.add('replace',this.path+'dialogs/find.js');},requires:['styles']});CKEDITOR.config.find_highlight={element:'span',styles:{'background-color':'#004',color:'#fff'}};\r
diff --git a/plugins/flash/dialogs/flash.js b/plugins/flash/dialogs/flash.js
new file mode 100644 (file)
index 0000000..2e84266
--- /dev/null
@@ -0,0 +1,9 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a=1,b=2,c=4,d={id:[{type:a,name:CKEDITOR.env.ie?'_cke_saved_id':'id'}],classid:[{type:a,name:'classid'}],codebase:[{type:a,name:'codebase'}],pluginspage:[{type:c,name:'pluginspage'}],src:[{type:b,name:'movie'},{type:c,name:'src'}],name:[{type:c,name:'name'}],align:[{type:a,name:'align'}],title:[{type:a,name:'title'},{type:c,name:'title'}],'class':[{type:a,name:'class'},{type:c,name:'class'}],width:[{type:a,name:'width'},{type:c,name:'width'}],height:[{type:a,name:'height'},{type:c,name:'height'}],hSpace:[{type:a,name:'hSpace'},{type:c,name:'hSpace'}],vSpace:[{type:a,name:'vSpace'},{type:c,name:'vSpace'}],style:[{type:a,name:'style'},{type:c,name:'style'}],type:[{type:c,name:'type'}]},e=['play','loop','menu','quality','scale','salign','wmode','bgcolor','base','flashvars','allowScriptAccess','allowFullScreen'];for(var f=0;f<e.length;f++)d[e[f]]=[{type:c,name:e[f]},{type:b,name:e[f]}];e=['allowFullScreen','play','loop','menu'];for(f=0;f<e.length;f++)d[e[f]][0]['default']=d[e[f]][1]['default']=true;function g(i,j,k){var q=this;var l=d[q.id];if(!l)return;var m=q instanceof CKEDITOR.ui.dialog.checkbox;for(var n=0;n<l.length;n++){var o=l[n];switch(o.type){case a:if(!i)continue;if(i.getAttribute(o.name)!==null){var p=i.getAttribute(o.name);if(m)q.setValue(p.toLowerCase()=='true');else q.setValue(p);return;}else if(m)q.setValue(!!o['default']);break;case b:if(!i)continue;if(o.name in k){p=k[o.name];if(m)q.setValue(p.toLowerCase()=='true');else q.setValue(p);return;}else if(m)q.setValue(!!o['default']);break;case c:if(!j)continue;if(j.getAttribute(o.name)){p=j.getAttribute(o.name);if(m)q.setValue(p.toLowerCase()=='true');else q.setValue(p);return;}else if(m)q.setValue(!!o['default']);}}};function h(i,j,k){var s=this;var l=d[s.id];if(!l)return;var m=s.getValue()==='',n=s instanceof CKEDITOR.ui.dialog.checkbox;for(var o=0;o<l.length;o++){var p=l[o];switch(p.type){case a:if(!i)continue;var q=s.getValue();if(m||n&&q===p['default'])i.removeAttribute(p.name);else i.setAttribute(p.name,q);break;case b:if(!i)continue;q=s.getValue();if(m||n&&q===p['default']){if(p.name in k)k[p.name].remove();}else if(p.name in k)k[p.name].setAttribute('value',q);else{var r=CKEDITOR.dom.element.createFromHtml('<cke:param></cke:param>',i.getDocument());r.setAttributes({name:p.name,value:q});if(i.getChildCount()<1)r.appendTo(i);else r.insertBefore(i.getFirst());}break;case c:if(!j)continue;q=s.getValue();if(m||n&&q===p['default'])j.removeAttribute(p.name);else j.setAttribute(p.name,q);\r
+}}};CKEDITOR.dialog.add('flash',function(i){var j=!i.config.flashEmbedTagOnly,k=i.config.flashAddEmbedTag||i.config.flashEmbedTagOnly,l='<div>'+CKEDITOR.tools.htmlEncode(i.lang.image.preview)+'<br>'+'<div id="FlashPreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div>'+'<div id="FlashPreviewBox"></div></div>';return{title:i.lang.flash.title,minWidth:420,minHeight:310,onShow:function(){var y=this;y.fakeImage=y.objectNode=y.embedNode=null;var m=y.getSelectedElement();if(m&&m.getAttribute('_cke_real_element_type')&&m.getAttribute('_cke_real_element_type')=='flash'){y.fakeImage=m;var n=i.restoreRealElement(m),o=null,p=null,q={};if(n.getName()=='cke:object'){o=n;var r=o.getElementsByTag('embed','cke');if(r.count()>0)p=r.getItem(0);var s=o.getElementsByTag('param','cke');for(var t=0,u=s.count();t<u;t++){var v=s.getItem(t),w=v.getAttribute('name'),x=v.getAttribute('value');q[w]=x;}}else if(n.getName()=='cke:embed')p=n;y.objectNode=o;y.embedNode=p;y.setupContent(o,p,q,m);}},onOk:function(){var v=this;var m=null,n=null,o=null;if(!v.fakeImage){if(j){m=CKEDITOR.dom.element.createFromHtml('<cke:object></cke:object>',i.document);var p={classid:'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000',codebase:'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'};m.setAttributes(p);}if(k){n=CKEDITOR.dom.element.createFromHtml('<cke:embed></cke:embed>',i.document);n.setAttributes({type:'application/x-shockwave-flash',pluginspage:'http://www.macromedia.com/go/getflashplayer'});if(m)n.appendTo(m);}}else{m=v.objectNode;n=v.embedNode;}if(m){o={};var q=m.getElementsByTag('param','cke');for(var r=0,s=q.count();r<s;r++)o[q.getItem(r).getAttribute('name')]=q.getItem(r);}var t={};v.commitContent(m,n,o,t);var u=i.createFakeElement(m||n,'cke_flash','flash',true);u.setStyles(t);if(v.fakeImage)u.replace(v.fakeImage);else i.insertElement(u);},onHide:function(){if(this.preview)this.preview.setHtml('');},contents:[{id:'info',label:i.lang.common.generalTab,accessKey:'I',elements:[{type:'vbox',padding:0,children:[{type:'html',html:'<span>'+CKEDITOR.tools.htmlEncode(i.lang.image.url)+'</span>'},{type:'hbox',widths:['280px','110px'],align:'right',children:[{id:'src',type:'text',label:'',validate:CKEDITOR.dialog.validate.notEmpty(i.lang.flash.validateSrc),setup:g,commit:h,onLoad:function(){var m=this.getDialog(),n=function(o){m.preview.setHtml('<embed height="100%" width="100%" src="'+CKEDITOR.tools.htmlEncode(o)+'" type="application/x-shockwave-flash"></embed>');\r
+};m.preview=m.getContentElement('info','preview').getElement().getChild(3);this.on('change',function(o){if(o.data&&o.data.value)n(o.data.value);});this.getInputElement().on('change',function(o){n(this.getValue());},this);}},{type:'button',id:'browse',filebrowser:'info:src',hidden:true,align:'center',label:i.lang.common.browseServer}]}]},{type:'hbox',widths:['25%','25%','25%','25%','25%'],children:[{type:'text',id:'width',style:'width:95px',label:i.lang.flash.width,validate:CKEDITOR.dialog.validate.integer(i.lang.flash.validateWidth),setup:function(m,n,o,p){g.apply(this,arguments);if(p){var q=parseInt(p.$.style.width,10);if(!isNaN(q))this.setValue(q);}},commit:function(m,n,o,p){h.apply(this,arguments);if(this.getValue())p.width=this.getValue()+'px';}},{type:'text',id:'height',style:'width:95px',label:i.lang.flash.height,validate:CKEDITOR.dialog.validate.integer(i.lang.flash.validateHeight),setup:function(m,n,o,p){g.apply(this,arguments);if(p){var q=parseInt(p.$.style.height,10);if(!isNaN(q))this.setValue(q);}},commit:function(m,n,o,p){h.apply(this,arguments);if(this.getValue())p.height=this.getValue()+'px';}},{type:'text',id:'hSpace',style:'width:95px',label:i.lang.flash.hSpace,validate:CKEDITOR.dialog.validate.integer(i.lang.flash.validateHSpace),setup:g,commit:h},{type:'text',id:'vSpace',style:'width:95px',label:i.lang.flash.vSpace,validate:CKEDITOR.dialog.validate.integer(i.lang.flash.validateVSpace),setup:g,commit:h}]},{type:'vbox',children:[{type:'html',id:'preview',style:'width:95%;',html:l}]}]},{id:'Upload',hidden:true,filebrowser:'uploadButton',label:i.lang.common.upload,elements:[{type:'file',id:'upload',label:i.lang.common.upload,size:38},{type:'fileButton',id:'uploadButton',label:i.lang.common.uploadSubmit,filebrowser:'info:src','for':['Upload','upload']}]},{id:'properties',label:i.lang.flash.propertiesTab,elements:[{type:'hbox',widths:['50%','50%'],children:[{id:'scale',type:'select',label:i.lang.flash.scale,'default':'',style:'width : 100%;',items:[[i.lang.common.notSet,''],[i.lang.flash.scaleAll,'showall'],[i.lang.flash.scaleNoBorder,'noborder'],[i.lang.flash.scaleFit,'exactfit']],setup:g,commit:h},{id:'allowScriptAccess',type:'select',label:i.lang.flash.access,'default':'',style:'width : 100%;',items:[[i.lang.common.notSet,''],[i.lang.flash.accessAlways,'always'],[i.lang.flash.accessSameDomain,'samedomain'],[i.lang.flash.accessNever,'never']],setup:g,commit:h}]},{type:'hbox',widths:['50%','50%'],children:[{id:'wmode',type:'select',label:i.lang.flash.windowMode,'default':'',style:'width : 100%;',items:[[i.lang.common.notSet,''],[i.lang.flash.windowModeWindow,'window'],[i.lang.flash.windowModeOpaque,'opaque'],[i.lang.flash.windowModeTransparent,'transparent']],setup:g,commit:h},{id:'quality',type:'select',label:i.lang.flash.quality,'default':'high',style:'width : 100%;',items:[[i.lang.common.notSet,''],[i.lang.flash.qualityBest,'best'],[i.lang.flash.qualityHigh,'high'],[i.lang.flash.qualityAutoHigh,'autohigh'],[i.lang.flash.qualityMedium,'medium'],[i.lang.flash.qualityAutoLow,'autolow'],[i.lang.flash.qualityLow,'low']],setup:g,commit:h}]},{type:'hbox',widths:['50%','50%'],children:[{id:'align',type:'select',label:i.lang.flash.align,'default':'',style:'width : 100%;',items:[[i.lang.common.notSet,''],[i.lang.image.alignLeft,'left'],[i.lang.image.alignAbsBottom,'absBottom'],[i.lang.image.alignAbsMiddle,'absMiddle'],[i.lang.image.alignBaseline,'baseline'],[i.lang.image.alignBottom,'bottom'],[i.lang.image.alignMiddle,'middle'],[i.lang.image.alignRight,'right'],[i.lang.image.alignTextTop,'textTop'],[i.lang.image.alignTop,'top']],setup:g,commit:h},{type:'html',html:'<div></div>'}]},{type:'vbox',padding:0,children:[{type:'html',html:CKEDITOR.tools.htmlEncode(i.lang.flash.flashvars)},{type:'checkbox',id:'menu',label:i.lang.flash.chkMenu,'default':true,setup:g,commit:h},{type:'checkbox',id:'play',label:i.lang.flash.chkPlay,'default':true,setup:g,commit:h},{type:'checkbox',id:'loop',label:i.lang.flash.chkLoop,'default':true,setup:g,commit:h},{type:'checkbox',id:'allowFullScreen',label:i.lang.flash.chkFull,'default':true,setup:g,commit:h}]}]},{id:'advanced',label:i.lang.common.advancedTab,elements:[{type:'hbox',widths:['45%','55%'],children:[{type:'text',id:'id',label:i.lang.common.id,setup:g,commit:h},{type:'text',id:'title',label:i.lang.common.advisoryTitle,setup:g,commit:h}]},{type:'hbox',widths:['45%','55%'],children:[{type:'text',id:'bgcolor',label:i.lang.flash.bgcolor,setup:g,commit:h},{type:'text',id:'class',label:i.lang.common.cssClass,setup:g,commit:h}]},{type:'text',id:'style',label:i.lang.common.cssStyle,setup:g,commit:h}]}]};\r
+});})();\r
diff --git a/plugins/flash/images/placeholder.png b/plugins/flash/images/placeholder.png
new file mode 100644 (file)
index 0000000..0bc6caa
Binary files /dev/null and b/plugins/flash/images/placeholder.png differ
diff --git a/plugins/flash/plugin.js b/plugins/flash/plugin.js
new file mode 100644 (file)
index 0000000..f3bbce7
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a=/\.swf(?:$|\?)/i,b=/^\d+(?:\.\d+)?$/;function c(f){if(b.test(f))return f+'px';return f;};function d(f){var g=f.attributes;return g.type=='application/x-shockwave-flash'||a.test(g.src||'');};function e(f,g){var h=f.createFakeParserElement(g,'cke_flash','flash',true),i=h.attributes.style||'',j=g.attributes.width,k=g.attributes.height;if(typeof j!='undefined')i=h.attributes.style=i+'width:'+c(j)+';';if(typeof k!='undefined')i=h.attributes.style=i+'height:'+c(k)+';';return h;};CKEDITOR.plugins.add('flash',{init:function(f){f.addCommand('flash',new CKEDITOR.dialogCommand('flash'));f.ui.addButton('Flash',{label:f.lang.common.flash,command:'flash'});CKEDITOR.dialog.add('flash',this.path+'dialogs/flash.js');f.addCss('img.cke_flash{background-image: url('+CKEDITOR.getUrl(this.path+'images/placeholder.png')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 80px;'+'height: 80px;'+'}');if(f.addMenuItems)f.addMenuItems({flash:{label:f.lang.flash.properties,command:'flash',group:'flash'}});if(f.contextMenu)f.contextMenu.addListener(function(g,h){if(g&&g.is('img')&&g.getAttribute('_cke_real_element_type')=='flash')return{flash:CKEDITOR.TRISTATE_OFF};});},afterInit:function(f){var g=f.dataProcessor,h=g&&g.dataFilter;if(h)h.addRules({elements:{'cke:object':function(i){var j=i.attributes,k=j.classid&&String(j.classid).toLowerCase();if(!k){for(var l=0;l<i.children.length;l++)if(i.children[l].name=='embed'){if(!d(i.children[l]))return null;return e(f,i);}return null;}return e(f,i);},'cke:embed':function(i){if(!d(i))return null;return e(f,i);}}},5);},requires:['fakeobjects']});})();CKEDITOR.tools.extend(CKEDITOR.config,{flashEmbedTagOnly:false,flashAddEmbedTag:true,flashConvertOnEdit:false});\r
diff --git a/plugins/floatpanel/plugin.js b/plugins/floatpanel/plugin.js
new file mode 100644 (file)
index 0000000..ba7b6a6
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('floatpanel',{requires:['panel']});(function(){var a={},b=false;function c(d,e,f,g,h){var i=e.getUniqueId()+'-'+f.getUniqueId()+'-'+d.skinName+'-'+d.lang.dir+(d.uiColor&&'-'+d.uiColor||'')+(g.css&&'-'+g.css||'')+(h&&'-'+h||''),j=a[i];if(!j){j=a[i]=new CKEDITOR.ui.panel(e,g);j.element=f.append(CKEDITOR.dom.element.createFromHtml(j.renderHtml(d),e));j.element.setStyles({display:'none',position:'absolute'});}return j;};CKEDITOR.ui.floatPanel=CKEDITOR.tools.createClass({$:function(d,e,f,g){f.forceIFrame=true;var h=e.getDocument(),i=c(d,h,e,f,g||0),j=i.element,k=j.getFirst().getFirst();this.element=j;this._={panel:i,parentElement:e,definition:f,document:h,iframe:k,children:[],dir:d.lang.dir};},proto:{addBlock:function(d,e){return this._.panel.addBlock(d,e);},addListBlock:function(d,e){return this._.panel.addListBlock(d,e);},getBlock:function(d){return this._.panel.getBlock(d);},showBlock:function(d,e,f,g,h){var i=this._.panel,j=i.showBlock(d);this.allowBlur(false);b=true;var k=this.element,l=this._.iframe,m=this._.definition,n=e.getDocumentPosition(k.getDocument()),o=this._.dir=='rtl',p=n.x+(g||0),q=n.y+(h||0);if(o&&(f==1||f==4)||!o&&(f==2||f==3))p+=e.$.offsetWidth-1;if(f==3||f==4)q+=e.$.offsetHeight-1;this._.panel._.offsetParentId=e.getId();k.setStyles({top:q+'px',left:'-3000px',visibility:'hidden',opacity:'0',display:''});if(!this._.blurSet){var r=CKEDITOR.env.ie?l:new CKEDITOR.dom.window(l.$.contentWindow);CKEDITOR.event.useCapture=true;r.on('blur',function(s){var v=this;if(CKEDITOR.env.ie&&!v.allowBlur())return;var t=s.data.getTarget(),u=t.getWindow&&t.getWindow();if(u&&u.equals(r))return;if(v.visible&&!v._.activeChild&&!b)v.hide();},this);r.on('focus',function(){this._.focused=true;this.hideChild();this.allowBlur(true);},this);CKEDITOR.event.useCapture=false;this._.blurSet=1;}i.onEscape=CKEDITOR.tools.bind(function(){this.onEscape&&this.onEscape();},this);CKEDITOR.tools.setTimeout(function(){if(o)p-=k.$.offsetWidth;k.setStyles({left:p+'px',visibility:'',opacity:'1'});if(j.autoSize){function s(){var t=k.getFirst(),u=j.element.$.scrollHeight;if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&u>0)u+=(t.$.offsetHeight||0)-(t.$.clientHeight||0);t.setStyle('height',u+'px');i._.currentBlock.element.setStyle('display','none').removeStyle('display');};if(i.isLoaded)s();else i.onLoad=s;}else k.getFirst().removeStyle('height');CKEDITOR.tools.setTimeout(function(){if(m.voiceLabel)if(CKEDITOR.env.gecko){var t=l.getParent();t.setAttribute('role','region');t.setAttribute('title',m.voiceLabel);\r
+l.setAttribute('role','region');l.setAttribute('title',' ');}if(CKEDITOR.env.ie&&CKEDITOR.env.quirks)l.focus();else l.$.contentWindow.focus();if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks)this.allowBlur(true);},0,this);},0,this);this.visible=1;if(this.onShow)this.onShow.call(this);b=false;},hide:function(){var d=this;if(d.visible&&(!d.onHide||d.onHide.call(d)!==true)){d.hideChild();d.element.setStyle('display','none');d.visible=0;}},allowBlur:function(d){var e=this._.panel;if(d!=undefined)e.allowBlur=d;return e.allowBlur;},showAsChild:function(d,e,f,g,h,i){if(this._.activeChild==d&&d._.panel._.offsetParentId==f.getId())return;this.hideChild();d.onHide=CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){if(!this._.focused)this.hide();},0,this);},this);this._.activeChild=d;this._.focused=false;d.showBlock(e,f,g,h,i);if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie8&&CKEDITOR.env.ie6Compat)setTimeout(function(){d.element.getChild(0).$.style.cssText+='';},100);},hideChild:function(){var d=this._.activeChild;if(d){delete d.onHide;delete this._.activeChild;d.hide();}}}});})();\r
diff --git a/plugins/font/plugin.js b/plugins/font/plugin.js
new file mode 100644 (file)
index 0000000..ba4b062
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){function a(b,c,d,e,f,g,h){var i=b.config,j=f.split(';'),k=[],l={};for(var m=0;m<j.length;m++){var n={},o=j[m].split('/'),p=j[m]=o[0];n[d]=k[m]=o[1]||p;l[p]=new CKEDITOR.style(h,n);}b.ui.addRichCombo(c,{label:e.label,title:e.panelTitle,voiceLabel:e.voiceLabel,className:'cke_'+(d=='size'?'fontSize':'font'),multiSelect:false,panel:{css:[i.contentsCss,CKEDITOR.getUrl(b.skinPath+'editor.css')],voiceLabel:e.panelVoiceLabel},init:function(){this.startGroup(e.panelTitle);for(var q=0;q<j.length;q++){var r=j[q];this.add(r,'<span style="font-'+d+':'+k[q]+'">'+r+'</span>',r);}},onClick:function(q){b.focus();b.fire('saveSnapshot');var r=l[q];if(this.getValue()==q)r.remove(b.document);else r.apply(b.document);b.fire('saveSnapshot');},onRender:function(){b.on('selectionChange',function(q){var r=this.getValue(),s=q.data.path,t=s.elements;for(var u=0,v;u<t.length;u++){v=t[u];for(var w in l)if(l[w].checkElementRemovable(v,true)){if(w!=r)this.setValue(w);return;}}this.setValue('',g);},this);}});};CKEDITOR.plugins.add('font',{requires:['richcombo','styles'],init:function(b){var c=b.config;a(b,'Font','family',b.lang.font,c.font_names,c.font_defaultLabel,c.font_style);a(b,'FontSize','size',b.lang.fontSize,c.fontSize_sizes,c.fontSize_defaultLabel,c.fontSize_style);}});})();CKEDITOR.config.font_names='Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif';CKEDITOR.config.font_defaultLabel='';CKEDITOR.config.font_style={element:'span',styles:{'font-family':'#(family)'},overrides:[{element:'font',attributes:{face:null}}]};CKEDITOR.config.fontSize_sizes='8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px';CKEDITOR.config.fontSize_defaultLabel='';CKEDITOR.config.fontSize_style={element:'span',styles:{'font-size':'#(size)'},overrides:[{element:'font',attributes:{size:null}}]};\r
diff --git a/plugins/format/plugin.js b/plugins/format/plugin.js
new file mode 100644 (file)
index 0000000..79e7b35
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('format',{requires:['richcombo','styles'],init:function(a){var b=a.config,c=a.lang.format,d=b.format_tags.split(';'),e={};for(var f=0;f<d.length;f++){var g=d[f];e[g]=new CKEDITOR.style(b['format_'+g]);}a.ui.addRichCombo('Format',{label:c.label,title:c.panelTitle,voiceLabel:c.voiceLabel,className:'cke_format',multiSelect:false,panel:{css:[b.contentsCss,CKEDITOR.getUrl(a.skinPath+'editor.css')],voiceLabel:c.panelVoiceLabel},init:function(){this.startGroup(c.panelTitle);for(var h in e){var i=c['tag_'+h];this.add(h,'<'+h+'>'+i+'</'+h+'>',i);}},onClick:function(h){a.focus();a.fire('saveSnapshot');e[h].apply(a.document);a.fire('saveSnapshot');},onRender:function(){a.on('selectionChange',function(h){var i=this.getValue(),j=h.data.path;for(var k in e)if(e[k].checkActive(j)){if(k!=i)this.setValue(k,a.lang.format['tag_'+k]);return;}this.setValue('');},this);}});}});CKEDITOR.config.format_tags='p;h1;h2;h3;h4;h5;h6;pre;address;div';CKEDITOR.config.format_p={element:'p'};CKEDITOR.config.format_div={element:'div'};CKEDITOR.config.format_pre={element:'pre'};CKEDITOR.config.format_address={element:'address'};CKEDITOR.config.format_h1={element:'h1'};CKEDITOR.config.format_h2={element:'h2'};CKEDITOR.config.format_h3={element:'h3'};CKEDITOR.config.format_h4={element:'h4'};CKEDITOR.config.format_h5={element:'h5'};CKEDITOR.config.format_h6={element:'h6'};\r
diff --git a/plugins/forms/dialogs/button.js b/plugins/forms/dialogs/button.js
new file mode 100644 (file)
index 0000000..3634251
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('button',function(a){return{title:a.lang.button.title,minWidth:350,minHeight:150,onShow:function(){var d=this;delete d.button;var b=d.getParentEditor().getSelection().getSelectedElement();if(b&&b.getName()=='input'){var c=b.getAttribute('type');if(c=='button'||c=='reset'||c=='submit'){d.button=b;d.setupContent(b);}}},onOk:function(){var b,c=this.button,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('input');}if(d)b.insertElement(c);this.commitContent({element:c});},contents:[{id:'info',label:a.lang.button.title,title:a.lang.button.title,elements:[{id:'_cke_saved_name',type:'text',label:a.lang.common.name,'default':'',setup:function(b){this.setValue(b.getAttribute('_cke_saved_name')||b.getAttribute('name')||'');},commit:function(b){var c=b.element;if(this.getValue())c.setAttribute('_cke_saved_name',this.getValue());else{c.removeAttribute('_cke_saved_name');c.removeAttribute('name');}}},{id:'value',type:'text',label:a.lang.button.text,accessKey:'V','default':'',setup:function(b){this.setValue(b.getAttribute('value')||'');},commit:function(b){var c=b.element;if(this.getValue())c.setAttribute('value',this.getValue());else c.removeAttribute('value');}},{id:'type',type:'select',label:a.lang.button.type,'default':'button',accessKey:'T',items:[[a.lang.button.typeBtn,'button'],[a.lang.button.typeSbm,'submit'],[a.lang.button.typeRst,'reset']],setup:function(b){this.setValue(b.getAttribute('type')||'');},commit:function(b){var c=b.element;if(CKEDITOR.env.ie){var d=c.getAttribute('type'),e=this.getValue();if(e!=d){var f=CKEDITOR.dom.element.createFromHtml('<input type="'+e+'"></input>',a.document);c.copyAttributes(f,{type:1});f.replace(c);a.getSelection().selectElement(f);b.element=f;}}else c.setAttribute('type',this.getValue());}}]}]};});\r
diff --git a/plugins/forms/dialogs/checkbox.js b/plugins/forms/dialogs/checkbox.js
new file mode 100644 (file)
index 0000000..f62ab1f
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('checkbox',function(a){return{title:a.lang.checkboxAndRadio.checkboxTitle,minWidth:350,minHeight:140,onShow:function(){var c=this;delete c.checkbox;var b=c.getParentEditor().getSelection().getSelectedElement();if(b&&b.getAttribute('type')=='checkbox'){c.checkbox=b;c.setupContent(b);}},onOk:function(){var b,c=this.checkbox,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('input');c.setAttribute('type','checkbox');}if(d)b.insertElement(c);this.commitContent({element:c});},contents:[{id:'info',label:a.lang.checkboxAndRadio.checkboxTitle,title:a.lang.checkboxAndRadio.checkboxTitle,startupFocus:'txtName',elements:[{id:'txtName',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.getAttribute('_cke_saved_name')||b.getAttribute('name')||'');},commit:function(b){var c=b.element;if(this.getValue())c.setAttribute('_cke_saved_name',this.getValue());else{c.removeAttribute('_cke_saved_name');c.removeAttribute('name');}}},{id:'txtValue',type:'text',label:a.lang.checkboxAndRadio.value,'default':'',accessKey:'V',setup:function(b){this.setValue(b.getAttribute('value')||'');},commit:function(b){var c=b.element;if(this.getValue())c.setAttribute('value',this.getValue());else c.removeAttribute('value');}},{id:'cmbSelected',type:'checkbox',label:a.lang.checkboxAndRadio.selected,'default':'',accessKey:'S',value:'checked',setup:function(b){this.setValue(b.getAttribute('checked'));},commit:function(b){var c=b.element;if(CKEDITOR.env.ie){var d=!!c.getAttribute('checked'),e=!!this.getValue();if(d!=e){var f=CKEDITOR.dom.element.createFromHtml('<input type="checkbox"'+(e?' checked="checked"':'')+'></input>',a.document);c.copyAttributes(f,{type:1,checked:1});f.replace(c);a.getSelection().selectElement(f);b.element=f;}}else if(this.getValue())c.setAttribute('checked',this.getValue());else c.removeAttribute('checked');}}]}]};});\r
diff --git a/plugins/forms/dialogs/form.js b/plugins/forms/dialogs/form.js
new file mode 100644 (file)
index 0000000..0c86563
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('form',function(a){var b={action:1,id:1,method:1,enctype:1,target:1};return{title:a.lang.form.title,minWidth:350,minHeight:200,onShow:function(){var e=this;delete e.form;var c=e.getParentEditor().getSelection().getStartElement(),d=c&&c.getAscendant('form',true);if(d){e.form=d;e.setupContent(d);}},onOk:function(){var c,d=this.form,e=!d;if(e){c=this.getParentEditor();d=c.document.createElement('form');d.append(c.document.createElement('br'));}if(e)c.insertElement(d);this.commitContent(d);},onLoad:function(){function c(e){this.setValue(e.getAttribute(this.id)||'');};function d(e){var f=this;if(f.getValue())e.setAttribute(f.id,f.getValue());else e.removeAttribute(f.id);};this.foreach(function(e){if(b[e.id]){e.setup=c;e.commit=d;}});},contents:[{id:'info',label:a.lang.form.title,title:a.lang.form.title,elements:[{id:'txtName',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(c){this.setValue(c.getAttribute('_cke_saved_name')||c.getAttribute('name')||'');},commit:function(c){if(this.getValue())c.setAttribute('_cke_saved_name',this.getValue());else{c.removeAttribute('_cke_saved_name');c.removeAttribute('name');}}},{id:'action',type:'text',label:a.lang.form.action,'default':'',accessKey:'A'},{type:'hbox',widths:['45%','55%'],children:[{id:'id',type:'text',label:a.lang.common.id,'default':'',accessKey:'I'},{id:'enctype',type:'select',label:a.lang.form.encoding,style:'width:100%',accessKey:'E','default':'',items:[[''],['text/plain'],['multipart/form-data'],['application/x-www-form-urlencoded']]}]},{type:'hbox',widths:['45%','55%'],children:[{id:'target',type:'select',label:a.lang.form.target,style:'width:100%',accessKey:'M','default':'',items:[[a.lang.form.targetNotSet,''],[a.lang.form.targetNew,'_blank'],[a.lang.form.targetTop,'_top'],[a.lang.form.targetSelf,'_self'],[a.lang.form.targetParent,'_parent']]},{id:'method',type:'select',label:a.lang.form.method,accessKey:'M','default':'GET',items:[['GET','get'],['POST','post']]}]}]}]};});\r
diff --git a/plugins/forms/dialogs/hiddenfield.js b/plugins/forms/dialogs/hiddenfield.js
new file mode 100644 (file)
index 0000000..44e7599
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('hiddenfield',function(a){return{title:a.lang.hidden.title,minWidth:350,minHeight:110,onShow:function(){var c=this;delete c.hiddenField;var b=c.getParentEditor().getSelection().getSelectedElement();if(b&&b.getName()=='input'&&b.getAttribute('type')=='checkbox'){c.hiddenField=b;c.setupContent(b);}},onOk:function(){var b,c=this.hiddenField,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('input');c.setAttribute('type','hidden');}if(d)b.insertElement(c);this.commitContent(c);},contents:[{id:'info',label:a.lang.hidden.title,title:a.lang.hidden.title,elements:[{id:'_cke_saved_name',type:'text',label:a.lang.hidden.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.getAttribute('_cke_saved_name')||b.getAttribute('name')||'');},commit:function(b){if(this.getValue())b.setAttribute('_cke_saved_name',this.getValue());else{b.removeAttribute('_cke_saved_name');b.removeAttribute('name');}}},{id:'value',type:'text',label:a.lang.hidden.value,'default':'',accessKey:'V',setup:function(b){this.setValue(b.getAttribute('value')||'');},commit:function(b){if(this.getValue())b.setAttribute('value',this.getValue());else b.removeAttribute('value');}}]}]};});\r
diff --git a/plugins/forms/dialogs/radio.js b/plugins/forms/dialogs/radio.js
new file mode 100644 (file)
index 0000000..7f606b6
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('radio',function(a){return{title:a.lang.checkboxAndRadio.radioTitle,minWidth:350,minHeight:140,onShow:function(){var c=this;delete c.radioButton;var b=c.getParentEditor().getSelection().getSelectedElement();if(b&&b.getName()=='input'&&b.getAttribute('type')=='radio'){c.radioButton=b;c.setupContent(b);}},onOk:function(){var b,c=this.radioButton,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('input');c.setAttribute('type','radio');}if(d)b.insertElement(c);this.commitContent({element:c});},contents:[{id:'info',label:a.lang.checkboxAndRadio.radioTitle,title:a.lang.checkboxAndRadio.radioTitle,elements:[{id:'name',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.getAttribute('_cke_saved_name')||b.getAttribute('name')||'');},commit:function(b){var c=b.element;if(this.getValue())c.setAttribute('_cke_saved_name',this.getValue());else{c.removeAttribute('_cke_saved_name');c.removeAttribute('name');}}},{id:'value',type:'text',label:a.lang.checkboxAndRadio.value,'default':'',accessKey:'V',setup:function(b){this.setValue(b.getAttribute('value')||'');},commit:function(b){var c=b.element;if(this.getValue())c.setAttribute('value',this.getValue());else c.removeAttribute('value');}},{id:'checked',type:'checkbox',label:a.lang.checkboxAndRadio.selected,'default':'',accessKey:'S',value:'checked',setup:function(b){this.setValue(b.getAttribute('checked'));},commit:function(b){var c=b.element;if(!CKEDITOR.env.ie){if(this.getValue())c.setAttribute('checked','checked');else c.removeAttribute('checked');}else{var d=c.getAttribute('checked'),e=!!this.getValue();if(d!=e){var f=CKEDITOR.dom.element.createFromHtml('<input type="radio"'+(e?' checked="checked"':'')+'></input>',a.document);c.copyAttributes(f,{type:1,checked:1});f.replace(c);a.getSelection().selectElement(f);b.element=f;}}}}]}]};});\r
diff --git a/plugins/forms/dialogs/select.js b/plugins/forms/dialogs/select.js
new file mode 100644 (file)
index 0000000..4e5d34f
--- /dev/null
@@ -0,0 +1,9 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('select',function(a){function b(k,l,m,n,o){k=j(k);var p;if(n)p=n.createElement('OPTION');else p=document.createElement('OPTION');if(k&&p&&p.getName()=='option'){if(CKEDITOR.env.ie){if(!isNaN(parseInt(o,10)))k.$.options.add(p.$,o);else k.$.options.add(p.$);p.$.innerHTML=l.length>0?l:'';p.$.value=m;}else{if(o!==null&&o<k.getChildCount())k.getChild(o<0?0:o).insertBeforeMe(p);else k.append(p);p.setText(l.length>0?l:'');p.setValue(m);}}else return false;return p;};function c(k){k=j(k);var l=g(k);for(var m=k.getChildren().count()-1;m>=0;m--)if(k.getChild(m).$.selected)k.getChild(m).remove();h(k,l);};function d(k,l,m,n){k=j(k);if(l<0)return false;var o=k.getChild(l);o.setText(m);o.setValue(n);return o;};function e(k){k=j(k);while(k.getChild(0)&&k.getChild(0).remove()){}};function f(k,l,m){k=j(k);var n=g(k);if(n<0)return false;var o=n+l;o=o<0?0:o;o=o>=k.getChildCount()?k.getChildCount()-1:o;if(n==o)return false;var p=k.getChild(n),q=p.getText(),r=p.getValue();p.remove();p=b(k,q,r,!m?null:m,o);h(k,o);return p;};function g(k){k=j(k);return k?k.$.selectedIndex:-1;};function h(k,l){k=j(k);if(l<0)return null;var m=k.getChildren().count();k.$.selectedIndex=l>=m?m-1:l;return k;};function i(k){k=j(k);return k?k.getChildren():false;};function j(k){if(k&&k.domId&&k.getInputElement().$)return k.getInputElement();else if(k&&k.$)return k;return false;};return{title:a.lang.select.title,minWidth:CKEDITOR.env.ie?460:395,minHeight:CKEDITOR.env.ie?320:300,onShow:function(){var n=this;delete n.selectBox;n.setupContent('clear');var k=n.getParentEditor().getSelection().getSelectedElement();if(k&&k.getName()=='select'){n.selectBox=k;n.setupContent(k.getName(),k);var l=i(k);for(var m=0;m<l.count();m++)n.setupContent('option',l.getItem(m));}},onOk:function(){var k=this.getParentEditor(),l=this.selectBox,m=!l;if(m)l=k.document.createElement('select');this.commitContent(l);if(m)k.insertElement(l);},contents:[{id:'info',label:a.lang.select.selectInfo,title:a.lang.select.selectInfo,accessKey:'',elements:[{id:'txtName',type:'text',widths:['25%','75%'],labelLayout:'horizontal',label:a.lang.common.name,'default':'',accessKey:'N',align:'center',style:'width:350px',setup:function(k,l){if(k=='clear')this.setValue('');else if(k=='select')this.setValue(l.getAttribute('_cke_saved_name')||l.getAttribute('name')||'');},commit:function(k){if(this.getValue())k.setAttribute('_cke_saved_name',this.getValue());else{k.removeAttribute('_cke_saved_name');k.removeAttribute('name');}}},{id:'txtValue',type:'text',widths:['25%','75%'],labelLayout:'horizontal',label:a.lang.select.value,style:'width:350px','default':'',className:'cke_disabled',onLoad:function(){this.getInputElement().setAttribute('readOnly',true);\r
+},setup:function(k,l){if(k=='clear')this.setValue('');else if(k=='option'&&l.getAttribute('selected'))this.setValue(l.$.value);}},{type:'hbox',widths:['175px','170px'],align:'center',children:[{id:'txtSize',type:'text',align:'center',labelLayout:'horizontal',label:a.lang.select.size,'default':'',accessKey:'S',style:'width:175px',validate:function(){var k=CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed);return this.getValue()===''||k.apply(this);},setup:function(k,l){if(k=='select')this.setValue(l.getAttribute('size')||'');},commit:function(k){if(this.getValue())k.setAttribute('size',this.getValue());else k.removeAttribute('size');}},{type:'html',html:'<span>'+CKEDITOR.tools.htmlEncode(a.lang.select.lines)+'</span>'}]},{type:'html',html:'<span>'+CKEDITOR.tools.htmlEncode(a.lang.select.opAvail)+'</span>'},{type:'hbox',widths:['115px','115px','100px'],align:'top',children:[{type:'vbox',children:[{id:'txtOptName',type:'text',label:a.lang.select.opText,style:'width:115px',setup:function(k,l){if(k=='clear')this.setValue('');}},{type:'select',id:'cmbName',label:'',title:'',size:5,style:'width:115px;height:75px',items:[],onChange:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbValue'),m=k.getContentElement('info','txtOptName'),n=k.getContentElement('info','txtOptValue'),o=g(this);h(l,o);m.setValue(this.getValue());n.setValue(l.getValue());},setup:function(k,l){if(k=='clear')e(this);else if(k=='option')b(this,l.getText(),l.getText(),this.getDialog().getParentEditor().document);},commit:function(k){var l=this.getDialog(),m=i(this),n=i(l.getContentElement('info','cmbValue')),o=l.getContentElement('info','txtValue').getValue();e(k);for(var p=0;p<m.count();p++){var q=b(k,m.getItem(p).getValue(),n.getItem(p).getValue(),l.getParentEditor().document);if(n.getItem(p).getValue()==o){q.setAttribute('selected','selected');q.selected=true;}}}}]},{type:'vbox',children:[{id:'txtOptValue',type:'text',label:a.lang.select.opValue,style:'width:115px',setup:function(k,l){if(k=='clear')this.setValue('');}},{type:'select',id:'cmbValue',label:'',size:5,style:'width:115px;height:75px',items:[],onChange:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','txtOptName'),n=k.getContentElement('info','txtOptValue'),o=g(this);h(l,o);m.setValue(l.getValue());n.setValue(this.getValue());},setup:function(k,l){var n=this;if(k=='clear')e(n);else if(k=='option'){var m=l.getValue();b(n,m,m,n.getDialog().getParentEditor().document);\r
+if(l.getAttribute('selected')=='selected')n.getDialog().getContentElement('info','txtValue').setValue(m);}}}]},{type:'vbox',padding:5,children:[{type:'button',style:'',label:a.lang.select.btnAdd,title:a.lang.select.btnAdd,style:'width:100%;',onClick:function(){var k=this.getDialog(),l=k.getParentEditor(),m=k.getContentElement('info','txtOptName'),n=k.getContentElement('info','txtOptValue'),o=k.getContentElement('info','cmbName'),p=k.getContentElement('info','cmbValue');b(o,m.getValue(),m.getValue(),k.getParentEditor().document);b(p,n.getValue(),n.getValue(),k.getParentEditor().document);m.setValue('');n.setValue('');}},{type:'button',label:a.lang.select.btnModify,title:a.lang.select.btnModify,style:'width:100%;',onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','txtOptName'),m=k.getContentElement('info','txtOptValue'),n=k.getContentElement('info','cmbName'),o=k.getContentElement('info','cmbValue'),p=g(n);if(p>=0){d(n,p,l.getValue(),l.getValue());d(o,p,m.getValue(),m.getValue());}}},{type:'button',style:'width:100%;',label:a.lang.select.btnUp,title:a.lang.select.btnUp,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','cmbValue');f(l,-1,k.getParentEditor().document);f(m,-1,k.getParentEditor().document);}},{type:'button',style:'width:100%;',label:a.lang.select.btnDown,title:a.lang.select.btnDown,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','cmbValue');f(l,1,k.getParentEditor().document);f(m,1,k.getParentEditor().document);}}]}]},{type:'hbox',widths:['40%','20%','40%'],children:[{type:'button',label:a.lang.select.btnSetValue,title:a.lang.select.btnSetValue,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbValue'),m=k.getContentElement('info','txtValue');m.setValue(l.getValue());}},{type:'button',label:a.lang.select.btnDelete,title:a.lang.select.btnDelete,onClick:function(){var k=this.getDialog(),l=k.getContentElement('info','cmbName'),m=k.getContentElement('info','cmbValue'),n=k.getContentElement('info','txtOptName'),o=k.getContentElement('info','txtOptValue');c(l);c(m);n.setValue('');o.setValue('');}},{id:'chkMulti',type:'checkbox',label:a.lang.select.chkMulti,'default':'',accessKey:'M',value:'checked',setup:function(k,l){if(k=='select')this.setValue(l.getAttribute('multiple'));},commit:function(k){if(this.getValue())k.setAttribute('multiple',this.getValue());else k.removeAttribute('multiple');\r
+}}]}]}]};});\r
diff --git a/plugins/forms/dialogs/textarea.js b/plugins/forms/dialogs/textarea.js
new file mode 100644 (file)
index 0000000..c1052e3
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('textarea',function(a){return{title:a.lang.textarea.title,minWidth:350,minHeight:150,onShow:function(){var c=this;delete c.textarea;var b=c.getParentEditor().getSelection().getSelectedElement();if(b&&b.getName()=='textarea'){c.textarea=b;c.setupContent(b);}},onOk:function(){var b,c=this.textarea,d=!c;if(d){b=this.getParentEditor();c=b.document.createElement('textarea');}this.commitContent(c);if(d)b.insertElement(c);},contents:[{id:'info',label:a.lang.textarea.title,title:a.lang.textarea.title,elements:[{id:'_cke_saved_name',type:'text',label:a.lang.common.name,'default':'',accessKey:'N',setup:function(b){this.setValue(b.getAttribute('_cke_saved_name')||b.getAttribute('name')||'');},commit:function(b){if(this.getValue())b.setAttribute('_cke_saved_name',this.getValue());else{b.removeAttribute('_cke_saved_name');b.removeAttribute('name');}}},{id:'cols',type:'text',label:a.lang.textarea.cols,'default':'',accessKey:'C',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed),setup:function(b){var c=b.hasAttribute('cols')&&b.getAttribute('cols');this.setValue(c||'');},commit:function(b){if(this.getValue())b.setAttribute('cols',this.getValue());else b.removeAttribute('cols');}},{id:'rows',type:'text',label:a.lang.textarea.rows,'default':'',accessKey:'R',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed),setup:function(b){var c=b.hasAttribute('rows')&&b.getAttribute('rows');this.setValue(c||'');},commit:function(b){if(this.getValue())b.setAttribute('rows',this.getValue());else b.removeAttribute('rows');}}]}]};});\r
diff --git a/plugins/forms/dialogs/textfield.js b/plugins/forms/dialogs/textfield.js
new file mode 100644 (file)
index 0000000..b6b36f8
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('textfield',function(a){var b={value:1,size:1,maxLength:1},c={text:1,password:1};return{title:a.lang.textfield.title,minWidth:350,minHeight:150,onShow:function(){var e=this;delete e.textField;var d=e.getParentEditor().getSelection().getSelectedElement();if(d&&d.getName()=='input'&&(c[d.getAttribute('type')]||!d.getAttribute('type'))){e.textField=d;e.setupContent(d);}},onOk:function(){var d,e=this.textField,f=!e;if(f){d=this.getParentEditor();e=d.document.createElement('input');e.setAttribute('type','text');}if(f)d.insertElement(e);this.commitContent({element:e});},onLoad:function(){var d=function(f){var g=f.hasAttribute(this.id)&&f.getAttribute(this.id);this.setValue(g||'');},e=function(f){var g=f.element,h=this.getValue();if(h)g.setAttribute(this.id,h);else g.removeAttribute(this.id);};this.foreach(function(f){if(b[f.id]){f.setup=d;f.commit=e;}});},contents:[{id:'info',label:a.lang.textfield.title,title:a.lang.textfield.title,elements:[{type:'hbox',widths:['50%','50%'],children:[{id:'_cke_saved_name',type:'text',label:a.lang.textfield.name,'default':'',accessKey:'N',setup:function(d){this.setValue(d.getAttribute('_cke_saved_name')||d.getAttribute('name')||'');},commit:function(d){var e=d.element;if(this.getValue())e.setAttribute('_cke_saved_name',this.getValue());else{e.removeAttribute('_cke_saved_name');e.removeAttribute('name');}}},{id:'value',type:'text',label:a.lang.textfield.value,'default':'',accessKey:'V'}]},{type:'hbox',widths:['50%','50%'],children:[{id:'size',type:'text',label:a.lang.textfield.charWidth,'default':'',accessKey:'C',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed)},{id:'maxLength',type:'text',label:a.lang.textfield.maxChars,'default':'',accessKey:'M',style:'width:50px',validate:CKEDITOR.dialog.validate.integer(a.lang.common.validateNumberFailed)}]},{id:'type',type:'select',label:a.lang.textfield.type,'default':'text',accessKey:'M',items:[[a.lang.textfield.typeText,'text'],[a.lang.textfield.typePass,'password']],setup:function(d){this.setValue(d.getAttribute('type'));},commit:function(d){var e=d.element;if(CKEDITOR.env.ie){var f=e.getAttribute('type'),g=this.getValue();if(f!=g){var h=CKEDITOR.dom.element.createFromHtml('<input type="'+g+'"></input>',a.document);e.copyAttributes(h,{type:1});h.replace(e);a.getSelection().selectElement(h);d.element=e;}}else e.setAttribute('type',this.getValue());}}]}]};});\r
diff --git a/plugins/forms/plugin.js b/plugins/forms/plugin.js
new file mode 100644 (file)
index 0000000..27074a5
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('forms',{init:function(a){var b=a.lang;a.addCss('form{border: 1px dotted #FF0000;padding: 2px;}');var c=function(e,f,g){a.addCommand(f,new CKEDITOR.dialogCommand(f));a.ui.addButton(e,{label:b.common[e.charAt(0).toLowerCase()+e.slice(1)],command:f});CKEDITOR.dialog.add(f,g);},d=this.path+'dialogs/';c('Form','form',d+'form.js');c('Checkbox','checkbox',d+'checkbox.js');c('Radio','radio',d+'radio.js');c('TextField','textfield',d+'textfield.js');c('Textarea','textarea',d+'textarea.js');c('Select','select',d+'select.js');c('Button','button',d+'button.js');c('ImageButton','imagebutton',CKEDITOR.plugins.getPath('image')+'dialogs/image.js');c('HiddenField','hiddenfield',d+'hiddenfield.js');if(a.addMenuItems)a.addMenuItems({form:{label:b.form.menu,command:'form',group:'form'},checkbox:{label:b.checkboxAndRadio.checkboxTitle,command:'checkbox',group:'checkbox'},radio:{label:b.checkboxAndRadio.radioTitle,command:'radio',group:'radio'},textfield:{label:b.textfield.title,command:'textfield',group:'textfield'},hiddenfield:{label:b.hidden.title,command:'hiddenfield',group:'hiddenfield'},imagebutton:{label:b.image.titleButton,command:'imagebutton',group:'imagebutton'},button:{label:b.button.title,command:'button',group:'button'},select:{label:b.select.title,command:'select',group:'select'},textarea:{label:b.textarea.title,command:'textarea',group:'textarea'}});if(a.contextMenu){a.contextMenu.addListener(function(e){if(e&&e.hasAscendant('form'))return{form:CKEDITOR.TRISTATE_OFF};});a.contextMenu.addListener(function(e){if(e){var f=e.getName();if(f=='select')return{select:CKEDITOR.TRISTATE_OFF};if(f=='textarea')return{textarea:CKEDITOR.TRISTATE_OFF};if(f=='input'){var g=e.getAttribute('type');if(g=='text'||g=='password')return{textfield:CKEDITOR.TRISTATE_OFF};if(g=='button'||g=='submit'||g=='reset')return{button:CKEDITOR.TRISTATE_OFF};if(g=='checkbox')return{checkbox:CKEDITOR.TRISTATE_OFF};if(g=='radio')return{radio:CKEDITOR.TRISTATE_OFF};if(g=='image')return{imagebutton:CKEDITOR.TRISTATE_OFF};}if(f=='img'&&e.getAttribute('_cke_real_element_type')=='hiddenfield')return{hiddenfield:CKEDITOR.TRISTATE_OFF};}});}},requires:['image']});if(CKEDITOR.env.ie)CKEDITOR.dom.element.prototype.hasAttribute=function(a){var d=this;var b=d.$.attributes.getNamedItem(a);if(d.getName()=='input')switch(a){case 'class':return d.$.className.length>0;case 'checked':return!!d.$.checked;case 'value':var c=d.getAttribute('type');if(c=='checkbox'||c=='radio')return d.$.value!='on';break;\r
+default:}return!!(b&&b.specified);};\r
diff --git a/plugins/horizontalrule/plugin.js b/plugins/horizontalrule/plugin.js
new file mode 100644 (file)
index 0000000..6f94a2d
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a={exec:function(c){c.insertElement(c.document.createElement('hr'));}},b='horizontalrule';CKEDITOR.plugins.add(b,{init:function(c){c.addCommand(b,a);c.ui.addButton('HorizontalRule',{label:c.lang.horizontalrule,command:b});}});})();\r
diff --git a/plugins/htmldataprocessor/plugin.js b/plugins/htmldataprocessor/plugin.js
new file mode 100644 (file)
index 0000000..942c155
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,b='{cke_protected}';function c(A,B){var C=A.children,D=C[C.length-1];if(D){if((B||!CKEDITOR.env.ie)&&(D.type==CKEDITOR.NODE_ELEMENT&&D.name=='br'))C.pop();if(D.type==CKEDITOR.NODE_TEXT&&a.test(D.value))C.pop();}};function d(A){if(A.children.length<1)return true;var B=A.children[A.children.length-1];return B.type==CKEDITOR.NODE_ELEMENT&&B.name=='br';};function e(A){c(A,true);if(d(A))if(CKEDITOR.env.ie)A.add(new CKEDITOR.htmlParser.text('\xa0'));else A.add(new CKEDITOR.htmlParser.element('br',{}));};function f(A){c(A);if(d(A))A.add(new CKEDITOR.htmlParser.text('\xa0'));};var g=CKEDITOR.dtd,h=CKEDITOR.tools.extend({},g.$block,g.$listItem,g.$tableContent);for(var i in h)if(!('br' in g[i]))delete h[i];delete h.pre;var j={attributeNames:[[/^on/,'_cke_pa_on']]},k={elements:{}};for(i in h)k.elements[i]=e;var l={elementNames:[[/^cke:/,''],[/^\?xml:namespace$/,'']],attributeNames:[[/^_cke_(saved|pa)_/,''],[/^_cke.*/,'']],elements:{$:function(A){var B=A.attributes;if(B){var C=['name','href','src'],D;for(var E=0;E<C.length;E++){D='_cke_saved_'+C[E];D in B&&delete B[C[E]];}}},embed:function(A){var B=A.parent;if(B&&B.name=='object'){var C=B.attributes.width,D=B.attributes.height;C&&(A.attributes.width=C);D&&(A.attributes.height=D);}},param:function(A){A.children=[];A.isEmpty=true;return A;},a:function(A){if(!(A.children.length||A.attributes.name||A.attributes._cke_saved_name))return false;}},attributes:{'class':function(A,B){return CKEDITOR.tools.ltrim(A.replace(/(?:^|\s+)cke_[^\s]*/g,''))||false;}},comment:function(A){if(A.substr(0,b.length)==b)return new CKEDITOR.htmlParser.cdata(decodeURIComponent(A.substr(b.length)));return A;}},m={elements:{}};for(i in h)m.elements[i]=f;if(CKEDITOR.env.ie)l.attributes.style=function(A,B){return A.toLowerCase();};var n=/<(?:a|area|img|input).*?\s((?:href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))/gi;function o(A){return A.replace(n,'$& _cke_saved_$1');};var p=/<(style)(?=[ >])[^>]*>[^<]*<\/\1>/gi,q=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,r=/(<\/?)((?:object|embed|param).*?>)/gi,s=/<cke:param(.*?)\/>/gi;function t(A){return '<cke:encoded>'+encodeURIComponent(A)+'</cke:encoded>';};function u(A){return A.replace(p,t);};function v(A){return A.replace(r,'$1cke:$2');};function w(A){return A.replace(s,'<cke:param$1></cke:param>');};function x(A,B){return decodeURIComponent(B);};function y(A){return A.replace(q,x);};function z(A,B){var C=[],D=/<\!--\{cke_temp\}(\d*?)-->/g,E=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi].concat(B);\r
+for(var F=0;F<E.length;F++)A=A.replace(E[F],function(G){G=G.replace(D,function(H,I){return C[I];});return '<!--{cke_temp}'+(C.push(G)-1)+'-->';});A=A.replace(D,function(G,H){return '<!--'+b+encodeURIComponent(C[H]).replace(/--/g,'%2D%2D')+'-->';});return A;};CKEDITOR.plugins.add('htmldataprocessor',{requires:['htmlwriter'],init:function(A){var B=A.dataProcessor=new CKEDITOR.htmlDataProcessor(A);B.writer.forceSimpleAmpersand=A.config.forceSimpleAmpersand;B.dataFilter.addRules(j);B.dataFilter.addRules(k);B.htmlFilter.addRules(l);B.htmlFilter.addRules(m);}});CKEDITOR.htmlDataProcessor=function(A){var B=this;B.editor=A;B.writer=new CKEDITOR.htmlWriter();B.dataFilter=new CKEDITOR.htmlParser.filter();B.htmlFilter=new CKEDITOR.htmlParser.filter();};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(A,B){A=z(A,this.editor.config.protectedSource);A=o(A);if(CKEDITOR.env.ie)A=u(A);A=v(A);A=w(A);var C=document.createElement('div');C.innerHTML='a'+A;A=C.innerHTML.substr(1);if(CKEDITOR.env.ie)A=y(A);var D=CKEDITOR.htmlParser.fragment.fromHtml(A,B),E=new CKEDITOR.htmlParser.basicWriter();D.writeHtml(E,this.dataFilter);return E.getHtml(true);},toDataFormat:function(A,B){var C=this.writer,D=CKEDITOR.htmlParser.fragment.fromHtml(A,B);C.reset();D.writeHtml(C,this.htmlFilter);return C.getHtml(true);}};})();CKEDITOR.config.forceSimpleAmpersand=false;\r
diff --git a/plugins/htmlwriter/plugin.js b/plugins/htmlwriter/plugin.js
new file mode 100644 (file)
index 0000000..4608d37
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('htmlwriter');CKEDITOR.htmlWriter=CKEDITOR.tools.createClass({base:CKEDITOR.htmlParser.basicWriter,$:function(){var c=this;c.base();c.indentationChars='\t';c.selfClosingEnd=' />';c.lineBreakChars='\n';c.forceSimpleAmpersand=false;c.sortAttributes=true;c._.indent=false;c._.indentation='';c._.rules={};var a=CKEDITOR.dtd;for(var b in CKEDITOR.tools.extend({},a.$block,a.$listItem,a.$tableContent))c.setRules(b,{indent:true,breakBeforeOpen:true,breakAfterOpen:true,breakBeforeClose:!a[b]['#'],breakAfterClose:true});c.setRules('br',{breakAfterOpen:true});c.setRules('pre',{indent:false});},proto:{openTag:function(a,b){var d=this;var c=d._.rules[a];if(d._.indent)d.indentation();else if(c&&c.breakBeforeOpen){d.lineBreak();d.indentation();}d._.output.push('<',a);},openTagClose:function(a,b){var d=this;var c=d._.rules[a];if(b)d._.output.push(d.selfClosingEnd);else{d._.output.push('>');if(c&&c.indent)d._.indentation+=d.indentationChars;}if(c&&c.breakAfterOpen)d.lineBreak();},attribute:function(a,b){if(this.forceSimpleAmpersand)b=b.replace(/&amp;/,'&');this._.output.push(' ',a,'="',b,'"');},closeTag:function(a){var c=this;var b=c._.rules[a];if(b&&b.indent)c._.indentation=c._.indentation.substr(c.indentationChars.length);if(c._.indent)c.indentation();else if(b&&b.breakBeforeClose){c.lineBreak();c.indentation();}c._.output.push('</',a,'>');if(b&&b.breakAfterClose)c.lineBreak();},text:function(a){if(this._.indent){this.indentation();a=CKEDITOR.tools.ltrim(a);}this._.output.push(a);},comment:function(a){if(this._.indent)this.indentation();this._.output.push('<!--',a,'-->');},lineBreak:function(){var a=this;if(a._.output.length>0)a._.output.push(a.lineBreakChars);a._.indent=true;},indentation:function(){this._.output.push(this._.indentation);this._.indent=false;},setRules:function(a,b){this._.rules[a]=b;}}});\r
diff --git a/plugins/iframedialog/plugin.js b/plugins/iframedialog/plugin.js
new file mode 100644 (file)
index 0000000..c841e25
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('iframedialog',{requires:['dialog'],onLoad:function(){CKEDITOR.dialog.addIframe=function(a,b,c,d,e,f){var g={type:'iframe',src:c,width:'100%',height:'100%'};if(typeof f=='function')g.onContentLoad=f;var h={title:b,minWidth:d,minHeight:e,contents:[{id:'iframe',label:b,expand:true,elements:[g]}]};return this.add(a,function(){return h;});};(function(){var a=function(b,c,d){if(arguments.length<3)return;var e=this._||(this._={}),f=c.onContentLoad&&CKEDITOR.tools.bind(c.onContentLoad,this),g=CKEDITOR.tools.cssLength(c.width),h=CKEDITOR.tools.cssLength(c.height);e.frameId=CKEDITOR.tools.getNextNumber()+'_iframe';b.on('load',function(){var k=CKEDITOR.document.getById(e.frameId),l=k.getParent();l.setStyles({width:g,height:h});});var i={src:'%2',id:e.frameId,frameborder:0,allowtransparency:true},j=[];if(typeof c.onContentLoad=='function')i.onload='CKEDITOR.tools.callFunction(%1);';CKEDITOR.ui.dialog.uiElement.call(this,b,c,j,'iframe',{width:g,height:h},i,'');d.push('<div style="width:'+g+';height:'+h+';" id="'+this.domId+'"></div>');j=j.join('');b.on('show',function(){var k=CKEDITOR.document.getById(e.frameId),l=k.getParent(),m=CKEDITOR.tools.addFunction(f),n=j.replace('%1',m).replace('%2',CKEDITOR.tools.htmlEncode(c.src));l.setHtml(n);});};a.prototype=new CKEDITOR.ui.dialog.uiElement();CKEDITOR.dialog.addUIElement('iframe',{build:function(b,c,d){return new a(b,c,d);}});})();}});\r
diff --git a/plugins/image/dialogs/image.js b/plugins/image/dialogs/image.js
new file mode 100644 (file)
index 0000000..8cf2cb8
--- /dev/null
@@ -0,0 +1,12 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a=1,b=2,c=4,d=8,e=/^\s*(\d+)((px)|\%)?\s*$/i,f=/(^\s*(\d+)((px)|\%)?\s*$)|^$/i,g=function(){var m=this.getValue(),n=this.getDialog(),o=m.match(e);if(o){if(o[2]=='%')i(n,false);m=o[1];}if(n.lockRatio){var p=n.originalElement;if(p.getCustomData('isReady')=='true')if(this.id=='txtHeight'){if(m&&m!='0')m=Math.round(p.$.width*(m/p.$.height));if(!isNaN(m))n.setValueOf('info','txtWidth',m);}else{if(m&&m!='0')m=Math.round(p.$.height*(m/p.$.width));if(!isNaN(m))n.setValueOf('info','txtHeight',m);}}h(n);},h=function(m){if(!m.originalElement||!m.preview)return 1;m.commitContent(c,m.preview);return 0;},i=function(m,n){var o=m.originalElement,p=CKEDITOR.document.getById('btnLockSizes');if(o.getCustomData('isReady')=='true'){if(n=='check'){var q=m.getValueOf('info','txtWidth'),r=m.getValueOf('info','txtHeight'),s=o.$.width*1000/o.$.height,t=q*1000/r;m.lockRatio=false;if(!q&&!r)m.lockRatio=true;else if(!isNaN(s)&&!isNaN(t))if(Math.round(s)==Math.round(t))m.lockRatio=true;}else if(n!=undefined)m.lockRatio=n;else m.lockRatio=!m.lockRatio;}else if(n!='check')m.lockRatio=false;if(m.lockRatio)p.removeClass('cke_btn_unlocked');else p.addClass('cke_btn_unlocked');return m.lockRatio;},j=function(m){var n=m.originalElement;if(n.getCustomData('isReady')=='true'){m.setValueOf('info','txtWidth',n.$.width);m.setValueOf('info','txtHeight',n.$.height);}h(m);},k=function(m,n){if(m!=a)return;function o(t,u){var v=t.match(e);if(v){if(v[2]=='%'){v[1]+='%';i(p,false);}return v[1];}return u;};var p=this.getDialog(),q='',r=this.id=='txtWidth'?'width':'height',s=n.getAttribute(r);if(s)q=o(s,q);q=o(n.$.style[r],q);this.setValue(q);},l=function(m,n){var o=function(){var r=this;var q=r.originalElement;q.setCustomData('isReady','true');q.removeListener('load',o);q.removeListener('error',p);q.removeListener('abort',p);CKEDITOR.document.getById('ImagePreviewLoader').setStyle('display','none');if(!r.dontResetSize)j(r);if(r.firstLoad)i(r,'check');r.firstLoad=false;r.dontResetSize=false;},p=function(){var s=this;var q=s.originalElement;q.removeListener('load',o);q.removeListener('error',p);q.removeListener('abort',p);var r=CKEDITOR.getUrl(m.skinPath+'images/noimage.png');if(s.preview)s.preview.setAttribute('src',r);CKEDITOR.document.getById('ImagePreviewLoader').setStyle('display','none');i(s,false);};return{title:n=='image'?m.lang.image.title:m.lang.image.titleButton,minWidth:420,minHeight:310,onShow:function(){var w=this;w.imageElement=false;w.linkElement=false;w.imageEditMode=false;w.linkEditMode=false;\r
+w.lockRatio=true;w.dontResetSize=false;w.firstLoad=true;w.addLink=false;CKEDITOR.document.getById('ImagePreviewLoader').setStyle('display','none');w.preview=CKEDITOR.document.getById('previewImage');var q=w.getParentEditor(),r=w.getParentEditor().getSelection(),s=r.getSelectedElement(),t=s&&s.getAscendant('a');w.originalElement=q.document.createElement('img');w.originalElement.setAttribute('alt','');w.originalElement.setCustomData('isReady','false');if(t){w.linkElement=t;w.linkEditMode=true;var u=t.getChildren();if(u.count()==1){var v=u.getItem(0).getName();if(v=='img'||v=='input'){w.imageElement=u.getItem(0);if(w.imageElement.getName()=='img')w.imageEditMode='img';else if(w.imageElement.getName()=='input')w.imageEditMode='input';}}if(n=='image')w.setupContent(b,t);}if(s&&s.getName()=='img'&&!s.getAttribute('_cke_protected_html'))w.imageEditMode='img';else if(s&&s.getName()=='input'&&s.getAttribute('type')&&s.getAttribute('type')=='image')w.imageEditMode='input';if(w.imageEditMode||w.imageElement){if(!w.imageElement)w.imageElement=s;w.setupContent(a,w.imageElement);i(w,true);}},onOk:function(){var r=this;if(r.imageEditMode){var q=r.imageEditMode;if(n=='image'&&q=='input'&&confirm(m.lang.image.button2Img)){q='img';r.imageElement=m.document.createElement('img');r.imageElement.setAttribute('alt','');m.insertElement(r.imageElement);}else if(n!='image'&&q=='img'&&confirm(m.lang.image.img2Button)){q='input';r.imageElement=m.document.createElement('input');r.imageElement.setAttributes({type:'image',alt:''});m.insertElement(r.imageElement);}}else{if(n=='image')r.imageElement=m.document.createElement('img');else{r.imageElement=m.document.createElement('input');r.imageElement.setAttribute('type','image');}r.imageElement.setAttribute('alt','');}if(!r.linkEditMode)r.linkElement=m.document.createElement('a');r.commitContent(a,r.imageElement);r.commitContent(b,r.linkElement);if(!r.imageEditMode){if(r.addLink){if(!r.linkEditMode){m.insertElement(r.linkElement);r.linkElement.append(r.imageElement,false);}else m.insertElement(r.imageElement);}else m.insertElement(r.imageElement);}else if(!r.linkEditMode&&r.addLink){m.insertElement(r.linkElement);r.imageElement.appendTo(r.linkElement);}else if(r.linkEditMode&&!r.addLink){m.getSelection().selectElement(r.linkElement);m.insertElement(r.imageElement);}},onLoad:function(){var r=this;if(n!='image')r.hidePage('Link');var q=r._.element.getDocument();r.addFocusable(q.getById('btnResetSize'),5);r.addFocusable(q.getById('btnLockSizes'),5);\r
+},onHide:function(){var q=this;if(q.preview)q.commitContent(d,q.preview);if(q.originalElement){q.originalElement.removeListener('load',o);q.originalElement.removeListener('error',p);q.originalElement.removeListener('abort',p);q.originalElement.remove();q.originalElement=false;}},contents:[{id:'info',label:m.lang.image.infoTab,accessKey:'I',elements:[{type:'vbox',padding:0,children:[{type:'html',html:'<span>'+CKEDITOR.tools.htmlEncode(m.lang.image.url)+'</span>'},{type:'hbox',widths:['280px','110px'],align:'right',children:[{id:'txtUrl',type:'text',label:'',onChange:function(){var q=this.getDialog(),r=this.getValue();if(r.length>0){q=this.getDialog();var s=q.originalElement;s.setCustomData('isReady','false');var t=CKEDITOR.document.getById('ImagePreviewLoader');if(t)t.setStyle('display','');s.on('load',o,q);s.on('error',p,q);s.on('abort',p,q);s.setAttribute('src',r);q.preview.setAttribute('src',r);h(q);}},setup:function(q,r){if(q==a){var s=r.getAttribute('_cke_saved_src')||r.getAttribute('src'),t=this;this.getDialog().dontResetSize=true;setTimeout(function(){t.setValue(s);t.focus();},0);}},commit:function(q,r){var s=this;if(q==a&&(s.getValue()||s.isChanged())){r.setAttribute('_cke_saved_src',decodeURI(s.getValue()));r.setAttribute('src',decodeURI(s.getValue()));}else if(q==d){r.setAttribute('src','');r.removeAttribute('src');}}},{type:'button',id:'browse',align:'center',label:m.lang.common.browseServer,hidden:true,filebrowser:'info:txtUrl'}]}]},{id:'txtAlt',type:'text',label:m.lang.image.alt,accessKey:'A','default':'',onChange:function(){h(this.getDialog());},setup:function(q,r){if(q==a)this.setValue(r.getAttribute('alt'));},commit:function(q,r){var s=this;if(q==a){if(s.getValue()||s.isChanged())r.setAttribute('alt',s.getValue());}else if(q==c)r.setAttribute('alt',s.getValue());else if(q==d)r.removeAttribute('alt');}},{type:'hbox',widths:['140px','240px'],children:[{type:'vbox',padding:10,children:[{type:'hbox',widths:['70%','30%'],children:[{type:'vbox',padding:1,children:[{type:'text',width:'40px',id:'txtWidth',labelLayout:'horizontal',label:m.lang.image.width,onKeyUp:g,validate:function(){var q=this.getValue().match(f);if(!q)alert(m.lang.common.validateNumberFailed);return!!q;},setup:k,commit:function(q,r){var v=this;if(q==a){var s=v.getValue();if(s)r.setAttribute('width',s);else if(!s&&v.isChanged())r.removeAttribute('width');}else if(q==c){s=v.getValue();var t=s.match(e);if(!t){var u=v.getDialog().originalElement;if(u.getCustomData('isReady')=='true')r.setStyle('width',u.$.width+'px');\r
+}else r.setStyle('width',s+'px');}else if(q==d){r.setStyle('width','0px');r.removeAttribute('width');r.removeStyle('width');}}},{type:'text',id:'txtHeight',width:'40px',labelLayout:'horizontal',label:m.lang.image.height,onKeyUp:g,validate:function(){var q=this.getValue().match(f);if(!q)alert(m.lang.common.validateNumberFailed);return!!q;},setup:k,commit:function(q,r){var v=this;if(q==a){var s=v.getValue();if(s)r.setAttribute('height',s);else if(!s&&v.isChanged())r.removeAttribute('height');}else if(q==c){s=v.getValue();var t=s.match(e);if(!t){var u=v.getDialog().originalElement;if(u.getCustomData('isReady')=='true')r.setStyle('height',u.$.height+'px');}else r.setStyle('height',s+'px');}else if(q==d){r.setStyle('height','0px');r.removeAttribute('height');r.removeStyle('height');}}}]},{type:'html',style:'margin-top:10px;width:40px;height:40px;',onLoad:function(){var q=CKEDITOR.document.getById('btnResetSize'),r=CKEDITOR.document.getById('btnLockSizes');if(q){q.on('click',function(){j(this);},this.getDialog());q.on('mouseover',function(){this.addClass('cke_btn_over');},q);q.on('mouseout',function(){this.removeClass('cke_btn_over');},q);}if(r){r.on('click',function(){var w=this;var s=i(w),t=w.originalElement,u=w.getValueOf('info','txtWidth');if(t.getCustomData('isReady')=='true'&&u){var v=t.$.height/t.$.width*u;if(!isNaN(v)){w.setValueOf('info','txtHeight',Math.round(v));h(w);}}},this.getDialog());r.on('mouseover',function(){this.addClass('cke_btn_over');},r);r.on('mouseout',function(){this.removeClass('cke_btn_over');},r);}},html:'<div><a href="javascript:void(0)" tabindex="-1" title="'+m.lang.image.lockRatio+'" class="cke_btn_locked" id="btnLockSizes"></a>'+'<a href="javascript:void(0)" tabindex="-1" title="'+m.lang.image.resetSize+'" class="cke_btn_reset" id="btnResetSize"></a>'+'</div>'}]},{type:'vbox',padding:1,children:[{type:'text',id:'txtBorder',width:'60px',labelLayout:'horizontal',label:m.lang.image.border,'default':'',onKeyUp:function(){h(this.getDialog());},validate:function(){var q=CKEDITOR.dialog.validate.integer(m.lang.common.validateNumberFailed);return q.apply(this);},setup:function(q,r){if(q==a)this.setValue(r.getAttribute('border'));},commit:function(q,r){var t=this;if(q==a){if(t.getValue()||t.isChanged())r.setAttribute('border',t.getValue());}else if(q==c){var s=parseInt(t.getValue(),10);s=isNaN(s)?0:s;r.setAttribute('border',s);r.setStyle('border',s+'px solid black');}else if(q==d){r.removeAttribute('border');r.removeStyle('border');}}},{type:'text',id:'txtHSpace',width:'60px',labelLayout:'horizontal',label:m.lang.image.hSpace,'default':'',onKeyUp:function(){h(this.getDialog());\r
+},validate:function(){var q=CKEDITOR.dialog.validate.integer(m.lang.common.validateNumberFailed);return q.apply(this);},setup:function(q,r){if(q==a){var s=r.getAttribute('hspace');if(s!=-1)this.setValue(s);}},commit:function(q,r){var t=this;if(q==a){if(t.getValue()||t.isChanged())r.setAttribute('hspace',t.getValue());}else if(q==c){var s=parseInt(t.getValue(),10);s=isNaN(s)?0:s;r.setAttribute('hspace',s);r.setStyle('margin-left',s+'px');r.setStyle('margin-right',s+'px');}else if(q==d){r.removeAttribute('hspace');r.removeStyle('margin-left');r.removeStyle('margin-right');}}},{type:'text',id:'txtVSpace',width:'60px',labelLayout:'horizontal',label:m.lang.image.vSpace,'default':'',onKeyUp:function(){h(this.getDialog());},validate:function(){var q=CKEDITOR.dialog.validate.integer(m.lang.common.validateNumberFailed);return q.apply(this);},setup:function(q,r){if(q==a)this.setValue(r.getAttribute('vspace'));},commit:function(q,r){var t=this;if(q==a){if(t.getValue()||t.isChanged())r.setAttribute('vspace',t.getValue());}else if(q==c){var s=parseInt(t.getValue(),10);s=isNaN(s)?0:s;r.setAttribute('vspace',t.getValue());r.setStyle('margin-top',s+'px');r.setStyle('margin-bottom',s+'px');}else if(q==d){r.removeAttribute('vspace');r.removeStyle('margin-top');r.removeStyle('margin-bottom');}}},{id:'cmbAlign',type:'select',labelLayout:'horizontal',widths:['35%','65%'],style:'width:90px',label:m.lang.image.align,'default':'',items:[[m.lang.common.notSet,''],[m.lang.image.alignLeft,'left'],[m.lang.image.alignAbsBottom,'absBottom'],[m.lang.image.alignAbsMiddle,'absMiddle'],[m.lang.image.alignBaseline,'baseline'],[m.lang.image.alignBottom,'bottom'],[m.lang.image.alignMiddle,'middle'],[m.lang.image.alignRight,'right'],[m.lang.image.alignTextTop,'textTop'],[m.lang.image.alignTop,'top']],onChange:function(){h(this.getDialog());},setup:function(q,r){if(q==a)this.setValue(r.getAttribute('align'));},commit:function(q,r){var s=this.getValue();if(q==a){if(s||this.isChanged())r.setAttribute('align',s);}else if(q==c){r.setAttribute('align',this.getValue());if(s=='absMiddle'||s=='middle')r.setStyle('vertical-align','middle');else if(s=='top'||s=='textTop')r.setStyle('vertical-align','top');else r.removeStyle('vertical-align');if(s=='right'||s=='left')r.setStyle('styleFloat',s);else r.removeStyle('styleFloat');}else if(q==d)r.removeAttribute('align');}}]}]},{type:'vbox',height:'250px',children:[{type:'html',style:'width:95%;',html:'<div>'+CKEDITOR.tools.htmlEncode(m.lang.image.preview)+'<br>'+'<div id="ImagePreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div>'+'<div id="ImagePreviewBox">'+'<a href="javascript:void(0)" target="_blank" onclick="return false;" id="previewLink">'+'<img id="previewImage" src="" alt="" /></a>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. '+'Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, '+'nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.'+'</div>'+'</div>'}]}]}]},{id:'Link',label:m.lang.link.title,padding:0,elements:[{id:'txtUrl',type:'text',label:m.lang.image.url,style:'width: 100%','default':'',setup:function(q,r){if(q==b){var s=r.getAttribute('_cke_saved_href');\r
+if(!s)s=r.getAttribute('href');this.setValue(s);}},commit:function(q,r){var s=this;if(q==b)if(s.getValue()||s.isChanged()){r.setAttribute('_cke_saved_href',decodeURI(s.getValue()));r.setAttribute('href','javascript:void(0)/*'+CKEDITOR.tools.getNextNumber()+'*/');if(s.getValue()||!m.config.image_removeLinkByEmptyURL)s.getDialog().addLink=true;}}},{type:'button',id:'browse',filebrowser:'Link:txtUrl',style:'float:right',hidden:true,label:m.lang.common.browseServer},{id:'cmbTarget',type:'select',label:m.lang.link.target,'default':'',items:[[m.lang.link.targetNotSet,''],[m.lang.link.targetNew,'_blank'],[m.lang.link.targetTop,'_top'],[m.lang.link.targetSelf,'_self'],[m.lang.link.targetParent,'_parent']],setup:function(q,r){if(q==b)this.setValue(r.getAttribute('target'));},commit:function(q,r){if(q==b)if(this.getValue()||this.isChanged())r.setAttribute('target',this.getValue());}}]},{id:'Upload',hidden:true,filebrowser:'uploadButton',label:m.lang.image.upload,elements:[{type:'file',id:'upload',label:m.lang.image.btnUpload,style:'height:40px',size:38},{type:'fileButton',id:'uploadButton',filebrowser:'info:txtUrl',label:m.lang.image.btnUpload,'for':['Upload','upload']}]},{id:'advanced',label:m.lang.common.advancedTab,elements:[{type:'hbox',widths:['50%','25%','25%'],children:[{type:'text',id:'linkId',label:m.lang.common.id,setup:function(q,r){if(q==a)this.setValue(r.getAttribute('id'));},commit:function(q,r){if(q==a)if(this.getValue()||this.isChanged())r.setAttribute('id',this.getValue());}},{id:'cmbLangDir',type:'select',style:'width : 100px;',label:m.lang.common.langDir,'default':'',items:[[m.lang.common.notSet,''],[m.lang.common.langDirLtr,'ltr'],[m.lang.common.langDirRtl,'rtl']],setup:function(q,r){if(q==a)this.setValue(r.getAttribute('dir'));},commit:function(q,r){if(q==a)if(this.getValue()||this.isChanged())r.setAttribute('dir',this.getValue());}},{type:'text',id:'txtLangCode',label:m.lang.common.langCode,'default':'',setup:function(q,r){if(q==a)this.setValue(r.getAttribute('lang'));},commit:function(q,r){if(q==a)if(this.getValue()||this.isChanged())r.setAttribute('lang',this.getValue());}}]},{type:'text',id:'txtGenLongDescr',label:m.lang.common.longDescr,setup:function(q,r){if(q==a)this.setValue(r.getAttribute('longDesc'));},commit:function(q,r){if(q==a)if(this.getValue()||this.isChanged())r.setAttribute('longDesc',this.getValue());}},{type:'hbox',widths:['50%','50%'],children:[{type:'text',id:'txtGenClass',label:m.lang.common.cssClass,'default':'',setup:function(q,r){if(q==a)this.setValue(r.getAttribute('class'));\r
+},commit:function(q,r){if(q==a)if(this.getValue()||this.isChanged())r.setAttribute('class',this.getValue());}},{type:'text',id:'txtGenTitle',label:m.lang.common.advisoryTitle,'default':'',onChange:function(){h(this.getDialog());},setup:function(q,r){if(q==a)this.setValue(r.getAttribute('title'));},commit:function(q,r){var s=this;if(q==a){if(s.getValue()||s.isChanged())r.setAttribute('title',s.getValue());}else if(q==c)r.setAttribute('title',s.getValue());else if(q==d)r.removeAttribute('title');}}]},{type:'text',id:'txtdlgGenStyle',label:m.lang.common.cssStyle,'default':'',setup:function(q,r){if(q==a){var s=r.getAttribute('style');if(!s&&r.$.style.cssText)s=r.$.style.cssText;this.setValue(s);var t=r.$.style.height,u=r.$.style.width,v=(t?t:'').match(e),w=(u?u:'').match(e);this.attributesInStyle={height:!!v,width:!!w};}},commit:function(q,r){var u=this;if(q==a&&(u.getValue()||u.isChanged())){r.setAttribute('style',u.getValue());var s=r.getAttribute('height'),t=r.getAttribute('width');if(u.attributesInStyle&&u.attributesInStyle.height)if(s){if(s.match(e)[2]=='%')r.setStyle('height',s+'%');else r.setStyle('height',s+'px');}else r.removeStyle('height');if(u.attributesInStyle&&u.attributesInStyle.width)if(t){if(t.match(e)[2]=='%')r.setStyle('width',t+'%');else r.setStyle('width',t+'px');}else r.removeStyle('width');}}}]}]};};CKEDITOR.dialog.add('image',function(m){return l(m,'image');});CKEDITOR.dialog.add('imagebutton',function(m){return l(m,'imagebutton');});})();\r
diff --git a/plugins/image/plugin.js b/plugins/image/plugin.js
new file mode 100644 (file)
index 0000000..ca10f53
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('image',{init:function(a){var b='image';CKEDITOR.dialog.add(b,this.path+'dialogs/image.js');a.addCommand(b,new CKEDITOR.dialogCommand(b));a.ui.addButton('Image',{label:a.lang.common.image,command:b});if(a.addMenuItems)a.addMenuItems({image:{label:a.lang.image.menu,command:'image',group:'image'}});if(a.contextMenu)a.contextMenu.addListener(function(c,d){if(!c||!c.is('img')||c.getAttribute('_cke_realelement'))return null;return{image:CKEDITOR.TRISTATE_OFF};});}});CKEDITOR.config.image_removeLinkByEmptyURL=true;\r
diff --git a/plugins/indent/plugin.js b/plugins/indent/plugin.js
new file mode 100644 (file)
index 0000000..fa8a99e
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a={ol:1,ul:1};function b(g,h){g.getCommand(this.name).setState(h);};function c(g){var r=this;var h=g.data.path.elements,i,j,k=g.editor;for(var l=0;l<h.length;l++){if(h[l].getName()=='li'){j=h[l];continue;}if(a[h[l].getName()]){i=h[l];break;}}if(i)if(r.name=='outdent')return b.call(r,k,CKEDITOR.TRISTATE_OFF);else{while(j&&(j=j.getPrevious(CKEDITOR.dom.walker.whitespaces(true))))if(j.getName&&j.getName()=='li')return b.call(r,k,CKEDITOR.TRISTATE_OFF);return b.call(r,k,CKEDITOR.TRISTATE_DISABLED);}if(!r.useIndentClasses&&r.name=='indent')return b.call(r,k,CKEDITOR.TRISTATE_OFF);var m=g.data.path,n=m.block||m.blockLimit;if(!n)return b.call(r,k,CKEDITOR.TRISTATE_DISABLED);if(r.useIndentClasses){var o=n.$.className.match(r.classNameRegex),p=0;if(o){o=o[1];p=r.indentClassMap[o];}if(r.name=='outdent'&&!p||r.name=='indent'&&p==k.config.indentClasses.length)return b.call(r,k,CKEDITOR.TRISTATE_DISABLED);return b.call(r,k,CKEDITOR.TRISTATE_OFF);}else{var q=parseInt(n.getStyle(r.indentCssProperty),10);if(isNaN(q))q=0;if(q<=0)return b.call(r,k,CKEDITOR.TRISTATE_DISABLED);return b.call(r,k,CKEDITOR.TRISTATE_OFF);}};function d(g,h,i){var j=h.startContainer,k=h.endContainer;while(j&&!j.getParent().equals(i))j=j.getParent();while(k&&!k.getParent().equals(i))k=k.getParent();if(!j||!k)return;var l=j,m=[],n=false;while(!n){if(l.equals(k))n=true;m.push(l);l=l.getNext();}if(m.length<1)return;var o=i.getParents(true);for(var p=0;p<o.length;p++)if(o[p].getName&&a[o[p].getName()]){i=o[p];break;}var q=this.name=='indent'?1:-1,r=m[0],s=m[m.length-1],t={},u=CKEDITOR.plugins.list.listToArray(i,t),v=u[s.getCustomData('listarray_index')].indent;for(p=r.getCustomData('listarray_index');p<=s.getCustomData('listarray_index');p++)u[p].indent+=q;for(p=s.getCustomData('listarray_index')+1;p<u.length&&u[p].indent>v;p++)u[p].indent+=q;var w=CKEDITOR.plugins.list.arrayToList(u,t,null,g.config.enterMode,0);if(this.name=='outdent'){var x;if((x=i.getParent())&&(x.is('li'))){var y=w.listNode.getChildren(),z=[],A=y.count(),B;for(p=A-1;p>=0;p--)if((B=y.getItem(p))&&(B.is&&B.is('li')))z.push(B);}}if(w)w.listNode.replace(i);if(z&&z.length)for(p=0;p<z.length;p++){var C=z[p],D=C;while((D=D.getNext())&&(D.is&&D.getName() in a))C.append(D);C.insertAfter(x);}CKEDITOR.dom.element.clearAllMarkers(t);};function e(g,h){var p=this;var i=h.createIterator(),j=g.config.enterMode;i.enforceRealBlocks=true;i.enlargeBr=j!=CKEDITOR.ENTER_BR;var k;while(k=i.getNextParagraph())if(p.useIndentClasses){var l=k.$.className.match(p.classNameRegex),m=0;\r
+if(l){l=l[1];m=p.indentClassMap[l];}if(p.name=='outdent')m--;elsem++;m=Math.min(m,g.config.indentClasses.length);m=Math.max(m,0);var n=CKEDITOR.tools.ltrim(k.$.className.replace(p.classNameRegex,''));if(m<1)k.$.className=n;else k.addClass(g.config.indentClasses[m-1]);}else{var o=parseInt(k.getStyle(p.indentCssProperty),10);if(isNaN(o))o=0;o+=(p.name=='indent'?1:-1)*(g.config.indentOffset);o=Math.max(o,0);o=Math.ceil(o/g.config.indentOffset)*g.config.indentOffset;k.setStyle(p.indentCssProperty,o?o+g.config.indentUnit:'');if(k.getAttribute('style')==='')k.removeAttribute('style');}};function f(g,h){var j=this;j.name=h;j.useIndentClasses=g.config.indentClasses&&g.config.indentClasses.length>0;if(j.useIndentClasses){j.classNameRegex=new RegExp('(?:^|\\s+)('+g.config.indentClasses.join('|')+')(?=$|\\s)');j.indentClassMap={};for(var i=0;i<g.config.indentClasses.length;i++)j.indentClassMap[g.config.indentClasses[i]]=i+1;}else j.indentCssProperty=g.config.contentsLangDirection=='ltr'?'margin-left':'margin-right';};f.prototype={exec:function(g){var h=g.getSelection(),i=h&&h.getRanges()[0];if(!h||!i)return;var j=h.createBookmarks(true),k=i.getCommonAncestor();while(k&&!(k.type==CKEDITOR.NODE_ELEMENT&&a[k.getName()]))k=k.getParent();if(k)d.call(this,g,i,k);else e.call(this,g,i);g.focus();g.forceNextSelectionCheck();h.selectBookmarks(j);}};CKEDITOR.plugins.add('indent',{init:function(g){var h=new f(g,'indent'),i=new f(g,'outdent');g.addCommand('indent',h);g.addCommand('outdent',i);g.ui.addButton('Indent',{label:g.lang.indent,command:'indent'});g.ui.addButton('Outdent',{label:g.lang.outdent,command:'outdent'});g.on('selectionChange',CKEDITOR.tools.bind(c,h));g.on('selectionChange',CKEDITOR.tools.bind(c,i));},requires:['domiterator','list']});})();CKEDITOR.tools.extend(CKEDITOR.config,{indentOffset:40,indentUnit:'px',indentClasses:null});\r
diff --git a/plugins/justify/plugin.js b/plugins/justify/plugin.js
new file mode 100644 (file)
index 0000000..c9aac84
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a=/(-moz-|-webkit-|start|auto)/i;function b(e,f){var g=f.block||f.blockLimit;if(!g||g.getName()=='body')return CKEDITOR.TRISTATE_OFF;var h=g.getComputedStyle('text-align').replace(a,'');if(!h&&this.isDefaultAlign||h==this.value)return CKEDITOR.TRISTATE_ON;return CKEDITOR.TRISTATE_OFF;};function c(e){var f=e.editor.getCommand(this.name);f.state=b.call(this,e.editor,e.data.path);f.fire('state');};function d(e,f,g){var j=this;j.name=f;j.value=g;var h=e.config.contentsLangDirection;j.isDefaultAlign=g=='left'&&h=='ltr'||g=='right'&&h=='rtl';var i=e.config.justifyClasses;if(i){switch(g){case 'left':j.cssClassName=i[0];break;case 'center':j.cssClassName=i[1];break;case 'right':j.cssClassName=i[2];break;case 'justify':j.cssClassName=i[3];break;}j.cssClassRegex=new RegExp('(?:^|\\s+)(?:'+i.join('|')+')(?=$|\\s)');}};d.prototype={exec:function(e){var n=this;var f=e.getSelection();if(!f)return;var g=f.createBookmarks(),h=f.getRanges(),i=n.cssClassName,j,k;for(var l=h.length-1;l>=0;l--){j=h[l].createIterator();while(k=j.getNextParagraph()){k.removeAttribute('align');if(i){var m=k.$.className=CKEDITOR.tools.ltrim(k.$.className.replace(n.cssClassRegex,''));if(n.state==CKEDITOR.TRISTATE_OFF&&!n.isDefaultAlign)k.addClass(i);else if(!m)k.removeAttribute('class');}else if(n.state==CKEDITOR.TRISTATE_OFF&&!n.isDefaultAlign)k.setStyle('text-align',n.value);else k.removeStyle('text-align');}}e.focus();e.forceNextSelectionCheck();f.selectBookmarks(g);}};CKEDITOR.plugins.add('justify',{init:function(e){var f=new d(e,'justifyleft','left'),g=new d(e,'justifycenter','center'),h=new d(e,'justifyright','right'),i=new d(e,'justifyblock','justify');e.addCommand('justifyleft',f);e.addCommand('justifycenter',g);e.addCommand('justifyright',h);e.addCommand('justifyblock',i);e.ui.addButton('JustifyLeft',{label:e.lang.justify.left,command:'justifyleft'});e.ui.addButton('JustifyCenter',{label:e.lang.justify.center,command:'justifycenter'});e.ui.addButton('JustifyRight',{label:e.lang.justify.right,command:'justifyright'});e.ui.addButton('JustifyBlock',{label:e.lang.justify.block,command:'justifyblock'});e.on('selectionChange',CKEDITOR.tools.bind(c,f));e.on('selectionChange',CKEDITOR.tools.bind(c,h));e.on('selectionChange',CKEDITOR.tools.bind(c,g));e.on('selectionChange',CKEDITOR.tools.bind(c,i));},requires:['domiterator']});})();CKEDITOR.tools.extend(CKEDITOR.config,{justifyClasses:null});\r
diff --git a/plugins/keystrokes/plugin.js b/plugins/keystrokes/plugin.js
new file mode 100644 (file)
index 0000000..f4c0b5d
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('keystrokes',{beforeInit:function(a){a.keystrokeHandler=new CKEDITOR.keystrokeHandler(a);a.specialKeys={};},init:function(a){var b=a.config.keystrokes,c=a.config.blockedKeystrokes,d=a.keystrokeHandler.keystrokes,e=a.keystrokeHandler.blockedKeystrokes;for(var f=0;f<b.length;f++)d[b[f][0]]=b[f][1];for(f=0;f<c.length;f++)e[c[f]]=1;}});CKEDITOR.keystrokeHandler=function(a){var b=this;if(a.keystrokeHandler)return a.keystrokeHandler;b.keystrokes={};b.blockedKeystrokes={};b._={editor:a};return b;};(function(){var a,b=function(d){d=d.data;var e=d.getKeystroke(),f=this.keystrokes[e],g=this._.editor;a=g.fire('key',{keyCode:e})===true;if(!a){if(f){var h={from:'keystrokeHandler'};a=g.execCommand(f,h)!==false;}if(!a){var i=g.specialKeys[e];a=i&&i(g)===true;if(!a)a=!!this.blockedKeystrokes[e];}}if(a)d.preventDefault(true);return!a;},c=function(d){if(a){a=false;d.data.preventDefault(true);}};CKEDITOR.keystrokeHandler.prototype={attach:function(d){d.on('keydown',b,this);if(CKEDITOR.env.opera||CKEDITOR.env.gecko&&CKEDITOR.env.mac)d.on('keypress',c,this);}};})();CKEDITOR.config.blockedKeystrokes=[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85];CKEDITOR.config.keystrokes=[[CKEDITOR.ALT+121,'toolbarFocus'],[CKEDITOR.ALT+122,'elementsPathFocus'],[CKEDITOR.SHIFT+121,'contextMenu'],[CKEDITOR.CTRL+90,'undo'],[CKEDITOR.CTRL+89,'redo'],[CKEDITOR.CTRL+CKEDITOR.SHIFT+90,'redo'],[CKEDITOR.CTRL+76,'link'],[CKEDITOR.CTRL+66,'bold'],[CKEDITOR.CTRL+73,'italic'],[CKEDITOR.CTRL+85,'underline'],[CKEDITOR.ALT+109,'toolbarCollapse']];\r
diff --git a/plugins/link/dialogs/anchor.js b/plugins/link/dialogs/anchor.js
new file mode 100644 (file)
index 0000000..681ac77
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('anchor',function(a){var b=function(c,d,e){var g=this;g.editMode=true;g.editObj=e;var f=g.editObj.getAttribute('name');if(f)g.setValueOf('info','txtName',f);else g.setValueOf('info','txtName','');};return{title:a.lang.anchor.title,minWidth:300,minHeight:60,onOk:function(){var f=this;var c=f.getValueOf('info','txtName'),d=CKEDITOR.env.ie?a.document.createElement('<a name="'+CKEDITOR.tools.htmlEncode(c)+'">'):a.document.createElement('a');if(f.editMode){f.editObj.copyAttributes(d,{name:1});f.editObj.moveChildren(d);}d.removeAttribute('_cke_saved_name');d.setAttribute('name',c);var e=a.createFakeElement(d,'cke_anchor','anchor');if(!f.editMode)a.insertElement(e);else{e.replace(f.fakeObj);a.getSelection().selectElement(e);}return true;},onShow:function(){var e=this;e.editObj=false;e.fakeObj=false;e.editMode=false;var c=a.getSelection(),d=c.getSelectedElement();if(d&&d.getAttribute('_cke_real_element_type')&&d.getAttribute('_cke_real_element_type')=='anchor'){e.fakeObj=d;d=a.restoreRealElement(e.fakeObj);b.apply(e,[a,c,d]);c.selectElement(e.fakeObj);}e.getContentElement('info','txtName').focus();},contents:[{id:'info',label:a.lang.anchor.title,accessKey:'I',elements:[{type:'text',id:'txtName',label:a.lang.anchor.name,validate:function(){if(!this.getValue()){alert(a.lang.anchor.errorName);return false;}return true;}}]}]};});\r
diff --git a/plugins/link/dialogs/link.js b/plugins/link/dialogs/link.js
new file mode 100644 (file)
index 0000000..9e2880d
--- /dev/null
@@ -0,0 +1,11 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('link',function(a){var b=function(){var s=this.getDialog(),t=s.getContentElement('target','popupFeatures'),u=s.getContentElement('target','linkTargetName'),v=this.getValue();if(!t||!u)return;t=t.getElement();if(v=='popup'){t.show();u.setLabel(a.lang.link.targetPopupName);}else{t.hide();u.setLabel(a.lang.link.targetFrameName);this.getDialog().setValueOf('target','linkTargetName',v.charAt(0)=='_'?v:'');}},c=function(){var s=this.getDialog(),t=['urlOptions','anchorOptions','emailOptions'],u=this.getValue(),v=s.definition.getContents('upload').hidden;if(u=='url'){if(a.config.linkShowTargetTab)s.showPage('target');if(!v)s.showPage('upload');}else{s.hidePage('target');if(!v)s.hidePage('upload');}for(var w=0;w<t.length;w++){var x=s.getContentElement('info',t[w]);if(!x)continue;x=x.getElement().getParent().getParent();if(t[w]==u+'Options')x.show();else x.hide();}},d=/^mailto:([^?]+)(?:\?(.+))?$/,e=/subject=([^;?:@&=$,\/]*)/,f=/body=([^;?:@&=$,\/]*)/,g=/^#(.*)$/,h=/^((?:http|https|ftp|news):\/\/)?(.*)$/,i=/^(_(?:self|top|parent|blank))$/,j=/\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/,k=/(?:^|,)([^=]+)=(\d+|yes|no)/gi,l=function(s,t){var u=t?t.getAttribute('_cke_saved_href')||t.getAttribute('href'):'',v='',w='',x=false,y={};if(u){v=u.match(d);w=u.match(g);x=u.match(h);}if(v){var z=u.match(e),A=u.match(f);y.type='email';y.email={};y.email.address=v[1];z&&(y.email.subject=decodeURIComponent(z[1]));A&&(y.email.body=decodeURIComponent(A[1]));}else if(w){y.type='anchor';y.anchor={};y.anchor.name=y.anchor.id=w[1];}else if(u&&x){y.type='url';y.url={};y.url.protocol=x[1];y.url.url=x[2];}else y.type='url';if(t){var B=t.getAttribute('target');y.target={};y.adv={};if(!B){var C=t.getAttribute('_cke_pa_onclick')||t.getAttribute('onclick'),D=C&&C.match(j);if(D){y.target.type='popup';y.target.name=D[1];var E;while(E=k.exec(D[2]))if(E[2]=='yes'||E[2]=='1')y.target[E[1]]=true;else if(isFinite(E[2]))y.target[E[1]]=E[2];}}else{var F=B.match(i);if(F)y.target.type=y.target.name=B;else{y.target.type='frame';y.target.name=B;}}var G=this,H=function(N,O){var P=t.getAttribute(O);if(P!==null)y.adv[N]=P||'';};H('advId','id');H('advLangDir','dir');H('advAccessKey','accessKey');H('advName','name');H('advLangCode','lang');H('advTabIndex','tabindex');H('advTitle','title');H('advContentType','type');H('advCSSClasses','class');H('advCharset','charset');H('advStyles','style');}var I=s.document.getElementsByTag('img'),J=new CKEDITOR.dom.nodeList(s.document.$.anchors),K=y.anchors=[];\r
+for(var L=0;L<I.count();L++){var M=I.getItem(L);if(M.getAttribute('_cke_realelement')&&M.getAttribute('_cke_real_element_type')=='anchor')K.push(s.restoreRealElement(M));}for(L=0;L<J.count();L++)K.push(J.getItem(L));for(L=0;L<K.length;L++){M=K[L];K[L]={name:M.getAttribute('name'),id:M.getAttribute('id')};}this._.selectedElement=t;return y;},m=function(s,t){if(t[s])this.setValue(t[s][this.id]||'');},n=function(s){return m.call(this,'target',s);},o=function(s){return m.call(this,'adv',s);},p=function(s,t){if(!t[s])t[s]={};t[s][this.id]=this.getValue()||'';},q=function(s){return p.call(this,'target',s);},r=function(s){return p.call(this,'adv',s);};return{title:a.lang.link.title,minWidth:350,minHeight:230,contents:[{id:'info',label:a.lang.link.info,title:a.lang.link.info,elements:[{id:'linkType',type:'select',label:a.lang.link.type,'default':'url',items:[[a.lang.common.url,'url'],[a.lang.link.toAnchor,'anchor'],[a.lang.link.toEmail,'email']],onChange:c,setup:function(s){if(s.type)this.setValue(s.type);},commit:function(s){s.type=this.getValue();}},{type:'vbox',id:'urlOptions',children:[{type:'hbox',widths:['25%','75%'],children:[{id:'protocol',type:'select',label:a.lang.common.protocol,'default':'http://',style:'width : 100%;',items:[['http://'],['https://'],['ftp://'],['news://'],['<other>','']],setup:function(s){if(s.url)this.setValue(s.url.protocol);},commit:function(s){if(!s.url)s.url={};s.url.protocol=this.getValue();}},{type:'text',id:'url',label:a.lang.common.url,onLoad:function(){this.allowOnChange=true;},onKeyUp:function(){var x=this;x.allowOnChange=false;var s=x.getDialog().getContentElement('info','protocol'),t=x.getValue(),u=/^(http|https|ftp|news):\/\/(?=.)/gi,v=/^((javascript:)|[#\/\.])/gi,w=u.exec(t);if(w){x.setValue(t.substr(w[0].length));s.setValue(w[0].toLowerCase());}else if(v.test(t))s.setValue('');x.allowOnChange=true;},onChange:function(){if(this.allowOnChange)this.onKeyUp();},validate:function(){var s=this.getDialog();if(s.getContentElement('info','linkType')&&s.getValueOf('info','linkType')!='url')return true;if(this.getDialog().fakeObj)return true;var t=CKEDITOR.dialog.validate.notEmpty(a.lang.link.noUrl);return t.apply(this);},setup:function(s){var u=this;u.allowOnChange=false;if(s.url)u.setValue(s.url.url);u.allowOnChange=true;var t=u.getDialog().getContentElement('info','linkType');if(t&&t.getValue()=='url')u.select();},commit:function(s){if(!s.url)s.url={};s.url.url=this.getValue();this.allowOnChange=false;}}],setup:function(s){if(!this.getDialog().getContentElement('info','linkType'))this.getElement().show();\r
+}},{type:'button',id:'browse',hidden:'true',filebrowser:'info:url',label:a.lang.common.browseServer}]},{type:'vbox',id:'anchorOptions',width:260,align:'center',padding:0,children:[{type:'html',id:'selectAnchorText',html:CKEDITOR.tools.htmlEncode(a.lang.link.selectAnchor),setup:function(s){if(s.anchors.length>0)this.getElement().show();else this.getElement().hide();}},{type:'html',id:'noAnchors',style:'text-align: center;',html:'<div>'+CKEDITOR.tools.htmlEncode(a.lang.link.noAnchors)+'</div>',setup:function(s){if(s.anchors.length<1)this.getElement().show();else this.getElement().hide();}},{type:'hbox',id:'selectAnchor',children:[{type:'select',id:'anchorName','default':'',label:a.lang.link.anchorName,style:'width: 100%;',items:[['']],setup:function(s){var v=this;v.clear();v.add('');for(var t=0;t<s.anchors.length;t++)if(s.anchors[t].name)v.add(s.anchors[t].name);if(s.anchor)v.setValue(s.anchor.name);var u=v.getDialog().getContentElement('info','linkType');if(u&&u.getValue()=='email')v.focus();},commit:function(s){if(!s.anchor)s.anchor={};s.anchor.name=this.getValue();}},{type:'select',id:'anchorId','default':'',label:a.lang.link.anchorId,style:'width: 100%;',items:[['']],setup:function(s){var u=this;u.clear();u.add('');for(var t=0;t<s.anchors.length;t++)if(s.anchors[t].id)u.add(s.anchors[t].id);if(s.anchor)u.setValue(s.anchor.id);},commit:function(s){if(!s.anchor)s.anchor={};s.anchor.id=this.getValue();}}],setup:function(s){if(s.anchors.length>0)this.getElement().show();else this.getElement().hide();}}],setup:function(s){if(!this.getDialog().getContentElement('info','linkType'))this.getElement().hide();}},{type:'vbox',id:'emailOptions',padding:1,children:[{type:'text',id:'emailAddress',label:a.lang.link.emailAddress,validate:function(){var s=this.getDialog();if(!s.getContentElement('info','linkType')||s.getValueOf('info','linkType')!='email')return true;var t=CKEDITOR.dialog.validate.notEmpty(a.lang.link.noEmail);return t.apply(this);},setup:function(s){if(s.email)this.setValue(s.email.address);var t=this.getDialog().getContentElement('info','linkType');if(t&&t.getValue()=='email')this.select();},commit:function(s){if(!s.email)s.email={};s.email.address=this.getValue();}},{type:'text',id:'emailSubject',label:a.lang.link.emailSubject,setup:function(s){if(s.email)this.setValue(s.email.subject);},commit:function(s){if(!s.email)s.email={};s.email.subject=this.getValue();}},{type:'textarea',id:'emailBody',label:a.lang.link.emailBody,rows:3,'default':'',setup:function(s){if(s.email)this.setValue(s.email.body);\r
+},commit:function(s){if(!s.email)s.email={};s.email.body=this.getValue();}}],setup:function(s){if(!this.getDialog().getContentElement('info','linkType'))this.getElement().hide();}}]},{id:'target',label:a.lang.link.target,title:a.lang.link.target,elements:[{type:'hbox',widths:['50%','50%'],children:[{type:'select',id:'linkTargetType',label:a.lang.link.target,'default':'notSet',style:'width : 100%;',items:[[a.lang.link.targetNotSet,'notSet'],[a.lang.link.targetFrame,'frame'],[a.lang.link.targetPopup,'popup'],[a.lang.link.targetNew,'_blank'],[a.lang.link.targetTop,'_top'],[a.lang.link.targetSelf,'_self'],[a.lang.link.targetParent,'_parent']],onChange:b,setup:function(s){if(s.target)this.setValue(s.target.type);},commit:function(s){if(!s.target)s.target={};s.target.type=this.getValue();}},{type:'text',id:'linkTargetName',label:a.lang.link.targetFrameName,'default':'',setup:function(s){if(s.target)this.setValue(s.target.name);},commit:function(s){if(!s.target)s.target={};s.target.name=this.getValue();}}]},{type:'vbox',width:260,align:'center',padding:2,id:'popupFeatures',children:[{type:'html',html:CKEDITOR.tools.htmlEncode(a.lang.link.popupFeatures)},{type:'hbox',children:[{type:'checkbox',id:'resizable',label:a.lang.link.popupResizable,setup:n,commit:q},{type:'checkbox',id:'status',label:a.lang.link.popupStatusBar,setup:n,commit:q}]},{type:'hbox',children:[{type:'checkbox',id:'location',label:a.lang.link.popupLocationBar,setup:n,commit:q},{type:'checkbox',id:'toolbar',label:a.lang.link.popupToolbar,setup:n,commit:q}]},{type:'hbox',children:[{type:'checkbox',id:'menubar',label:a.lang.link.popupMenuBar,setup:n,commit:q},{type:'checkbox',id:'fullscreen',label:a.lang.link.popupFullScreen,setup:n,commit:q}]},{type:'hbox',children:[{type:'checkbox',id:'scrollbars',label:a.lang.link.popupScrollBars,setup:n,commit:q},{type:'checkbox',id:'dependent',label:a.lang.link.popupDependent,setup:n,commit:q}]},{type:'hbox',children:[{type:'text',widths:['30%','70%'],labelLayout:'horizontal',label:a.lang.link.popupWidth,id:'width',setup:n,commit:q},{type:'text',labelLayout:'horizontal',widths:['55%','45%'],label:a.lang.link.popupLeft,id:'left',setup:n,commit:q}]},{type:'hbox',children:[{type:'text',labelLayout:'horizontal',widths:['30%','70%'],label:a.lang.link.popupHeight,id:'height',setup:n,commit:q},{type:'text',labelLayout:'horizontal',label:a.lang.link.popupTop,widths:['55%','45%'],id:'top',setup:n,commit:q}]}]}]},{id:'upload',label:a.lang.link.upload,title:a.lang.link.upload,hidden:true,filebrowser:'uploadButton',elements:[{type:'file',id:'upload',label:a.lang.common.upload,style:'height:40px',size:29},{type:'fileButton',id:'uploadButton',label:a.lang.common.uploadSubmit,filebrowser:'info:url','for':['upload','upload']}]},{id:'advanced',label:a.lang.link.advanced,title:a.lang.link.advanced,elements:[{type:'vbox',padding:1,children:[{type:'hbox',widths:['45%','35%','20%'],children:[{type:'text',id:'advId',label:a.lang.link.id,setup:o,commit:r},{type:'select',id:'advLangDir',label:a.lang.link.langDir,'default':'',style:'width:110px',items:[[a.lang.link.langDirNotSet,''],[a.lang.link.langDirLTR,'ltr'],[a.lang.link.langDirRTL,'rtl']],setup:o,commit:r},{type:'text',id:'advAccessKey',width:'80px',label:a.lang.link.acccessKey,maxLength:1,setup:o,commit:r}]},{type:'hbox',widths:['45%','35%','20%'],children:[{type:'text',label:a.lang.link.name,id:'advName',setup:o,commit:r},{type:'text',label:a.lang.link.langCode,id:'advLangCode',width:'110px','default':'',setup:o,commit:r},{type:'text',label:a.lang.link.tabIndex,id:'advTabIndex',width:'80px',maxLength:5,setup:o,commit:r}]}]},{type:'vbox',padding:1,children:[{type:'hbox',widths:['45%','55%'],children:[{type:'text',label:a.lang.link.advisoryTitle,'default':'',id:'advTitle',setup:o,commit:r},{type:'text',label:a.lang.link.advisoryContentType,'default':'',id:'advContentType',setup:o,commit:r}]},{type:'hbox',widths:['45%','55%'],children:[{type:'text',label:a.lang.link.cssClasses,'default':'',id:'advCSSClasses',setup:o,commit:r},{type:'text',label:a.lang.link.charset,'default':'',id:'advCharset',setup:o,commit:r}]},{type:'hbox',children:[{type:'text',label:a.lang.link.styles,'default':'',id:'advStyles',setup:o,commit:r}]}]}]}],onShow:function(){var y=this;\r
+y.fakeObj=false;var s=y.getParentEditor(),t=s.getSelection(),u=t.getRanges(),v=null,w=y;if(u.length==1){var x=u[0].getCommonAncestor(true);v=x.getAscendant('a',true);if(v&&v.getAttribute('href'))t.selectElement(v);else if((v=x.getAscendant('img',true))&&(v.getAttribute('_cke_real_element_type')&&v.getAttribute('_cke_real_element_type')=='anchor')){y.fakeObj=v;v=s.restoreRealElement(y.fakeObj);t.selectElement(y.fakeObj);}else v=null;}y.setupContent(l.apply(y,[s,v]));},onOk:function(){var s={href:'javascript:void(0)/*'+CKEDITOR.tools.getNextNumber()+'*/'},t=[],u={href:s.href},v=this,w=this.getParentEditor();this.commitContent(u);switch(u.type||'url'){case 'url':var x=u.url&&u.url.protocol!=undefined?u.url.protocol:'http://',y=u.url&&u.url.url||'';s._cke_saved_href=y.indexOf('/')===0?y:x+y;break;case 'anchor':var z=u.anchor&&u.anchor.name,A=u.anchor&&u.anchor.id;s._cke_saved_href='#'+(z||A||'');break;case 'email':var B=u.email&&u.email.address,C=u.email&&encodeURIComponent(u.email.subject||''),D=u.email&&encodeURIComponent(u.email.body||''),E=['mailto:',B];if(C||D){var F=[];E.push('?');C&&F.push('subject='+C);D&&F.push('body='+D);E.push(F.join('&'));}s._cke_saved_href=E.join('');break;default:}if(u.target)if(u.target.type=='popup'){var G=["window.open(this.href, '",u.target.name||'',"', '"],H=['resizable','status','location','toolbar','menubar','fullscreen','scrollbars','dependent'],I=H.length,J=function(T){if(u.target[T])H.push(T+'='+u.target[T]);};for(var K=0;K<I;K++)H[K]=H[K]+(u.target[H[K]]?'=yes':'=no');J('width');J('left');J('height');J('top');G.push(H.join(','),"'); return false;");s[CKEDITOR.env.ie||CKEDITOR.env.webkit?'_cke_pa_onclick':'onclick']=G.join('');}else{if(u.target.type!='notSet'&&u.target.name)s.target=u.target.name;t.push('_cke_pa_onclick','onclick');}if(u.adv){var L=function(T,U){var V=u.adv[T];if(V)s[U]=V;else t.push(U);};if(this._.selectedElement)L('advId','id');L('advLangDir','dir');L('advAccessKey','accessKey');L('advName','name');L('advLangCode','lang');L('advTabIndex','tabindex');L('advTitle','title');L('advContentType','type');L('advCSSClasses','class');L('advCharset','charset');L('advStyles','style');}if(!this._.selectedElement){var M=w.getSelection(),N=M.getRanges();if(N.length==1&&N[0].collapsed){var O=new CKEDITOR.dom.text(s._cke_saved_href,w.document);N[0].insertNode(O);N[0].selectNodeContents(O);M.selectRanges(N);}var P=new CKEDITOR.style({element:'a',attributes:s});P.type=CKEDITOR.STYLE_INLINE;P.apply(w.document);if(u.adv&&u.adv.advId){var Q=this.getParentEditor().document.$.getElementsByTagName('a');\r
+for(K=0;K<Q.length;K++)if(Q[K].href==s.href){Q[K].id=u.adv.advId;break;}}}else{var R=this._.selectedElement;if(CKEDITOR.env.ie&&s.name!=R.getAttribute('name')){var S=new CKEDITOR.dom.element('<a name="'+CKEDITOR.tools.htmlEncode(s.name)+'">',w.document);M=w.getSelection();R.moveChildren(S);R.copyAttributes(S,{name:1});S.replace(R);R=S;M.selectElement(R);}R.setAttributes(s);R.removeAttributes(t);if(R.getAttribute('name'))R.addClass('cke_anchor');else R.removeClass('cke_anchor');if(this.fakeObj)w.createFakeElement(R,'cke_anchor','anchor').replace(this.fakeObj);delete this._.selectedElement;}},onLoad:function(){if(!a.config.linkShowAdvancedTab)this.hidePage('advanced');if(!a.config.linkShowTargetTab)this.hidePage('target');}};});\r
diff --git a/plugins/link/images/anchor.gif b/plugins/link/images/anchor.gif
new file mode 100644 (file)
index 0000000..5aa797b
Binary files /dev/null and b/plugins/link/images/anchor.gif differ
diff --git a/plugins/link/plugin.js b/plugins/link/plugin.js
new file mode 100644 (file)
index 0000000..10eeed5
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('link',{init:function(a){a.addCommand('link',new CKEDITOR.dialogCommand('link'));a.addCommand('anchor',new CKEDITOR.dialogCommand('anchor'));a.addCommand('unlink',new CKEDITOR.unlinkCommand());a.ui.addButton('Link',{label:a.lang.link.toolbar,command:'link'});a.ui.addButton('Unlink',{label:a.lang.unlink,command:'unlink'});a.ui.addButton('Anchor',{label:a.lang.anchor.toolbar,command:'anchor'});CKEDITOR.dialog.add('link',this.path+'dialogs/link.js');CKEDITOR.dialog.add('anchor',this.path+'dialogs/anchor.js');a.addCss('img.cke_anchor{background-image: url('+CKEDITOR.getUrl(this.path+'images/anchor.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 18px;'+'height: 18px;'+'}\n'+'a.cke_anchor'+'{'+'background-image: url('+CKEDITOR.getUrl(this.path+'images/anchor.gif')+');'+'background-position: 0 center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'padding-left: 18px;'+'}');a.on('selectionChange',function(b){var c=a.getCommand('unlink'),d=b.data.path.lastElement.getAscendant('a',true);if(d&&d.getName()=='a'&&d.getAttribute('href'))c.setState(CKEDITOR.TRISTATE_OFF);else c.setState(CKEDITOR.TRISTATE_DISABLED);});if(a.addMenuItems)a.addMenuItems({anchor:{label:a.lang.anchor.menu,command:'anchor',group:'anchor'},link:{label:a.lang.link.menu,command:'link',group:'link',order:1},unlink:{label:a.lang.unlink,command:'unlink',group:'link',order:5}});if(a.contextMenu)a.contextMenu.addListener(function(b,c){if(!b)return null;var d=b.is('img')&&b.getAttribute('_cke_real_element_type')=='anchor';if(!d){if(!(b=b.getAscendant('a',true)))return null;d=b.getAttribute('name')&&!b.getAttribute('href');}return d?{anchor:CKEDITOR.TRISTATE_OFF}:{link:CKEDITOR.TRISTATE_OFF,unlink:CKEDITOR.TRISTATE_OFF};});},afterInit:function(a){var b=a.dataProcessor,c=b&&b.dataFilter;if(c)c.addRules({elements:{a:function(d){var e=d.attributes;if(e.name&&!e.href)return a.createFakeParserElement(d,'cke_anchor','anchor');}}});},requires:['fakeobjects']});CKEDITOR.unlinkCommand=function(){};CKEDITOR.unlinkCommand.prototype={exec:function(a){var b=a.getSelection(),c=b.createBookmarks(),d=b.getRanges(),e,f;for(var g=0;g<d.length;g++){e=d[g].getCommonAncestor(true);f=e.getAscendant('a',true);if(!f)continue;d[g].selectNodeContents(f);}b.selectRanges(d);a.document.$.execCommand('unlink',false,null);b.selectBookmarks(c);}};CKEDITOR.tools.extend(CKEDITOR.config,{linkShowAdvancedTab:true,linkShowTargetTab:true});\r
diff --git a/plugins/list/plugin.js b/plugins/list/plugin.js
new file mode 100644 (file)
index 0000000..08d965f
--- /dev/null
@@ -0,0 +1,9 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a={ol:1,ul:1},b=/^[\n\r\t ]*$/;CKEDITOR.plugins.list={listToArray:function(i,j,k,l,m){if(!a[i.getName()])return[];if(!l)l=0;if(!k)k=[];for(var n=0,o=i.getChildCount();n<o;n++){var p=i.getChild(n);if(p.$.nodeName.toLowerCase()!='li')continue;var q={parent:i,indent:l,contents:[]};if(!m){q.grandparent=i.getParent();if(q.grandparent&&q.grandparent.$.nodeName.toLowerCase()=='li')q.grandparent=q.grandparent.getParent();}else q.grandparent=m;if(j)CKEDITOR.dom.element.setMarker(j,p,'listarray_index',k.length);k.push(q);for(var r=0,s=p.getChildCount();r<s;r++){var t=p.getChild(r);if(t.type==CKEDITOR.NODE_ELEMENT&&a[t.getName()])CKEDITOR.plugins.list.listToArray(t,j,k,l+1,q.grandparent);else q.contents.push(t);}}return k;},arrayToList:function(i,j,k,l){if(!k)k=0;if(!i||i.length<k+1)return null;var m=i[k].parent.getDocument(),n=new CKEDITOR.dom.documentFragment(m),o=null,p=k,q=Math.max(i[k].indent,0),r=null,s=l==CKEDITOR.ENTER_P?'p':'div';for(;;){var t=i[p];if(t.indent==q){if(!o||i[p].parent.getName()!=o.getName()){o=i[p].parent.clone(false,true);n.append(o);}r=o.append(m.createElement('li'));for(var u=0;u<t.contents.length;u++)r.append(t.contents[u].clone(true,true));p++;}else if(t.indent==Math.max(q,0)+1){var v=CKEDITOR.plugins.list.arrayToList(i,null,p,l);r.append(v.listNode);p=v.nextIndex;}else if(t.indent==-1&&!k&&t.grandparent){r;if(a[t.grandparent.getName()])r=m.createElement('li');else if(l!=CKEDITOR.ENTER_BR&&t.grandparent.getName()!='td')r=m.createElement(s);else r=new CKEDITOR.dom.documentFragment(m);for(u=0;u<t.contents.length;u++)r.append(t.contents[u].clone(true,true));if(r.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&p!=i.length-1){if(r.getLast()&&r.getLast().type==CKEDITOR.NODE_ELEMENT&&r.getLast().getAttribute('type')=='_moz')r.getLast().remove();r.appendBogus();}if(r.type==CKEDITOR.NODE_ELEMENT&&r.getName()==s&&r.$.firstChild){r.trim();var w=r.getFirst();if(w.type==CKEDITOR.NODE_ELEMENT&&w.isBlockBoundary()){var x=new CKEDITOR.dom.documentFragment(m);r.moveChildren(x);r=x;}}var y=r.$.nodeName.toLowerCase();if(!CKEDITOR.env.ie&&(y=='div'||y=='p'))r.appendBogus();n.append(r);o=null;p++;}else return null;if(i.length<=p||Math.max(i[p].indent,0)<q)break;}if(j){var z=n.getFirst();while(z){if(z.type==CKEDITOR.NODE_ELEMENT)CKEDITOR.dom.element.clearMarkers(j,z);z=z.getNextSourceNode();}}return{listNode:n,nextIndex:p};}};function c(i,j){i.getCommand(this.name).setState(j);};function d(i){var j=i.data.path,k=j.blockLimit,l=j.elements,m;for(var n=0;n<l.length&&(m=l[n])&&(!m.equals(k));\r
+n++)if(a[l[n].getName()])return c.call(this,i.editor,this.type==l[n].getName()?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF);return c.call(this,i.editor,CKEDITOR.TRISTATE_OFF);};function e(i,j,k,l){var m=CKEDITOR.plugins.list.listToArray(j.root,k),n=[];for(var o=0;o<j.contents.length;o++){var p=j.contents[o];p=p.getAscendant('li',true);if(!p||p.getCustomData('list_item_processed'))continue;n.push(p);CKEDITOR.dom.element.setMarker(k,p,'list_item_processed',true);}var q=j.root.getDocument().createElement(this.type);for(o=0;o<n.length;o++){var r=n[o].getCustomData('listarray_index');m[r].parent=q;}var s=CKEDITOR.plugins.list.arrayToList(m,k,null,i.config.enterMode),t,u=s.listNode.getChildCount();for(o=0;o<u&&(t=s.listNode.getChild(o));o++)if(t.getName()==this.type)l.push(t);s.listNode.replace(j.root);};function f(i,j,k){var l=j.contents,m=j.root.getDocument(),n=[];if(l.length==1&&l[0].equals(j.root)){var o=m.createElement('div');l[0].moveChildren&&l[0].moveChildren(o);l[0].append(o);l[0]=o;}var p=j.contents[0].getParent();for(var q=0;q<l.length;q++)p=p.getCommonAncestor(l[q].getParent());for(q=0;q<l.length;q++){var r=l[q],s;while(s=r.getParent()){if(s.equals(p)){n.push(r);break;}r=s;}}if(n.length<1)return;var t=n[n.length-1].getNext(),u=m.createElement(this.type);k.push(u);while(n.length){var v=n.shift(),w=m.createElement('li');v.moveChildren(w);v.remove();w.appendTo(u);if(!CKEDITOR.env.ie)w.appendBogus();}if(t)u.insertBefore(t);else u.appendTo(p);};function g(i,j,k){var l=CKEDITOR.plugins.list.listToArray(j.root,k),m=[];for(var n=0;n<j.contents.length;n++){var o=j.contents[n];o=o.getAscendant('li',true);if(!o||o.getCustomData('list_item_processed'))continue;m.push(o);CKEDITOR.dom.element.setMarker(k,o,'list_item_processed',true);}var p=null;for(n=0;n<m.length;n++){var q=m[n].getCustomData('listarray_index');l[q].indent=-1;p=q;}for(n=p+1;n<l.length;n++)if(l[n].indent>l[n-1].indent+1){var r=l[n-1].indent+1-l[n].indent,s=l[n].indent;while(l[n]&&l[n].indent>=s){l[n].indent+=r;n++;}n--;}var t=CKEDITOR.plugins.list.arrayToList(l,k,null,i.config.enterMode),u=t.listNode,v,w;function x(z){if((v=u[z?'getFirst':'getLast']())&&(!(v.is&&v.isBlockBoundary())&&(w=j.root[z?'getPrevious':'getNext'](CKEDITOR.dom.walker.whitespaces(true)))&&(!(w.is&&w.isBlockBoundary({br:1})))))i.document.createElement('br')[z?'insertBefore':'insertAfter'](v);};x(true);x();var y=j.root.getParent();u.replace(j.root);};function h(i,j){this.name=i;this.type=j;};h.prototype={exec:function(i){i.focus();\r
+var j=i.document,k=i.getSelection(),l=k&&k.getRanges();if(!l||l.length<1)return;if(this.state==CKEDITOR.TRISTATE_OFF){var m=j.getBody();m.trim();if(!m.getFirst()){var n=j.createElement(i.config.enterMode==CKEDITOR.ENTER_P?'p':i.config.enterMode==CKEDITOR.ENTER_DIV?'div':'br');n.appendTo(m);l=[new CKEDITOR.dom.range(j)];if(n.is('br')){l[0].setStartBefore(n);l[0].setEndAfter(n);}else l[0].selectNodeContents(n);k.selectRanges(l);}else{var o=l.length==1&&l[0],p=o&&o.getEnclosedNode();if(p&&p.is&&this.type==p.getName())c.call(this,i,CKEDITOR.TRISTATE_ON);}}var q=k.createBookmarks(true),r=[],s={};while(l.length>0){o=l.shift();var t=o.getBoundaryNodes(),u=t.startNode,v=t.endNode;if(u.type==CKEDITOR.NODE_ELEMENT&&u.getName()=='td')o.setStartAt(t.startNode,CKEDITOR.POSITION_AFTER_START);if(v.type==CKEDITOR.NODE_ELEMENT&&v.getName()=='td')o.setEndAt(t.endNode,CKEDITOR.POSITION_BEFORE_END);var w=o.createIterator(),x;w.forceBrBreak=this.state==CKEDITOR.TRISTATE_OFF;while(x=w.getNextParagraph()){var y=new CKEDITOR.dom.elementPath(x),z=null,A=false,B=y.blockLimit,C;for(var D=0;D<y.elements.length&&(C=y.elements[D])&&(!C.equals(B));D++)if(a[C.getName()]){B.removeCustomData('list_group_object');var E=C.getCustomData('list_group_object');if(E)E.contents.push(x);else{E={root:C,contents:[x]};r.push(E);CKEDITOR.dom.element.setMarker(s,C,'list_group_object',E);}A=true;break;}if(A)continue;var F=B;if(F.getCustomData('list_group_object'))F.getCustomData('list_group_object').contents.push(x);else{E={root:F,contents:[x]};CKEDITOR.dom.element.setMarker(s,F,'list_group_object',E);r.push(E);}}}var G=[];while(r.length>0){E=r.shift();if(this.state==CKEDITOR.TRISTATE_OFF){if(a[E.root.getName()])e.call(this,i,E,s,G);else f.call(this,i,E,G);}else if(this.state==CKEDITOR.TRISTATE_ON&&a[E.root.getName()])g.call(this,i,E,s);}for(D=0;D<G.length;D++){z=G[D];var H,I=this;(H=function(J){var K=z[J?'getPrevious':'getNext'](CKEDITOR.dom.walker.whitespaces(true));if(K&&K.getName&&K.getName()==I.type){K.remove();K.moveChildren(z,J?true:false);}})();H(true);}CKEDITOR.dom.element.clearAllMarkers(s);k.selectBookmarks(q);i.focus();}};CKEDITOR.plugins.add('list',{init:function(i){var j=new h('numberedlist','ol'),k=new h('bulletedlist','ul');i.addCommand('numberedlist',j);i.addCommand('bulletedlist',k);i.ui.addButton('NumberedList',{label:i.lang.numberedlist,command:'numberedlist'});i.ui.addButton('BulletedList',{label:i.lang.bulletedlist,command:'bulletedlist'});i.on('selectionChange',CKEDITOR.tools.bind(d,j));\r
+i.on('selectionChange',CKEDITOR.tools.bind(d,k));},requires:['domiterator']});})();\r
diff --git a/plugins/listblock/plugin.js b/plugins/listblock/plugin.js
new file mode 100644 (file)
index 0000000..bb7ec4c
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('listblock',{requires:['panel'],onLoad:function(){CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a,new CKEDITOR.ui.listBlock(this.getHolderElement(),b));};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){var d=this;d.base(a);d.multiSelect=!!b;var c=d.keys;c[40]='next';c[9]='next';c[38]='prev';c[CKEDITOR.SHIFT+9]='prev';c[32]='click';d._.pendingHtml=[];d._.items={};d._.groups={};},_:{close:function(){if(this._.started){this._.pendingHtml.push('</ul>');delete this._.started;}},getClick:function(){if(!this._.click)this._.click=CKEDITOR.tools.addFunction(function(a){var c=this;var b=true;if(c.multiSelect)b=c.toggle(a);else c.mark(a);if(c.onClick)c.onClick(a,b);},this);return this._.click;}},proto:{add:function(a,b,c){var f=this;var d=f._.pendingHtml,e='cke_'+CKEDITOR.tools.getNextNumber();if(!f._.started){d.push('<ul class=cke_panel_list>');f._.started=1;}f._.items[a]=e;d.push('<li id=',e,' class=cke_panel_listItem><a _cke_focus=1 hidefocus=true title="',c||a,'" href="javascript:void(\'',a,'\')" onclick="CKEDITOR.tools.callFunction(',f._.getClick(),",'",a,"'); return false;\">",b||a,'</a></li>');},startGroup:function(a){this._.close();var b='cke_'+CKEDITOR.tools.getNextNumber();this._.groups[a]=b;this._.pendingHtml.push('<h1 id=',b,' class=cke_panel_grouptitle>',a,'</h1>');},commit:function(){var a=this;a._.close();a.element.appendHtml(a._.pendingHtml.join(''));a._.pendingHtml=[];},toggle:function(a){var b=this.isMarked(a);if(b)this.unmark(a);else this.mark(a);return!b;},hideGroup:function(a){var b=this.element.getDocument().getById(this._.groups[a]),c=b&&b.getNext();if(b){b.setStyle('display','none');if(c&&c.getName()=='ul')c.setStyle('display','none');}},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle('display','none');},showAll:function(){var a=this._.items,b=this._.groups,c=this.element.getDocument();for(var d in a)c.getById(a[d]).setStyle('display','');for(var e in b){var f=c.getById(b[e]),g=f.getNext();f.setStyle('display','');if(g&&g.getName()=='ul')g.setStyle('display','');}},mark:function(a){var b=this;if(!b.multiSelect)b.unmarkAll();b.element.getDocument().getById(b._.items[a]).addClass('cke_selected');},unmark:function(a){this.element.getDocument().getById(this._.items[a]).removeClass('cke_selected');},unmarkAll:function(){var a=this._.items,b=this.element.getDocument();for(var c in a)b.getById(a[c]).removeClass('cke_selected');\r
+},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass('cke_selected');},focus:function(a){this._.focusIndex=-1;if(a){var b=this.element.getDocument().getById(this._.items[a]).getFirst(),c=this.element.getElementsByTag('a'),d,e=-1;while(d=c.getItem(++e))if(d.equals(b)){this._.focusIndex=e;break;}setTimeout(function(){b.focus();},0);}}}});}});\r
diff --git a/plugins/maximize/plugin.js b/plugins/maximize/plugin.js
new file mode 100644 (file)
index 0000000..614d6ea
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){function a(f){if(!f||f.type!=CKEDITOR.NODE_ELEMENT||f.getName()!='form')return[];var g=[],h=['style','className'];for(var i=0;i<h.length;i++){var j=h[i],k=f.$.elements.namedItem(j);if(k){var l=new CKEDITOR.dom.element(k);g.push([l,l.nextSibling]);l.remove();}}return g;};function b(f,g){if(!f||f.type!=CKEDITOR.NODE_ELEMENT||f.getName()!='form')return;if(g.length>0)for(var h=g.length-1;h>=0;h--){var i=g[h][0],j=g[h][1];if(j)i.insertBefore(j);else i.appendTo(f);}};function c(f,g){var h=a(f),i={},j=f.$;if(!g){i['class']=j.className||'';j.className='';}i.inline=j.style.cssText||'';if(!g)j.style.cssText='position: static; overflow: visible';b(h);return i;};function d(f,g){var h=a(f),i=f.$;if('class' in g)i.className=g['class'];if('inline' in g)i.style.cssText=g.inline;b(h);};function e(f,g){return function(){var h=f.getViewPaneSize();g.resize(h.width,h.height,null,true);};};CKEDITOR.plugins.add('maximize',{init:function(f){var g=f.lang,h=CKEDITOR.document,i=h.getWindow(),j,k,l,m=e(i,f),n=CKEDITOR.TRISTATE_OFF;f.addCommand('maximize',{modes:{wysiwyg:1,source:1},exec:function(){var x=this;var o=f.container.getChild([0,0]),p=f.getThemeSpace('contents');if(f.mode=='wysiwyg'){j=f.getSelection().getRanges();k=i.getScrollPosition();}else{var q=f.textarea.$;j=!CKEDITOR.env.ie&&[q.selectionStart,q.selectionEnd];k=[q.scrollLeft,q.scrollTop];}if(x.state==CKEDITOR.TRISTATE_OFF){i.on('resize',m);l=i.getScrollPosition();var r=f.container;while(r=r.getParent()){r.setCustomData('maximize_saved_styles',c(r));r.setStyle('z-index',f.config.baseFloatZIndex-1);}p.setCustomData('maximize_saved_styles',c(p,true));o.setCustomData('maximize_saved_styles',c(o,true));if(CKEDITOR.env.ie)h.$.documentElement.style.overflow=h.getBody().$.style.overflow='hidden';else h.getBody().setStyles({overflow:'hidden',width:'0px',height:'0px'});i.$.scrollTo(0,0);var s=i.getViewPaneSize();o.setStyle('position','absolute');o.$.offsetLeft;o.setStyles({'z-index':f.config.baseFloatZIndex-1,left:'0px',top:'0px'});f.resize(s.width,s.height,null,true);var t=o.getDocumentPosition();o.setStyles({left:-1*t.x+'px',top:-1*t.y+'px'});o.addClass('cke_maximized');}else if(x.state==CKEDITOR.TRISTATE_ON){i.removeListener('resize',m);var u=[p,o];for(var v=0;v<u.length;v++){d(u[v],u[v].getCustomData('maximize_saved_styles'));u[v].removeCustomData('maximize_saved_styles');}r=f.container;while(r=r.getParent()){d(r,r.getCustomData('maximize_saved_styles'));r.removeCustomData('maximize_saved_styles');}i.$.scrollTo(l.x,l.y);\r
+o.removeClass('cke_maximized');f.fire('resize');}x.toggleState();if(f.mode=='wysiwyg'){f.getSelection().selectRanges(j);var w=f.getSelection().getStartElement();if(w)w.scrollIntoView(true);else i.$.scrollTo(k.x,k.y);}else{if(j){q.selectionStart=j[0];q.selectionEnd=j[1];}q.scrollLeft=k[0];q.scrollTop=k[1];}j=k=null;n=x.state;},canUndo:false});f.ui.addButton('Maximize',{label:g.maximize,command:'maximize'});f.on('mode',function(){f.getCommand('maximize').setState(n);},null,null,100);}});})();\r
diff --git a/plugins/menu/plugin.js b/plugins/menu/plugin.js
new file mode 100644 (file)
index 0000000..c7f4c5c
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('menu',{beforeInit:function(a){var b=a.config.menu_groups.split(','),c={};for(var d=0;d<b.length;d++)c[b[d]]=d+1;a._.menuGroups=c;a._.menuItems={};},requires:['floatpanel']});CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addMenuGroup:function(a,b){this._.menuGroups[a]=b||100;},addMenuItem:function(a,b){if(this._.menuGroups[b.group])this._.menuItems[a]=new CKEDITOR.menuItem(this,a,b);},addMenuItems:function(a){for(var b in a)this.addMenuItem(b,a[b]);},getMenuItem:function(a){return this._.menuItems[a];}});(function(){CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(b,c){var d=this;d.id='cke_'+CKEDITOR.tools.getNextNumber();d.editor=b;d.items=[];d._.level=c||1;},_:{showSubMenu:function(b){var h=this;var c=h._.subMenu,d=h.items[b],e=d.getItems&&d.getItems();if(!e){h._.panel.hideChild();return;}if(c)c.removeAll();else{c=h._.subMenu=new CKEDITOR.menu(h.editor,h._.level+1);c.parent=h;c.onClick=CKEDITOR.tools.bind(h.onClick,h);}for(var f in e)c.add(h.editor.getMenuItem(f));var g=h._.panel.getBlock(h.id).element.getDocument().getById(h.id+String(b));c.show(g,2);}},proto:{add:function(b){if(!b.order)b.order=this.items.length;this.items.push(b);},removeAll:function(){this.items=[];},show:function(b,c,d,e){var f=this.items,g=this.editor,h=this._.panel,i=this._.element;if(!h){h=this._.panel=new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),{css:[CKEDITOR.getUrl(g.skinPath+'editor.css')],level:this._.level-1,className:g.skinClass+' cke_contextmenu'},this._.level);h.onEscape=CKEDITOR.tools.bind(function(){this.onEscape&&this.onEscape();this.hide();},this);h.onHide=CKEDITOR.tools.bind(function(){this.onHide&&this.onHide();},this);var j=h.addBlock(this.id);j.autoSize=true;var k=j.keys;k[40]='next';k[9]='next';k[38]='prev';k[CKEDITOR.SHIFT+9]='prev';k[32]='click';k[39]='click';i=this._.element=j.element;i.addClass(g.skinClass);var l=i.getDocument();l.getBody().setStyle('overflow','hidden');l.getElementsByTag('html').getItem(0).setStyle('overflow','hidden');this._.itemOverFn=CKEDITOR.tools.addFunction(function(r){var s=this;clearTimeout(s._.showSubTimeout);s._.showSubTimeout=CKEDITOR.tools.setTimeout(s._.showSubMenu,g.config.menu_subMenuDelay,s,[r]);},this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(r){clearTimeout(this._.showSubTimeout);},this);this._.itemClickFn=CKEDITOR.tools.addFunction(function(r){var t=this;var s=t.items[r];if(s.state==CKEDITOR.TRISTATE_DISABLED){t.hide();return;}if(s.getItems)t._.showSubMenu(r);else t.onClick&&t.onClick(s);\r
+},this);}a(f);var m=['<div class="cke_menu">'],n=f.length,o=n&&f[0].group;for(var p=0;p<n;p++){var q=f[p];if(o!=q.group){m.push('<div class="cke_menuseparator"></div>');o=q.group;}q.render(this,p,m);}m.push('</div>');i.setHtml(m.join(''));if(this.parent)this.parent._.panel.showAsChild(h,this.id,b,c,d,e);else h.showBlock(this.id,b,c,d,e);},hide:function(){this._.panel&&this._.panel.hide();}}});function a(b){b.sort(function(c,d){if(c.group<d.group)return-1;else if(c.group>d.group)return 1;return c.order<d.order?-1:c.order>d.order?1:0;});};})();CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,b,c){var d=this;CKEDITOR.tools.extend(d,c,{order:0,className:'cke_button_'+b});d.group=a._.menuGroups[d.group];d.editor=a;d.name=b;},proto:{render:function(a,b,c){var i=this;var d=a.id+String(b),e=typeof i.state=='undefined'?CKEDITOR.TRISTATE_OFF:i.state,f=' cke_'+(e==CKEDITOR.TRISTATE_ON?'on':e==CKEDITOR.TRISTATE_DISABLED?'disabled':'off'),g=i.label;if(e==CKEDITOR.TRISTATE_DISABLED)g=i.editor.lang.common.unavailable.replace('%1',g);if(i.className)f+=' '+i.className;c.push('<span class="cke_menuitem"><a id="',d,'" class="',f,'" href="javascript:void(\'',(i.label||'').replace("'",''),'\')" title="',i.label,'" tabindex="-1"_cke_focus=1 hidefocus="true"');if(CKEDITOR.env.opera||CKEDITOR.env.gecko&&CKEDITOR.env.mac)c.push(' onkeypress="return false;"');if(CKEDITOR.env.gecko)c.push(' onblur="this.style.cssText = this.style.cssText;"');var h=(i.iconOffset||0)*(-16);c.push(' onmouseover="CKEDITOR.tools.callFunction(',a._.itemOverFn,',',b,');" onmouseout="CKEDITOR.tools.callFunction(',a._.itemOutFn,',',b,');" onclick="CKEDITOR.tools.callFunction(',a._.itemClickFn,',',b,'); return false;"><span class="cke_icon_wrapper"><span class="cke_icon"'+(i.icon?' style="background-image:url('+CKEDITOR.getUrl(i.icon)+');background-position:0 '+h+'px;"></span>':'')+'></span></span>'+'<span class="cke_label">');if(i.getItems)c.push('<span class="cke_menuarrow"></span>');c.push(g,'</span></a></span>');}}});CKEDITOR.config.menu_subMenuDelay=400;CKEDITOR.config.menu_groups='clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea';\r
diff --git a/plugins/menubutton/plugin.js b/plugins/menubutton/plugin.js
new file mode 100644 (file)
index 0000000..04ecd07
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('menubutton',{requires:['button','contextmenu'],beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler);}});CKEDITOR.UI_MENUBUTTON=5;(function(){var a=function(b){var c=this._;if(c.state===CKEDITOR.TRISTATE_DISABLED)return;c.previousState=c.state;var d=c.menu;if(!d){d=c.menu=new CKEDITOR.plugins.contextMenu(b);d.onHide=CKEDITOR.tools.bind(function(){this.setState(c.previousState);},this);if(this.onMenu)d.addListener(this.onMenu);}if(c.on){d.hide();return;}this.setState(CKEDITOR.TRISTATE_ON);d.show(CKEDITOR.document.getById(this._.id),4);};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(b){var c=b.panel;delete b.panel;this.base(b);this.hasArrow=true;this.click=a;},statics:{handler:{create:function(b){return new CKEDITOR.ui.menuButton(b);}}}});})();\r
diff --git a/plugins/newpage/plugin.js b/plugins/newpage/plugin.js
new file mode 100644 (file)
index 0000000..93237d5
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('newpage',{init:function(a){a.addCommand('newpage',{modes:{wysiwyg:1,source:1},exec:function(b){var c=this;function d(){setTimeout(function(){b.fire('afterCommandExec',{name:c.name,command:c});},500);};if(b.mode=='wysiwyg')b.on('contentDom',function(e){e.removeListener();d();});b.setData(b.config.newpage_html);b.focus();if(b.mode=='source')d();},async:true});a.ui.addButton('NewPage',{label:a.lang.newPage,command:'newpage'});}});CKEDITOR.config.newpage_html='';\r
diff --git a/plugins/pagebreak/images/pagebreak.gif b/plugins/pagebreak/images/pagebreak.gif
new file mode 100644 (file)
index 0000000..8d1cffd
Binary files /dev/null and b/plugins/pagebreak/images/pagebreak.gif differ
diff --git a/plugins/pagebreak/plugin.js b/plugins/pagebreak/plugin.js
new file mode 100644 (file)
index 0000000..fce6390
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('pagebreak',{init:function(a){a.addCommand('pagebreak',CKEDITOR.plugins.pagebreakCmd);a.ui.addButton('PageBreak',{label:a.lang.pagebreak,command:'pagebreak'});a.addCss('img.cke_pagebreak{background-image: url('+CKEDITOR.getUrl(this.path+'images/pagebreak.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'clear: both;'+'display: block;'+'float: none;'+'width: 100%;'+'border-top: #999999 1px dotted;'+'border-bottom: #999999 1px dotted;'+'height: 5px;'+'}');},afterInit:function(a){var b=a.dataProcessor,c=b&&b.dataFilter;if(c)c.addRules({elements:{div:function(d){var e=d.attributes.style,f=e&&d.children.length==1&&d.children[0],g=f&&f.name=='span'&&f.attributes.style;if(g&&/page-break-after\s*:\s*always/i.test(e)&&/display\s*:\s*none/i.test(g))return a.createFakeParserElement(d,'cke_pagebreak','div');}}});},requires:['fakeobjects']});CKEDITOR.plugins.pagebreakCmd={exec:function(a){var b=CKEDITOR.dom.element.createFromHtml('<div style="page-break-after: always;"><span style="display: none;">&nbsp;</span></div>');b=a.createFakeElement(b,'cke_pagebreak','div');var c=a.getSelection().getRanges();for(var d,e=0;e<c.length;e++){d=c[e];if(e>0)b=b.clone(true);d.splitBlock('p');d.insertNode(b);}}};\r
diff --git a/plugins/panel/plugin.js b/plugins/panel/plugin.js
new file mode 100644 (file)
index 0000000..50409ad
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('panel',{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler);}});CKEDITOR.UI_PANEL=2;CKEDITOR.ui.panel=function(a,b){var c=this;if(b)CKEDITOR.tools.extend(c,b);CKEDITOR.tools.extend(c,{className:'',css:[]});c.id=CKEDITOR.tools.getNextNumber();c.document=a;c._={blocks:{}};};CKEDITOR.ui.panel.handler={create:function(a){return new CKEDITOR.ui.panel(a);}};CKEDITOR.ui.panel.prototype={renderHtml:function(a){var b=[];this.render(a,b);return b.join('');},render:function(a,b){var d=this;var c='cke_'+d.id;b.push('<div class="',a.skinClass,'" lang="',a.langCode,'" style="display:none;z-index:'+(a.config.baseFloatZIndex+1)+'">'+'<div'+' id=',c,' dir=',a.lang.dir,' class="cke_panel cke_',a.lang.dir);if(d.className)b.push(' ',d.className);b.push('">');if(d.forceIFrame||d.css.length){b.push('<iframe id="',c,'_frame" frameborder="0" src="javascript:void(');b.push(CKEDITOR.env.isCustomDomain()?"(function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})()':'0');b.push(')"></iframe>');}b.push('</div></div>');return c;},getHolderElement:function(){var a=this._.holder;if(!a){if(this.forceIFrame||this.css.length){var b=this.document.getById('cke_'+this.id+'_frame'),c=b.getParent(),d=c.getAttribute('dir'),e=c.getParent().getAttribute('class'),f=c.getParent().getAttribute('lang'),g=b.getFrameDocument();g.$.open();if(CKEDITOR.env.isCustomDomain())g.$.domain=document.domain;var h=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(j){this.isLoaded=true;if(this.onLoad)this.onLoad();},this));g.$.write('<!DOCTYPE html><html dir="'+d+'" class="'+e+'_container" lang="'+f+'">'+'<head>'+'<style>.'+e+'_container{visibility:hidden}</style>'+'</head>'+'<body class="cke_'+d+' cke_panel_frame '+CKEDITOR.env.cssClass+'" style="margin:0;padding:0"'+' onload="( window.CKEDITOR || window.parent.CKEDITOR ).tools.callFunction('+h+');">'+'</body>'+'<link type="text/css" rel=stylesheet href="'+this.css.join('"><link type="text/css" rel="stylesheet" href="')+'">'+'</html>');g.$.close();var i=g.getWindow();i.$.CKEDITOR=CKEDITOR;g.on('keydown',function(j){var l=this;var k=j.data.getKeystroke();if(l._.onKeyDown&&l._.onKeyDown(k)===false){j.data.preventDefault();return;}if(k==27)l.onEscape&&l.onEscape();},this);a=g.getBody();}else a=this.document.getById('cke_'+this.id);this._.holder=a;}return a;},addBlock:function(a,b){var c=this;b=c._.blocks[a]=b||new CKEDITOR.ui.panel.block(c.getHolderElement());if(!c._.currentBlock)c.showBlock(a);\r
+return b;},getBlock:function(a){return this._.blocks[a];},showBlock:function(a){var e=this;var b=e._.blocks,c=b[a],d=e._.currentBlock;if(d)d.hide();e._.currentBlock=c;c._.focusIndex=-1;e._.onKeyDown=c.onKeyDown&&CKEDITOR.tools.bind(c.onKeyDown,c);c.show();return c;}};CKEDITOR.ui.panel.block=CKEDITOR.tools.createClass({$:function(a){this.element=a.append(a.getDocument().createElement('div',{attributes:{'class':'cke_panel_block'},styles:{display:'none'}}));this.keys={};this._.focusIndex=-1;},_:{},proto:{show:function(){this.element.setStyle('display','');},hide:function(){var a=this;if(!a.onHide||a.onHide.call(a)!==true)a.element.setStyle('display','none');},onKeyDown:function(a){var f=this;var b=f.keys[a];switch(b){case 'next':var c=f._.focusIndex,d=f.element.getElementsByTag('a'),e;while(e=d.getItem(++c))if(e.getAttribute('_cke_focus')&&e.$.offsetWidth){f._.focusIndex=c;e.focus();break;}return false;case 'prev':c=f._.focusIndex;d=f.element.getElementsByTag('a');while(c>0&&(e=d.getItem(--c)))if(e.getAttribute('_cke_focus')&&e.$.offsetWidth){f._.focusIndex=c;e.focus();break;}return false;case 'click':c=f._.focusIndex;e=c>=0&&f.element.getElementsByTag('a').getItem(c);if(e)e.$.click?e.$.click():e.$.onclick();return false;}return true;}}});\r
diff --git a/plugins/panelbutton/plugin.js b/plugins/panelbutton/plugin.js
new file mode 100644 (file)
index 0000000..afaaa6e
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('panelbutton',{requires:['button'],beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANELBUTTON,CKEDITOR.ui.panelButton.handler);}});CKEDITOR.UI_PANELBUTTON=4;(function(){var a=function(b){var d=this;var c=d._;if(c.state==CKEDITOR.TRISTATE_DISABLED)return;d.createPanel(b);if(c.on){c.panel.hide();return;}c.panel.showBlock(d._.id,d.document.getById(d._.id),4);};CKEDITOR.ui.panelButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(b){var d=this;var c=b.panel;delete b.panel;d.base(b);d.document=c&&c.parent&&c.parent.getDocument()||CKEDITOR.document;d.hasArrow=true;d.click=a;d._={panelDefinition:c};},statics:{handler:{create:function(b){return new CKEDITOR.ui.panelButton(b);}}},proto:{createPanel:function(b){var c=this._;if(c.panel)return;var d=this._.panelDefinition||{},e=d.parent||CKEDITOR.document.getBody(),f=this._.panel=new CKEDITOR.ui.floatPanel(b,e,d),g=this;f.onShow=function(){if(g.className)this.element.getFirst().addClass(g.className+'_panel');c.oldState=g._.state;g.setState(CKEDITOR.TRISTATE_ON);c.on=1;if(g.onOpen)g.onOpen();};f.onHide=function(){if(g.className)this.element.getFirst().removeClass(g.className+'_panel');g.setState(c.oldState);c.on=0;if(g.onClose)g.onClose();};f.onEscape=function(){f.hide();g.document.getById(c.id).focus();};if(this.onBlock)this.onBlock(f,c.id);f.getBlock(c.id).onHide=function(){c.on=0;g.setState(CKEDITOR.TRISTATE_OFF);};}}});})();\r
diff --git a/plugins/pastefromword/dialogs/pastefromword.js b/plugins/pastefromword/dialogs/pastefromword.js
new file mode 100644 (file)
index 0000000..86b6ae5
--- /dev/null
@@ -0,0 +1,8 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('pastefromword',function(a){return{title:a.lang.pastefromword.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.ie&&CKEDITOR.env.quirks?270:260,htmlToLoad:'<!doctype html><script type="text/javascript">window.onload = function(){if ( '+CKEDITOR.env.ie+' ) '+'document.body.contentEditable = "true";'+'else '+'document.designMode = "on";'+'var iframe = new window.parent.CKEDITOR.dom.element( frameElement );'+'var dialog = iframe.getCustomData( "dialog" );'+''+'iframe.getFrameDocument().on( "keydown", function( e )\t\t\t\t\t\t{\t\t\t\t\t\t\tif ( e.data.getKeystroke() == 27 )\t\t\t\t\t\t\t\tdialog.hide();\t\t\t\t\t\t});'+'dialog.fire( "iframeAdded", { iframe : iframe } );'+'};'+'</script><style>body { margin: 3px; height: 95%; } </style><body></body>',cleanWord:function(b,c,d,e){c=c.replace(/<\!--[\s\S]*?-->/g,'');c=c.replace(/<o:p>\s*<\/o:p>/g,'');c=c.replace(/<o:p>[\s\S]*?<\/o:p>/g,'&nbsp;');c=c.replace(/\s*mso-[^:]+:[^;"]+;?/gi,'');c=c.replace(/\s*MARGIN: 0(?:cm|in) 0(?:cm|in) 0pt\s*;/gi,'');c=c.replace(/\s*MARGIN: 0(?:cm|in) 0(?:cm|in) 0pt\s*"/gi,'"');c=c.replace(/\s*TEXT-INDENT: 0cm\s*;/gi,'');c=c.replace(/\s*TEXT-INDENT: 0cm\s*"/gi,'"');c=c.replace(/\s*TEXT-ALIGN: [^\s;]+;?"/gi,'"');c=c.replace(/\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi,'"');c=c.replace(/\s*FONT-VARIANT: [^\s;]+;?"/gi,'"');c=c.replace(/\s*tab-stops:[^;"]*;?/gi,'');c=c.replace(/\s*tab-stops:[^"]*/gi,'');if(d){c=c.replace(/\s*face="[^"]*"/gi,'');c=c.replace(/\s*face=[^ >]*/gi,'');c=c.replace(/\s*FONT-FAMILY:[^;"]*;?/gi,'');}c=c.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi,'<$1$3');if(e)c=c.replace(/<(\w[^>]*) style="([^\"]*)"([^>]*)/gi,'<$1$3');c=c.replace(/<STYLE[^>]*>[\s\S]*?<\/STYLE[^>]*>/gi,'');c=c.replace(/<(?:META|LINK)[^>]*>\s*/gi,'');c=c.replace(/\s*style="\s*"/gi,'');c=c.replace(/<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi,'&nbsp;');c=c.replace(/<SPAN\s*[^>]*><\/SPAN>/gi,'');c=c.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi,'<$1$3');c=c.replace(/<SPAN\s*>([\s\S]*?)<\/SPAN>/gi,'$1');c=c.replace(/<FONT\s*>([\s\S]*?)<\/FONT>/gi,'$1');c=c.replace(/<\\?\?xml[^>]*>/gi,'');c=c.replace(/<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi,'');c=c.replace(/<\/?\w+:[^>]*>/gi,'');c=c.replace(/<(U|I|STRIKE)>&nbsp;<\/\1>/g,'&nbsp;');c=c.replace(/<H\d>\s*<\/H\d>/gi,'');c=c.replace(/<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none[\s\S]*?<\/\1>/ig,'');c=c.replace(/<(\w[^>]*) language=([^ |>]*)([^>]*)/gi,'<$1$3');c=c.replace(/<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi,'<$1$3');c=c.replace(/<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi,'<$1$3');\r
+if(b.config.pasteFromWordKeepsStructure){c=c.replace(/<H(\d)([^>]*)>/gi,'<h$1>');c=c.replace(/<(H\d)><FONT[^>]*>([\s\S]*?)<\/FONT><\/\1>/gi,'<$1>$2</$1>');c=c.replace(/<(H\d)><EM>([\s\S]*?)<\/EM><\/\1>/gi,'<$1>$2</$1>');}else{c=c.replace(/<H1([^>]*)>/gi,'<div$1><b><font size="6">');c=c.replace(/<H2([^>]*)>/gi,'<div$1><b><font size="5">');c=c.replace(/<H3([^>]*)>/gi,'<div$1><b><font size="4">');c=c.replace(/<H4([^>]*)>/gi,'<div$1><b><font size="3">');c=c.replace(/<H5([^>]*)>/gi,'<div$1><b><font size="2">');c=c.replace(/<H6([^>]*)>/gi,'<div$1><b><font size="1">');c=c.replace(/<\/H\d>/gi,'</font></b></div>');var f=new RegExp('(<P)([^>]*>[\\s\\S]*?)(</P>)','gi');c=c.replace(f,'<div$2</div>');c=c.replace(/<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g,'');c=c.replace(/<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g,'');c=c.replace(/<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g,'');}return c;},onShow:function(){var h=this;if(CKEDITOR.env.ie)h.getParentEditor().document.getBody().$.contentEditable='false';h.parts.dialog.$.offsetHeight;var b=h.getContentElement('general','editing_area').getElement(),c=CKEDITOR.dom.element.createFromHtml('<iframe src="javascript:void(0)" frameborder="0" allowtransparency="1"></iframe>'),d=h.getParentEditor().lang;c.setStyles({width:'346px',height:'152px','background-color':'white',border:'1px solid black'});c.setCustomData('dialog',h);var e=d.editorTitle.replace('%1',d.pastefromword.title);if(CKEDITOR.env.ie)b.setHtml('<legend style="position:absolute;top:-1000000px;left:-1000000px;">'+CKEDITOR.tools.htmlEncode(e)+'</legend>');else{b.setHtml('');b.setAttributes({role:'region',title:e});c.setAttributes({role:'region',title:' '});}b.append(c);if(CKEDITOR.env.ie)b.setStyle('height',c.$.offsetHeight+2+'px');var f=CKEDITOR.env.ie&&document.domain!=window.location.hostname;if(f){CKEDITOR._cke_htmlToLoad=h.definition.htmlToLoad;c.setAttribute('src','javascript:void( (function(){document.open();document.domain="'+document.domain+'";'+'document.write( window.parent.CKEDITOR._cke_htmlToLoad );'+'delete window.parent.CKEDITOR._cke_htmlToLoad;'+'document.close();'+'})() )');}else{var g=c.$.contentWindow.document;g.open();g.write(h.definition.htmlToLoad);g.close();}},onOk:function(){var b=this.getContentElement('general','editing_area').getElement(),c=b.getElementsByTag('iframe').getItem(0),d=this.getParentEditor(),e=this.definition.cleanWord(d,c.$.contentWindow.document.body.innerHTML,this.getValueOf('general','ignoreFontFace'),this.getValueOf('general','removeStyle'));setTimeout(function(){d.insertHtml(e);\r
+},0);},onHide:function(){if(CKEDITOR.env.ie)this.getParentEditor().document.getBody().$.contentEditable='true';},onLoad:function(){if((CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&(a.lang.dir=='rtl'))this.parts.contents.setStyle('overflow','hidden');},contents:[{id:'general',label:a.lang.pastefromword.title,elements:[{type:'html',style:'white-space:normal;width:346px;display:block',onShow:function(){if(CKEDITOR.env.webkit)this.getElement().getAscendant('table').setStyle('table-layout','fixed');},html:a.lang.pastefromword.advice},{type:'html',id:'editing_area',style:'width: 100%; height: 100%;',html:'<fieldset></fieldset>',focus:function(){var b=this.getElement(),c=b.getElementsByTag('iframe');if(c.count()<1)return;c=c.getItem(0);setTimeout(function(){c.$.contentWindow.focus();},500);}},{type:'vbox',padding:0,children:[{type:'checkbox',id:'ignoreFontFace',label:a.lang.pastefromword.ignoreFontFace,'default':a.config.pasteFromWordIgnoreFontFace},{type:'checkbox',id:'removeStyle',label:a.lang.pastefromword.removeStyle,'default':a.config.pasteFromWordRemoveStyle}]}]}]};});\r
diff --git a/plugins/pastefromword/plugin.js b/plugins/pastefromword/plugin.js
new file mode 100644 (file)
index 0000000..cb54bcd
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('pastefromword',{init:function(a){a.addCommand('pastefromword',new CKEDITOR.dialogCommand('pastefromword'));a.ui.addButton('PasteFromWord',{label:a.lang.pastefromword.toolbar,command:'pastefromword'});CKEDITOR.dialog.add('pastefromword',this.path+'dialogs/pastefromword.js');}});CKEDITOR.config.pasteFromWordIgnoreFontFace=true;CKEDITOR.config.pasteFromWordRemoveStyle=false;CKEDITOR.config.pasteFromWordKeepsStructure=false;\r
diff --git a/plugins/pastetext/dialogs/pastetext.js b/plugins/pastetext/dialogs/pastetext.js
new file mode 100644 (file)
index 0000000..9280141
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){CKEDITOR.dialog.add('pastetext',function(a){return{title:a.lang.pasteText.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?368:350,minHeight:240,onShow:function(){this.getContentElement('general','content').getInputElement().setValue('');},onOk:function(){var b=this.getContentElement('general','content').getInputElement().getValue();this.getParentEditor().insertText(b);},contents:[{label:a.lang.common.generalTab,id:'general',elements:[{type:'html',id:'pasteMsg',html:'<div style="white-space:normal;width:340px;">'+a.lang.clipboard.pasteMsg+'</div>'},{type:'html',id:'content',style:'width:340px;height:170px',html:'<textarea style="width:346px;height:170px;resize: none;border:1px solid black;background-color:white"></textarea>',focus:function(){this.getElement().focus();}}]}]};});})();\r
diff --git a/plugins/pastetext/plugin.js b/plugins/pastetext/plugin.js
new file mode 100644 (file)
index 0000000..01d00b9
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a={exec:function(c){if(CKEDITOR.getClipboardData()===false||!window.clipboardData){c.openDialog('pastetext');return;}c.insertText(window.clipboardData.getData('Text'));}};CKEDITOR.plugins.add('pastetext',{init:function(c){var d='pastetext',e=c.addCommand(d,a);c.ui.addButton('PasteText',{label:c.lang.pasteText.button,command:d});CKEDITOR.dialog.add(d,CKEDITOR.getUrl(this.path+'dialogs/pastetext.js'));if(c.config.forcePasteAsPlainText)c.on('beforePaste',function(f){if(c.mode=='wysiwyg'){setTimeout(function(){e.exec();},0);f.cancel();}},null,null,20);},requires:['clipboard']});var b;CKEDITOR.getClipboardData=function(){if(!CKEDITOR.env.ie)return false;var c=CKEDITOR.document,d=c.getBody();if(!b){b=c.createElement('div',{attributes:{id:'cke_hiddenDiv'},styles:{position:'absolute',visibility:'hidden',overflow:'hidden',width:'1px',height:'1px'}});b.setHtml('');b.appendTo(d);}var e=false,f=function(){e=true;};d.on('paste',f);var g=d.$.createTextRange();g.moveToElementText(b.$);g.execCommand('Paste');var h=b.getHtml();b.setHtml('');d.removeListener('paste',f);return e&&h;};})();CKEDITOR.editor.prototype.insertText=function(a){a=CKEDITOR.tools.htmlEncode(a);a=a.replace(/(?:\r\n)|\n|\r/g,'<br>');this.insertHtml(a);};CKEDITOR.config.forcePasteAsPlainText=false;\r
diff --git a/plugins/popup/plugin.js b/plugins/popup/plugin.js
new file mode 100644 (file)
index 0000000..00cd581
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('popup');CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{popup:function(a,b,c){b=b||'80%';c=c||'70%';if(typeof b=='string'&&b.length>1&&b.substr(b.length-1,1)=='%')b=parseInt(window.screen.width*parseInt(b,10)/100,10);if(typeof c=='string'&&c.length>1&&c.substr(c.length-1,1)=='%')c=parseInt(window.screen.height*parseInt(c,10)/100,10);if(b<640)b=640;if(c<420)c=420;var d=parseInt((window.screen.height-c)/(2),10),e=parseInt((window.screen.width-b)/(2),10),f='location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,width='+b+',height='+c+',top='+d+',left='+e,g=window.open('',null,f,true);if(!g)return false;try{g.moveTo(e,d);g.resizeTo(b,c);g.focus();g.location.href=a;}catch(h){g=window.open(a,null,f,true);}return true;}});\r
diff --git a/plugins/preview/plugin.js b/plugins/preview/plugin.js
new file mode 100644 (file)
index 0000000..85c74ca
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a={modes:{wysiwyg:1,source:1},canUndo:false,exec:function(c){var d,e=CKEDITOR.env.ie&&document.domain!=window.location.hostname;if(c.config.fullPage)d=c.getData();else{var f='<body ',g=CKEDITOR.document.getBody(),h=c.config.baseHref.length>0?'<base href="'+c.config.baseHref+'" _cktemp="true"></base>':'';if(g.getAttribute('id'))f+='id="'+g.getAttribute('id')+'" ';if(g.getAttribute('class'))f+='class="'+g.getAttribute('class')+'" ';f+='>';d=c.config.docType+'<html dir="'+c.config.contentsLangDirection+'">'+'<head>'+h+'<title>'+c.lang.preview+'</title>'+'<link href="'+c.config.contentsCss+'" type="text/css" rel="stylesheet" _cktemp="true"/>'+'</head>'+f+c.getData()+'</body></html>';}var i=640,j=420,k=80;try{var l=window.screen;i=Math.round(l.width*0.8);j=Math.round(l.height*0.7);k=Math.round(l.width*0.1);}catch(o){}var m='';if(e){window._cke_htmlToLoad=d;m='javascript:void( (function(){document.open();document.domain="'+document.domain+'";'+'document.write( window.opener._cke_htmlToLoad );'+'document.close();'+'window.opener._cke_htmlToLoad = null;'+'})() )';}var n=window.open(m,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+i+',height='+j+',left='+k);if(!e){n.document.write(d);n.document.close();}}},b='preview';CKEDITOR.plugins.add(b,{init:function(c){c.addCommand(b,a);c.ui.addButton('Preview',{label:c.lang.preview,command:b});}});})();\r
diff --git a/plugins/print/plugin.js b/plugins/print/plugin.js
new file mode 100644 (file)
index 0000000..41bd4cb
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('print',{init:function(a){var b='print',c=a.addCommand(b,CKEDITOR.plugins.print);a.ui.addButton('Print',{label:a.lang.print,command:b});}});CKEDITOR.plugins.print={exec:function(a){if(CKEDITOR.env.opera)return;else if(CKEDITOR.env.gecko)a.window.$.print();else a.document.$.execCommand('Print');},canUndo:false,modes:{wysiwyg:!CKEDITOR.env.opera}};\r
diff --git a/plugins/removeformat/plugin.js b/plugins/removeformat/plugin.js
new file mode 100644 (file)
index 0000000..740b34b
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('removeformat',{requires:['selection'],init:function(a){a.addCommand('removeFormat',CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton('RemoveFormat',{label:a.lang.removeFormat,command:'removeFormat'});}});CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){var b=a._.removeFormatRegex||(a._.removeFormatRegex=new RegExp('^(?:'+a.config.removeFormatTags.replace(/,/g,'|')+')$','i')),c=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(',')),d=a.getSelection().getRanges();for(var e=0,f;f=d[e];e++){if(f.collapsed)continue;f.enlarge(CKEDITOR.ENLARGE_ELEMENT);var g=f.createBookmark(),h=g.startNode,i=g.endNode,j=function(m){var n=new CKEDITOR.dom.elementPath(m),o=n.elements;for(var p=1,q;q=o[p];p++){if(q.equals(n.block)||q.equals(n.blockLimit))break;if(b.test(q.getName()))m.breakParent(q);}};j(h);j(i);var k=h.getNextSourceNode(true,CKEDITOR.NODE_ELEMENT);while(k){if(k.equals(i))break;var l=k.getNextSourceNode(false,CKEDITOR.NODE_ELEMENT);if(k.getName()!='img'||!k.getAttribute('_cke_protected_html'))if(b.test(k.getName()))k.remove(true);else k.removeAttributes(c);k=l;}f.moveToBookmark(g);}a.getSelection().selectRanges(d);}}}};CKEDITOR.config.removeFormatTags='b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var';CKEDITOR.config.removeFormatAttributes='class,style,lang,width,height,align,hspace,valign';\r
diff --git a/plugins/resize/plugin.js b/plugins/resize/plugin.js
new file mode 100644 (file)
index 0000000..9407a8f
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('resize',{init:function(a){var b=a.config;if(b.resize_enabled){var c=null,d,e;function f(i){var j=i.data.$.screenX-d.x,k=i.data.$.screenY-d.y,l=e.width+j*(a.lang.dir=='rtl'?-1:1),m=e.height+k;a.resize(Math.max(b.resize_minWidth,Math.min(l,b.resize_maxWidth)),Math.max(b.resize_minHeight,Math.min(m,b.resize_maxHeight)));};function g(i){CKEDITOR.document.removeListener('mousemove',f);CKEDITOR.document.removeListener('mouseup',g);if(a.document){a.document.removeListener('mousemove',f);a.document.removeListener('mouseup',g);}};var h=CKEDITOR.tools.addFunction(function(i){if(!c)c=a.getResizable();e={width:c.$.offsetWidth||0,height:c.$.offsetHeight||0};d={x:i.screenX,y:i.screenY};CKEDITOR.document.on('mousemove',f);CKEDITOR.document.on('mouseup',g);if(a.document){a.document.on('mousemove',f);a.document.on('mouseup',g);}});a.on('themeSpace',function(i){if(i.data.space=='bottom')i.data.html+='<div class="cke_resizer" title="'+CKEDITOR.tools.htmlEncode(a.lang.resize)+'"'+' onmousedown="CKEDITOR.tools.callFunction('+h+', event)"'+'></div>';},a,null,100);}}});CKEDITOR.config.resize_minWidth=750;CKEDITOR.config.resize_minHeight=250;CKEDITOR.config.resize_maxWidth=3000;CKEDITOR.config.resize_maxHeight=3000;CKEDITOR.config.resize_enabled=true;\r
diff --git a/plugins/richcombo/plugin.js b/plugins/richcombo/plugin.js
new file mode 100644 (file)
index 0000000..ea219fc
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('richcombo',{requires:['floatpanel','listblock','button'],beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler);}});CKEDITOR.UI_RICHCOMBO=3;CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(a){var c=this;CKEDITOR.tools.extend(c,a,{title:a.label,modes:{wysiwyg:1}});var b=c.panel||{};delete c.panel;c.id=CKEDITOR.tools.getNextNumber();c.document=b&&b.parent&&b.parent.getDocument()||CKEDITOR.document;b.className=(b.className||'')+(' cke_rcombopanel');c._={panelDefinition:b,items:{},state:CKEDITOR.TRISTATE_OFF};},statics:{handler:{create:function(a){return new CKEDITOR.ui.richCombo(a);}}},proto:{renderHtml:function(a){var b=[];this.render(a,b);return b.join('');},render:function(a,b){var c='cke_'+this.id,d=CKEDITOR.tools.addFunction(function(g){var j=this;var h=j._;if(h.state==CKEDITOR.TRISTATE_DISABLED)return;j.createPanel(a);if(h.on){h.panel.hide();return;}if(!h.committed){h.list.commit();h.committed=1;}var i=j.getValue();if(i)h.list.mark(i);else h.list.unmarkAll();h.panel.showBlock(j.id,new CKEDITOR.dom.element(g),4);},this),e={id:c,combo:this,focus:function(){var g=CKEDITOR.document.getById(c).getChild(1);g.focus();},execute:d};a.on('mode',function(){this.setState(this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);},this);var f=CKEDITOR.tools.addFunction(function(g,h){g=new CKEDITOR.dom.event(g);var i=g.getKeystroke();switch(i){case 13:case 32:case 40:CKEDITOR.tools.callFunction(d,h);break;default:e.onkey(e,i);}g.preventDefault();});b.push('<span class="cke_rcombo">','<span id=',c);if(this.className)b.push(' class="',this.className,' cke_off"');b.push('><span class=cke_label>',this.label,'</span><a hidefocus=true title="',this.title,'" tabindex="-1" href="javascript:void(\'',this.label,"')\"");if(CKEDITOR.env.opera||CKEDITOR.env.gecko&&CKEDITOR.env.mac)b.push(' onkeypress="return false;"');if(CKEDITOR.env.gecko)b.push(' onblur="this.style.cssText = this.style.cssText;"');b.push(' onkeydown="CKEDITOR.tools.callFunction( ',f,', event, this );" onclick="CKEDITOR.tools.callFunction(',d,', this); return false;"><span><span class="cke_accessibility">'+(this.voiceLabel?this.voiceLabel+' ':'')+'</span>'+'<span id="'+c+'_text" class="cke_text cke_inline_label">'+this.label+'</span>'+'</span>'+'<span class=cke_openbutton></span>'+'</a>'+'</span>'+'</span>');if(this.onRender)this.onRender();return e;},createPanel:function(a){if(this._.panel)return;var b=this._.panelDefinition,c=b.parent||CKEDITOR.document.getBody(),d=new CKEDITOR.ui.floatPanel(a,c,b),e=d.addListBlock(this.id,this.multiSelect),f=this;\r
+d.onShow=function(){if(f.className)this.element.getFirst().addClass(f.className+'_panel');f.setState(CKEDITOR.TRISTATE_ON);e.focus(!f.multiSelect&&f.getValue());f._.on=1;if(f.onOpen)f.onOpen();};d.onHide=function(){if(f.className)this.element.getFirst().removeClass(f.className+'_panel');f.setState(CKEDITOR.TRISTATE_OFF);f._.on=0;if(f.onClose)f.onClose();};d.onEscape=function(){d.hide();f.document.getById('cke_'+f.id).getFirst().getNext().focus();};e.onClick=function(g,h){f.document.getWindow().focus();if(f.onClick)f.onClick.call(f,g,h);if(h)f.setValue(g,f._.items[g]);else f.setValue('');d.hide();};this._.panel=d;this._.list=e;d.getBlock(this.id).onHide=function(){f._.on=0;f.setState(CKEDITOR.TRISTATE_OFF);};if(this.init)this.init();},setValue:function(a,b){var d=this;d._.value=a;var c=d.document.getById('cke_'+d.id+'_text');if(!a){b=d.label;c.addClass('cke_inline_label');}else c.removeClass('cke_inline_label');c.setHtml(typeof b!='undefined'?b:a);},getValue:function(){return this._.value||'';},unmarkAll:function(){this._.list.unmarkAll();},mark:function(a){this._.list.mark(a);},hideItem:function(a){this._.list.hideItem(a);},hideGroup:function(a){this._.list.hideGroup(a);},showAll:function(){this._.list.showAll();},add:function(a,b,c){this._.items[a]=c||a;this._.list.add(a,b,c);},startGroup:function(a){this._.list.startGroup(a);},commit:function(){this._.list.commit();},setState:function(a){var b=this;if(b._.state==a)return;b.document.getById('cke_'+b.id).setState(a);b._.state=a;}}});CKEDITOR.ui.prototype.addRichCombo=function(a,b){this.add(a,CKEDITOR.UI_RICHCOMBO,b);};\r
diff --git a/plugins/save/plugin.js b/plugins/save/plugin.js
new file mode 100644 (file)
index 0000000..6652378
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a={modes:{wysiwyg:1,source:1},exec:function(c){var d=c.element.$.form;if(d)try{d.submit();}catch(e){if(d.submit.click)d.submit.click();}}},b='save';CKEDITOR.plugins.add(b,{init:function(c){var d=c.addCommand(b,a);d.modes={wysiwyg:!!c.element.$.form};c.ui.addButton('Save',{label:c.lang.save,command:b});}});})();\r
diff --git a/plugins/scayt/dialogs/options.js b/plugins/scayt/dialogs/options.js
new file mode 100644 (file)
index 0000000..4c22026
--- /dev/null
@@ -0,0 +1,8 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('scaytcheck',function(a){var b=true,c,d=CKEDITOR.document,e=[],f,g=[],h=false,i=['dic_create,dic_restore','dic_rename,dic_delete'],j=[{id:'options',label:a.lang.scayt.optionsTab,elements:[{type:'html',id:'options',html:'<div class="inner_options">\t<div class="messagebox"></div>\t<div style="display:none;">\t\t<input type="checkbox" value="0" id="allCaps" />\t\t<label for="allCaps" id="label_allCaps"></label>\t</div>\t<div style="display:none;">\t\t<input type="checkbox" value="0" id="ignoreDomainNames" />\t\t<label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>\t</div>\t<div style="display:none;">\t<input type="checkbox" value="0" id="mixedCase" />\t\t<label for="mixedCase" id="label_mixedCase"></label>\t</div>\t<div style="display:none;">\t\t<input type="checkbox" value="0" id="mixedWithDigits" />\t\t<label for="mixedWithDigits" id="label_mixedWithDigits"></label>\t</div></div>'}]},{id:'langs',label:a.lang.scayt.languagesTab,elements:[{type:'html',id:'langs',html:'<div class="inner_langs">\t<div class="messagebox"></div>\t   <div style="float:left;width:47%;margin-left:5px;" id="scayt_lcol" ></div>   <div style="float:left;width:47%;margin-left:15px;" id="scayt_rcol"></div></div>'}]},{id:'dictionaries',label:a.lang.scayt.dictionariesTab,elements:[{type:'html',style:'',id:'dic',html:'<div class="inner_dictionary" style="text-align:left; white-space:normal;">\t<div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message"> </div>\t<div style="margin:5px auto; width:80%;white-space:normal;">        <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>\t\t<span class="cke_dialog_ui_labeled_content" >\t\t\t<div class="cke_dialog_ui_input_text">\t\t\t\t<input id="dic_name" type="text" class="cke_dialog_ui_input_text"/>\t\t</div></span></div>\t\t<div style="margin:5px auto; width:80%;white-space:normal;">\t\t\t<a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create">\t\t\t\t</a>\t\t\t<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete">\t\t\t\t</a>\t\t\t<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename">\t\t\t\t</a>\t\t\t<a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore">\t\t\t\t</a>\t\t</div>\t<div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info"></div></div>'}]},{id:'about',label:a.lang.scayt.aboutTab,elements:[{type:'html',id:'about',style:'margin: 10px 40px;',html:'<div id="scayt_about"></div>'}]}],k={title:a.lang.scayt.title,minWidth:340,minHeight:200,onShow:function(){var u=this;\r
+u.data=a.fire('scaytDialog',{});u.options=u.data.scayt_control.option();u.sLang=u.data.scayt_control.sLang;if(!u.data||!u.data.scayt||!u.data.scayt_control){alert('Error loading application service');u.hide();return;}var v=0;if(b)u.data.scayt.getCaption('en',function(w){if(v++>0)return;c=w;n.apply(u);o.apply(u);b=false;});else o.apply(u);u.selectPage(u.data.tab);},onOk:function(){var z=this;var u=z.data.scayt_control,v=u.option(),w=0;for(var x in z.options)if(v[x]!=z.options[x]&&w===0){u.option(z.options);w++;}var y=z.chosed_lang;if(y&&z.data.sLang!=y){u.setLang(y);w++;}if(w>0)u.refresh();},contents:g},l=CKEDITOR.plugins.scayt.getScayt(a);if(l)e=l.uiTags;for(f in e)if(e[f]==1)g[g.length]=j[f];if(e[2]==1)h=true;function m(){var u=d.getById('dic_name').getValue();if(!u){p(' Dictionary name should not be empty. ');return false;}window.dic[this.getId()].apply(null,[this,u,i]);return true;};var n=function(){var u=this,v=u.data.scayt.getLangList(),w=['dic_create','dic_delete','dic_rename','dic_restore'],x=['mixedCase','mixedWithDigits','allCaps','ignoreDomainNames'],y;if(h){for(y in w){var z=w[y];d.getById(z).setHtml('<span class="cke_dialog_ui_button">'+c['button_'+z]+'</span>');}d.getById('dic_info').setHtml(c.dic_info);}for(y in x){var A='label_'+x[y],B=d.getById(A);if('undefined'!=typeof B&&'undefined'!=typeof c[A]&&'undefined'!=typeof u.options[x[y]]){B.setHtml(c[A]);var C=B.getParent();C.$.style.display='block';}}var D='<p>'+c.about_throwt_image+'</p>'+'<p>'+c.version+u.data.scayt.version.toString()+'</p>'+'<p>'+c.about_throwt_copy+'</p>';d.getById('scayt_about').setHtml(D);var E=function(N,O){var P=d.createElement('label');P.setAttribute('for','cke_option'+N);P.setHtml(O[N]);if(u.sLang==N)u.chosed_lang=N;var Q=d.createElement('div'),R=CKEDITOR.dom.element.createFromHtml('<input id="cke_option'+N+'" type="radio" '+(u.sLang==N?'checked="checked"':'')+' value="'+N+'" name="scayt_lang" />');R.on('click',function(){this.$.checked=true;u.chosed_lang=N;});Q.append(R);Q.append(P);return{lang:O[N],code:N,radio:Q};},F=[];for(y in v.rtl)F[F.length]=E(y,v.ltr);for(y in v.ltr)F[F.length]=E(y,v.ltr);F.sort(function(N,O){return O.lang>N.lang?-1:1;});var G=d.getById('scayt_lcol'),H=d.getById('scayt_rcol');for(y=0;y<F.length;y++){var I=y<F.length/2?G:H;I.append(F[y].radio);}var J={};J.dic_create=function(N,O,P){var Q=P[0]+','+P[1],R=c.err_dic_create,S=c.succ_dic_create;window.scayt.createUserDictionary(O,function(T){s(Q);r(P[1]);S=S.replace('%s',T.dname);q(S);},function(T){R=R.replace('%s',T.dname);\r
+p(R+'( '+(T.message||'')+')');});};J.dic_rename=function(N,O){var P=c.err_dic_rename||'',Q=c.succ_dic_rename||'';window.scayt.renameUserDictionary(O,function(R){Q=Q.replace('%s',R.dname);t(O);q(Q);},function(R){P=P.replace('%s',R.dname);t(O);p(P+'( '+(R.message||'')+' )');});};J.dic_delete=function(N,O,P){var Q=P[0]+','+P[1],R=c.err_dic_delete,S=c.succ_dic_delete;window.scayt.deleteUserDictionary(function(T){S=S.replace('%s',T.dname);s(Q);r(P[0]);t('');q(S);},function(T){R=R.replace('%s',T.dname);p(R);});};J.dic_restore=u.dic_restore||(function(N,O,P){var Q=P[0]+','+P[1],R=c.err_dic_restore,S=c.succ_dic_restore;window.scayt.restoreUserDictionary(O,function(T){S=S.replace('%s',T.dname);s(Q);r(P[1]);q(S);},function(T){R=R.replace('%s',T.dname);p(R);});});var K=(i[0]+','+i[1]).split(','),L;for(y=0,L=K.length;y<L;y+=1){var M=d.getById(K[y]);if(M)M.on('click',m,this);}},o=function(){var u=this;for(var v in u.options){var w=d.getById(v);if(w){w.removeAttribute('checked');if(u.options[v]==1)w.setAttribute('checked','checked');if(b)w.on('click',function(){u.options[this.getId()]=this.$.checked?1:0;});}}if(h){window.scayt.getNameUserDictionary(function(x){var y=x.dname;if(y){d.getById('dic_name').setValue(y);r(i[1]);}else r(i[0]);},function(){d.getById('dic_name').setValue('');});q('');}};function p(u){d.getById('dic_message').setHtml('<span style="color:red;">'+u+'</span>');};function q(u){d.getById('dic_message').setHtml('<span style="color:blue;">'+u+'</span>');};function r(u){u=String(u);var v=u.split(',');for(var w=0,x=v.length;w<x;w+=1)d.getById(v[w]).$.style.display='inline';};function s(u){u=String(u);var v=u.split(',');for(var w=0,x=v.length;w<x;w+=1)d.getById(v[w]).$.style.display='none';};function t(u){d.getById('dic_name').$.value=u;};return k;});\r
diff --git a/plugins/scayt/dialogs/toolbar.css b/plugins/scayt/dialogs/toolbar.css
new file mode 100644 (file)
index 0000000..0680a05
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+a{text-decoration:none;padding:2px 4px 4px 6px;display:block;border-width:1px;border-style:solid;margin:0;}a.cke_scayt_toogle:hover,a.cke_scayt_toogle:focus,a.cke_scayt_toogle:active{border-color:#316ac5;background-color:#dff1ff;color:#000;cursor:pointer;margin:0;}a.cke_scayt_toogle{color:#316ac5;border-color:#fff;}.scayt_enabled a.cke_scayt_item{color:#316ac5;border-color:#fff;margin:0;}.scayt_disabled a.cke_scayt_item{color:gray;border-color:#fff;}.scayt_enabled a.cke_scayt_item:hover,.scayt_enabled a.cke_scayt_item:focus,.scayt_enabled a.cke_scayt_item:active{border-color:#316ac5;background-color:#dff1ff;color:#000;cursor:pointer;}.scayt_disabled a.cke_scayt_item:hover,.scayt_disabled a.cke_scayt_item:focus,.scayt_disabled a.cke_scayt_item:active{border-color:gray;background-color:#dff1ff;color:gray;cursor:no-drop;}.cke_scayt_set_on,.cke_scayt_set_off{display:none;}.scayt_enabled .cke_scayt_set_on{display:none;}.scayt_disabled .cke_scayt_set_on{display:inline;}.scayt_disabled .cke_scayt_set_off{display:none;}.scayt_enabled .cke_scayt_set_off{display:inline;}\r
diff --git a/plugins/scayt/plugin.js b/plugins/scayt/plugin.js
new file mode 100644 (file)
index 0000000..dd6adb7
--- /dev/null
@@ -0,0 +1,8 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a='scaytcheck',b='',c=function(){var g=this,h=function(){var k={};k.srcNodeRef=g.document.getWindow().$.frameElement;k.assocApp='CKEDITOR.'+CKEDITOR.version+'@'+CKEDITOR.revision;k.customerid=g.config.scayt_customerid||'1:11111111111111111111111111111111111111';k.customDictionaryName=g.config.scayt_customDictionaryName;k.userDictionaryName=g.config.scayt_userDictionaryName;k.defLang=g.scayt_defLang;if(CKEDITOR._scaytParams)for(var l in CKEDITOR._scaytParams)k[l]=CKEDITOR._scaytParams[l];var m=new window.scayt(k),n=d.instances[g.name];if(n){m.sLang=n.sLang;m.option(n.option());m.paused=n.paused;}d.instances[g.name]=m;try{m.setDisabled(m.paused===false);}catch(o){}g.fire('showScaytState');};g.on('contentDom',h);g.on('contentDomUnload',function(){var k=CKEDITOR.document.getElementsByTag('script'),l=/^dojoIoScript(\d+)$/i,m=/^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i;for(var n=0;n<k.count();n++){var o=k.getItem(n),p=o.getId(),q=o.getAttribute('src');if(p&&q&&p.match(l)&&q.match(m))o.remove();}});g.on('beforeCommandExec',function(k){if((k.data.name=='source'||k.data.name=='newpage')&&(g.mode=='wysiwyg')){var l=d.getScayt(g);if(l){l.paused=!l.disabled;l.destroy();delete d.instances[g.name];}}});g.on('afterSetData',function(){if(d.isScaytEnabled(g))d.getScayt(g).refresh();});g.on('insertElement',function(){var k=d.getScayt(g);if(d.isScaytEnabled(g)){if(CKEDITOR.env.ie)g.getSelection().unlock(true);try{k.refresh();}catch(l){}}},this,null,50);g.on('scaytDialog',function(k){k.data.djConfig=window.djConfig;k.data.scayt_control=d.getScayt(g);k.data.tab=b;k.data.scayt=window.scayt;});var i=g.dataProcessor,j=i&&i.htmlFilter;if(j)j.addRules({elements:{span:function(k){if(k.attributes.scayt_word&&k.attributes.scaytid){delete k.name;return k;}}}});if(g.document)h();};CKEDITOR.plugins.scayt={engineLoaded:false,instances:{},getScayt:function(g){return this.instances[g.name];},isScaytReady:function(g){return this.engineLoaded===true&&'undefined'!==typeof window.scayt&&this.getScayt(g);},isScaytEnabled:function(g){var h=this.getScayt(g);return h?h.disabled===false:false;},loadEngine:function(g){if(this.engineLoaded===true)return c.apply(g);else if(this.engineLoaded==-1)return CKEDITOR.on('scaytReady',function(){c.apply(g);});CKEDITOR.on('scaytReady',c,g);CKEDITOR.on('scaytReady',function(){this.engineLoaded=true;},this,null,0);this.engineLoaded=-1;var h=document.location.protocol;h=h.search(/https?:/)!=-1?h:'http:';var i='svc.spellchecker.net/spellcheck/lf/scayt/scayt1.js',j=g.config.scayt_srcUrl||h+'//'+i,k=d.parseUrl(j).path+'/';\r
+CKEDITOR._djScaytConfig={baseUrl:k,addOnLoad:[function(){CKEDITOR.fireOnce('scaytReady');}],isDebug:false};CKEDITOR.document.getHead().append(CKEDITOR.document.createElement('script',{attributes:{type:'text/javascript',src:j}}));return null;},parseUrl:function(g){var h;if(g.match&&(h=g.match(/(.*)[\/\\](.*?\.\w+)$/)))return{path:h[1],file:h[2]};else return g;}};var d=CKEDITOR.plugins.scayt,e=function(g,h,i,j,k,l,m){g.addCommand(j,k);g.addMenuItem(j,{label:i,command:j,group:l,order:m});},f={preserveState:true,exec:function(g){if(d.isScaytReady(g)){var h=d.isScaytEnabled(g);this.setState(h?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_ON);var i=d.getScayt(g);i.setDisabled(h);}else if(!g.config.scayt_autoStartup&&d.engineLoaded>=0){this.setState(CKEDITOR.TRISTATE_DISABLED);g.on('showScaytState',function(){this.removeListener();this.setState(d.isScaytEnabled(g)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF);},this);d.loadEngine(g);}}};CKEDITOR.plugins.add('scayt',{requires:['menubutton'],beforeInit:function(g){g.config.menu_groups='scayt_suggest,scayt_moresuggest,scayt_control,'+g.config.menu_groups;},init:function(g){var h={},i={},j=g.addCommand(a,f);CKEDITOR.dialog.add(a,CKEDITOR.getUrl(this.path+'dialogs/options.js'));var k='scaytButton';g.addMenuGroup(k);g.addMenuItems({scaytToggle:{label:g.lang.scayt.enable,command:a,group:k},scaytOptions:{label:g.lang.scayt.options,group:k,onClick:function(){b='options';g.openDialog(a);}},scaytLangs:{label:g.lang.scayt.langs,group:k,onClick:function(){b='langs';g.openDialog(a);}},scaytAbout:{label:g.lang.scayt.about,group:k,onClick:function(){b='about';g.openDialog(a);}}});g.ui.add('Scayt',CKEDITOR.UI_MENUBUTTON,{label:g.lang.scayt.title,title:g.lang.scayt.title,className:'cke_button_scayt',onRender:function(){j.on('state',function(){this.setState(j.state);},this);},onMenu:function(){var m=d.isScaytEnabled(g);g.getMenuItem('scaytToggle').label=g.lang.scayt[m?'disable':'enable'];return{scaytToggle:CKEDITOR.TRISTATE_OFF,scaytOptions:m?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytLangs:m?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytAbout:m?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};}});if(g.contextMenu&&g.addMenuItems)g.contextMenu.addListener(function(m){if(!(d.isScaytEnabled(g)&&m))return null;var n=d.getScayt(g),o=n.getWord(m.$);if(!o)return null;var p=n.getLang(),q={},r=window.scayt.getSuggestion(o,p);if(!r||!r.length)return null;for(i in h){delete g._.menuItems[i];delete g._.commands[i];}for(i in i){delete g._.menuItems[i];\r
+delete g._.commands[i];}h={};i={};var s=false;for(var t=0,u=r.length;t<u;t+=1){var v='scayt_suggestion_'+r[t].replace(' ','_'),w=(function(A,B){return{exec:function(){n.replace(A,B);}};})(m.$,r[t]);if(t<g.config.scayt_maxSuggestions){e(g,'button_'+v,r[t],v,w,'scayt_suggest',t+1);q[v]=CKEDITOR.TRISTATE_OFF;i[v]=CKEDITOR.TRISTATE_OFF;}else{e(g,'button_'+v,r[t],v,w,'scayt_moresuggest',t+1);h[v]=CKEDITOR.TRISTATE_OFF;s=true;}}if(s)g.addMenuItem('scayt_moresuggest',{label:g.lang.scayt.moreSuggestions,group:'scayt_moresuggest',order:10,getItems:function(){return h;}});var x={exec:function(){n.ignore(m.$);}},y={exec:function(){n.ignoreAll(m.$);}},z={exec:function(){window.scayt.addWordToUserDictionary(m.$);}};e(g,'ignore',g.lang.scayt.ignore,'scayt_ignore',x,'scayt_control',1);e(g,'ignore_all',g.lang.scayt.ignoreAll,'scayt_ignore_all',y,'scayt_control',2);e(g,'add_word',g.lang.scayt.addWord,'scayt_add_word',z,'scayt_control',3);i.scayt_moresuggest=CKEDITOR.TRISTATE_OFF;i.scayt_ignore=CKEDITOR.TRISTATE_OFF;i.scayt_ignore_all=CKEDITOR.TRISTATE_OFF;i.scayt_add_word=CKEDITOR.TRISTATE_OFF;if(n.fireOnContextMenu)n.fireOnContextMenu(g);return i;});if(g.config.scayt_autoStartup){var l=function(){g.removeListener('showScaytState',l);j.setState(d.isScaytEnabled(g)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF);};g.on('showScaytState',l);d.loadEngine(g);}}});})();CKEDITOR.config.scayt_maxSuggestions=5;CKEDITOR.config.scayt_autoStartup=false;\r
diff --git a/plugins/selection/plugin.js b/plugins/selection/plugin.js
new file mode 100644 (file)
index 0000000..19b3aab
--- /dev/null
@@ -0,0 +1,9 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){function a(){var k=this;try{var h=k.getSelection();if(!h)return;var i=h.getStartElement(),j=new CKEDITOR.dom.elementPath(i);if(!j.compare(k._.selectionPreviousPath)){k._.selectionPreviousPath=j;k.fire('selectionChange',{selection:h,path:j,element:i});}}catch(l){}};var b,c;function d(){c=true;if(b)return;e.call(this);b=CKEDITOR.tools.setTimeout(e,200,this);};function e(){b=null;if(c){CKEDITOR.tools.setTimeout(a,0,this);c=false;}};var f={exec:function(h){switch(h.mode){case 'wysiwyg':h.document.$.execCommand('SelectAll',false,null);break;case 'source':}},canUndo:false};CKEDITOR.plugins.add('selection',{init:function(h){h.on('contentDom',function(){var i=h.document;if(CKEDITOR.env.ie){var j,k;i.on('focusin',function(){if(j){try{j.select();}catch(n){}j=null;}});h.window.on('focus',function(){k=true;m();});h.document.on('beforedeactivate',function(){k=false;h.document.$.execCommand('Unselect');});i.on('mousedown',l);i.on('mouseup',function(){k=true;setTimeout(function(){m(true);},0);});i.on('keydown',l);i.on('keyup',function(){k=true;m();});i.on('selectionchange',m);function l(){k=false;};function m(n){if(k){var o=h.document,p=o&&o.$.selection;if(n&&p&&p.type=='None')if(!o.$.queryCommandEnabled('InsertImage')){CKEDITOR.tools.setTimeout(m,50,this,true);return;}j=p&&p.createRange();d.call(h);}};}else{i.on('mouseup',d,h);i.on('keyup',d,h);}});h.addCommand('selectAll',f);h.ui.addButton('SelectAll',{label:h.lang.selectAll,command:'selectAll'});h.selectionChange=d;}});CKEDITOR.editor.prototype.getSelection=function(){return this.document&&this.document.getSelection();};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath;};CKEDITOR.dom.document.prototype.getSelection=function(){var h=new CKEDITOR.dom.selection(this);return!h||h.isInvalid?null:h;};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;CKEDITOR.dom.selection=function(h){var k=this;var i=h.getCustomData('cke_locked_selection');if(i)return i;k.document=h;k.isLocked=false;k._={cache:{}};if(CKEDITOR.env.ie){var j=k.getNative().createRange();if(!j||j.item&&j.item(0).ownerDocument!=k.document.$||j.parentElement&&j.parentElement().ownerDocument!=k.document.$)k.isInvalid=true;}return k;};var g={img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,th:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype={getNative:CKEDITOR.env.ie?function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.$.selection);\r
+}:function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.getWindow().$.getSelection());},getType:CKEDITOR.env.ie?function(){var h=this._.cache;if(h.type)return h.type;var i=CKEDITOR.SELECTION_NONE;try{var j=this.getNative(),k=j.type;if(k=='Text')i=CKEDITOR.SELECTION_TEXT;if(k=='Control')i=CKEDITOR.SELECTION_ELEMENT;if(j.createRange().parentElement)i=CKEDITOR.SELECTION_TEXT;}catch(l){}return h.type=i;}:function(){var h=this._.cache;if(h.type)return h.type;var i=CKEDITOR.SELECTION_TEXT,j=this.getNative();if(!j)i=CKEDITOR.SELECTION_NONE;else if(j.rangeCount==1){var k=j.getRangeAt(0),l=k.startContainer;if(l==k.endContainer&&l.nodeType==1&&k.endOffset-k.startOffset==1&&g[l.childNodes[k.startOffset].nodeName.toLowerCase()])i=CKEDITOR.SELECTION_ELEMENT;}return h.type=i;},getRanges:CKEDITOR.env.ie?(function(){var h=function(i,j){i=i.duplicate();i.collapse(j);var k=i.parentElement(),l=k.childNodes,m;for(var n=0;n<l.length;n++){var o=l[n];if(o.nodeType==1){m=i.duplicate();m.moveToElementText(o);m.collapse();var p=m.compareEndPoints('StartToStart',i);if(p>0)break;else if(p===0)return{container:k,offset:n};m=null;}}if(!m){m=i.duplicate();m.moveToElementText(k);m.collapse(false);}m.setEndPoint('StartToStart',i);var q=m.text.replace(/(\r\n|\r)/g,'\n').length;while(q>0)q-=l[--n].nodeValue.length;if(q===0)return{container:k,offset:n};else return{container:l[n],offset:-q};};return function(){var t=this;var i=t._.cache;if(i.ranges)return i.ranges;var j=t.getNative(),k=j&&j.createRange(),l=t.getType(),m;if(!j)return[];if(l==CKEDITOR.SELECTION_TEXT){m=new CKEDITOR.dom.range(t.document);var n=h(k,true);m.setStart(new CKEDITOR.dom.node(n.container),n.offset);n=h(k);m.setEnd(new CKEDITOR.dom.node(n.container),n.offset);return i.ranges=[m];}else if(l==CKEDITOR.SELECTION_ELEMENT){var o=t._.cache.ranges=[];for(var p=0;p<k.length;p++){var q=k.item(p),r=q.parentNode,s=0;m=new CKEDITOR.dom.range(t.document);for(;s<r.childNodes.length&&r.childNodes[s]!=q;s++){}m.setStart(new CKEDITOR.dom.node(r),s);m.setEnd(new CKEDITOR.dom.node(r),s+1);o.push(m);}return o;}return i.ranges=[];};})():function(){var h=this._.cache;if(h.ranges)return h.ranges;var i=[],j=this.getNative();if(!j)return[];for(var k=0;k<j.rangeCount;k++){var l=j.getRangeAt(k),m=new CKEDITOR.dom.range(this.document);m.setStart(new CKEDITOR.dom.node(l.startContainer),l.startOffset);m.setEnd(new CKEDITOR.dom.node(l.endContainer),l.endOffset);i.push(m);}return h.ranges=i;},getStartElement:function(){var o=this;\r
+var h=o._.cache;if(h.startElement!==undefined)return h.startElement;var i,j=o.getNative();switch(o.getType()){case CKEDITOR.SELECTION_ELEMENT:return o.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var k=o.getRanges()[0];if(k)if(!k.collapsed){k.optimize();for(;;){var l=k.startContainer,m=k.startOffset;if(m==(l.getChildCount?l.getChildCount():l.getLength()))k.setStartAfter(l);else break;}i=k.startContainer;if(i.type!=CKEDITOR.NODE_ELEMENT)return i.getParent();i=i.getChild(k.startOffset);if(!i||i.type!=CKEDITOR.NODE_ELEMENT)return k.startContainer;var n=i.getFirst();while(n&&n.type==CKEDITOR.NODE_ELEMENT){i=n;n=n.getFirst();}return i;}if(CKEDITOR.env.ie){k=j.createRange();k.collapse(true);i=k.parentElement();}else{i=j.anchorNode;if(i.nodeType!=1)i=i.parentNode;}}return h.startElement=i?new CKEDITOR.dom.element(i):null;},getSelectedElement:function(){var h=this._.cache;if(h.selectedElement!==undefined)return h.selectedElement;var i;if(this.getType()==CKEDITOR.SELECTION_ELEMENT){var j=this.getNative();if(CKEDITOR.env.ie)try{i=j.createRange().item(0);}catch(l){}else{var k=j.getRangeAt(0);i=k.startContainer.childNodes[k.startOffset];}}return h.selectedElement=i?new CKEDITOR.dom.element(i):null;},lock:function(){var h=this;h.getRanges();h.getStartElement();h.getSelectedElement();h._.cache.nativeSel={};h.isLocked=true;h.document.setCustomData('cke_locked_selection',h);},unlock:function(h){var m=this;var i=m.document,j=i.getCustomData('cke_locked_selection');if(j){i.setCustomData('cke_locked_selection',null);if(h){var k=j.getSelectedElement(),l=!k&&j.getRanges();m.isLocked=false;m.reset();i.getBody().focus();if(k)m.selectElement(k);else m.selectRanges(l);}}if(!j||!h){m.isLocked=false;m.reset();}},reset:function(){this._.cache={};},selectElement:function(h){var k=this;if(k.isLocked){var i=new CKEDITOR.dom.range(k.document);i.setStartBefore(h);i.setEndAfter(h);k._.cache.selectedElement=h;k._.cache.startElement=h;k._.cache.ranges=[i];k._.cache.type=CKEDITOR.SELECTION_ELEMENT;return;}if(CKEDITOR.env.ie){k.getNative().empty();try{i=k.document.$.body.createControlRange();i.addElement(h.$);i.select();}catch(l){i=k.document.$.body.createTextRange();i.moveToElementText(h.$);i.select();}k.reset();}else{i=k.document.$.createRange();i.selectNode(h.$);var j=k.getNative();j.removeAllRanges();j.addRange(i);k.reset();}},selectRanges:function(h){var n=this;if(n.isLocked){n._.cache.selectedElement=null;n._.cache.startElement=h[0].getTouchedStartNode();n._.cache.ranges=h;n._.cache.type=CKEDITOR.SELECTION_TEXT;\r
+return;}if(CKEDITOR.env.ie){if(h[0])h[0].select();n.reset();}else{var i=n.getNative();i.removeAllRanges();for(var j=0;j<h.length;j++){var k=h[j],l=n.document.$.createRange(),m=k.startContainer;if(k.collapsed&&CKEDITOR.env.gecko&&CKEDITOR.env.version<10900&&m.type==CKEDITOR.NODE_ELEMENT&&!m.getChildCount())m.appendText('');l.setStart(m.$,k.startOffset);l.setEnd(k.endContainer.$,k.endOffset);i.addRange(l);}n.reset();}},createBookmarks:function(h){var i=[],j=this.getRanges(),k=j.length,l;for(var m=0;m<k;m++){i.push(l=j[m].createBookmark(h,true));h=l.serializable;var n=h?this.document.getById(l.startNode):l.startNode,o=h?this.document.getById(l.endNode):l.endNode;for(var p=m+1;p<k;p++){var q=j[p],r=q.startContainer,s=q.endContainer;r.equals(n.getParent())&&q.startOffset++;r.equals(o.getParent())&&q.startOffset++;s.equals(n.getParent())&&q.endOffset++;s.equals(o.getParent())&&q.endOffset++;}}return i;},createBookmarks2:function(h){var i=[],j=this.getRanges();for(var k=0;k<j.length;k++)i.push(j[k].createBookmark2(h));return i;},selectBookmarks:function(h){var i=[];for(var j=0;j<h.length;j++){var k=new CKEDITOR.dom.range(this.document);k.moveToBookmark(h[j]);i.push(k);}this.selectRanges(i);return this;}};})();CKEDITOR.dom.range.prototype.select=CKEDITOR.env.ie?function(a){var j=this;var b=j.collapsed,c,d,e=j.createBookmark(),f=e.startNode,g;if(!b)g=e.endNode;var h=j.document.$.body.createTextRange();h.moveToElementText(f.$);h.moveStart('character',1);if(g){var i=j.document.$.body.createTextRange();i.moveToElementText(g.$);h.setEndPoint('EndToEnd',i);h.moveEnd('character',-1);}else{c=a||!f.hasPrevious()||f.getPrevious().is&&f.getPrevious().is('br');d=j.document.createElement('span');d.setHtml('&#65279;');d.insertBefore(f);if(c)j.document.createText('').insertBefore(f);}j.setStartBefore(f);f.remove();if(b){if(c){h.moveStart('character',-1);h.select();j.document.$.selection.clear();}else h.select();d.remove();}else{j.setEndBefore(g);g.remove();h.select();}}:function(){var d=this;var a=d.startContainer;if(d.collapsed&&a.type==CKEDITOR.NODE_ELEMENT&&!a.getChildCount())a.append(new CKEDITOR.dom.text(''));var b=d.document.$.createRange();b.setStart(a.$,d.startOffset);try{b.setEnd(d.endContainer.$,d.endOffset);}catch(e){if(e.toString().indexOf('NS_ERROR_ILLEGAL_VALUE')>=0){d.collapse(true);b.setEnd(d.endContainer.$,d.endOffset);}else throw e;}var c=d.document.getSelection().getNative();c.removeAllRanges();c.addRange(b);};\r
diff --git a/plugins/showblocks/images/block_address.png b/plugins/showblocks/images/block_address.png
new file mode 100644 (file)
index 0000000..8bbae6e
Binary files /dev/null and b/plugins/showblocks/images/block_address.png differ
diff --git a/plugins/showblocks/images/block_blockquote.png b/plugins/showblocks/images/block_blockquote.png
new file mode 100644 (file)
index 0000000..cf065ba
Binary files /dev/null and b/plugins/showblocks/images/block_blockquote.png differ
diff --git a/plugins/showblocks/images/block_div.png b/plugins/showblocks/images/block_div.png
new file mode 100644 (file)
index 0000000..a2806b1
Binary files /dev/null and b/plugins/showblocks/images/block_div.png differ
diff --git a/plugins/showblocks/images/block_h1.png b/plugins/showblocks/images/block_h1.png
new file mode 100644 (file)
index 0000000..d43fbdb
Binary files /dev/null and b/plugins/showblocks/images/block_h1.png differ
diff --git a/plugins/showblocks/images/block_h2.png b/plugins/showblocks/images/block_h2.png
new file mode 100644 (file)
index 0000000..27b5475
Binary files /dev/null and b/plugins/showblocks/images/block_h2.png differ
diff --git a/plugins/showblocks/images/block_h3.png b/plugins/showblocks/images/block_h3.png
new file mode 100644 (file)
index 0000000..3c3034f
Binary files /dev/null and b/plugins/showblocks/images/block_h3.png differ
diff --git a/plugins/showblocks/images/block_h4.png b/plugins/showblocks/images/block_h4.png
new file mode 100644 (file)
index 0000000..ab3f64d
Binary files /dev/null and b/plugins/showblocks/images/block_h4.png differ
diff --git a/plugins/showblocks/images/block_h5.png b/plugins/showblocks/images/block_h5.png
new file mode 100644 (file)
index 0000000..93477d0
Binary files /dev/null and b/plugins/showblocks/images/block_h5.png differ
diff --git a/plugins/showblocks/images/block_h6.png b/plugins/showblocks/images/block_h6.png
new file mode 100644 (file)
index 0000000..11ea1c2
Binary files /dev/null and b/plugins/showblocks/images/block_h6.png differ
diff --git a/plugins/showblocks/images/block_p.png b/plugins/showblocks/images/block_p.png
new file mode 100644 (file)
index 0000000..d055c51
Binary files /dev/null and b/plugins/showblocks/images/block_p.png differ
diff --git a/plugins/showblocks/images/block_pre.png b/plugins/showblocks/images/block_pre.png
new file mode 100644 (file)
index 0000000..be8ad26
Binary files /dev/null and b/plugins/showblocks/images/block_pre.png differ
diff --git a/plugins/showblocks/plugin.js b/plugins/showblocks/plugin.js
new file mode 100644 (file)
index 0000000..6689541
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a='.%2 p,.%2 div,.%2 pre,.%2 address,.%2 blockquote,.%2 h1,.%2 h2,.%2 h3,.%2 h4,.%2 h5,.%2 h6{background-repeat: no-repeat;border: 1px dotted gray;padding-top: 8px;padding-left: 8px;}.%2 p{%1p.png);}.%2 div{%1div.png);}.%2 pre{%1pre.png);}.%2 address{%1address.png);}.%2 blockquote{%1blockquote.png);}.%2 h1{%1h1.png);}.%2 h2{%1h2.png);}.%2 h3{%1h3.png);}.%2 h4{%1h4.png);}.%2 h5{%1h5.png);}.%2 h6{%1h6.png);}',b=/%1/g,c=/%2/g,d={preserveState:true,exec:function(e){this.toggleState();this.refresh(e);},refresh:function(e){var f=this.state==CKEDITOR.TRISTATE_ON?'addClass':'removeClass';e.document.getBody()[f]('cke_show_blocks');}};CKEDITOR.plugins.add('showblocks',{requires:['wysiwygarea'],init:function(e){var f=e.addCommand('showblocks',d);f.canUndo=false;if(e.config.startupOutlineBlocks)f.setState(CKEDITOR.TRISTATE_ON);e.addCss(a.replace(b,'background-image: url('+CKEDITOR.getUrl(this.path)+'images/block_').replace(c,'cke_show_blocks '));e.ui.addButton('ShowBlocks',{label:e.lang.showBlocks,command:'showblocks'});e.on('mode',function(){if(f.state!=CKEDITOR.TRISTATE_DISABLED)f.refresh(e);});e.on('contentDom',function(){if(f.state!=CKEDITOR.TRISTATE_DISABLED)f.refresh(e);});}});})();CKEDITOR.config.startupOutlineBlocks=false;\r
diff --git a/plugins/smiley/dialogs/smiley.js b/plugins/smiley/dialogs/smiley.js
new file mode 100644 (file)
index 0000000..befff5c
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('smiley',function(a){var b=a.config,c=b.smiley_images,d=8,e,f,g=function(k){var l=k.data.getTarget(),m=l.getName();if(m=='td')l=l.getChild([0,0]);else if(m=='a')l=l.getChild(0);else if(m!='img')return;var n=l.getAttribute('cke_src'),o=l.getAttribute('title'),p=a.document.createElement('img',{attributes:{src:n,_cke_saved_src:n,title:o,alt:o}});a.insertElement(p);f.hide();},h=CKEDITOR.tools.addFunction(function(k,l){k=new CKEDITOR.dom.event(k);l=new CKEDITOR.dom.element(l);var m,n,o=k.getKeystroke();switch(o){case 39:if(m=l.getParent().getNext()){n=m.getChild(0);n.focus();}k.preventDefault();break;case 37:if(m=l.getParent().getPrevious()){n=m.getChild(0);n.focus();}k.preventDefault();break;case 38:if(m=l.getParent().getParent().getPrevious()){n=m.getChild([l.getParent().getIndex(),0]);n.focus();}k.preventDefault();break;case 40:if(m=l.getParent().getParent().getNext()){n=m.getChild([l.getParent().getIndex(),0]);if(n)n.focus();}k.preventDefault();break;case 32:g({data:k});k.preventDefault();break;case 9:if(m=l.getParent().getNext()){n=m.getChild(0);n.focus();k.preventDefault(true);}else if(m=l.getParent().getParent().getNext()){n=m.getChild([0,0]);if(n)n.focus();k.preventDefault(true);}break;case CKEDITOR.SHIFT+9:if(m=l.getParent().getPrevious()){n=m.getChild(0);n.focus();k.preventDefault(true);}else if(m=l.getParent().getParent().getPrevious()){n=m.getLast().getChild(0);n.focus();k.preventDefault(true);}break;default:return;}}),i=['<table cellspacing="2" cellpadding="2"',CKEDITOR.env.ie&&CKEDITOR.env.quirks?' style="position:absolute;"':'','><tbody>'];for(e=0;e<c.length;e++){if(e%d===0)i.push('<tr>');i.push('<td class="cke_dark_background cke_hand cke_centered" style="vertical-align: middle;"><a href="javascript:void(0)" class="cke_smile" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ',h,', event, this );">','<img class="hand" title="',b.smiley_descriptions[e],'" cke_src="',CKEDITOR.tools.htmlEncode(b.smiley_path+c[e]),'" alt="',b.smiley_descriptions[e],'"',' src="',CKEDITOR.tools.htmlEncode(b.smiley_path+c[e]),'"',CKEDITOR.env.ie?" onload=\"this.setAttribute('width', 2); this.removeAttribute('width');\" ":'','></a>','</td>');if(e%d==d-1)i.push('</tr>');}if(e<d-1){for(;e<d-1;e++)i.push('<td></td>');i.push('</tr>');}i.push('</tbody></table>');var j={type:'html',html:i.join(''),onLoad:function(k){f=k.sender;},focus:function(){var k=this.getElement().getChild([0,0,0,0]);k.focus();},onClick:g,style:'width: 100%; height: 100%; border-collapse: separate;'};\r
+return{title:a.lang.smiley.title,minWidth:270,minHeight:120,contents:[{id:'tab1',label:'',title:'',expand:true,padding:0,elements:[j]}],buttons:[CKEDITOR.dialog.cancelButton]};});\r
diff --git a/plugins/smiley/images/angel_smile.gif b/plugins/smiley/images/angel_smile.gif
new file mode 100644 (file)
index 0000000..2cf4894
Binary files /dev/null and b/plugins/smiley/images/angel_smile.gif differ
diff --git a/plugins/smiley/images/angry_smile.gif b/plugins/smiley/images/angry_smile.gif
new file mode 100644 (file)
index 0000000..40b52d3
Binary files /dev/null and b/plugins/smiley/images/angry_smile.gif differ
diff --git a/plugins/smiley/images/broken_heart.gif b/plugins/smiley/images/broken_heart.gif
new file mode 100644 (file)
index 0000000..b6d0166
Binary files /dev/null and b/plugins/smiley/images/broken_heart.gif differ
diff --git a/plugins/smiley/images/confused_smile.gif b/plugins/smiley/images/confused_smile.gif
new file mode 100644 (file)
index 0000000..a52db7a
Binary files /dev/null and b/plugins/smiley/images/confused_smile.gif differ
diff --git a/plugins/smiley/images/cry_smile.gif b/plugins/smiley/images/cry_smile.gif
new file mode 100644 (file)
index 0000000..1ef6ba4
Binary files /dev/null and b/plugins/smiley/images/cry_smile.gif differ
diff --git a/plugins/smiley/images/devil_smile.gif b/plugins/smiley/images/devil_smile.gif
new file mode 100644 (file)
index 0000000..bfb2507
Binary files /dev/null and b/plugins/smiley/images/devil_smile.gif differ
diff --git a/plugins/smiley/images/embaressed_smile.gif b/plugins/smiley/images/embaressed_smile.gif
new file mode 100644 (file)
index 0000000..d9cedc5
Binary files /dev/null and b/plugins/smiley/images/embaressed_smile.gif differ
diff --git a/plugins/smiley/images/envelope.gif b/plugins/smiley/images/envelope.gif
new file mode 100644 (file)
index 0000000..94e0b1f
Binary files /dev/null and b/plugins/smiley/images/envelope.gif differ
diff --git a/plugins/smiley/images/heart.gif b/plugins/smiley/images/heart.gif
new file mode 100644 (file)
index 0000000..680ae2f
Binary files /dev/null and b/plugins/smiley/images/heart.gif differ
diff --git a/plugins/smiley/images/kiss.gif b/plugins/smiley/images/kiss.gif
new file mode 100644 (file)
index 0000000..70e5255
Binary files /dev/null and b/plugins/smiley/images/kiss.gif differ
diff --git a/plugins/smiley/images/lightbulb.gif b/plugins/smiley/images/lightbulb.gif
new file mode 100644 (file)
index 0000000..d44c2ff
Binary files /dev/null and b/plugins/smiley/images/lightbulb.gif differ
diff --git a/plugins/smiley/images/omg_smile.gif b/plugins/smiley/images/omg_smile.gif
new file mode 100644 (file)
index 0000000..ab7ea69
Binary files /dev/null and b/plugins/smiley/images/omg_smile.gif differ
diff --git a/plugins/smiley/images/regular_smile.gif b/plugins/smiley/images/regular_smile.gif
new file mode 100644 (file)
index 0000000..e5bc34b
Binary files /dev/null and b/plugins/smiley/images/regular_smile.gif differ
diff --git a/plugins/smiley/images/sad_smile.gif b/plugins/smiley/images/sad_smile.gif
new file mode 100644 (file)
index 0000000..ae4cf1e
Binary files /dev/null and b/plugins/smiley/images/sad_smile.gif differ
diff --git a/plugins/smiley/images/shades_smile.gif b/plugins/smiley/images/shades_smile.gif
new file mode 100644 (file)
index 0000000..b454017
Binary files /dev/null and b/plugins/smiley/images/shades_smile.gif differ
diff --git a/plugins/smiley/images/teeth_smile.gif b/plugins/smiley/images/teeth_smile.gif
new file mode 100644 (file)
index 0000000..7d734d1
Binary files /dev/null and b/plugins/smiley/images/teeth_smile.gif differ
diff --git a/plugins/smiley/images/thumbs_down.gif b/plugins/smiley/images/thumbs_down.gif
new file mode 100644 (file)
index 0000000..90b9978
Binary files /dev/null and b/plugins/smiley/images/thumbs_down.gif differ
diff --git a/plugins/smiley/images/thumbs_up.gif b/plugins/smiley/images/thumbs_up.gif
new file mode 100644 (file)
index 0000000..b633284
Binary files /dev/null and b/plugins/smiley/images/thumbs_up.gif differ
diff --git a/plugins/smiley/images/tounge_smile.gif b/plugins/smiley/images/tounge_smile.gif
new file mode 100644 (file)
index 0000000..b2e657f
Binary files /dev/null and b/plugins/smiley/images/tounge_smile.gif differ
diff --git a/plugins/smiley/images/whatchutalkingabout_smile.gif b/plugins/smiley/images/whatchutalkingabout_smile.gif
new file mode 100644 (file)
index 0000000..7709882
Binary files /dev/null and b/plugins/smiley/images/whatchutalkingabout_smile.gif differ
diff --git a/plugins/smiley/images/wink_smile.gif b/plugins/smiley/images/wink_smile.gif
new file mode 100644 (file)
index 0000000..b210295
Binary files /dev/null and b/plugins/smiley/images/wink_smile.gif differ
diff --git a/plugins/smiley/plugin.js b/plugins/smiley/plugin.js
new file mode 100644 (file)
index 0000000..18be49b
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('smiley',{requires:['dialog'],init:function(a){a.addCommand('smiley',new CKEDITOR.dialogCommand('smiley'));a.ui.addButton('Smiley',{label:a.lang.smiley.toolbar,command:'smiley'});CKEDITOR.dialog.add('smiley',this.path+'dialogs/smiley.js');}});CKEDITOR.config.smiley_path=CKEDITOR.basePath+'plugins/smiley/images/';CKEDITOR.config.smiley_images=['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'];CKEDITOR.config.smiley_descriptions=[':)',':(',';)',':D',':/',':P','','','','','','','',';(','','','','','',':kiss',''];\r
diff --git a/plugins/sourcearea/plugin.js b/plugins/sourcearea/plugin.js
new file mode 100644 (file)
index 0000000..ce02f70
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('sourcearea',{requires:['editingblock'],init:function(a){var b=CKEDITOR.plugins.sourcearea;a.on('editingBlockReady',function(){var c,d;a.addMode('source',{load:function(e,f){if(CKEDITOR.env.ie&&CKEDITOR.env.version<8)e.setStyle('position','relative');a.textarea=c=new CKEDITOR.dom.element('textarea');c.setAttributes({dir:'ltr',tabIndex:-1});c.addClass('cke_source');var g={width:CKEDITOR.env.ie7Compat?'99%':'100%',height:'100%',resize:'none',outline:'none','text-align':'left'};if(CKEDITOR.env.ie){if(!CKEDITOR.env.ie8Compat){d=function(){c.hide();c.setStyle('height',e.$.clientHeight+'px');c.show();};a.on('resize',d);g.height=e.$.clientHeight+'px';}}else c.on('mousedown',function(i){i=i.data.$;if(i.stopPropagation)i.stopPropagation();});e.setHtml('');e.append(c);c.setStyles(g);a.mayBeDirty=true;this.loadData(f);var h=a.keystrokeHandler;if(h)h.attach(c);setTimeout(function(){a.mode='source';a.fire('mode');},CKEDITOR.env.gecko||CKEDITOR.env.webkit?100:0);},loadData:function(e){c.setValue(e);},getData:function(){return c.getValue();},getSnapshotData:function(){return c.getValue();},unload:function(e){a.textarea=c=null;if(d)a.removeListener('resize',d);if(CKEDITOR.env.ie&&CKEDITOR.env.version<8)e.removeStyle('position');},focus:function(){c.focus();}});});a.addCommand('source',b.commands.source);if(a.ui.addButton)a.ui.addButton('Source',{label:a.lang.source,command:'source'});a.on('mode',function(){a.getCommand('source').setState(a.mode=='source'?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF);});}});CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},exec:function(a){if(a.mode=='wysiwyg')a.fire('saveSnapshot');a.getCommand('source').setState(CKEDITOR.TRISTATE_DISABLED);a.setMode(a.mode=='source'?'wysiwyg':'source');},canUndo:false}}};\r
diff --git a/plugins/specialchar/dialogs/specialchar.js b/plugins/specialchar/dialogs/specialchar.js
new file mode 100644 (file)
index 0000000..62a9a41
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('specialchar',function(a){var b,c=function(i){var j,k;if(i.data)j=i.data.getTarget();else j=new CKEDITOR.dom.element(i);if(j.getName()=='a'&&(k=j.getChild(0).getHtml())){j.removeClass('cke_light_background');b.hide();a.insertHtml(k);}},d=CKEDITOR.tools.addFunction(c),e,f=function(i,j){var k;j=j||i.data.getTarget();if(j.getName()=='span')j=j.getParent();if(j.getName()=='a'&&(k=j.getChild(0).getHtml())){if(e)g(null,e);var l=b.getContentElement('info','htmlPreview').getElement();b.getContentElement('info','charPreview').getElement().setHtml(k);l.setHtml(CKEDITOR.tools.htmlEncode(k));j.getParent().addClass('cke_light_background');e=j;}},g=function(i,j){j=j||i.data.getTarget();if(j.getName()=='span')j=j.getParent();if(j.getName()=='a'){b.getContentElement('info','charPreview').getElement().setHtml('&nbsp;');b.getContentElement('info','htmlPreview').getElement().setHtml('&nbsp;');j.getParent().removeClass('cke_light_background');e=undefined;}},h=CKEDITOR.tools.addFunction(function(i){i=new CKEDITOR.dom.event(i);var j=i.getTarget(),k,l,m=i.getKeystroke();switch(m){case 39:if(k=j.getParent().getNext()){l=k.getChild(0);if(l.type==1){l.focus();g(null,j);f(null,l);}}i.preventDefault();break;case 37:if(k=j.getParent().getPrevious()){l=k.getChild(0);l.focus();g(null,j);f(null,l);}i.preventDefault();break;case 38:if(k=j.getParent().getParent().getPrevious()){l=k.getChild([j.getParent().getIndex(),0]);l.focus();g(null,j);f(null,l);}i.preventDefault();break;case 40:if(k=j.getParent().getParent().getNext()){l=k.getChild([j.getParent().getIndex(),0]);if(l&&l.type==1){l.focus();g(null,j);f(null,l);}}i.preventDefault();break;case 32:c({data:i});i.preventDefault();break;case 9:if(k=j.getParent().getNext()){l=k.getChild(0);if(l.type==1){l.focus();g(null,j);f(null,l);i.preventDefault(true);}else g(null,j);}else if(k=j.getParent().getParent().getNext()){l=k.getChild([0,0]);if(l&&l.type==1){l.focus();g(null,j);f(null,l);i.preventDefault(true);}else g(null,j);}break;case CKEDITOR.SHIFT+9:if(k=j.getParent().getPrevious()){l=k.getChild(0);l.focus();g(null,j);f(null,l);i.preventDefault(true);}else if(k=j.getParent().getParent().getPrevious()){l=k.getLast().getChild(0);l.focus();g(null,j);f(null,l);i.preventDefault(true);}else g(null,j);break;default:return;}});return{title:a.lang.specialChar.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,chars:['!','&quot;','#','$','%','&amp;',"'",'(',')','*','+','-','.','/','0','1','2','3','4','5','6','7','8','9',':',';','&lt;','=','&gt;','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[',']','^','_','`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','{','|','}','~','&euro;','&lsquo;','&rsquo;','&rsquo;','&ldquo;','&rdquo;','&ndash;','&mdash;','&iexcl;','&cent;','&pound;','&curren;','&yen;','&brvbar;','&sect;','&uml;','&copy;','&ordf;','&laquo;','&not;','&reg;','&macr;','&deg;','&plusmn;','&sup2;','&sup3;','&acute;','&micro;','&para;','&middot;','&cedil;','&sup1;','&ordm;','&raquo;','&frac14;','&frac12;','&frac34;','&iquest;','&Agrave;','&Aacute;','&Acirc;','&Atilde;','&Auml;','&Aring;','&AElig;','&Ccedil;','&Egrave;','&Eacute;','&Ecirc;','&Euml;','&Igrave;','&Iacute;','&Icirc;','&Iuml;','&ETH;','&Ntilde;','&Ograve;','&Oacute;','&Ocirc;','&Otilde;','&Ouml;','&times;','&Oslash;','&Ugrave;','&Uacute;','&Ucirc;','&Uuml;','&Yacute;','&THORN;','&szlig;','&agrave;','&aacute;','&acirc;','&atilde;','&auml;','&aring;','&aelig;','&ccedil;','&egrave;','&eacute;','&ecirc;','&euml;','&igrave;','&iacute;','&icirc;','&iuml;','&eth;','&ntilde;','&ograve;','&oacute;','&ocirc;','&otilde;','&ouml;','&divide;','&oslash;','&ugrave;','&uacute;','&ucirc;','&uuml;','&uuml;','&yacute;','&thorn;','&yuml;','&OElig;','&oelig;','&#372;','&#374','&#373','&#375;','&sbquo;','&#8219;','&bdquo;','&hellip;','&trade;','&#9658;','&bull;','&rarr;','&rArr;','&hArr;','&diams;','&asymp;'],onLoad:function(){var i=this.definition.charColumns,j=this.definition.chars,k=['<table style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">'],l=0;\r
+while(l<j.length){k.push('<tr>');for(var m=0;m<i;m++,l++){if(j[l])k.push('<td class="cke_dark_background" style="cursor: default"><a href="javascript: void(0);" style="cursor: inherit; display: block; height: 1.25em; margin-top: 0.25em; text-align: center;" title="',j[l].replace(/&/g,'&amp;'),'" onkeydown="CKEDITOR.tools.callFunction( '+h+', event, this )"'+' onclick="CKEDITOR.tools.callFunction('+d+', this); return false;"'+' tabindex="-1">'+'<span style="margin: 0 auto;cursor: inherit">'+j[l]+'</span></a>');else k.push('<td class="cke_dark_background">&nbsp;');k.push('</td>');}k.push('</tr>');}k.push('</tbody></table>');this.getContentElement('info','charContainer').getElement().setHtml(k.join(''));},contents:[{id:'info',label:a.lang.common.generalTab,title:a.lang.common.generalTab,padding:0,align:'top',elements:[{type:'hbox',align:'top',widths:['320px','90px'],children:[{type:'html',id:'charContainer',html:'',onMouseover:f,onMouseout:g,focus:function(){var i=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){i.focus();f(null,i);});},onShow:function(){var i=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){i.focus();f(null,i);});},onLoad:function(i){b=i.sender;}},{type:'hbox',align:'top',widths:['100%'],children:[{type:'vbox',align:'top',children:[{type:'html',html:'<div></div>'},{type:'html',id:'charPreview',style:"border:1px solid #eeeeee;background-color:#EAEAD1;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:'<div>&nbsp;</div>'},{type:'html',id:'htmlPreview',style:"border:1px solid #eeeeee;background-color:#EAEAD1;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:'<div>&nbsp;</div>'}]}]}]}]}]};});\r
diff --git a/plugins/specialchar/plugin.js b/plugins/specialchar/plugin.js
new file mode 100644 (file)
index 0000000..148ed29
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('specialchar',{init:function(a){var b='specialchar';CKEDITOR.dialog.add(b,this.path+'dialogs/specialchar.js');a.addCommand(b,new CKEDITOR.dialogCommand(b));a.ui.addButton('SpecialChar',{label:a.lang.specialChar.toolbar,command:b});}});\r
diff --git a/plugins/styles/plugin.js b/plugins/styles/plugin.js
new file mode 100644 (file)
index 0000000..a7a9b50
--- /dev/null
@@ -0,0 +1,10 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('styles',{requires:['selection']});CKEDITOR.editor.prototype.attachStyleStateChange=function(a,b){var c=this._.styleStateChangeCallbacks;if(!c){c=this._.styleStateChangeCallbacks=[];this.on('selectionChange',function(d){for(var e=0;e<c.length;e++){var f=c[e],g=f.style.checkActive(d.data.path)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;if(f.state!==g){f.fn.call(this,g);f.state!==g;}}});}c.push({style:a,fn:b});};CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3;(function(){var a={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1},b={a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,ul:1},c=/\s*(?:;\s*|$)/;CKEDITOR.style=function(A,B){if(B){A=CKEDITOR.tools.clone(A);v(A.attributes,B);v(A.styles,B);}var C=this.element=(A.element||'*').toLowerCase();this.type=C=='#'||a[C]?CKEDITOR.STYLE_BLOCK:b[C]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE;this._={definition:A};};CKEDITOR.style.prototype={apply:function(A){z.call(this,A,false);},remove:function(A){z.call(this,A,true);},applyToRange:function(A){var B=this;return(B.applyToRange=B.type==CKEDITOR.STYLE_INLINE?d:B.type==CKEDITOR.STYLE_BLOCK?f:null).call(B,A);},removeFromRange:function(A){return(this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?e:null).call(this,A);},applyToObject:function(A){t(A,this);},checkActive:function(A){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(A.block||A.blockLimit,true);case CKEDITOR.STYLE_INLINE:var B=A.elements;for(var C=0,D;C<B.length;C++){D=B[C];if(D==A.block||D==A.blockLimit)continue;if(this.checkElementRemovable(D,true))return true;}}return false;},checkElementRemovable:function(A,B){if(!A)return false;var C=this._.definition,D;if(A.getName()==this.element){if(!B&&!A.hasAttributes())return true;D=w(C);if(D._length){for(var E in D){if(E=='_length')continue;var F=A.getAttribute(E);if(D[E]==(E=='style'?y(F,false):F)){if(!B)return true;}else if(B)return false;}if(B)return true;}else return true;}var G=x(this)[A.getName()];if(G){if(!(D=G.attributes))return true;for(var H=0;H<D.length;H++){E=D[H][0];var I=A.getAttribute(E);if(I){var J=D[H][1];if(J===null||typeof J=='string'&&I==J||J.test(I))return true;}}}return false;}};CKEDITOR.style.getStyleText=function(A){var B=A._ST;if(B)return B;B=A.styles;var C=A.attributes&&A.attributes.style||'';if(C.length)C=C.replace(c,';');for(var D in B)C+=D+':'+B[D]+';';if(C.length)C=y(C);return A._ST=C;};function d(A){var aa=this;var B=A.document;if(A.collapsed){var C=s(aa,B);\r
+A.insertNode(C);A.moveToPosition(C,CKEDITOR.POSITION_BEFORE_END);return;}var D=aa.element,E=aa._.definition,F,G=CKEDITOR.dtd[D]||(F=true,CKEDITOR.dtd.span),H=A.createBookmark();A.enlarge(CKEDITOR.ENLARGE_ELEMENT);A.trim();var I=A.getBoundaryNodes(),J=I.startNode,K=I.endNode.getNextSourceNode(true);if(!K){var L;K=L=B.createText('');K.insertAfter(A.endContainer);}var M=K.getParent();if(M&&M.getAttribute('_fck_bookmark'))K=M;if(K.equals(J)){K=K.getNextSourceNode(true);if(!K){K=L=B.createText('');K.insertAfter(J);}}var N=J,O,P;while(N){var Q=false;if(N.equals(K)){N=null;Q=true;}else{var R=N.type,S=R==CKEDITOR.NODE_ELEMENT?N.getName():null;if(S&&N.getAttribute('_fck_bookmark')){N=N.getNextSourceNode(true);continue;}if(!S||G[S]&&(N.getPosition(K)|CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED)==(CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_IDENTICAL+CKEDITOR.POSITION_IS_CONTAINED)){var T=N.getParent();if(T&&((T.getDtd()||CKEDITOR.dtd.span)[D]||F)){if(!O&&(!S||!CKEDITOR.dtd.$removeEmpty[S]||(N.getPosition(K)|CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED)==(CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_IDENTICAL+CKEDITOR.POSITION_IS_CONTAINED))){O=new CKEDITOR.dom.range(B);O.setStartBefore(N);}if(R==CKEDITOR.NODE_TEXT||R==CKEDITOR.NODE_ELEMENT&&!N.getChildCount()){var U=N,V;while(!U.$.nextSibling&&(V=U.getParent(),G[V.getName()])&&((V.getPosition(J)|CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED)==(CKEDITOR.POSITION_FOLLOWING+CKEDITOR.POSITION_IDENTICAL+CKEDITOR.POSITION_IS_CONTAINED)))U=V;O.setEndAfter(U);if(!U.$.nextSibling)Q=true;if(!P)P=R!=CKEDITOR.NODE_TEXT||/[^\s\ufeff]/.test(N.getText());}}else Q=true;}else Q=true;N=N.getNextSourceNode();}if(Q&&P&&O&&!O.collapsed){var W=s(aa,B),X=O.getCommonAncestor();while(W&&X){if(X.getName()==D){for(var Y in E.attributes)if(W.getAttribute(Y)==X.getAttribute(Y))W.removeAttribute(Y);for(var Z in E.styles)if(W.getStyle(Z)==X.getStyle(Z))W.removeStyle(Z);if(!W.hasAttributes()){W=null;break;}}X=X.getParent();}if(W){O.extractContents().appendTo(W);n(aa,W);O.insertNode(W);q(W);if(!CKEDITOR.env.ie)W.$.normalize();}O=null;}}L&&L.remove();A.moveToBookmark(H);};function e(A){A.enlarge(CKEDITOR.ENLARGE_ELEMENT);var B=A.createBookmark(),C=B.startNode;if(A.collapsed){var D=new CKEDITOR.dom.elementPath(C.getParent()),E;for(var F=0,G;F<D.elements.length&&(G=D.elements[F]);F++){if(G==D.block||G==D.blockLimit)break;if(this.checkElementRemovable(G)){var H=A.checkBoundaryOfElement(G,CKEDITOR.END),I=!H&&A.checkBoundaryOfElement(G,CKEDITOR.START);\r
+if(I||H){E=G;E.match=I?'start':'end';}else{q(G);m(this,G);}}}if(E){var J=C;for(F=0;true;F++){var K=D.elements[F];if(K.equals(E))break;else if(K.match)continue;else K=K.clone();K.append(J);J=K;}J[E.match=='start'?'insertBefore':'insertAfter'](E);}}else{var L=B.endNode,M=this;function N(){var Q=new CKEDITOR.dom.elementPath(C.getParent()),R=new CKEDITOR.dom.elementPath(L.getParent()),S=null,T=null;for(var U=0;U<Q.elements.length;U++){var V=Q.elements[U];if(V==Q.block||V==Q.blockLimit)break;if(M.checkElementRemovable(V))S=V;}for(U=0;U<R.elements.length;U++){V=R.elements[U];if(V==R.block||V==R.blockLimit)break;if(M.checkElementRemovable(V))T=V;}if(T)L.breakParent(T);if(S)C.breakParent(S);};N();var O=C.getNext();while(!O.equals(L)){var P=O.getNextSourceNode();if(O.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(O)){if(O.getName()==this.element)m(this,O);else o(O,x(this)[O.getName()]);if(P.type==CKEDITOR.NODE_ELEMENT&&P.contains(C)){N();P=C.getNext();}}O=P;}}A.moveToBookmark(B);};function f(A){var B=A.createBookmark(true),C=A.createIterator();C.enforceRealBlocks=true;var D,E=A.document,F;while(D=C.getNextParagraph()){var G=s(this,E);g(D,G);}A.moveToBookmark(B);};function g(A,B){var C=B.is('pre'),D=A.is('pre'),E=C&&!D,F=!C&&D;if(E)B=l(A,B);else if(F)B=k(i(A),B);else A.moveChildren(B);B.replace(A);if(C)h(B);};function h(A){var B;if(!((B=A.getPreviousSourceNode(true,CKEDITOR.NODE_ELEMENT))&&(B.is&&B.is('pre'))))return;var C=j(B.getHtml(),/\n$/,'')+'\n\n'+j(A.getHtml(),/^\n/,'');if(CKEDITOR.env.ie)A.$.outerHTML='<pre>'+C+'</pre>';else A.setHtml(C);B.remove();};function i(A){var B=/(\S\s*)\n(?:\s|(<span[^>]+_fck_bookmark.*?\/span>))*\n(?!$)/gi,C=A.getName(),D=j(A.getOuterHtml(),B,function(F,G,H){return G+'</pre>'+H+'<pre>';}),E=[];D.replace(/<pre>([\s\S]*?)<\/pre>/gi,function(F,G){E.push(G);});return E;};function j(A,B,C){var D='',E='';A=A.replace(/(^<span[^>]+_fck_bookmark.*?\/span>)|(<span[^>]+_fck_bookmark.*?\/span>$)/gi,function(F,G,H){G&&(D=G);H&&(E=H);return '';});return D+A.replace(B,C)+E;};function k(A,B){var C=new CKEDITOR.dom.documentFragment(B.getDocument());for(var D=0;D<A.length;D++){var E=A[D];E=E.replace(/(\r\n|\r)/g,'\n');E=j(E,/^[ \t]*\n/,'');E=j(E,/\n$/,'');E=j(E,/^[ \t]+|[ \t]+$/g,function(G,H,I){if(G.length==1)return '&nbsp;';else if(!H)return CKEDITOR.tools.repeat('&nbsp;',G.length-1)+' ';else return ' '+CKEDITOR.tools.repeat('&nbsp;',G.length-1);});E=E.replace(/\n/g,'<br>');E=E.replace(/[ \t]{2,}/g,function(G){return CKEDITOR.tools.repeat('&nbsp;',G.length-1)+' ';\r
+});var F=B.clone();F.setHtml(E);C.append(F);}return C;};function l(A,B){var C=A.getHtml();C=j(C,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,'');C=C.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,'$1');C=C.replace(/([ \t\n\r]+|&nbsp;)/g,' ');C=C.replace(/<br\b[^>]*>/gi,'\n');if(CKEDITOR.env.ie){var D=A.getDocument().createElement('div');D.append(B);B.$.outerHTML='<pre>'+C+'</pre>';B=D.getFirst().remove();}else B.setHtml(C);return B;};function m(A,B){var C=A._.definition,D=C.attributes,E=C.styles,F=x(A);function G(){for(var I in D){if(I=='class'&&B.getAttribute(I)!=D[I])continue;B.removeAttribute(I);}};G();for(var H in E)B.removeStyle(H);D=F[B.getName()];if(D)G();p(B);};function n(A,B){var C=A._.definition,D=C.attributes,E=C.styles,F=x(A),G=B.getElementsByTag(A.element);for(var H=G.count();--H>=0;)m(A,G.getItem(H));for(var I in F)if(I!=A.element){G=B.getElementsByTag(I);for(H=G.count()-1;H>=0;H--){var J=G.getItem(H);o(J,F[I]);}}};function o(A,B){var C=B&&B.attributes;if(C)for(var D=0;D<C.length;D++){var E=C[D][0],F;if(F=A.getAttribute(E)){var G=C[D][1];if(G===null||G.test&&G.test(F)||typeof G=='string'&&F==G)A.removeAttribute(E);}}p(A);};function p(A){if(!A.hasAttributes()){var B=A.getFirst(),C=A.getLast();A.remove(true);if(B){q(B);if(C&&!B.equals(C))q(C);}}};function q(A){if(!A||A.type!=CKEDITOR.NODE_ELEMENT||!CKEDITOR.dtd.$removeEmpty[A.getName()])return;r(A,A.getNext(),true);r(A,A.getPrevious());};function r(A,B,C){if(B&&B.type==CKEDITOR.NODE_ELEMENT){var D=B.getAttribute('_fck_bookmark');if(D)B=C?B.getNext():B.getPrevious();if(B&&B.type==CKEDITOR.NODE_ELEMENT&&A.isIdentical(B)){var E=C?A.getLast():A.getFirst();if(D)(C?B.getPrevious():B.getNext()).move(A,!C);B.moveChildren(A,!C);B.remove();if(E)q(E);}}};function s(A,B){var C,D=A._.definition,E=A.element;if(E=='*')E='span';C=new CKEDITOR.dom.element(E,B);return t(C,A);};function t(A,B){var C=B._.definition,D=C.attributes,E=CKEDITOR.style.getStyleText(C);if(D)for(var F in D)A.setAttribute(F,D[F]);if(E)A.setAttribute('style',E);return A;};var u=/#\((.+?)\)/g;function v(A,B){for(var C in A)A[C]=A[C].replace(u,function(D,E){return B[E];});};function w(A){var B=A._AC;if(B)return B;B={};var C=0,D=A.attributes;if(D)for(var E in D){C++;B[E]=D[E];}var F=CKEDITOR.style.getStyleText(A);if(F){if(!B.style)C++;B.style=F;}B._length=C;return A._AC=B;};function x(A){if(A._.overrides)return A._.overrides;var B=A._.overrides={},C=A._.definition.overrides;if(C){if(!CKEDITOR.tools.isArray(C))C=[C];for(var D=0;D<C.length;D++){var E=C[D],F,G,H;\r
+if(typeof E=='string')F=E.toLowerCase();else{F=E.element?E.element.toLowerCase():A.element;H=E.attributes;}G=B[F]||(B[F]={});if(H){var I=G.attributes=G.attributes||[];for(var J in H)I.push([J.toLowerCase(),H[J]]);}}}return B;};function y(A,B){var C;if(B!==false){var D=new CKEDITOR.dom.element('span');D.setAttribute('style',A);C=D.getAttribute('style');}else C=A;return C.replace(/\s*([;:])\s*/,'$1').replace(/([^\s;])$/,'$1;').toLowerCase();};function z(A,B){var C=A.getSelection(),D=C.getRanges(),E=B?this.removeFromRange:this.applyToRange;for(var F=0;F<D.length;F++)E.call(this,D[F]);C.selectRanges(D);};})();CKEDITOR.styleCommand=function(a){this.style=a;};CKEDITOR.styleCommand.prototype.exec=function(a){var c=this;a.focus();var b=a.document;if(b)if(c.state==CKEDITOR.TRISTATE_OFF)c.style.apply(b);else if(c.state==CKEDITOR.TRISTATE_ON)c.style.remove(b);return!!b;};\r
diff --git a/plugins/stylescombo/plugin.js b/plugins/stylescombo/plugin.js
new file mode 100644 (file)
index 0000000..617f186
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){CKEDITOR.plugins.add('stylescombo',{requires:['richcombo','styles'],init:function(d){var e=d.config,f=d.lang.stylesCombo,g=this.path,h;d.ui.addRichCombo('Styles',{label:f.label,title:f.panelTitle,voiceLabel:f.voiceLabel,className:'cke_styles',multiSelect:true,panel:{css:[e.contentsCss,CKEDITOR.getUrl(d.skinPath+'editor.css')],voiceLabel:f.panelVoiceLabel},init:function(){var i=this,j=e.stylesCombo_stylesSet.split(':',2),k=j[1]||CKEDITOR.getUrl(g+'styles/'+j[0]+'.js');j=j[0];CKEDITOR.loadStylesSet(j,k,function(l){var m,n,o=[];h={};for(var p=0;p<l.length;p++){var q=l[p];n=q.name;m=h[n]=new CKEDITOR.style(q);m._name=n;o.push(m);}o.sort(c);var r;for(p=0;p<o.length;p++){m=o[p];n=m._name;var s=m.type;if(s!=r){i.startGroup(f['panelTitle'+String(s)]);r=s;}i.add(n,m.type==CKEDITOR.STYLE_OBJECT?n:b(m._.definition),n);}i.commit();i.onOpen();});},onClick:function(i){d.focus();d.fire('saveSnapshot');var j=h[i],k=d.getSelection();if(j.type==CKEDITOR.STYLE_OBJECT){var l=k.getSelectedElement();if(l)j.applyToObject(l);return;}var m=new CKEDITOR.dom.elementPath(k.getStartElement());if(j.type==CKEDITOR.STYLE_INLINE&&j.checkActive(m))j.remove(d.document);else j.apply(d.document);d.fire('saveSnapshot');},onRender:function(){d.on('selectionChange',function(i){var j=this.getValue(),k=i.data.path,l=k.elements;for(var m=0,n;m<l.length;m++){n=l[m];for(var o in h)if(h[o].checkElementRemovable(n,true)){if(o!=j)this.setValue(o);return;}}this.setValue('');},this);},onOpen:function(){var q=this;if(CKEDITOR.env.ie)d.focus();var i=d.getSelection(),j=i.getSelectedElement(),k=j&&j.getName(),l=new CKEDITOR.dom.elementPath(j||i.getStartElement()),m=[0,0,0,0];q.showAll();q.unmarkAll();for(var n in h){var o=h[n],p=o.type;if(p==CKEDITOR.STYLE_OBJECT){if(j&&o.element==k){if(o.checkElementRemovable(j,true))q.mark(n);m[p]++;}else q.hideItem(n);}else{if(o.checkActive(l))q.mark(n);m[p]++;}}if(!m[CKEDITOR.STYLE_BLOCK])q.hideGroup(f['panelTitle'+String(CKEDITOR.STYLE_BLOCK)]);if(!m[CKEDITOR.STYLE_INLINE])q.hideGroup(f['panelTitle'+String(CKEDITOR.STYLE_INLINE)]);if(!m[CKEDITOR.STYLE_OBJECT])q.hideGroup(f['panelTitle'+String(CKEDITOR.STYLE_OBJECT)]);}});}});var a={};CKEDITOR.addStylesSet=function(d,e){a[d]=e;};CKEDITOR.loadStylesSet=function(d,e,f){var g=a[d];if(g){f(g);return;}CKEDITOR.scriptLoader.load(e,function(){f(a[d]);});};function b(d){var e=[],f=d.element;if(f=='bdo')f='span';e=['<',f];var g=d.attributes;if(g)for(var h in g)e.push(' ',h,'="',g[h],'"');var i=CKEDITOR.style.getStyleText(d);\r
+if(i)e.push(' style="',i,'"');e.push('>',d.name,'</',f,'>');return e.join('');};function c(d,e){var f=d.type,g=e.type;return f==g?0:f==CKEDITOR.STYLE_OBJECT?-1:g==CKEDITOR.STYLE_OBJECT?1:g==CKEDITOR.STYLE_BLOCK?1:-1;};})();CKEDITOR.config.stylesCombo_stylesSet='default';\r
diff --git a/plugins/stylescombo/styles/default.js b/plugins/stylescombo/styles/default.js
new file mode 100644 (file)
index 0000000..e5c6b49
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.addStylesSet('default',[{name:'Blue Title',element:'h3',styles:{color:'Blue'}},{name:'Red Title',element:'h3',styles:{color:'Red'}},{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'}},{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'}}]);\r
diff --git a/plugins/tab/plugin.js b/plugins/tab/plugin.js
new file mode 100644 (file)
index 0000000..dce9194
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a={exec:function(c){c.container.focusNext(true);}},b={exec:function(c){c.container.focusPrevious(true);}};CKEDITOR.plugins.add('tab',{requires:['keystrokes'],init:function(c){var d=c.keystrokeHandler.keystrokes;d[9]='tab';d[CKEDITOR.SHIFT+9]='shiftTab';var e=c.config.tabSpaces,f='';while(e--)f+='\xa0';c.addCommand('tab',{exec:function(g){if(!g.fire('tab'))if(f.length>0)g.insertHtml(f);else return g.execCommand('blur');return true;}});c.addCommand('shiftTab',{exec:function(g){if(!g.fire('shiftTab'))return g.execCommand('blurBack');return true;}});c.addCommand('blur',a);c.addCommand('blurBack',b);}});})();CKEDITOR.dom.element.prototype.focusNext=function(a){var j=this;var b=j.$,c=j.getTabIndex(),d,e,f,g,h,i;if(c<=0){h=j.getNextSourceNode(a,CKEDITOR.NODE_ELEMENT);while(h){if(h.isVisible()&&h.getTabIndex()===0){f=h;break;}h=h.getNextSourceNode(false,CKEDITOR.NODE_ELEMENT);}}else{h=j.getDocument().getBody().getFirst();while(h=h.getNextSourceNode(false,CKEDITOR.NODE_ELEMENT)){if(!d)if(!e&&h.equals(j)){e=true;if(a){if(!(h=h.getNextSourceNode(true,CKEDITOR.NODE_ELEMENT)))break;d=1;}}else if(e&&!j.contains(h))d=1;if(!h.isVisible()||(i=h.getTabIndex())<(0))continue;if(d&&i==c){f=h;break;}if(i>c&&(!f||!g||i<g)){f=h;g=i;}else if(!f&&i===0){f=h;g=i;}}}if(f)f.focus();};CKEDITOR.dom.element.prototype.focusPrevious=function(a){var j=this;var b=j.$,c=j.getTabIndex(),d,e,f,g=0,h,i=j.getDocument().getBody().getLast();while(i=i.getPreviousSourceNode(false,CKEDITOR.NODE_ELEMENT)){if(!d)if(!e&&i.equals(j)){e=true;if(a){if(!(i=i.getPreviousSourceNode(true,CKEDITOR.NODE_ELEMENT)))break;d=1;}}else if(e&&!j.contains(i))d=1;if(!i.isVisible()||(h=i.getTabIndex())<(0))continue;if(c<=0){if(d&&h===0){f=i;break;}if(h>g){f=i;g=h;}}else{if(d&&h==c){f=i;break;}if(h<c&&(!f||h>g)){f=i;g=h;}}}if(f)f.focus();};CKEDITOR.config.tabSpaces=0;\r
diff --git a/plugins/table/dialogs/table.js b/plugins/table/dialogs/table.js
new file mode 100644 (file)
index 0000000..7bb022f
--- /dev/null
@@ -0,0 +1,8 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a=/^(\d+(?:\.\d+)?)(px|%)$/,b=/^(\d+(?:\.\d+)?)px$/,c=function(e){var f=this.id;if(!e.info)e.info={};e.info[f]=this.getValue();};function d(e,f){var g=function(h){return new CKEDITOR.dom.element(h,e.document);};return{title:e.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie?310:280,onShow:function(){var o=this;var h=e.getSelection(),i=h.getRanges(),j=null,k=o.getContentElement('info','txtRows'),l=o.getContentElement('info','txtCols'),m=o.getContentElement('info','txtWidth');if(f=='tableProperties'){if(j=e.getSelection().getSelectedElement()){if(j.getName()!='table')j=null;}else if(i.length>0){var n=i[0].getCommonAncestor(true);j=n.getAscendant('table',true);}o._.selectedElement=j;}if(j){o.setupContent(j);k&&k.disable();l&&l.disable();m&&m.select();}else{k&&k.enable();l&&l.enable();k&&k.select();}},onOk:function(){var A=this;var h=A._.selectedElement||g('table'),i=A,j={};A.commitContent(j,h);if(j.info){var k=j.info;if(!A._.selectedElement){var l=h.append(g('tbody')),m=parseInt(k.txtRows,10)||0,n=parseInt(k.txtCols,10)||0;for(var o=0;o<m;o++){var p=l.append(g('tr'));for(var q=0;q<n;q++){var r=p.append(g('td'));if(!CKEDITOR.env.ie)r.append(g('br'));}}}var s=k.selHeaders;if(!h.$.tHead&&(s=='row'||s=='both')){var t=new CKEDITOR.dom.element(h.$.createTHead());l=h.getElementsByTag('tbody').getItem(0);var u=l.getElementsByTag('tr').getItem(0);for(o=0;o<u.getChildCount();o++){var v=u.getChild(o);if(v.type==CKEDITOR.NODE_ELEMENT){v.renameNode('th');if(!o)v.setAttribute('scope','col');}}t.append(u.remove());}if(h.$.tHead!==null&&!(s=='row'||s=='both')){t=new CKEDITOR.dom.element(h.$.tHead);l=h.getElementsByTag('tbody').getItem(0);var w=l.getFirst();while(t.getChildCount()>0){u=t.getFirst();for(o=0;o<u.getChildCount();o++){var x=u.getChild(o);if(x.type==CKEDITOR.NODE_ELEMENT){x.renameNode('td');x.removeAttribute('scope');}}u.insertBefore(w);}t.remove();}if(!A.hasColumnHeaders&&(s=='col'||s=='both'))for(p=0;p<h.$.rows.length;p++){x=new CKEDITOR.dom.element(h.$.rows[p].cells[0]);x.renameNode('th');x.setAttribute('scope','col');}if(A.hasColumnHeaders&&!(s=='col'||s=='both'))for(o=0;o<h.$.rows.length;o++){p=new CKEDITOR.dom.element(h.$.rows[o]);if(p.getParent().getName()=='tbody'){x=new CKEDITOR.dom.element(p.$.cells[0]);x.renameNode('td');x.removeAttribute('scope');}}var y=[];if(k.txtHeight)y.push('height:'+k.txtHeight+'px');if(k.txtWidth){var z=k.cmbWidthType||'pixels';y.push('width:'+k.txtWidth+(z=='pixels'?'px':'%'));}y=y.join(';');if(y)h.$.style.cssText=y;\r
+else h.removeAttribute('style');}if(!A._.selectedElement)e.insertElement(h);return true;},contents:[{id:'info',label:e.lang.table.title,elements:[{type:'hbox',widths:[null,null],styles:['vertical-align:top'],children:[{type:'vbox',padding:0,children:[{type:'text',id:'txtRows','default':3,label:e.lang.table.rows,style:'width:5em',validate:function(){var h=true,i=this.getValue();h=h&&CKEDITOR.dialog.validate.integer()(i)&&i>0;if(!h){alert(e.lang.table.invalidRows);this.select();}return h;},setup:function(h){this.setValue(h.$.rows.length);},commit:c},{type:'text',id:'txtCols','default':2,label:e.lang.table.columns,style:'width:5em',validate:function(){var h=true,i=this.getValue();h=h&&CKEDITOR.dialog.validate.integer()(i)&&i>0;if(!h){alert(e.lang.table.invalidCols);this.select();}return h;},setup:function(h){this.setValue(h.$.rows[0].cells.length);},commit:c},{type:'html',html:'&nbsp;'},{type:'select',id:'selHeaders','default':'',label:e.lang.table.headers,items:[[e.lang.table.headersNone,''],[e.lang.table.headersRow,'row'],[e.lang.table.headersColumn,'col'],[e.lang.table.headersBoth,'both']],setup:function(h){var i=this.getDialog();i.hasColumnHeaders=true;for(var j=0;j<h.$.rows.length;j++)if(h.$.rows[j].cells[0].nodeName.toLowerCase()!='th'){i.hasColumnHeaders=false;break;}if(h.$.tHead!==null)this.setValue(i.hasColumnHeaders?'both':'row');else this.setValue(i.hasColumnHeaders?'col':'');},commit:c},{type:'text',id:'txtBorder','default':1,label:e.lang.table.border,style:'width:3em',validate:CKEDITOR.dialog.validate.number(e.lang.table.invalidBorder),setup:function(h){this.setValue(h.getAttribute('border')||'');},commit:function(h,i){if(this.getValue())i.setAttribute('border',this.getValue());else i.removeAttribute('border');}},{id:'cmbAlign',type:'select','default':'',label:e.lang.table.align,items:[[e.lang.table.alignNotSet,''],[e.lang.table.alignLeft,'left'],[e.lang.table.alignCenter,'center'],[e.lang.table.alignRight,'right']],setup:function(h){this.setValue(h.getAttribute('align')||'');},commit:function(h,i){if(this.getValue())i.setAttribute('align',this.getValue());else i.removeAttribute('align');}}]},{type:'vbox',padding:0,children:[{type:'hbox',widths:['5em'],children:[{type:'text',id:'txtWidth',style:'width:5em',label:e.lang.table.width,'default':200,validate:CKEDITOR.dialog.validate.number(e.lang.table.invalidWidth),setup:function(h){var i=a.exec(h.$.style.width);if(i)this.setValue(i[1]);},commit:c},{id:'cmbWidthType',type:'select',label:'&nbsp;','default':'pixels',items:[[e.lang.table.widthPx,'pixels'],[e.lang.table.widthPc,'percents']],setup:function(h){var i=a.exec(h.$.style.width);\r
+if(i)this.setValue(i[2]=='px'?'pixels':'percents');},commit:c}]},{type:'hbox',widths:['5em'],children:[{type:'text',id:'txtHeight',style:'width:5em',label:e.lang.table.height,'default':'',validate:CKEDITOR.dialog.validate.number(e.lang.table.invalidHeight),setup:function(h){var i=b.exec(h.$.style.height);if(i)this.setValue(i[1]);},commit:c},{type:'html',html:'<br />'+e.lang.table.widthPx}]},{type:'html',html:'&nbsp;'},{type:'text',id:'txtCellSpace',style:'width:3em',label:e.lang.table.cellSpace,'default':1,validate:CKEDITOR.dialog.validate.number(e.lang.table.invalidCellSpacing),setup:function(h){this.setValue(h.getAttribute('cellSpacing')||'');},commit:function(h,i){if(this.getValue())i.setAttribute('cellSpacing',this.getValue());else i.removeAttribute('cellSpacing');}},{type:'text',id:'txtCellPad',style:'width:3em',label:e.lang.table.cellPad,'default':1,validate:CKEDITOR.dialog.validate.number(e.lang.table.invalidCellPadding),setup:function(h){this.setValue(h.getAttribute('cellPadding')||'');},commit:function(h,i){if(this.getValue())i.setAttribute('cellPadding',this.getValue());else i.removeAttribute('cellPadding');}}]}]},{type:'html',align:'right',html:''},{type:'vbox',padding:0,children:[{type:'text',id:'txtCaption',label:e.lang.table.caption,setup:function(h){var i=h.getElementsByTag('caption');if(i.count()>0){var j=i.getItem(0);j=j.getChild(0)&&j.getChild(0).getText()||'';j=CKEDITOR.tools.trim(j);this.setValue(j);}},commit:function(h,i){var j=this.getValue(),k=i.getElementsByTag('caption');if(j){if(k.count()>0){k=k.getItem(0);k.setHtml('');}else{k=new CKEDITOR.dom.element('caption',e.document);if(i.getChildCount())k.insertBefore(i.getFirst());else k.appendTo(i);}k.append(new CKEDITOR.dom.text(j,e.document));}else if(k.count()>0)for(var l=k.count()-1;l>=0;l--)k.getItem(l).remove();}},{type:'text',id:'txtSummary',label:e.lang.table.summary,setup:function(h){this.setValue(h.getAttribute('summary')||'');},commit:function(h,i){if(this.getValue())i.setAttribute('summary',this.getValue());}}]}]}]};};CKEDITOR.dialog.add('table',function(e){return d(e,'table');});CKEDITOR.dialog.add('tableProperties',function(e){return d(e,'tableProperties');});})();\r
diff --git a/plugins/table/plugin.js b/plugins/table/plugin.js
new file mode 100644 (file)
index 0000000..85f2eaf
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('table',{init:function(a){var b=CKEDITOR.plugins.table,c=a.lang.table;a.addCommand('table',new CKEDITOR.dialogCommand('table'));a.addCommand('tableProperties',new CKEDITOR.dialogCommand('tableProperties'));a.ui.addButton('Table',{label:c.toolbar,command:'table'});CKEDITOR.dialog.add('table',this.path+'dialogs/table.js');CKEDITOR.dialog.add('tableProperties',this.path+'dialogs/table.js');if(a.addMenuItems)a.addMenuItems({table:{label:c.menu,command:'tableProperties',group:'table',order:5},tabledelete:{label:c.deleteTable,command:'tableDelete',group:'table',order:1}});if(a.contextMenu)a.contextMenu.addListener(function(d,e){if(!d)return null;var f=d.is('table')||d.hasAscendant('table');if(f)return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF};return null;});}});\r
diff --git a/plugins/tabletools/dialogs/tableCell.js b/plugins/tabletools/dialogs/tableCell.js
new file mode 100644 (file)
index 0000000..f1eeecb
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('cellProperties',function(a){var b=a.lang.table,c=b.cell,d=a.lang.common,e=CKEDITOR.dialog.validate,f=/^(\d+(?:\.\d+)?)(px|%)$/,g=/^(\d+(?:\.\d+)?)px$/,h=CKEDITOR.tools.bind;function i(){return{type:'html',html:'&nbsp;'};};return{title:c.title,minWidth:480,minHeight:140,contents:[{id:'info',label:c.title,accessKey:'I',elements:[{type:'hbox',widths:['45%','10%','45%'],children:[{type:'vbox',padding:0,children:[{type:'hbox',widths:['70%','30%'],children:[{type:'text',id:'width',label:b.width,widths:['71%','29%'],labelLayout:'horizontal',validate:e.number(c.invalidWidth),setup:function(j){var k=f.exec(j.$.style.width);if(k)this.setValue(k[1]);},commit:function(j){var k=this.getDialog().getValueOf('info','widthType');if(this.getValue()!=='')j.$.style.width=this.getValue()+k;else j.$.style.width='';},'default':''},{type:'select',id:'widthType',labelLayout:'horizontal',widths:['0%','100%'],label:'','default':'px',items:[[b.widthPx,'px'],[b.widthPc,'%']],setup:function(j){var k=f.exec(j.$.style.width);if(k)this.setValue(k[2]);}}]},{type:'hbox',widths:['70%','30%'],children:[{type:'text',id:'height',label:b.height,'default':'',widths:['71%','29%'],labelLayout:'horizontal',validate:e.number(c.invalidHeight),setup:function(j){var k=g.exec(j.$.style.height);if(k)this.setValue(k[1]);},commit:function(j){if(this.getValue()!=='')j.$.style.height=this.getValue()+'px';else j.$.style.height='';}},{type:'html',html:b.widthPx}]},i(),{type:'select',id:'wordWrap',labelLayout:'horizontal',label:c.wordWrap,widths:['50%','50%'],'default':'yes',items:[[c.yes,'yes'],[c.no,'no']],commit:function(j){if(this.getValue()=='no')j.setAttribute('noWrap','nowrap');else j.removeAttribute('noWrap');}},i(),{type:'select',id:'hAlign',labelLayout:'horizontal',label:c.hAlign,widths:['50%','50%'],'default':'',items:[[d.notSet,''],[b.alignLeft,'left'],[b.alignCenter,'center'],[b.alignRight,'right']],setup:function(j){this.setValue(j.getAttribute('align')||'');},commit:function(j){if(this.getValue())j.setAttribute('align',this.getValue());else j.removeAttribute('align');}},{type:'select',id:'vAlign',labelLayout:'horizontal',label:c.vAlign,widths:['50%','50%'],'default':'',items:[[d.notSet,''],[c.alignTop,'top'],[c.alignMiddle,'middle'],[c.alignBottom,'bottom'],[c.alignBaseline,'baseline']],setup:function(j){this.setValue(j.getAttribute('vAlign')||'');},commit:function(j){if(this.getValue())j.setAttribute('vAlign',this.getValue());else j.removeAttribute('vAlign');}}]},i(),{type:'vbox',padding:0,children:[{type:'select',id:'cellType',label:c.cellType,labelLayout:'horizontal',widths:['50%','50%'],'default':'td',items:[[c.data,'td'],[c.header,'th']],setup:function(j){this.setValue(j.getName());\r
+},commit:function(j){j.renameNode(this.getValue());}},i(),{type:'text',id:'rowSpan',label:c.rowSpan,labelLayout:'horizontal',widths:['50%','50%'],'default':'',validate:e.integer(c.invalidRowSpan),setup:function(j){this.setValue(j.getAttribute('rowSpan')||'');},commit:function(j){if(this.getValue())j.setAttribute('rowSpan',this.getValue());else j.removeAttribute('rowSpan');}},{type:'text',id:'colSpan',label:c.colSpan,labelLayout:'horizontal',widths:['50%','50%'],'default':'',validate:e.integer(c.invalidColSpan),setup:function(j){this.setValue(j.getAttribute('colSpan')||'');},commit:function(j){if(this.getValue())j.setAttribute('colSpan',this.getValue());else j.removeAttribute('colSpan');}},i(),{type:'text',id:'bgColor',label:c.bgColor,labelLayout:'horizontal',widths:['50%','50%'],'default':'',setup:function(j){this.setValue(j.getAttribute('bgColor')||'');},commit:function(j){if(this.getValue())j.setAttribute('bgColor',this.getValue());else j.removeAttribute('bgColor');}},{type:'text',id:'borderColor',label:c.borderColor,labelLayout:'horizontal',widths:['50%','50%'],'default':'',setup:function(j){this.setValue(j.getAttribute('borderColor')||'');},commit:function(j){if(this.getValue())j.setAttribute('borderColor',this.getValue());else j.removeAttribute('borderColor');}}]}]}]}],onShow:function(){var j=this;j.cells=CKEDITOR.plugins.tabletools.getSelectedCells(j._.editor.getSelection());j.setupContent(j.cells[0]);},onOk:function(){var j=this.cells;for(var k=0;k<j.length;k++)this.commitContent(j[k]);}};});\r
diff --git a/plugins/tabletools/plugin.js b/plugins/tabletools/plugin.js
new file mode 100644 (file)
index 0000000..a4220dd
--- /dev/null
@@ -0,0 +1,9 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){function a(n,o){if(CKEDITOR.env.ie)n.removeAttribute(o);else delete n[o];};var b=/^(?:td|th)$/;function c(n){var o=n.createBookmarks(),p=n.getRanges(),q=[],r={};function s(A){if(q.length>0)return;if(A.type==CKEDITOR.NODE_ELEMENT&&b.test(A.getName())&&!A.getCustomData('selected_cell')){CKEDITOR.dom.element.setMarker(r,A,'selected_cell',true);q.push(A);}};for(var t=0;t<p.length;t++){var u=p[t];if(u.collapsed){var v=u.getCommonAncestor(),w=v.getAscendant('td',true)||v.getAscendant('th',true);if(w)q.push(w);}else{var x=new CKEDITOR.dom.walker(u),y;x.guard=s;while(y=x.next()){var z=y.getParent();if(z&&b.test(z.getName())&&!z.getCustomData('selected_cell')){CKEDITOR.dom.element.setMarker(r,z,'selected_cell',true);q.push(z);}}}}CKEDITOR.dom.element.clearAllMarkers(r);n.selectBookmarks(o);return q;};function d(n){var o=new CKEDITOR.dom.element(n),p=(o.getName()=='table'?n:o.getAscendant('table')).$,q=p.rows,r=-1,s=[];for(var t=0;t<q.length;t++){r++;if(!s[r])s[r]=[];var u=-1;for(var v=0;v<q[t].cells.length;v++){var w=q[t].cells[v];u++;while(s[r][u])u++;var x=isNaN(w.colSpan)?1:w.colSpan,y=isNaN(w.rowSpan)?1:w.rowSpan;for(var z=0;z<y;z++){if(!s[r+z])s[r+z]=[];for(var A=0;A<x;A++)s[r+z][u+A]=q[t].cells[v];}u+=x-1;}}return s;};function e(n,o){var p=CKEDITOR.env.ie?'_cke_rowspan':'rowSpan';for(var q=0;q<n.length;q++)for(var r=0;r<n[q].length;r++){var s=n[q][r];if(s.parentNode)s.parentNode.removeChild(s);s.colSpan=s[p]=1;}var t=0;for(q=0;q<n.length;q++)for(r=0;r<n[q].length;r++){s=n[q][r];if(!s)continue;if(r>t)t=r;if(s._cke_colScanned)continue;if(n[q][r-1]==s)s.colSpan++;if(n[q][r+1]!=s)s._cke_colScanned=1;}for(q=0;q<=t;q++)for(r=0;r<n.length;r++){if(!n[r])continue;s=n[r][q];if(!s||s._cke_rowScanned)continue;if(n[r-1]&&n[r-1][q]==s)s[p]++;if(!n[r+1]||n[r+1][q]!=s)s._cke_rowScanned=1;}for(q=0;q<n.length;q++)for(r=0;r<n[q].length;r++){s=n[q][r];a(s,'_cke_colScanned');a(s,'_cke_rowScanned');}for(q=0;q<n.length;q++){var u=o.ownerDocument.createElement('tr');for(r=0;r<n[q].length;){s=n[q][r];if(n[q-1]&&n[q-1][r]==s){r+=s.colSpan;continue;}u.appendChild(s);if(p!='rowSpan'){s.rowSpan=s[p];s.removeAttribute(p);}r+=s.colSpan;if(s.colSpan==1)s.removeAttribute('colSpan');if(s.rowSpan==1)s.removeAttribute('rowSpan');}if(CKEDITOR.env.ie)o.rows[q].replaceNode(u);else{var v=new CKEDITOR.dom.element(o.rows[q]),w=new CKEDITOR.dom.element(u);v.setHtml('');w.moveChildren(v);}}};function f(n){var o=n.cells;for(var p=0;p<o.length;p++){o[p].innerHTML='';if(!CKEDITOR.env.ie)new CKEDITOR.dom.element(o[p]).appendBogus();\r
+}};function g(n,o){var p=n.getStartElement().getAscendant('tr');if(!p)return;var q=p.clone(true);q.insertBefore(p);f(o?q.$:p.$);};function h(n){if(n instanceof CKEDITOR.dom.selection){var o=c(n),p=[];for(var q=0;q<o.length;q++){var r=o[q].getParent();p[r.$.rowIndex]=r;}for(q=p.length;q>=0;q--)if(p[q])h(p[q]);}else if(n instanceof CKEDITOR.dom.element){var s=n.getAscendant('table');if(s.$.rows.length==1)s.remove();else n.remove();}};function i(n,o){var p=n.getStartElement(),q=p.getAscendant('td',true)||p.getAscendant('th',true);if(!q)return;var r=q.getAscendant('table'),s=q.$.cellIndex;for(var t=0;t<r.$.rows.length;t++){var u=r.$.rows[t];if(u.cells.length<s+1)continue;q=new CKEDITOR.dom.element(u.cells[s].cloneNode(false));if(!CKEDITOR.env.ie)q.appendBogus();var v=new CKEDITOR.dom.element(u.cells[s]);if(o)q.insertBefore(v);else q.insertAfter(v);}};function j(n){if(n instanceof CKEDITOR.dom.selection){var o=c(n);for(var p=o.length;p>=0;p--)if(o[p])j(o[p]);}else if(n instanceof CKEDITOR.dom.element){var q=n.getAscendant('table'),r=n.$.cellIndex;for(p=q.$.rows.length-1;p>=0;p--){var s=new CKEDITOR.dom.element(q.$.rows[p]);if(!r&&s.$.cells.length==1){h(s);continue;}if(s.$.cells[r])s.$.removeChild(s.$.cells[r]);}}};function k(n,o){var p=n.getStartElement(),q=p.getAscendant('td',true)||p.getAscendant('th',true);if(!q)return;var r=q.clone();if(!CKEDITOR.env.ie)r.appendBogus();if(o)r.insertBefore(q);else r.insertAfter(q);};function l(n){if(n instanceof CKEDITOR.dom.selection){var o=c(n);for(var p=o.length-1;p>=0;p--)l(o[p]);}else if(n instanceof CKEDITOR.dom.element)if(n.getParent().getChildCount()==1)n.getParent().remove();else n.remove();};var m={thead:1,tbody:1,tfoot:1,td:1,tr:1,th:1};CKEDITOR.plugins.tabletools={init:function(n){var o=n.lang.table;n.addCommand('cellProperties',new CKEDITOR.dialogCommand('cellProperties'));CKEDITOR.dialog.add('cellProperties',this.path+'dialogs/tableCell.js');n.addCommand('tableDelete',{exec:function(p){var q=p.getSelection(),r=q&&q.getStartElement(),s=r&&r.getAscendant('table',true);if(!s)return;q.selectElement(s);var t=q.getRanges()[0];t.collapse();q.selectRanges([t]);if(s.getParent().getChildCount()==1)s.getParent().remove();else s.remove();}});n.addCommand('rowDelete',{exec:function(p){var q=p.getSelection();h(q);}});n.addCommand('rowInsertBefore',{exec:function(p){var q=p.getSelection();g(q,true);}});n.addCommand('rowInsertAfter',{exec:function(p){var q=p.getSelection();g(q);}});n.addCommand('columnDelete',{exec:function(p){var q=p.getSelection();\r
+j(q);}});n.addCommand('columnInsertBefore',{exec:function(p){var q=p.getSelection();i(q,true);}});n.addCommand('columnInsertAfter',{exec:function(p){var q=p.getSelection();i(q);}});n.addCommand('cellDelete',{exec:function(p){var q=p.getSelection();l(q);}});n.addCommand('cellInsertBefore',{exec:function(p){var q=p.getSelection();k(q,true);}});n.addCommand('cellInsertAfter',{exec:function(p){var q=p.getSelection();k(q);}});if(n.addMenuItems)n.addMenuItems({tablecell:{label:o.cell.menu,group:'tablecell',order:1,getItems:function(){var p=c(n.getSelection());return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_properties:p.length>0?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};}},tablecell_insertBefore:{label:o.cell.insertBefore,group:'tablecell',command:'cellInsertBefore',order:5},tablecell_insertAfter:{label:o.cell.insertAfter,group:'tablecell',command:'cellInsertAfter',order:10},tablecell_delete:{label:o.cell.deleteCell,group:'tablecell',command:'cellDelete',order:15},tablecell_properties:{label:o.cell.title,group:'tablecellproperties',command:'cellProperties',order:20},tablerow:{label:o.row.menu,group:'tablerow',order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF};}},tablerow_insertBefore:{label:o.row.insertBefore,group:'tablerow',command:'rowInsertBefore',order:5},tablerow_insertAfter:{label:o.row.insertAfter,group:'tablerow',command:'rowInsertAfter',order:10},tablerow_delete:{label:o.row.deleteRow,group:'tablerow',command:'rowDelete',order:15},tablecolumn:{label:o.column.menu,group:'tablecolumn',order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF};}},tablecolumn_insertBefore:{label:o.column.insertBefore,group:'tablecolumn',command:'columnInsertBefore',order:5},tablecolumn_insertAfter:{label:o.column.insertAfter,group:'tablecolumn',command:'columnInsertAfter',order:10},tablecolumn_delete:{label:o.column.deleteColumn,group:'tablecolumn',command:'columnDelete',order:15}});if(n.contextMenu)n.contextMenu.addListener(function(p,q){if(!p)return null;while(p){if(p.getName() in m)return{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF};p=p.getParent();}return null;});},getSelectedCells:c};CKEDITOR.plugins.add('tabletools',CKEDITOR.plugins.tabletools);\r
+})();\r
diff --git a/plugins/templates/dialogs/templates.js b/plugins/templates/dialogs/templates.js
new file mode 100644 (file)
index 0000000..cc5c688
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a=CKEDITOR.document,b='cke'+CKEDITOR.tools.getNextNumber();function c(f,g){var h=a.getById(b);h.setHtml('');for(var i=0;i<g.length;i++){var j=CKEDITOR.getTemplates(g[i]),k=j.imagesPath,l=j.templates;for(var m=0;m<l.length;m++){var n=l[m];h.append(d(f,n,k));}}};function d(f,g,h){var i=a.createElement('div');i.setAttribute('class','cke_tpl_item');var j='<table style="width:350px;" class="cke_tpl_preview"><tr>';if(g.image&&h)j+='<td class="cke_tpl_preview_img"><img src="'+CKEDITOR.getUrl(h+g.image)+'"></td>';j+='<td style="white-space:normal;"><span class="cke_tpl_title">'+g.title+'</span><br/>';if(g.description)j+='<span>'+g.description+'</span>';j+='</td></tr></table>';i.setHtml(j);i.on('mouseover',function(){i.addClass('cke_tpl_hover');});i.on('mouseout',function(){i.removeClass('cke_tpl_hover');});i.on('click',function(){e(f,g.html);});return i;};function e(f,g){var h=CKEDITOR.dialog.getCurrent(),i=h.getValueOf('selectTpl','chkInsertOpt');if(i)f.setData(g);else f.insertHtml(g);h.hide();};CKEDITOR.dialog.add('templates',function(f){CKEDITOR.skins.load(f,'templates');var g=false;return{title:f.lang.templates.title,minWidth:CKEDITOR.env.ie?440:400,minHeight:340,contents:[{id:'selectTpl',label:f.lang.templates.title,elements:[{type:'vbox',padding:5,children:[{type:'html',html:'<span>'+f.lang.templates.selectPromptMsg+'</span>'},{type:'html',html:'<div id="'+b+'" class="cke_tpl_list">'+'<div class="cke_tpl_loading"><span></span></div>'+'</div>'},{id:'chkInsertOpt',type:'checkbox',label:f.lang.templates.insertOption,'default':f.config.templates_replaceContent}]}]}],buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){CKEDITOR.loadTemplates(f.config.templates_files,function(){var h=f.config.templates.split(',');if(h.length)c(f,h);else{var i=a.getById(b);i.setHtml('<div class="cke_tpl_empty"><span>'+f.lang.templates.emptyListMsg+'</span>'+'</div>');}});}};});})();\r
diff --git a/plugins/templates/plugin.js b/plugins/templates/plugin.js
new file mode 100644 (file)
index 0000000..2d976ad
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){CKEDITOR.plugins.add('templates',{requires:['dialog'],init:function(c){CKEDITOR.dialog.add('templates',CKEDITOR.getUrl(this.path+'dialogs/templates.js'));c.addCommand('templates',new CKEDITOR.dialogCommand('templates'));c.ui.addButton('Templates',{label:c.lang.templates.button,command:'templates'});}});var a={},b={};CKEDITOR.addTemplates=function(c,d){a[c]=d;};CKEDITOR.getTemplates=function(c){return a[c];};CKEDITOR.loadTemplates=function(c,d){var e=[];for(var f=0;f<c.length;f++)if(!b[c[f]]){e.push(c[f]);b[c[f]]=1;}if(e.length>0)CKEDITOR.scriptLoader.load(e,d);else setTimeout(d,0);};})();CKEDITOR.config.templates='default';CKEDITOR.config.templates_files=[CKEDITOR.getUrl('plugins/templates/templates/default.js')];CKEDITOR.config.templates_replaceContent=true;\r
diff --git a/plugins/templates/templates/default.js b/plugins/templates/templates/default.js
new file mode 100644 (file)
index 0000000..f8f5337
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.addTemplates('default',{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath('templates')+'templates/images/'),templates:[{title:'Image and Title',image:'template1.gif',description:'One main image with a title and text that surround the image.',html:'<h3><img style="margin-right: 10px" height="100" alt="" width="100" align="left"/>Type the title here</h3><p>Type the text here</p>'},{title:'Strange Template',image:'template2.gif',description:'A template that defines two colums, each one with a title, and some text.',html:'<table cellspacing="0" cellpadding="0" width="100%" border="0"><tr><td width="50%"><h3>Title 1</h3></td><td></td><td width="50%"><h3>Title 2</h3></td></tr><tr><td>Text 1</td><td></td><td>Text 2</td></tr></table><p>More text goes here.</p>'},{title:'Text and Table',image:'template3.gif',description:'A title with some text and a table.',html:'<div style="width: 80%"><h3>Title goes here</h3><table style="float: right" cellspacing="0" cellpadding="0" width="150" border="1"><caption style="border:solid 1px black"><strong>Table title</strong></caption></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr></table><p>Type the text here</p></div>'}]});\r
diff --git a/plugins/templates/templates/images/template1.gif b/plugins/templates/templates/images/template1.gif
new file mode 100644 (file)
index 0000000..efdabbe
Binary files /dev/null and b/plugins/templates/templates/images/template1.gif differ
diff --git a/plugins/templates/templates/images/template2.gif b/plugins/templates/templates/images/template2.gif
new file mode 100644 (file)
index 0000000..d1cebb3
Binary files /dev/null and b/plugins/templates/templates/images/template2.gif differ
diff --git a/plugins/templates/templates/images/template3.gif b/plugins/templates/templates/images/template3.gif
new file mode 100644 (file)
index 0000000..db41cb4
Binary files /dev/null and b/plugins/templates/templates/images/template3.gif differ
diff --git a/plugins/toolbar/plugin.js b/plugins/toolbar/plugin.js
new file mode 100644 (file)
index 0000000..f417cb9
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a=function(){this.toolbars=[];this.focusCommandExecuted=false;};a.prototype.focus=function(){for(var c=0,d;d=this.toolbars[c++];)for(var e=0,f;f=d.items[e++];)if(f.focus){f.focus();return;}};var b={toolbarFocus:{modes:{wysiwyg:1,source:1},exec:function(c){if(c.toolbox){c.toolbox.focusCommandExecuted=true;if(CKEDITOR.env.ie)setTimeout(function(){c.toolbox.focus();},100);else c.toolbox.focus();}}}};CKEDITOR.plugins.add('toolbar',{init:function(c){var d=function(e,f){switch(f){case 39:case 9:while((e=e.next||e.toolbar.next&&e.toolbar.next.items[0])&&(!e.focus)){}if(e)e.focus();else c.toolbox.focus();return false;case 37:case CKEDITOR.SHIFT+9:while((e=e.previous||e.toolbar.previous&&e.toolbar.previous.items[e.toolbar.previous.items.length-1])&&(!e.focus)){}if(e)e.focus();else{var g=c.toolbox.toolbars[c.toolbox.toolbars.length-1].items;g[g.length-1].focus();}return false;case 27:c.focus();return false;case 13:case 32:e.execute();return false;}return true;};c.on('themeSpace',function(e){if(e.data.space==c.config.toolbarLocation){c.toolbox=new a();var f=['<div class="cke_toolbox"'],g=c.config.toolbarStartupExpanded,h;f.push(g?'>':' style="display:none">');var i=c.toolbox.toolbars,j=c.config.toolbar instanceof Array?c.config.toolbar:c.config['toolbar_'+c.config.toolbar];for(var k=0;k<j.length;k++){var l=j[k];if(!l)continue;var m='cke_'+CKEDITOR.tools.getNextNumber(),n={id:m,items:[]};if(h){f.push('</div>');h=0;}if(l==='/'){f.push('<div class="cke_break"></div>');continue;}f.push('<span id="',m,'" class="cke_toolbar"><span class="cke_toolbar_start"></span>');var o=i.push(n)-1;if(o>0){n.previous=i[o-1];n.previous.next=n;}for(var p=0;p<l.length;p++){var q,r=l[p];if(r=='-')q=CKEDITOR.ui.separator;else q=c.ui.create(r);if(q){if(q.canGroup){if(!h){f.push('<span class="cke_toolgroup">');h=1;}}else if(h){f.push('</span>');h=0;}var s=q.render(c,f);o=n.items.push(s)-1;if(o>0){s.previous=n.items[o-1];s.previous.next=s;}s.toolbar=n;s.onkey=d;s.onfocus=function(){if(!c.toolbox.focusCommandExecuted)c.focus();};}}if(h){f.push('</span>');h=0;}f.push('<span class="cke_toolbar_end"></span></span>');}f.push('</div>');if(c.config.toolbarCanCollapse){var t=CKEDITOR.tools.addFunction(function(){c.execCommand('toolbarCollapse');}),u='cke_'+CKEDITOR.tools.getNextNumber();c.addCommand('toolbarCollapse',{exec:function(v){var w=CKEDITOR.document.getById(u),x=w.getPrevious(),y=v.getThemeSpace('contents'),z=x.getParent(),A=parseInt(y.$.style.height,10),B=z.$.offsetHeight;if(x.isVisible()){x.hide();\r
+w.addClass('cke_toolbox_collapser_min');}else{x.show();w.removeClass('cke_toolbox_collapser_min');}var C=z.$.offsetHeight-B;y.setStyle('height',A-C+'px');},modes:{wysiwyg:1,source:1}});f.push('<a id="'+u+'" class="cke_toolbox_collapser');if(!g)f.push(' cke_toolbox_collapser_min');f.push('" onclick="CKEDITOR.tools.callFunction('+t+')"></a>');}e.data.html+=f.join('');}});c.addCommand('toolbarFocus',b.toolbarFocus);}});})();CKEDITOR.ui.separator={render:function(a,b){b.push('<span class="cke_separator"></span>');return{};}};CKEDITOR.config.toolbarLocation='top';CKEDITOR.config.toolbar_Basic=[['Bold','Italic','-','NumberedList','BulletedList','-','Link','Unlink','-','About']];CKEDITOR.config.toolbar_Full=[['Source','-','Save','NewPage','Preview','-','Templates'],['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print','SpellChecker','Scayt'],['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],'/',['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],['Link','Unlink','Anchor'],['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],'/',['Styles','Format','Font','FontSize'],['TextColor','BGColor'],['Maximize','ShowBlocks','-','About']];CKEDITOR.config.toolbar='Full';CKEDITOR.config.toolbarCanCollapse=true;CKEDITOR.config.toolbarStartupExpanded=true;\r
diff --git a/plugins/uicolor/dialogs/uicolor.js b/plugins/uicolor/dialogs/uicolor.js
new file mode 100644 (file)
index 0000000..1cd2ae8
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('uicolor',function(a){var b,c,d,e=a.getUiColor();function f(i){if(/^#/.test(i))i=window.YAHOO.util.Color.hex2rgb(i.substr(1));c.setValue(i,true);c.refresh('cke_uicolor_picker');};function g(i,j){if(j||b._.contents.tab1.livePeview.getValue())a.setUiColor(i);b._.contents.tab1.configBox.setValue('config.uiColor = "#'+c.get('hex')+'"');};d={id:'yuiColorPicker',type:'html',html:"<div id='cke_uicolor_picker' style='width: 360px; height: 200px; position: relative;'></div>",onLoad:function(i){var j=CKEDITOR.getUrl('plugins/uicolor/yui/');c=new window.YAHOO.widget.ColorPicker('cke_uicolor_picker',{showhsvcontrols:true,showhexcontrols:true,images:{PICKER_THUMB:j+'assets/picker_thumb.png',HUE_THUMB:j+'assets/hue_thumb.png'}});if(e)f(e);c.on('rgbChange',function(){b._.contents.tab1.predefined.setValue('');g('#'+c.get('hex'));});var k=new CKEDITOR.dom.nodeList(c.getElementsByTagName('input'));for(var l=0;l<k.count();l++)k.getItem(l).addClass('cke_dialog_ui_input_text');}};var h=true;return{title:a.lang.uicolor.title,minWidth:360,minHeight:320,onLoad:function(){b=this;this.setupContent();if(CKEDITOR.env.ie7Compat)b.parts.contents.setStyle('overflow','hidden');},contents:[{id:'tab1',label:'',title:'',expand:true,padding:0,elements:[d,{id:'tab1',type:'vbox',children:[{id:'livePeview',type:'checkbox',label:a.lang.uicolor.preview,'default':1,onLoad:function(){h=true;},onChange:function(){if(h)return;var i=this.getValue(),j=i?'#'+c.get('hex'):e;g(j,true);}},{type:'hbox',children:[{id:'predefined',type:'select','default':'',label:a.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 i=this.getValue();if(i){f(i);g(i);CKEDITOR.document.getById('predefinedPreview').setStyle('background',i);}else CKEDITOR.document.getById('predefinedPreview').setStyle('background','');},onShow:function(){var i=a.getUiColor();if(i)this.setValue(i);}},{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:a.lang.uicolor.config,onShow:function(){var i=a.getUiColor();\r
+if(i)this.setValue('config.uiColor = "'+i+'"');}}]}]}],buttons:[CKEDITOR.dialog.okButton]};});\r
diff --git a/plugins/uicolor/lang/en.js b/plugins/uicolor/lang/en.js
new file mode 100644 (file)
index 0000000..ffe9748
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.setLang('uicolor','en',{uicolor:{title:'UI Color Picker',preview:'Live preview',config:'Paste this string into your config.js file',predefined:'Predefined color sets'}});\r
diff --git a/plugins/uicolor/plugin.js b/plugins/uicolor/plugin.js
new file mode 100644 (file)
index 0000000..0229715
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('uicolor',{requires:['dialog'],lang:['en'],init:function(a){if(CKEDITOR.env.ie6Compat)return;a.addCommand('uicolor',new CKEDITOR.dialogCommand('uicolor'));a.ui.addButton('UIColor',{label:a.lang.uicolor.title,command:'uicolor',icon:this.path+'uicolor.gif'});CKEDITOR.dialog.add('uicolor',this.path+'dialogs/uicolor.js');CKEDITOR.scriptLoader.load(CKEDITOR.getUrl('plugins/uicolor/yui/yui.js'));a.element.getDocument().appendStyleSheet(CKEDITOR.getUrl('plugins/uicolor/yui/assets/yui.css'));}});\r
diff --git a/plugins/uicolor/uicolor.gif b/plugins/uicolor/uicolor.gif
new file mode 100644 (file)
index 0000000..ec33de6
Binary files /dev/null and b/plugins/uicolor/uicolor.gif differ
diff --git a/plugins/uicolor/yui/assets/hue_bg.png b/plugins/uicolor/yui/assets/hue_bg.png
new file mode 100644 (file)
index 0000000..d9bcdeb
Binary files /dev/null and b/plugins/uicolor/yui/assets/hue_bg.png differ
diff --git a/plugins/uicolor/yui/assets/hue_thumb.png b/plugins/uicolor/yui/assets/hue_thumb.png
new file mode 100644 (file)
index 0000000..14d5db4
Binary files /dev/null and b/plugins/uicolor/yui/assets/hue_thumb.png differ
diff --git a/plugins/uicolor/yui/assets/picker_mask.png b/plugins/uicolor/yui/assets/picker_mask.png
new file mode 100644 (file)
index 0000000..f8d9193
Binary files /dev/null and b/plugins/uicolor/yui/assets/picker_mask.png differ
diff --git a/plugins/uicolor/yui/assets/picker_thumb.png b/plugins/uicolor/yui/assets/picker_thumb.png
new file mode 100644 (file)
index 0000000..78445a2
Binary files /dev/null and b/plugins/uicolor/yui/assets/picker_thumb.png differ
diff --git a/plugins/uicolor/yui/assets/yui.css b/plugins/uicolor/yui/assets/yui.css
new file mode 100644 (file)
index 0000000..16e9648
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.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;}#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;}\r
diff --git a/plugins/uicolor/yui/yui.js b/plugins/uicolor/yui/yui.js
new file mode 100644 (file)
index 0000000..d83229f
--- /dev/null
@@ -0,0 +1,76 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+/*jsl:ignoreall*/\r
+/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+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});\r
+},_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);\r
+}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];\r
+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);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;\r
+/* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */\r
+if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);\r
+}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].overrideContext);}}}return I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);if(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){G.fire(L,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1796"});YAHOO.register("yahoo-dom-event", YAHOO, {version: "2.7.0", build: "1796"});\r
+/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement("div");C.id="yui-ddm-shim";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display="none";C.style.backgroundColor="red";C.style.position="absolute";C.style.zIndex="99999";B.setStyle(C,"opacity","0");this._shim=C;A.on(C,"mouseup",this.handleMouseUp,this,true);A.on(C,"mousemove",this.handleMouseMove,this,true);A.on(window,"scroll",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+"px";C.style.width=B.getDocumentWidth()+"px";C.style.top="0";C.style.left="0";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D="0";if(this._debugShim){D=".5";}B.setStyle(C,"opacity",D);this._sizeShim();C.style.display="block";}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.ids[F][C];if(!this.isTypeOfDD(G)){continue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(C){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},regHandle:function(D,C){if(!this.handleIds[D]){this.handleIds[D]={};}this.handleIds[D][C]=C;},isDragDrop:function(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;E<C;++E){if(D[E].id==F.id){return true;}}return false;},isTypeOfDD:function(C){return(C&&C.__ygDragDrop);},isHandle:function(D,C){return(this.handleIds[D]&&this.handleIds[D][C]);},getDDById:function(D){for(var C in this.ids){if(this.ids[C][D]){return this.ids[C][D];}}return null;},handleMouseDown:function(E,D){this.currentTarget=YAHOO.util.Event.getTarget(E);this.dragCurrent=D;var C=D.getEl();this.startX=YAHOO.util.Event.getPageX(E);this.startY=YAHOO.util.Event.getPageY(E);this.deltaX=this.startX-C.offsetLeft;this.deltaY=this.startY-C.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var F=YAHOO.util.DDM;F.startDrag(F.startX,F.startY);F.fromTimeout=true;},this.clickTimeThresh);},startDrag:function(C,E){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=this.useShim;this.useShim=true;}this._activateShim();clearTimeout(this.clickTimeout);var D=this.dragCurrent;if(D&&D.events.b4StartDrag){D.b4StartDrag(C,E);D.fireEvent("b4StartDragEvent",{x:C,y:E});}if(D&&D.events.startDrag){D.startDrag(C,E);D.fireEvent("startDragEvent",{x:C,y:E});}this.dragThreshMet=true;},handleMouseUp:function(C){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(C);}this.fromTimeout=false;this.fireEvents(C,true);}else{}this.stopDrag(C);this.stopEvent(C);}},stopEvent:function(C){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(C);}if(this.preventDefault){YAHOO.util.Event.preventDefault(C);}},stopDrag:function(E,D){var C=this.dragCurrent;if(C&&!D){if(this.dragThreshMet){if(C.events.b4EndDrag){C.b4EndDrag(E);C.fireEvent("b4EndDragEvent",{e:E});}if(C.events.endDrag){C.endDrag(E);C.fireEvent("endDragEvent",{e:E});}}if(C.events.mouseUp){C.onMouseUp(E);C.fireEvent("mouseUpEvent",{e:E});}}if(this._shimActive){this._deactivateShim();if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false;}}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(F){var C=this.dragCurrent;if(C){if(YAHOO.util.Event.isIE&&!F.button){this.stopEvent(F);return this.handleMouseUp(F);}else{if(F.clientX<0||F.clientY<0){}}if(!this.dragThreshMet){var E=Math.abs(this.startX-YAHOO.util.Event.getPageX(F));var D=Math.abs(this.startY-YAHOO.util.Event.getPageY(F));if(E>this.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent("b4DragEvent",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent("dragEvent",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(V,L){var a=this.dragCurrent;if(!a||a.isLocked()||a.dragOnly){return;}var N=YAHOO.util.Event.getPageX(V),M=YAHOO.util.Event.getPageY(V),P=new YAHOO.util.Point(N,M),K=a.getTargetCoord(P.x,P.y),F=a.getDragEl(),E=["out","over","drop","enter"],U=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},Q=[],c={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var S in this.dragOvers){var d=this.dragOvers[S];if(!this.isTypeOfDD(d)){continue;\r
+}if(!this.isOverTarget(P,d,this.mode,U)){c.outEvts.push(d);}I[S]=true;delete this.dragOvers[S];}for(var R in a.groups){if("string"!=typeof R){continue;}for(S in this.ids[R]){var G=this.ids[R][S];if(!this.isTypeOfDD(G)){continue;}if(G.isTarget&&!G.isLocked()&&G!=a){if(this.isOverTarget(P,G,this.mode,U)){D[R]=true;if(L){c.dropEvts.push(G);}else{if(!I[G.id]){c.enterEvts.push(G);}else{c.overEvts.push(G);}this.dragOvers[G.id]=G;}}}}}this.interactionInfo={out:c.outEvts,enter:c.enterEvts,over:c.overEvts,drop:c.dropEvts,point:P,draggedRegion:U,sourceRegion:this.locationCache[a.id],validDrop:L};for(var C in D){Q.push(C);}if(L&&!c.dropEvts.length){this.interactionInfo.validDrop=false;if(a.events.invalidDrop){a.onInvalidDrop(V);a.fireEvent("invalidDropEvent",{e:V});}}for(S=0;S<E.length;S++){var Y=null;if(c[E[S]+"Evts"]){Y=c[E[S]+"Evts"];}if(Y&&Y.length){var H=E[S].charAt(0).toUpperCase()+E[S].substr(1),X="onDrag"+H,J="b4Drag"+H,O="drag"+H+"Event",W="drag"+H;if(this.mode){if(a.events[J]){a[J](V,Y,Q);a.fireEvent(J+"Event",{event:V,info:Y,group:Q});}if(a.events[W]){a[X](V,Y,Q);a.fireEvent(O,{event:V,info:Y,group:Q});}}else{for(var Z=0,T=Y.length;Z<T;++Z){if(a.events[J]){a[J](V,Y[Z].id,Q[0]);a.fireEvent(J+"Event",{event:V,info:Y[Z].id,group:Q[0]});}if(a.events[W]){a[X](V,Y[Z].id,Q[0]);a.fireEvent(O,{event:V,info:Y[Z].id,group:Q[0]});}}}}}},getBestMatch:function(E){var G=null;var D=E.length;if(D==1){G=E[0];}else{for(var F=0;F<D;++F){var C=E[F];if(this.mode==this.INTERSECT&&C.cursorIsOver){G=C;break;}else{if(!G||!G.overlap||(C.overlap&&G.overlap.getArea()<C.overlap.getArea())){G=C;}}}}return G;},refreshCache:function(D){var F=D||this.ids;for(var C in F){if("string"!=typeof C){continue;}for(var E in this.ids[C]){var G=this.ids[C][E];if(this.isTypeOfDD(G)){var H=this.getLocation(G);if(H){this.locationCache[G.id]=H;}else{delete this.locationCache[G.id];}}}}},verifyEl:function(D){try{if(D){var C=D.offsetParent;if(C){return true;}}}catch(E){}return false;},getLocation:function(H){if(!this.isTypeOfDD(H)){return null;}var F=H.getEl(),K,E,D,M,L,N,C,J,G;try{K=YAHOO.util.Dom.getXY(F);}catch(I){}if(!K){return null;}E=K[0];D=E+F.offsetWidth;M=K[1];L=M+F.offsetHeight;N=M-H.padding[0];C=D+H.padding[1];J=L+H.padding[2];G=E-H.padding[3];return new YAHOO.util.Region(N,C,J,G);},isOverTarget:function(K,C,E,F){var G=this.locationCache[C.id];if(!G||!this.useCache){G=this.getLocation(C);this.locationCache[C.id]=G;}if(!G){return false;}C.cursorIsOver=G.contains(K);var J=this.dragCurrent;if(!J||(!E&&!J.constrainX&&!J.constrainY)){return C.cursorIsOver;}C.overlap=null;if(!F){var H=J.getTargetCoord(K.x,K.y);var D=J.getDragEl();F=new YAHOO.util.Region(H.y,H.x+D.offsetWidth,H.y+D.offsetHeight,H.x);}var I=F.intersect(G);if(I){C.overlap=I;return(E)?true:C.cursorIsOver;}else{return false;}},_onUnload:function(D,C){this.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}this._execOnAll("unreg",[]);this.ids={};},elementCache:{},getElWrapper:function(D){var C=this.elementCache[D];if(!C||!C.el){C=this.elementCache[D]=new this.ElementWrapper(YAHOO.util.Dom.get(D));}return C;},getElement:function(C){return YAHOO.util.Dom.get(C);},getCss:function(D){var C=YAHOO.util.Dom.get(D);return(C)?C.style:null;},ElementWrapper:function(C){this.el=C||null;this.id=this.el&&C.id;this.css=this.el&&C.style;},getPosX:function(C){return YAHOO.util.Dom.getX(C);},getPosY:function(C){return YAHOO.util.Dom.getY(C);},swapNode:function(E,C){if(E.swapNode){E.swapNode(C);}else{var F=C.parentNode;var D=C.nextSibling;if(D==E){F.insertBefore(E,C);}else{if(C==E.nextSibling){F.insertBefore(C,E);}else{E.parentNode.replaceChild(C,E);F.insertBefore(E,D);}}}},getScroll:function(){var E,C,F=document.documentElement,D=document.body;if(F&&(F.scrollTop||F.scrollLeft)){E=F.scrollTop;C=F.scrollLeft;}else{if(D){E=D.scrollTop;C=D.scrollLeft;}else{}}return{top:E,left:C};},getStyle:function(D,C){return YAHOO.util.Dom.getStyle(D,C);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:function(){return this.getScroll().left;},moveToEl:function(C,E){var D=YAHOO.util.Dom.getXY(E);YAHOO.util.Dom.setXY(C,D);},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight();},getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth();},numericSort:function(D,C){return(D-C);},_timeoutCount:0,_addListeners:function(){var C=YAHOO.util.DDM;if(YAHOO.util.Event&&document){C._onLoad();}else{if(C._timeoutCount>2000){}else{setTimeout(C._addListeners,10);if(document&&document.body){C._timeoutCount+=1;}}}},handleWasClicked:function(C,E){if(this.isHandle(E,C.id)){return true;}else{var D=C.parentNode;while(D){if(this.isHandle(E,D.id)){return true;}else{D=D.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments);},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,useShim:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.get(this.id);\r
+}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+"Event");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this.config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display=="none")){}else{}return;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];this.startPageY=C[1];},addToGroup:function(C){this.groups[C]=true;this.DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return;}if(this.isLocked()){return;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent("b4MouseDownEvent",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){H=this.fireEvent("mouseDownEvent",J);}if((C===false)||(E===false)||(F===false)||(H===false)){return;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHandleClass:function(C){this.invalidHandleClasses.push(C);},removeInvalidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D);\r
+}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setDelta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScrollLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(B+D-J-this.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame();}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return;}var F=this.getDragEl(),E=YAHOO.util.Dom;if(!F){F=document.createElement("div");F.id=this.dragElId;var D=F.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");F.appendChild(C);A.insertBefore(F,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resizeFrame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getDragEl();var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YAHOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.7.0",build:"1796"});/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+(function(){var B=YAHOO.util.Dom.getXY,A=YAHOO.util.Event,D=Array.prototype.slice;function C(G,E,F,H){C.ANIM_AVAIL=(!YAHOO.lang.isUndefined(YAHOO.util.Anim));if(G){this.init(G,E,true);this.initSlider(H);this.initThumb(F);}}YAHOO.lang.augmentObject(C,{getHorizSlider:function(F,G,I,H,E){return new C(F,F,new YAHOO.widget.SliderThumb(G,F,I,H,0,0,E),"horiz");},getVertSlider:function(G,H,E,I,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,0,0,E,I,F),"vert");},getSliderRegion:function(G,H,J,I,E,K,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,J,I,E,K,F),"region");},SOURCE_UI_EVENT:1,SOURCE_SET_VALUE:2,SOURCE_KEY_EVENT:3,ANIM_AVAIL:false},true);YAHOO.extend(C,YAHOO.util.DragDrop,{_mouseDown:false,dragOnly:true,initSlider:function(E){this.type=E;this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);this.isTarget=false;this.animate=C.ANIM_AVAIL;this.backgroundEnabled=true;this.tickPause=40;this.enableKeys=true;this.keyIncrement=20;this.moveComplete=true;this.animationDuration=0.2;this.SOURCE_UI_EVENT=1;this.SOURCE_SET_VALUE=2;this.valueChangeSource=0;this._silent=false;this.lastOffset=[0,0];},initThumb:function(F){var E=this;this.thumb=F;F.cacheBetweenDrags=true;if(F._isHoriz&&F.xTicks&&F.xTicks.length){this.tickPause=Math.round(360/F.xTicks.length);}else{if(F.yTicks&&F.yTicks.length){this.tickPause=Math.round(360/F.yTicks.length);}}F.onAvailable=function(){return E.setStartSliderState();};F.onMouseDown=function(){E._mouseDown=true;return E.focus();};F.startDrag=function(){E._slideStart();};F.onDrag=function(){E.fireEvents(true);};F.onMouseUp=function(){E.thumbMouseUp();};},onAvailable:function(){this._bindKeyEvents();},_bindKeyEvents:function(){A.on(this.id,"keydown",this.handleKeyDown,this,true);A.on(this.id,"keypress",this.handleKeyPress,this,true);},handleKeyPress:function(F){if(this.enableKeys){var E=A.getCharCode(F);switch(E){case 37:case 38:case 39:case 40:case 36:case 35:A.preventDefault(F);break;default:}}},handleKeyDown:function(J){if(this.enableKeys){var G=A.getCharCode(J),F=this.thumb,H=this.getXValue(),E=this.getYValue(),I=true;switch(G){case 37:H-=this.keyIncrement;break;case 38:E-=this.keyIncrement;break;case 39:H+=this.keyIncrement;break;case 40:E+=this.keyIncrement;break;case 36:H=F.leftConstraint;E=F.topConstraint;break;case 35:H=F.rightConstraint;E=F.bottomConstraint;break;default:I=false;}if(I){if(F._isRegion){this._setRegionValue(C.SOURCE_KEY_EVENT,H,E,true);}else{this._setValue(C.SOURCE_KEY_EVENT,(F._isHoriz?H:E),true);}A.stopEvent(J);}}},setStartSliderState:function(){this.setThumbCenterPoint();this.baselinePos=B(this.getEl());this.thumb.startOffset=this.thumb.getOffsetFromParent(this.baselinePos);if(this.thumb._isRegion){if(this.deferredSetRegionValue){this._setRegionValue.apply(this,this.deferredSetRegionValue);this.deferredSetRegionValue=null;}else{this.setRegionValue(0,0,true,true,true);}}else{if(this.deferredSetValue){this._setValue.apply(this,this.deferredSetValue);this.deferredSetValue=null;}else{this.setValue(0,true,true,true);}}},setThumbCenterPoint:function(){var E=this.thumb.getEl();if(E){this.thumbCenterPoint={x:parseInt(E.offsetWidth/2,10),y:parseInt(E.offsetHeight/2,10)};}},lock:function(){this.thumb.lock();this.locked=true;},unlock:function(){this.thumb.unlock();this.locked=false;},thumbMouseUp:function(){this._mouseDown=false;if(!this.isLocked()&&!this.moveComplete){this.endMove();}},onMouseUp:function(){this._mouseDown=false;if(this.backgroundEnabled&&!this.isLocked()&&!this.moveComplete){this.endMove();}},getThumb:function(){return this.thumb;},focus:function(){this.valueChangeSource=C.SOURCE_UI_EVENT;var E=this.getEl();if(E.focus){try{E.focus();}catch(F){}}this.verifyOffset();return !this.isLocked();},onChange:function(E,F){},onSlideStart:function(){},onSlideEnd:function(){},getValue:function(){return this.thumb.getValue();},getXValue:function(){return this.thumb.getXValue();},getYValue:function(){return this.thumb.getYValue();},setValue:function(){var E=D.call(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setValue.apply(this,E);},_setValue:function(I,L,G,H,E){var F=this.thumb,K,J;if(!F.available){this.deferredSetValue=arguments;return false;}if(this.isLocked()&&!H){return false;}if(isNaN(L)){return false;}if(F._isRegion){return false;}this._silent=E;this.valueChangeSource=I||C.SOURCE_SET_VALUE;F.lastOffset=[L,L];this.verifyOffset(true);this._slideStart();if(F._isHoriz){K=F.initPageX+L+this.thumbCenterPoint.x;this.moveThumb(K,F.initPageY,G);}else{J=F.initPageY+L+this.thumbCenterPoint.y;this.moveThumb(F.initPageX,J,G);}return true;},setRegionValue:function(){var E=D.call(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setRegionValue.apply(this,E);},_setRegionValue:function(F,J,H,I,G,K){var L=this.thumb,E,M;if(!L.available){this.deferredSetRegionValue=arguments;return false;}if(this.isLocked()&&!G){return false;}if(isNaN(J)){return false;}if(!L._isRegion){return false;}this._silent=K;this.valueChangeSource=F||C.SOURCE_SET_VALUE;L.lastOffset=[J,H];this.verifyOffset(true);this._slideStart();E=L.initPageX+J+this.thumbCenterPoint.x;M=L.initPageY+H+this.thumbCenterPoint.y;this.moveThumb(E,M,I);return true;},verifyOffset:function(F){var G=B(this.getEl()),E=this.thumb;if(!this.thumbCenterPoint||!this.thumbCenterPoint.x){this.setThumbCenterPoint();}if(G){if(G[0]!=this.baselinePos[0]||G[1]!=this.baselinePos[1]){this.setInitPosition();this.baselinePos=G;E.initPageX=this.initPageX+E.startOffset[0];E.initPageY=this.initPageY+E.startOffset[1];E.deltaSetXY=null;this.resetThumbConstraints();return false;}}return true;},moveThumb:function(K,J,I,G){var L=this.thumb,M=this,F,E,H;if(!L.available){return;}L.setDelta(this.thumbCenterPoint.x,this.thumbCenterPoint.y);E=L.getTargetCoord(K,J);F=[Math.round(E.x),Math.round(E.y)];if(this.animate&&L._graduated&&!I){this.lock();this.curCoord=B(this.thumb.getEl());this.curCoord=[Math.round(this.curCoord[0]),Math.round(this.curCoord[1])];setTimeout(function(){M.moveOneTick(F);\r
+},this.tickPause);}else{if(this.animate&&C.ANIM_AVAIL&&!I){this.lock();H=new YAHOO.util.Motion(L.id,{points:{to:F}},this.animationDuration,YAHOO.util.Easing.easeOut);H.onComplete.subscribe(function(){M.unlock();if(!M._mouseDown){M.endMove();}});H.animate();}else{L.setDragElPos(K,J);if(!G&&!this._mouseDown){this.endMove();}}}},_slideStart:function(){if(!this._sliding){if(!this._silent){this.onSlideStart();this.fireEvent("slideStart");}this._sliding=true;}},_slideEnd:function(){if(this._sliding&&this.moveComplete){var E=this._silent;this._sliding=false;this._silent=false;this.moveComplete=false;if(!E){this.onSlideEnd();this.fireEvent("slideEnd");}}},moveOneTick:function(F){var H=this.thumb,G=this,I=null,E,J;if(H._isRegion){I=this._getNextX(this.curCoord,F);E=(I!==null)?I[0]:this.curCoord[0];I=this._getNextY(this.curCoord,F);J=(I!==null)?I[1]:this.curCoord[1];I=E!==this.curCoord[0]||J!==this.curCoord[1]?[E,J]:null;}else{if(H._isHoriz){I=this._getNextX(this.curCoord,F);}else{I=this._getNextY(this.curCoord,F);}}if(I){this.curCoord=I;this.thumb.alignElWithMouse(H.getEl(),I[0]+this.thumbCenterPoint.x,I[1]+this.thumbCenterPoint.y);if(!(I[0]==F[0]&&I[1]==F[1])){setTimeout(function(){G.moveOneTick(F);},this.tickPause);}else{this.unlock();if(!this._mouseDown){this.endMove();}}}else{this.unlock();if(!this._mouseDown){this.endMove();}}},_getNextX:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[0]>F[0]){J=H.tickSize-this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]-J,E[1]);I=[G.x,G.y];}else{if(E[0]<F[0]){J=H.tickSize+this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]+J,E[1]);I=[G.x,G.y];}else{}}return I;},_getNextY:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[1]>F[1]){J=H.tickSize-this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]-J);I=[G.x,G.y];}else{if(E[1]<F[1]){J=H.tickSize+this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]+J);I=[G.x,G.y];}else{}}return I;},b4MouseDown:function(E){if(!this.backgroundEnabled){return false;}this.thumb.autoOffset();this.resetThumbConstraints();},onMouseDown:function(F){if(!this.backgroundEnabled||this.isLocked()){return false;}this._mouseDown=true;var E=A.getPageX(F),G=A.getPageY(F);this.focus();this._slideStart();this.moveThumb(E,G);},onDrag:function(F){if(this.backgroundEnabled&&!this.isLocked()){var E=A.getPageX(F),G=A.getPageY(F);this.moveThumb(E,G,true,true);this.fireEvents();}},endMove:function(){this.unlock();this.fireEvents();this.moveComplete=true;this._slideEnd();},resetThumbConstraints:function(){var E=this.thumb;E.setXConstraint(E.leftConstraint,E.rightConstraint,E.xTickSize);E.setYConstraint(E.topConstraint,E.bottomConstraint,E.xTickSize);},fireEvents:function(G){var F=this.thumb,I,H,E;if(!G){F.cachePosition();}if(!this.isLocked()){if(F._isRegion){I=F.getXValue();H=F.getYValue();if(I!=this.previousX||H!=this.previousY){if(!this._silent){this.onChange(I,H);this.fireEvent("change",{x:I,y:H});}}this.previousX=I;this.previousY=H;}else{E=F.getValue();if(E!=this.previousVal){if(!this._silent){this.onChange(E);this.fireEvent("change",E);}}this.previousVal=E;}}},toString:function(){return("Slider ("+this.type+") "+this.id);}});YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);YAHOO.widget.Slider=C;})();YAHOO.widget.SliderThumb=function(G,B,E,D,A,F,C){if(G){YAHOO.widget.SliderThumb.superclass.constructor.call(this,G,B);this.parentElId=B;}this.isTarget=false;this.tickSize=C;this.maintainOffset=true;this.initSlider(E,D,A,F,C);this.scroll=false;};YAHOO.extend(YAHOO.widget.SliderThumb,YAHOO.util.DD,{startOffset:null,dragOnly:true,_isHoriz:false,_prevVal:0,_graduated:false,getOffsetFromParent0:function(C){var A=YAHOO.util.Dom.getXY(this.getEl()),B=C||YAHOO.util.Dom.getXY(this.parentElId);return[(A[0]-B[0]),(A[1]-B[1])];},getOffsetFromParent:function(H){var A=this.getEl(),E,I,F,B,K,D,C,J,G;if(!this.deltaOffset){I=YAHOO.util.Dom.getXY(A);F=H||YAHOO.util.Dom.getXY(this.parentElId);E=[(I[0]-F[0]),(I[1]-F[1])];B=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);K=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);D=B-E[0];C=K-E[1];if(isNaN(D)||isNaN(C)){}else{this.deltaOffset=[D,C];}}else{J=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);G=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);E=[J+this.deltaOffset[0],G+this.deltaOffset[1]];}return E;},initSlider:function(D,C,A,E,B){this.initLeft=D;this.initRight=C;this.initUp=A;this.initDown=E;this.setXConstraint(D,C,B);this.setYConstraint(A,E,B);if(B&&B>1){this._graduated=true;}this._isHoriz=(D||C);this._isVert=(A||E);this._isRegion=(this._isHoriz&&this._isVert);},clearTicks:function(){YAHOO.widget.SliderThumb.superclass.clearTicks.call(this);this.tickSize=0;this._graduated=false;},getValue:function(){return(this._isHoriz)?this.getXValue():this.getYValue();},getXValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[0])){this.lastOffset=A;return(A[0]-this.startOffset[0]);}else{return(this.lastOffset[0]-this.startOffset[0]);}},getYValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[1])){this.lastOffset=A;return(A[1]-this.startOffset[1]);}else{return(this.lastOffset[1]-this.startOffset[1]);}},toString:function(){return"SliderThumb "+this.id;},onChange:function(A,B){}});(function(){var A=YAHOO.util.Event,B=YAHOO.widget;function C(I,F,H,D){var G=this,J={min:false,max:false},E,K;this.minSlider=I;this.maxSlider=F;this.activeSlider=I;this.isHoriz=I.thumb._isHoriz;E=this.minSlider.thumb.onMouseDown;K=this.maxSlider.thumb.onMouseDown;this.minSlider.thumb.onMouseDown=function(){G.activeSlider=G.minSlider;E.apply(this,arguments);};this.maxSlider.thumb.onMouseDown=function(){G.activeSlider=G.maxSlider;K.apply(this,arguments);};this.minSlider.thumb.onAvailable=function(){I.setStartSliderState();J.min=true;if(J.max){G.fireEvent("ready",G);}};this.maxSlider.thumb.onAvailable=function(){F.setStartSliderState();J.max=true;if(J.min){G.fireEvent("ready",G);}};I.onMouseDown=F.onMouseDown=function(L){return this.backgroundEnabled&&G._handleMouseDown(L);\r
+};I.onDrag=F.onDrag=function(L){G._handleDrag(L);};I.onMouseUp=F.onMouseUp=function(L){G._handleMouseUp(L);};I._bindKeyEvents=function(){G._bindKeyEvents(this);};F._bindKeyEvents=function(){};I.subscribe("change",this._handleMinChange,I,this);I.subscribe("slideStart",this._handleSlideStart,I,this);I.subscribe("slideEnd",this._handleSlideEnd,I,this);F.subscribe("change",this._handleMaxChange,F,this);F.subscribe("slideStart",this._handleSlideStart,F,this);F.subscribe("slideEnd",this._handleSlideEnd,F,this);this.createEvent("ready",this);this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);D=YAHOO.lang.isArray(D)?D:[0,H];D[0]=Math.min(Math.max(parseInt(D[0],10)|0,0),H);D[1]=Math.max(Math.min(parseInt(D[1],10)|0,H),0);if(D[0]>D[1]){D.splice(0,2,D[1],D[0]);}this.minVal=D[0];this.maxVal=D[1];this.minSlider.setValue(this.minVal,true,true,true);this.maxSlider.setValue(this.maxVal,true,true,true);}C.prototype={minVal:-1,maxVal:-1,minRange:0,_handleSlideStart:function(E,D){this.fireEvent("slideStart",D);},_handleSlideEnd:function(E,D){this.fireEvent("slideEnd",D);},_handleDrag:function(D){B.Slider.prototype.onDrag.call(this.activeSlider,D);},_handleMinChange:function(){this.activeSlider=this.minSlider;this.updateValue();},_handleMaxChange:function(){this.activeSlider=this.maxSlider;this.updateValue();},_bindKeyEvents:function(D){A.on(D.id,"keydown",this._handleKeyDown,this,true);A.on(D.id,"keypress",this._handleKeyPress,this,true);},_handleKeyDown:function(D){this.activeSlider.handleKeyDown.apply(this.activeSlider,arguments);},_handleKeyPress:function(D){this.activeSlider.handleKeyPress.apply(this.activeSlider,arguments);},setValues:function(H,K,I,E,J){var F=this.minSlider,M=this.maxSlider,D=F.thumb,L=M.thumb,N=this,G={min:false,max:false};if(D._isHoriz){D.setXConstraint(D.leftConstraint,L.rightConstraint,D.tickSize);L.setXConstraint(D.leftConstraint,L.rightConstraint,L.tickSize);}else{D.setYConstraint(D.topConstraint,L.bottomConstraint,D.tickSize);L.setYConstraint(D.topConstraint,L.bottomConstraint,L.tickSize);}this._oneTimeCallback(F,"slideEnd",function(){G.min=true;if(G.max){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});this._oneTimeCallback(M,"slideEnd",function(){G.max=true;if(G.min){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});F.setValue(H,I,E,false);M.setValue(K,I,E,false);},setMinValue:function(F,H,I,E){var G=this.minSlider,D=this;this.activeSlider=G;D=this;this._oneTimeCallback(G,"slideEnd",function(){D.updateValue(E);setTimeout(function(){D._cleanEvent(G,"slideEnd");},0);});G.setValue(F,H,I);},setMaxValue:function(D,H,I,F){var G=this.maxSlider,E=this;this.activeSlider=G;this._oneTimeCallback(G,"slideEnd",function(){E.updateValue(F);setTimeout(function(){E._cleanEvent(G,"slideEnd");},0);});G.setValue(D,H,I);},updateValue:function(J){var E=this.minSlider.getValue(),K=this.maxSlider.getValue(),F=false,D,M,H,I,L,G;if(E!=this.minVal||K!=this.maxVal){F=true;D=this.minSlider.thumb;M=this.maxSlider.thumb;H=this.isHoriz?"x":"y";G=this.minSlider.thumbCenterPoint[H]+this.maxSlider.thumbCenterPoint[H];I=Math.max(K-G-this.minRange,0);L=Math.min(-E-G-this.minRange,0);if(this.isHoriz){I=Math.min(I,M.rightConstraint);D.setXConstraint(D.leftConstraint,I,D.tickSize);M.setXConstraint(L,M.rightConstraint,M.tickSize);}else{I=Math.min(I,M.bottomConstraint);D.setYConstraint(D.leftConstraint,I,D.tickSize);M.setYConstraint(L,M.bottomConstraint,M.tickSize);}}this.minVal=E;this.maxVal=K;if(F&&!J){this.fireEvent("change",this);}},selectActiveSlider:function(H){var E=this.minSlider,D=this.maxSlider,J=E.isLocked()||!E.backgroundEnabled,G=D.isLocked()||!E.backgroundEnabled,F=YAHOO.util.Event,I;if(J||G){this.activeSlider=J?D:E;}else{if(this.isHoriz){I=F.getPageX(H)-E.thumb.initPageX-E.thumbCenterPoint.x;}else{I=F.getPageY(H)-E.thumb.initPageY-E.thumbCenterPoint.y;}this.activeSlider=I*2>D.getValue()+E.getValue()?D:E;}},_handleMouseDown:function(D){if(!D._handled){D._handled=true;this.selectActiveSlider(D);return B.Slider.prototype.onMouseDown.call(this.activeSlider,D);}else{return false;}},_handleMouseUp:function(D){B.Slider.prototype.onMouseUp.apply(this.activeSlider,arguments);},_oneTimeCallback:function(F,D,E){F.subscribe(D,function(){F.unsubscribe(D,arguments.callee);E.apply({},[].slice.apply(arguments));});},_cleanEvent:function(K,E){var J,I,D,G,H,F;if(K.__yui_events&&K.events[E]){for(I=K.__yui_events.length;I>=0;--I){if(K.__yui_events[I].type===E){J=K.__yui_events[I];break;}}if(J){H=J.subscribers;F=[];G=0;for(I=0,D=H.length;I<D;++I){if(H[I]){F[G++]=H[I];}}J.subscribers=F;}}}};YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);B.Slider.getHorizDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,G,0,0,F),E=new B.SliderThumb(K,H,0,G,0,0,F);return new C(new B.Slider(H,H,I,"horiz"),new B.Slider(H,H,E,"horiz"),G,D);};B.Slider.getVertDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,0,0,G,F),E=new B.SliderThumb(K,H,0,0,0,G,F);return new B.DualSlider(new B.Slider(H,H,I,"vert"),new B.Slider(H,H,E,"vert"),G,D);};YAHOO.widget.DualSlider=C;})();YAHOO.register("slider",YAHOO.widget.Slider,{version:"2.7.0",build:"1796"});/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+YAHOO.util.Attribute=function(B,A){if(A){this.owner=A;this.configure(B,true);}};YAHOO.util.Attribute.prototype={name:undefined,value:null,owner:null,readOnly:false,writeOnce:false,_initialConfig:null,_written:false,method:null,setter:null,getter:null,validator:null,getValue:function(){var A=this.value;if(this.getter){A=this.getter.call(this.owner,this.name);}return A;},setValue:function(F,B){var E,A=this.owner,C=this.name;var D={type:C,prevValue:this.getValue(),newValue:F};if(this.readOnly||(this.writeOnce&&this._written)){return false;}if(this.validator&&!this.validator.call(A,F)){return false;}if(!B){E=A.fireBeforeChangeEvent(D);if(E===false){return false;}}if(this.setter){F=this.setter.call(A,F,this.name);if(F===undefined){}}if(this.method){this.method.call(A,F,this.name);}this.value=F;this._written=true;D.type=C;if(!B){this.owner.fireChangeEvent(D);}return true;},configure:function(B,C){B=B||{};if(C){this._written=false;}this._initialConfig=this._initialConfig||{};for(var A in B){if(B.hasOwnProperty(A)){this[A]=B[A];if(C){this._initialConfig[A]=B[A];}}}},resetValue:function(){return this.setValue(this._initialConfig.value);},resetConfig:function(){this.configure(this._initialConfig,true);},refresh:function(A){this.setValue(this.value,A);}};(function(){var A=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(C){this._configs=this._configs||{};var B=this._configs[C];if(!B||!this._configs.hasOwnProperty(C)){return null;}return B.getValue();},set:function(D,E,B){this._configs=this._configs||{};var C=this._configs[D];if(!C){return false;}return C.setValue(E,B);},getAttributeKeys:function(){this._configs=this._configs;var C=[],B;for(B in this._configs){if(A.hasOwnProperty(this._configs,B)&&!A.isUndefined(this._configs[B])){C[C.length]=B;}}return C;},setAttributes:function(D,B){for(var C in D){if(A.hasOwnProperty(D,C)){this.set(C,D[C],B);}}},resetValue:function(C,B){this._configs=this._configs||{};if(this._configs[C]){this.set(C,this._configs[C]._initialConfig.value,B);return true;}return false;},refresh:function(E,C){this._configs=this._configs||{};var F=this._configs;E=((A.isString(E))?[E]:E)||this.getAttributeKeys();for(var D=0,B=E.length;D<B;++D){if(F.hasOwnProperty(E[D])){this._configs[E[D]].refresh(C);}}},register:function(B,C){this.setAttributeConfig(B,C);},getAttributeConfig:function(C){this._configs=this._configs||{};var B=this._configs[C]||{};var D={};for(C in B){if(A.hasOwnProperty(B,C)){D[C]=B[C];}}return D;},setAttributeConfig:function(B,C,D){this._configs=this._configs||{};C=C||{};if(!this._configs[B]){C.name=B;this._configs[B]=this.createAttribute(C);}else{this._configs[B].configure(C,D);}},configureAttribute:function(B,C,D){this.setAttributeConfig(B,C,D);},resetAttributeConfig:function(B){this._configs=this._configs||{};this._configs[B].resetConfig();},subscribe:function(B,C){this._events=this._events||{};if(!(B in this._events)){this._events[B]=this.createEvent(B);}YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){this.subscribe.apply(this,arguments);},addListener:function(){this.subscribe.apply(this,arguments);},fireBeforeChangeEvent:function(C){var B="before";B+=C.type.charAt(0).toUpperCase()+C.type.substr(1)+"Change";C.type=B;return this.fireEvent(C.type,C);},fireChangeEvent:function(B){B.type+="Change";return this.fireEvent(B.type,B);},createAttribute:function(B){return new YAHOO.util.Attribute(B,this);}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);})();(function(){var B=YAHOO.util.Dom,C=YAHOO.util.AttributeProvider;var A=function(D,E){this.init.apply(this,arguments);};A.DOM_EVENTS={"click":true,"dblclick":true,"keydown":true,"keypress":true,"keyup":true,"mousedown":true,"mousemove":true,"mouseout":true,"mouseover":true,"mouseup":true,"focus":true,"blur":true,"submit":true,"change":true};A.prototype={DOM_EVENTS:null,DEFAULT_HTML_SETTER:function(F,D){var E=this.get("element");if(E){E[D]=F;}},DEFAULT_HTML_GETTER:function(D){var E=this.get("element"),F;if(E){F=E[D];}return F;},appendChild:function(D){D=D.get?D.get("element"):D;return this.get("element").appendChild(D);},getElementsByTagName:function(D){return this.get("element").getElementsByTagName(D);},hasChildNodes:function(){return this.get("element").hasChildNodes();},insertBefore:function(D,E){D=D.get?D.get("element"):D;E=(E&&E.get)?E.get("element"):E;return this.get("element").insertBefore(D,E);},removeChild:function(D){D=D.get?D.get("element"):D;return this.get("element").removeChild(D);},replaceChild:function(D,E){D=D.get?D.get("element"):D;E=E.get?E.get("element"):E;return this.get("element").replaceChild(D,E);},initAttributes:function(D){},addListener:function(H,G,I,F){var E=this.get("element")||this.get("id");F=F||this;var D=this;if(!this._events[H]){if(E&&this.DOM_EVENTS[H]){YAHOO.util.Event.addListener(E,H,function(J){if(J.srcElement&&!J.target){J.target=J.srcElement;}D.fireEvent(H,J);},I,F);}this.createEvent(H,this);}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){return this.addListener.apply(this,arguments);},subscribe:function(){return this.addListener.apply(this,arguments);},removeListener:function(E,D){return this.unsubscribe.apply(this,arguments);},addClass:function(D){B.addClass(this.get("element"),D);},getElementsByClassName:function(E,D){return B.getElementsByClassName(E,D,this.get("element"));},hasClass:function(D){return B.hasClass(this.get("element"),D);},removeClass:function(D){return B.removeClass(this.get("element"),D);},replaceClass:function(E,D){return B.replaceClass(this.get("element"),E,D);},setStyle:function(E,D){return B.setStyle(this.get("element"),E,D);},getStyle:function(D){return B.getStyle(this.get("element"),D);},fireQueue:function(){var E=this._queue;for(var F=0,D=E.length;F<D;++F){this[E[F][0]].apply(this,E[F][1]);}},appendTo:function(E,F){E=(E.get)?E.get("element"):B.get(E);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:E});\r
+F=(F&&F.get)?F.get("element"):B.get(F);var D=this.get("element");if(!D){return false;}if(!E){return false;}if(D.parent!=E){if(F){E.insertBefore(D,F);}else{E.appendChild(D);}}this.fireEvent("appendTo",{type:"appendTo",target:E});return D;},get:function(D){var F=this._configs||{},E=F.element;if(E&&!F[D]&&!YAHOO.lang.isUndefined(E.value[D])){this._setHTMLAttrConfig(D);}return C.prototype.get.call(this,D);},setAttributes:function(J,G){var E={},H=this._configOrder;for(var I=0,D=H.length;I<D;++I){if(J[H[I]]!==undefined){E[H[I]]=true;this.set(H[I],J[H[I]],G);}}for(var F in J){if(J.hasOwnProperty(F)&&!E[F]){this.set(F,J[F],G);}}},set:function(E,G,D){var F=this.get("element");if(!F){this._queue[this._queue.length]=["set",arguments];if(this._configs[E]){this._configs[E].value=G;}return;}if(!this._configs[E]&&!YAHOO.lang.isUndefined(F[E])){this._setHTMLAttrConfig(E);}return C.prototype.set.apply(this,arguments);},setAttributeConfig:function(D,E,F){this._configOrder.push(D);C.prototype.setAttributeConfig.apply(this,arguments);},createEvent:function(E,D){this._events[E]=true;return C.prototype.createEvent.apply(this,arguments);},init:function(E,D){this._initElement(E,D);},destroy:function(){var D=this.get("element");YAHOO.util.Event.purgeElement(D,true);this.unsubscribeAll();if(D&&D.parentNode){D.parentNode.removeChild(D);}this._queue=[];this._events={};this._configs={};this._configOrder=[];},_initElement:function(F,E){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];E=E||{};E.element=E.element||F||null;var H=false;var D=A.DOM_EVENTS;this.DOM_EVENTS=this.DOM_EVENTS||{};for(var G in D){if(D.hasOwnProperty(G)){this.DOM_EVENTS[G]=D[G];}}if(typeof E.element==="string"){this._setHTMLAttrConfig("id",{value:E.element});}if(B.get(E.element)){H=true;this._initHTMLElement(E);this._initContent(E);}YAHOO.util.Event.onAvailable(E.element,function(){if(!H){this._initHTMLElement(E);}this.fireEvent("available",{type:"available",target:B.get(E.element)});},this,true);YAHOO.util.Event.onContentReady(E.element,function(){if(!H){this._initContent(E);}this.fireEvent("contentReady",{type:"contentReady",target:B.get(E.element)});},this,true);},_initHTMLElement:function(D){this.setAttributeConfig("element",{value:B.get(D.element),readOnly:true});},_initContent:function(D){this.initAttributes(D);this.setAttributes(D,true);this.fireQueue();},_setHTMLAttrConfig:function(D,F){var E=this.get("element");F=F||{};F.name=D;F.setter=F.setter||this.DEFAULT_HTML_SETTER;F.getter=F.getter||this.DEFAULT_HTML_GETTER;F.value=F.value||E[D];this._configs[D]=new YAHOO.util.Attribute(F,this);}};YAHOO.augment(A,C);YAHOO.util.Element=A;})();YAHOO.register("element",YAHOO.util.Element,{version:"2.7.0",build:"1796"});/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+YAHOO.util.Color=function(){var A="0",B=YAHOO.lang.isArray,C=YAHOO.lang.isNumber;return{real2dec:function(D){return Math.min(255,Math.round(D*256));},hsv2rgb:function(H,O,M){if(B(H)){return this.hsv2rgb.call(this,H[0],H[1],H[2]);}var D,I,L,G=Math.floor((H/60)%6),J=(H/60)-G,F=M*(1-O),E=M*(1-J*O),N=M*(1-(1-J)*O),K;switch(G){case 0:D=M;I=N;L=F;break;case 1:D=E;I=M;L=F;break;case 2:D=F;I=M;L=N;break;case 3:D=F;I=E;L=M;break;case 4:D=N;I=F;L=M;break;case 5:D=M;I=F;L=E;break;}K=this.real2dec;return[K(D),K(I),K(L)];},rgb2hsv:function(D,H,I){if(B(D)){return this.rgb2hsv.apply(this,D);}D/=255;H/=255;I/=255;var G,L,E=Math.min(Math.min(D,H),I),J=Math.max(Math.max(D,H),I),K=J-E,F;switch(J){case E:G=0;break;case D:G=60*(H-I)/K;if(H<I){G+=360;}break;case H:G=(60*(I-D)/K)+120;break;case I:G=(60*(D-H)/K)+240;break;}L=(J===0)?0:1-(E/J);F=[Math.round(G),L,J];return F;},rgb2hex:function(F,E,D){if(B(F)){return this.rgb2hex.apply(this,F);}var G=this.dec2hex;return G(F)+G(E)+G(D);},dec2hex:function(D){D=parseInt(D,10)|0;D=(D>255||D<0)?0:D;return(A+D.toString(16)).slice(-2).toUpperCase();},hex2dec:function(D){return parseInt(D,16);},hex2rgb:function(D){var E=this.hex2dec;return[E(D.slice(0,2)),E(D.slice(2,4)),E(D.slice(4,6))];},websafe:function(F,E,D){if(B(F)){return this.websafe.apply(this,F);}var G=function(H){if(C(H)){H=Math.min(Math.max(0,H),255);var I,J;for(I=0;I<256;I=I+51){J=I+51;if(H>=I&&H<=J){return(H-I>25)?J:I;}}}return H;};return[G(F),G(E),G(D)];}};}();(function(){var J=0,F=YAHOO.util,C=YAHOO.lang,D=YAHOO.widget.Slider,B=F.Color,E=F.Dom,I=F.Event,A=C.substitute,H="yui-picker";function G(L,K){J=J+1;K=K||{};if(arguments.length===1&&!YAHOO.lang.isString(L)&&!L.nodeName){K=L;L=K.element||null;}if(!L&&!K.element){L=this._createHostElement(K);}G.superclass.constructor.call(this,L,K);this.initPicker();}YAHOO.extend(G,YAHOO.util.Element,{ID:{R:H+"-r",R_HEX:H+"-rhex",G:H+"-g",G_HEX:H+"-ghex",B:H+"-b",B_HEX:H+"-bhex",H:H+"-h",S:H+"-s",V:H+"-v",PICKER_BG:H+"-bg",PICKER_THUMB:H+"-thumb",HUE_BG:H+"-hue-bg",HUE_THUMB:H+"-hue-thumb",HEX:H+"-hex",SWATCH:H+"-swatch",WEBSAFE_SWATCH:H+"-websafe-swatch",CONTROLS:H+"-controls",RGB_CONTROLS:H+"-rgb-controls",HSV_CONTROLS:H+"-hsv-controls",HEX_CONTROLS:H+"-hex-controls",HEX_SUMMARY:H+"-hex-summary",CONTROLS_LABEL:H+"-controls-label"},TXT:{ILLEGAL_HEX:"Illegal hex value entered",SHOW_CONTROLS:"Show color details",HIDE_CONTROLS:"Hide color details",CURRENT_COLOR:"Currently selected color: {rgb}",CLOSEST_WEBSAFE:"Closest websafe color: {rgb}. Click to select.",R:"R",G:"G",B:"B",H:"H",S:"S",V:"V",HEX:"#",DEG:"\u00B0",PERCENT:"%"},IMAGE:{PICKER_THUMB:"../../build/colorpicker/assets/picker_thumb.png",HUE_THUMB:"../../build/colorpicker/assets/hue_thumb.png"},DEFAULT:{PICKER_SIZE:180},OPT:{HUE:"hue",SATURATION:"saturation",VALUE:"value",RED:"red",GREEN:"green",BLUE:"blue",HSV:"hsv",RGB:"rgb",WEBSAFE:"websafe",HEX:"hex",PICKER_SIZE:"pickersize",SHOW_CONTROLS:"showcontrols",SHOW_RGB_CONTROLS:"showrgbcontrols",SHOW_HSV_CONTROLS:"showhsvcontrols",SHOW_HEX_CONTROLS:"showhexcontrols",SHOW_HEX_SUMMARY:"showhexsummary",SHOW_WEBSAFE:"showwebsafe",CONTAINER:"container",IDS:"ids",ELEMENTS:"elements",TXT:"txt",IMAGES:"images",ANIMATE:"animate"},skipAnim:true,_createHostElement:function(){var K=document.createElement("div");if(this.CSS.BASE){K.className=this.CSS.BASE;}return K;},_updateHueSlider:function(){var K=this.get(this.OPT.PICKER_SIZE),L=this.get(this.OPT.HUE);L=K-Math.round(L/360*K);if(L===K){L=0;}this.hueSlider.setValue(L,this.skipAnim);},_updatePickerSlider:function(){var L=this.get(this.OPT.PICKER_SIZE),M=this.get(this.OPT.SATURATION),K=this.get(this.OPT.VALUE);M=Math.round(M*L/100);K=Math.round(L-(K*L/100));this.pickerSlider.setRegionValue(M,K,this.skipAnim);},_updateSliders:function(){this._updateHueSlider();this._updatePickerSlider();},setValue:function(L,K){K=(K)||false;this.set(this.OPT.RGB,L,K);this._updateSliders();},hueSlider:null,pickerSlider:null,_getH:function(){var K=this.get(this.OPT.PICKER_SIZE),L=(K-this.hueSlider.getValue())/K;L=Math.round(L*360);return(L===360)?0:L;},_getS:function(){return this.pickerSlider.getXValue()/this.get(this.OPT.PICKER_SIZE);},_getV:function(){var K=this.get(this.OPT.PICKER_SIZE);return(K-this.pickerSlider.getYValue())/K;},_updateSwatch:function(){var M=this.get(this.OPT.RGB),O=this.get(this.OPT.WEBSAFE),N=this.getElement(this.ID.SWATCH),L=M.join(","),K=this.get(this.OPT.TXT);E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CURRENT_COLOR,{"rgb":"#"+this.get(this.OPT.HEX)});N=this.getElement(this.ID.WEBSAFE_SWATCH);L=O.join(",");E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CLOSEST_WEBSAFE,{"rgb":"#"+B.rgb2hex(O)});},_getValuesFromSliders:function(){this.set(this.OPT.RGB,B.hsv2rgb(this._getH(),this._getS(),this._getV()));},_updateFormFields:function(){this.getElement(this.ID.H).value=this.get(this.OPT.HUE);this.getElement(this.ID.S).value=this.get(this.OPT.SATURATION);this.getElement(this.ID.V).value=this.get(this.OPT.VALUE);this.getElement(this.ID.R).value=this.get(this.OPT.RED);this.getElement(this.ID.R_HEX).innerHTML=B.dec2hex(this.get(this.OPT.RED));this.getElement(this.ID.G).value=this.get(this.OPT.GREEN);this.getElement(this.ID.G_HEX).innerHTML=B.dec2hex(this.get(this.OPT.GREEN));this.getElement(this.ID.B).value=this.get(this.OPT.BLUE);this.getElement(this.ID.B_HEX).innerHTML=B.dec2hex(this.get(this.OPT.BLUE));this.getElement(this.ID.HEX).value=this.get(this.OPT.HEX);},_onHueSliderChange:function(N){var L=this._getH(),K=B.hsv2rgb(L,1,1),M="rgb("+K.join(",")+")";this.set(this.OPT.HUE,L,true);E.setStyle(this.getElement(this.ID.PICKER_BG),"background-color",M);if(this.hueSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders();}this._updateFormFields();this._updateSwatch();},_onPickerSliderChange:function(M){var L=this._getS(),K=this._getV();this.set(this.OPT.SATURATION,Math.round(L*100),true);this.set(this.OPT.VALUE,Math.round(K*100),true);if(this.pickerSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders();\r
+}this._updateFormFields();this._updateSwatch();},_getCommand:function(K){var L=I.getCharCode(K);if(L===38){return 3;}else{if(L===13){return 6;}else{if(L===40){return 4;}else{if(L>=48&&L<=57){return 1;}else{if(L>=97&&L<=102){return 2;}else{if(L>=65&&L<=70){return 2;}else{if("8, 9, 13, 27, 37, 39".indexOf(L)>-1||K.ctrlKey||K.metaKey){return 5;}else{return 0;}}}}}}}},_useFieldValue:function(L,K,N){var M=K.value;if(N!==this.OPT.HEX){M=parseInt(M,10);}if(M!==this.get(N)){this.set(N,M);}},_rgbFieldKeypress:function(M,K,O){var N=this._getCommand(M),L=(M.shiftKey)?10:1;switch(N){case 6:this._useFieldValue.apply(this,arguments);break;case 3:this.set(O,Math.min(this.get(O)+L,255));this._updateFormFields();break;case 4:this.set(O,Math.max(this.get(O)-L,0));this._updateFormFields();break;default:}},_hexFieldKeypress:function(L,K,N){var M=this._getCommand(L);if(M===6){this._useFieldValue.apply(this,arguments);}},_hexOnly:function(L,K){var M=this._getCommand(L);switch(M){case 6:case 5:case 1:break;case 2:if(K!==true){break;}default:I.stopEvent(L);return false;}},_numbersOnly:function(K){return this._hexOnly(K,true);},getElement:function(K){return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[K]];},_createElements:function(){var N,M,P,O,L,K=this.get(this.OPT.IDS),Q=this.get(this.OPT.TXT),S=this.get(this.OPT.IMAGES),R=function(U,V){var W=document.createElement(U);if(V){C.augmentObject(W,V,true);}return W;},T=function(U,V){var W=C.merge({autocomplete:"off",value:"0",size:3,maxlength:3},V);W.name=W.id;return new R(U,W);};L=this.get("element");N=new R("div",{id:K[this.ID.PICKER_BG],className:"yui-picker-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.PICKER_THUMB],className:"yui-picker-thumb"});P=new R("img",{src:S.PICKER_THUMB});M.appendChild(P);N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HUE_BG],className:"yui-picker-hue-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.HUE_THUMB],className:"yui-picker-hue-thumb"});P=new R("img",{src:S.HUE_THUMB});M.appendChild(P);N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.CONTROLS],className:"yui-picker-controls"});L.appendChild(N);L=N;N=new R("div",{className:"hd"});M=new R("a",{id:K[this.ID.CONTROLS_LABEL],href:"#"});N.appendChild(M);L.appendChild(N);N=new R("div",{className:"bd"});L.appendChild(N);L=N;N=new R("ul",{id:K[this.ID.RGB_CONTROLS],className:"yui-picker-rgb-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.R+" "));O=new T("input",{id:K[this.ID.R],className:"yui-picker-r"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.G+" "));O=new T("input",{id:K[this.ID.G],className:"yui-picker-g"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.B+" "));O=new T("input",{id:K[this.ID.B],className:"yui-picker-b"});M.appendChild(O);N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HSV_CONTROLS],className:"yui-picker-hsv-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.H+" "));O=new T("input",{id:K[this.ID.H],className:"yui-picker-h"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.DEG));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.S+" "));O=new T("input",{id:K[this.ID.S],className:"yui-picker-s"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.V+" "));O=new T("input",{id:K[this.ID.V],className:"yui-picker-v"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HEX_SUMMARY],className:"yui-picker-hex_summary"});M=new R("li",{id:K[this.ID.R_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.G_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.B_HEX]});N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HEX_CONTROLS],className:"yui-picker-hex-controls"});N.appendChild(document.createTextNode(Q.HEX+" "));M=new T("input",{id:K[this.ID.HEX],className:"yui-picker-hex",size:6,maxlength:6});N.appendChild(M);L.appendChild(N);L=this.get("element");N=new R("div",{id:K[this.ID.SWATCH],className:"yui-picker-swatch"});L.appendChild(N);N=new R("div",{id:K[this.ID.WEBSAFE_SWATCH],className:"yui-picker-websafe-swatch"});L.appendChild(N);},_attachRGBHSV:function(L,K){I.on(this.getElement(L),"keydown",function(N,M){M._rgbFieldKeypress(N,this,K);},this);I.on(this.getElement(L),"keypress",this._numbersOnly,this,true);I.on(this.getElement(L),"blur",function(N,M){M._useFieldValue(N,this,K);},this);},_updateRGB:function(){var K=[this.get(this.OPT.RED),this.get(this.OPT.GREEN),this.get(this.OPT.BLUE)];this.set(this.OPT.RGB,K);this._updateSliders();},_initElements:function(){var O=this.OPT,N=this.get(O.IDS),L=this.get(O.ELEMENTS),K,M,P;for(K in this.ID){if(C.hasOwnProperty(this.ID,K)){N[this.ID[K]]=N[K];}}M=E.get(N[this.ID.PICKER_BG]);if(!M){this._createElements();}else{}for(K in N){if(C.hasOwnProperty(N,K)){M=E.get(N[K]);P=E.generateId(M);N[K]=P;N[N[K]]=P;L[P]=M;}}},initPicker:function(){this._initSliders();this._bindUI();this.syncUI(true);},_initSliders:function(){var K=this.ID,L=this.get(this.OPT.PICKER_SIZE);this.hueSlider=D.getVertSlider(this.getElement(K.HUE_BG),this.getElement(K.HUE_THUMB),0,L);this.pickerSlider=D.getSliderRegion(this.getElement(K.PICKER_BG),this.getElement(K.PICKER_THUMB),0,L,0,L);this.set(this.OPT.ANIMATE,this.get(this.OPT.ANIMATE));},_bindUI:function(){var K=this.ID,L=this.OPT;this.hueSlider.subscribe("change",this._onHueSliderChange,this,true);this.pickerSlider.subscribe("change",this._onPickerSliderChange,this,true);I.on(this.getElement(K.WEBSAFE_SWATCH),"click",function(M){this.setValue(this.get(L.WEBSAFE));},this,true);I.on(this.getElement(K.CONTROLS_LABEL),"click",function(M){this.set(L.SHOW_CONTROLS,!this.get(L.SHOW_CONTROLS));I.preventDefault(M);},this,true);this._attachRGBHSV(K.R,L.RED);this._attachRGBHSV(K.G,L.GREEN);this._attachRGBHSV(K.B,L.BLUE);this._attachRGBHSV(K.H,L.HUE);\r
+this._attachRGBHSV(K.S,L.SATURATION);this._attachRGBHSV(K.V,L.VALUE);I.on(this.getElement(K.HEX),"keydown",function(N,M){M._hexFieldKeypress(N,this,L.HEX);},this);I.on(this.getElement(this.ID.HEX),"keypress",this._hexOnly,this,true);I.on(this.getElement(this.ID.HEX),"blur",function(N,M){M._useFieldValue(N,this,L.HEX);},this);},syncUI:function(K){this.skipAnim=K;this._updateRGB();this.skipAnim=false;},_updateRGBFromHSV:function(){var L=[this.get(this.OPT.HUE),this.get(this.OPT.SATURATION)/100,this.get(this.OPT.VALUE)/100],K=B.hsv2rgb(L);this.set(this.OPT.RGB,K);this._updateSliders();},_updateHex:function(){var N=this.get(this.OPT.HEX),K=N.length,O,M,L;if(K===3){O=N.split("");for(M=0;M<K;M=M+1){O[M]=O[M]+O[M];}N=O.join("");}if(N.length!==6){return false;}L=B.hex2rgb(N);this.setValue(L);},_hideShowEl:function(M,K){var L=(C.isString(M)?this.getElement(M):M);E.setStyle(L,"display",(K)?"":"none");},initAttributes:function(K){K=K||{};G.superclass.initAttributes.call(this,K);this.setAttributeConfig(this.OPT.PICKER_SIZE,{value:K.size||this.DEFAULT.PICKER_SIZE});this.setAttributeConfig(this.OPT.HUE,{value:K.hue||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.SATURATION,{value:K.saturation||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.VALUE,{value:C.isNumber(K.value)?K.value:100,validator:C.isNumber});this.setAttributeConfig(this.OPT.RED,{value:C.isNumber(K.red)?K.red:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.GREEN,{value:C.isNumber(K.green)?K.green:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.BLUE,{value:C.isNumber(K.blue)?K.blue:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.HEX,{value:K.hex||"FFFFFF",validator:C.isString});this.setAttributeConfig(this.OPT.RGB,{value:K.rgb||[255,255,255],method:function(O){this.set(this.OPT.RED,O[0],true);this.set(this.OPT.GREEN,O[1],true);this.set(this.OPT.BLUE,O[2],true);var Q=B.websafe(O),P=B.rgb2hex(O),N=B.rgb2hsv(O);this.set(this.OPT.WEBSAFE,Q,true);this.set(this.OPT.HEX,P,true);if(N[1]){this.set(this.OPT.HUE,N[0],true);}this.set(this.OPT.SATURATION,Math.round(N[1]*100),true);this.set(this.OPT.VALUE,Math.round(N[2]*100),true);},readonly:true});this.setAttributeConfig(this.OPT.CONTAINER,{value:null,method:function(N){if(N){N.showEvent.subscribe(function(){this.pickerSlider.focus();},this,true);}}});this.setAttributeConfig(this.OPT.WEBSAFE,{value:K.websafe||[255,255,255]});var M=K.ids||C.merge({},this.ID),L;if(!K.ids&&J>1){for(L in M){if(C.hasOwnProperty(M,L)){M[L]=M[L]+J;}}}this.setAttributeConfig(this.OPT.IDS,{value:M,writeonce:true});this.setAttributeConfig(this.OPT.TXT,{value:K.txt||this.TXT,writeonce:true});this.setAttributeConfig(this.OPT.IMAGES,{value:K.images||this.IMAGE,writeonce:true});this.setAttributeConfig(this.OPT.ELEMENTS,{value:{},readonly:true});this.setAttributeConfig(this.OPT.SHOW_CONTROLS,{value:C.isBoolean(K.showcontrols)?K.showcontrols:true,method:function(N){var O=E.getElementsByClassName("bd","div",this.getElement(this.ID.CONTROLS))[0];this._hideShowEl(O,N);this.getElement(this.ID.CONTROLS_LABEL).innerHTML=(N)?this.get(this.OPT.TXT).HIDE_CONTROLS:this.get(this.OPT.TXT).SHOW_CONTROLS;}});this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS,{value:C.isBoolean(K.showrgbcontrols)?K.showrgbcontrols:true,method:function(N){this._hideShowEl(this.ID.RGB_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS,{value:C.isBoolean(K.showhsvcontrols)?K.showhsvcontrols:false,method:function(N){this._hideShowEl(this.ID.HSV_CONTROLS,N);if(N&&this.get(this.OPT.SHOW_HEX_SUMMARY)){this.set(this.OPT.SHOW_HEX_SUMMARY,false);}}});this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS,{value:C.isBoolean(K.showhexcontrols)?K.showhexcontrols:false,method:function(N){this._hideShowEl(this.ID.HEX_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_WEBSAFE,{value:C.isBoolean(K.showwebsafe)?K.showwebsafe:true,method:function(N){this._hideShowEl(this.ID.WEBSAFE_SWATCH,N);}});this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY,{value:C.isBoolean(K.showhexsummary)?K.showhexsummary:true,method:function(N){this._hideShowEl(this.ID.HEX_SUMMARY,N);if(N&&this.get(this.OPT.SHOW_HSV_CONTROLS)){this.set(this.OPT.SHOW_HSV_CONTROLS,false);}}});this.setAttributeConfig(this.OPT.ANIMATE,{value:C.isBoolean(K.animate)?K.animate:true,method:function(N){if(this.pickerSlider){this.pickerSlider.animate=N;this.hueSlider.animate=N;}}});this.on(this.OPT.HUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.SATURATION+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.VALUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.RED+"Change",this._updateRGB,this,true);this.on(this.OPT.GREEN+"Change",this._updateRGB,this,true);this.on(this.OPT.BLUE+"Change",this._updateRGB,this,true);this.on(this.OPT.HEX+"Change",this._updateHex,this,true);this._initElements();}});YAHOO.widget.ColorPicker=G;})();YAHOO.register("colorpicker",YAHOO.widget.ColorPicker,{version:"2.7.0",build:"1796"});\r
+\r
+/*\r
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.\r
+Code licensed under the BSD License:\r
+http://developer.yahoo.net/yui/license.txt\r
+version: 2.7.0\r
+*/\r
+(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,F,E){var D=this.getEl();if(this.patterns.noNegatives.test(C)){F=(F>0)?F:0;}if("style" in D){B.Dom.setStyle(D,C,F+E);}else{if(C in D){D[C]=F;}}},getAttribute:function(C){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="auto"&&!this.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if("style" in E){if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0).toUpperCase()+D[0].substr(1)];}else{G=0;}}else{if(C in E){G=E[C];}}return G;},getDefaultUnit:function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fps;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(){return E;};this.isAnimated=function(){return D;};this.getStartTime=function(){return F;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.setRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=function(){var O={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};O.toString=function(){return("duration: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N.toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F==-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]==H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)];\r
+}return null;};B.getAttribute=function(E){var G=this.getEl();if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return !H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.runtimeAttributes[F].end=G;}};C.ColorAnim=A;})();\r
+/*\r
+TERMS OF USE - EASING EQUATIONS\r
+Open source under the BSD License.\r
+Copyright 2001 Robert Penner All rights reserved.\r
+\r
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\r
+\r
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\r
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\r
+ * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.\r
+\r
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+*/\r
+YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.5625*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,C){if(B<C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0] instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]);\r
+}else{E.Dom.setXY(H,E.Dom.getXY(H));}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[this.method(this.currentFrame,H[0],F[0]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.7.0",build:"1799"});\r
diff --git a/plugins/undo/plugin.js b/plugins/undo/plugin.js
new file mode 100644 (file)
index 0000000..c43188d
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){CKEDITOR.plugins.add('undo',{requires:['selection','wysiwygarea'],init:function(c){var d=new b(c),e=c.addCommand('undo',{exec:function(){if(d.undo()){c.selectionChange();this.fire('afterUndo');}},state:CKEDITOR.TRISTATE_DISABLED,canUndo:false}),f=c.addCommand('redo',{exec:function(){if(d.redo()){c.selectionChange();this.fire('afterRedo');}},state:CKEDITOR.TRISTATE_DISABLED,canUndo:false});d.onChange=function(){e.setState(d.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);f.setState(d.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);};function g(h){if(d.enabled&&h.data.command.canUndo!==false)d.save();};c.on('beforeCommandExec',g);c.on('afterCommandExec',g);c.on('saveSnapshot',function(){d.save();});c.on('contentDom',function(){c.document.on('keydown',function(h){if(!h.data.$.ctrlKey&&!h.data.$.metaKey)d.type(h);});});c.on('beforeModeUnload',function(){c.mode=='wysiwyg'&&d.save(true);});c.on('mode',function(){d.enabled=c.mode=='wysiwyg';d.onChange();});c.ui.addButton('Undo',{label:c.lang.undo,command:'undo'});c.ui.addButton('Redo',{label:c.lang.redo,command:'redo'});c.resetUndo=function(){d.reset();c.fire('saveSnapshot');};}});function a(c){var e=this;var d=c.getSelection();e.contents=c.getSnapshot();e.bookmarks=d&&d.createBookmarks2(true);if(CKEDITOR.env.ie)e.contents=e.contents.replace(/\s+_cke_expando=".*?"/g,'');};a.prototype={equals:function(c,d){if(this.contents!=c.contents)return false;if(d)return true;var e=this.bookmarks,f=c.bookmarks;if(e||f){if(!e||!f||e.length!=f.length)return false;for(var g=0;g<e.length;g++){var h=e[g],i=f[g];if(h.startOffset!=i.startOffset||h.endOffset!=i.endOffset||!CKEDITOR.tools.arrayCompare(h.start,i.start)||!CKEDITOR.tools.arrayCompare(h.end,i.end))return false;}}return true;}};function b(c){this.editor=c;this.reset();};b.prototype={type:function(c){var d=c&&c.data.getKeystroke(),e={8:1,46:1},f=d in e,g=this.lastKeystroke in e,h=f&&d==this.lastKeystroke,i={37:1,38:1,39:1,40:1},j=d in i,k=this.lastKeystroke in i,l=!f&&!j,m=f&&!h,n=!this.typing||l&&(g||k);if(n||m){var o=new a(this.editor);CKEDITOR.tools.setTimeout(function(){var q=this;var p=q.editor.getSnapshot();if(CKEDITOR.env.ie)p=p.replace(/\s+_cke_expando=".*?"/g,'');if(o.contents!=p){if(!q.save(false,o,false))q.snapshots.splice(q.index+1,q.snapshots.length-q.index-1);q.hasUndo=true;q.hasRedo=false;q.typesCount=1;q.modifiersCount=1;q.onChange();}},0,this);}this.lastKeystroke=d;if(f){this.typesCount=0;this.modifiersCount++;if(this.modifiersCount>25){this.save();\r
+this.modifiersCount=1;}}else if(!j){this.modifiersCount=0;this.typesCount++;if(this.typesCount>25){this.save();this.typesCount=1;}}this.typing=true;},reset:function(){var c=this;c.lastKeystroke=0;c.snapshots=[];c.index=-1;c.limit=c.editor.config.undoStackSize;c.currentImage=null;c.hasUndo=false;c.hasRedo=false;c.resetType();},resetType:function(){var c=this;c.typing=false;delete c.lastKeystroke;c.typesCount=0;c.modifiersCount=0;},fireChange:function(){var c=this;c.hasUndo=!!c.getNextImage(true);c.hasRedo=!!c.getNextImage(false);c.resetType();c.onChange();},save:function(c,d,e){var g=this;var f=g.snapshots;if(!d)d=new a(g.editor);if(g.currentImage&&d.equals(g.currentImage,c))return false;f.splice(g.index+1,f.length-g.index-1);if(f.length==g.limit)f.shift();g.index=f.push(d)-1;g.currentImage=d;if(e!==false)g.fireChange();return true;},restoreImage:function(c){var e=this;e.editor.loadSnapshot(c.contents);if(c.bookmarks)e.editor.getSelection().selectBookmarks(c.bookmarks);else if(CKEDITOR.env.ie){var d=e.editor.document.getBody().$.createTextRange();d.collapse(true);d.select();}e.index=c.index;e.currentImage=c;e.fireChange();},getNextImage:function(c){var h=this;var d=h.snapshots,e=h.currentImage,f,g;if(e)if(c)for(g=h.index-1;g>=0;g--){f=d[g];if(!e.equals(f,true)){f.index=g;return f;}}else for(g=h.index+1;g<d.length;g++){f=d[g];if(!e.equals(f,true)){f.index=g;return f;}}return null;},redoable:function(){return this.enabled&&this.hasRedo;},undoable:function(){return this.enabled&&this.hasUndo;},undo:function(){var d=this;if(d.undoable()){d.save(true);var c=d.getNextImage(true);if(c)return d.restoreImage(c),true;}return false;},redo:function(){var d=this;if(d.redoable()){d.save(true);if(d.redoable()){var c=d.getNextImage(false);if(c)return d.restoreImage(c),true;}}return false;}};})();CKEDITOR.config.undoStackSize=20;\r
diff --git a/plugins/wsc/dialogs/ciframe.html b/plugins/wsc/dialogs/ciframe.html
new file mode 100644 (file)
index 0000000..8e163fe
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html>\r
+<head>\r
+       <title></title>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+       <script type="text/javascript">\r
+\r
+function gup( name )\r
+{\r
+       name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ;\r
+       var regexS = '[\\?&]' + name + '=([^&#]*)' ;\r
+       var regex = new RegExp( regexS ) ;\r
+       var results = regex.exec( window.location.href ) ;\r
+\r
+       if( results )\r
+               return results[ 1 ] ;\r
+       else\r
+               return '' ;\r
+}\r
+\r
+var interval;\r
+\r
+function sendData2Master()\r
+{\r
+       var destination = window.parent.parent ;\r
+       try\r
+       {\r
+               if ( destination.XDTMaster )\r
+               {\r
+                       var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ;\r
+                       window.clearInterval( interval ) ;\r
+               }\r
+       }\r
+       catch (e) {}\r
+}\r
+\r
+function onLoad()\r
+{\r
+       interval = window.setInterval( sendData2Master, 100 );\r
+}\r
+\r
+</script>\r
+</head>\r
+<body onload="onLoad()"><p></p></body>\r
+</html>\r
diff --git a/plugins/wsc/dialogs/tmpFrameset.html b/plugins/wsc/dialogs/tmpFrameset.html
new file mode 100644 (file)
index 0000000..d8bd188
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">\r
+<!--\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+-->\r
+<html>\r
+<head>\r
+       <title></title>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+       <script type="text/javascript">\r
+\r
+function doLoadScript( url )\r
+{\r
+       if ( !url )\r
+               return false ;\r
+\r
+       var s = document.createElement( "script" ) ;\r
+       s.type = "text/javascript" ;\r
+       s.src = url ;\r
+       document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ;\r
+\r
+       return true ;\r
+}\r
+\r
+var opener;\r
+function tryLoad()\r
+{\r
+       opener = window.parent;\r
+\r
+       // get access to global parameters\r
+       var oParams = window.opener.oldFramesetPageParams;\r
+\r
+       // make frameset rows string prepare\r
+       var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ;\r
+       document.getElementById( 'itFrameset' ).rows = sFramesetRows ;\r
+\r
+       // dynamic including init frames and crossdomain transport code\r
+       // from config sproxy_js_frameset url\r
+       var addScriptUrl = oParams.sproxy_js_frameset ;\r
+       doLoadScript( addScriptUrl ) ;\r
+}\r
+\r
+       </script>\r
+</head>\r
+\r
+<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0">\r
+    <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame>\r
+    <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame>\r
+    <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame>\r
+    <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame>\r
+</frameset>\r
+</html>\r
diff --git a/plugins/wsc/dialogs/wsc.css b/plugins/wsc/dialogs/wsc.css
new file mode 100644 (file)
index 0000000..b017317
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+html,body{background-color:transparent;margin:0;padding:0;}body{padding:10px;}body,td,input,select,textarea{font-size:11px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;}.midtext{padding:0;margin:10px;}.midtext p{padding:0;margin:10px;}.Button{border:#737357 1px solid;color:#3b3b1f;background-color:#c7c78f;}.PopupTabArea{color:#737357;background-color:#e3e3c7;}.PopupTitleBorder{border-bottom:#d5d59d 1px solid;}.PopupTabEmptyArea{padding-left:10px;border-bottom:#d5d59d 1px solid;}.PopupTab,.PopupTabSelected{border-right:#d5d59d 1px solid;border-top:#d5d59d 1px solid;border-left:#d5d59d 1px solid;padding:3px 5px 3px 5px;color:#737357;}.PopupTab{margin-top:1px;border-bottom:#d5d59d 1px solid;cursor:pointer;cursor:hand;}.PopupTabSelected{font-weight:bold;cursor:default;padding-top:4px;border-bottom:#f1f1e3 1px solid;background-color:#f1f1e3;}\r
diff --git a/plugins/wsc/dialogs/wsc.js b/plugins/wsc/dialogs/wsc.js
new file mode 100644 (file)
index 0000000..d63d802
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add('checkspell',function(a){var b=CKEDITOR.tools.getNextNumber(),c='cke_frame_'+b,d='cke_data_'+b,e='cke_error_'+b,f,g=document.location.protocol||'http:',h=a.lang.spellCheck.notAvailable,i='<textarea style="display: none" id="'+d+'"'+' rows="10"'+' cols="40">'+' </textarea><div'+' id="'+e+'"'+' style="display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;">'+'</div><iframe'+' src=""'+' style="width:485px;background-color:#f1f1e3;height:380px"'+' frameborder="0"'+' name="'+c+'"'+' id="'+c+'"'+' allowtransparency="1">'+'</iframe>',j=a.config.wsc_customLoaderScript||g+'//loader.spellchecker.net/sproxy_fck/sproxy.php'+'?plugin=fck2'+'&customerid='+a.config.wsc_customerId+'&cmd=script&doc=wsc&schema=22';if(a.config.wsc_customLoaderScript)h+='<p style="color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px">'+a.lang.spellCheck.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+'</p>';function k(m,n){var o=0;return function(){if(typeof window.doSpell=='function'){if(typeof f!='undefined')window.clearInterval(f);l(m);}else if(o++==180)window._cancelOnError(n);};};window._cancelOnError=function(m){if(typeof window.WSC_Error=='undefined'){CKEDITOR.document.getById(c).setStyle('display','none');var n=CKEDITOR.document.getById(e);n.setStyle('display','block');n.setHtml(m||a.lang.spellCheck.notAvailable);}};function l(m){var n=new window._SP_FCK_LangCompare(),o=CKEDITOR.getUrl(a.plugins.wsc.path+'dialogs/'),p=o+'tmpFrameset.html';window.gFCKPluginName='wsc';n.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:d,lang:n.getSPLangCode(a.langCode),winType:c,onCancel:function(){m.hide();},onFinish:function(q){a.focus();m.getParentEditor().setData(q.value);m.hide();},staticFrame:p,framesetPath:p,iframePath:o+'ciframe.html',schemaURI:o+'wsc.css'});CKEDITOR.document.getById(e).setStyle('display','none');CKEDITOR.document.getById(c).setStyle('display','block');};return{title:a.lang.spellCheck.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var m=this.getContentElement('general','content').getElement();m.setHtml(i);if(typeof window.doSpell!='function')CKEDITOR.document.getHead().append(CKEDITOR.document.createElement('script',{attributes:{type:'text/javascript',src:j}}));var n=a.getData();CKEDITOR.document.getById(d).setValue(n);f=window.setInterval(k(this,h),250);},onHide:function(){window.ooo=undefined;window.int_framsetLoaded=undefined;\r
+window.framesetLoaded=undefined;window.is_window_opened=false;},contents:[{id:'general',label:a.lang.spellCheck.title,padding:0,elements:[{type:'html',id:'content',style:'width:485;height:380px',html:'<div></div>'}]}]};});\r
diff --git a/plugins/wsc/plugin.js b/plugins/wsc/plugin.js
new file mode 100644 (file)
index 0000000..93c5f64
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add('wsc',{init:function(a){var b='checkspell',c=a.addCommand(b,new CKEDITOR.dialogCommand(b));c.modes={wysiwyg:!CKEDITOR.env.opera&&document.domain==window.location.hostname};a.ui.addButton('SpellChecker',{label:a.lang.spellCheck.toolbar,command:b});CKEDITOR.dialog.add(b,this.path+'dialogs/wsc.js');}});CKEDITOR.config.wsc_customerId=CKEDITOR.config.wsc_customerId||'1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk';CKEDITOR.config.wsc_customLoaderScript=CKEDITOR.config.wsc_customLoaderScript||null;\r
diff --git a/plugins/wysiwygarea/plugin.js b/plugins/wysiwygarea/plugin.js
new file mode 100644 (file)
index 0000000..55eca4f
--- /dev/null
@@ -0,0 +1,8 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function(){var a={table:1,pre:1},b=/\s*<(p|div|address|h\d|center)[^>]*>\s*(?:<br[^>]*>|&nbsp;|&#160;)\s*(:?<\/\1>)?\s*$/gi;function c(f){var k=this;if(k.mode=='wysiwyg'){k.focus();var g=k.getSelection(),h=f.data;if(k.dataProcessor)h=k.dataProcessor.toHtml(h);if(CKEDITOR.env.ie){var i=g.isLocked;if(i)g.unlock();var j=g.getNative();if(j.type=='Control')j.clear();j.createRange().pasteHTML(h);if(i)k.getSelection().lock();}else k.document.$.execCommand('inserthtml',false,h);}};function d(f){if(this.mode=='wysiwyg'){this.focus();this.fire('saveSnapshot');var g=f.data,h=g.getName(),i=CKEDITOR.dtd.$block[h],j=this.getSelection(),k=j.getRanges(),l=j.isLocked;if(l)j.unlock();var m,n,o,p;for(var q=k.length-1;q>=0;q--){m=k[q];m.deleteContents();n=!q&&g||g.clone(true);var r,s;if(this.config.enterMode!=CKEDITOR.ENTER_BR&&i)while((r=m.getCommonAncestor(false,true))&&((s=CKEDITOR.dtd[r.getName()])&&(!(s&&s[h]))))m.splitBlock();m.insertNode(n);if(!o)o=n;}m.moveToPosition(o,CKEDITOR.POSITION_AFTER_END);var t=o.getNextSourceNode(true);if(t&&t.type==CKEDITOR.NODE_ELEMENT)m.moveToElementEditStart(t);j.selectRanges([m]);if(l)this.getSelection().lock();CKEDITOR.tools.setTimeout(function(){this.fire('saveSnapshot');},0,this);}};function e(f){var g=f.editor,h=f.data.path,i=h.blockLimit,j=f.data.selection,k=j.getRanges()[0],l=g.document.getBody(),m=g.config.enterMode;if(m!=CKEDITOR.ENTER_BR&&k.collapsed&&i.getName()=='body'&&!h.block){var n=j.createBookmarks(),o=k.fixBlock(true,g.config.enterMode==CKEDITOR.ENTER_DIV?'div':'p');if(CKEDITOR.env.ie){var p=o.getElementsByTag('br'),q;for(var r=0;r<p.count();r++)if((q=p.getItem(r))&&(q.hasAttribute('_cke_bogus')))q.remove();}j.selectBookmarks(n);var s=o.getChildren(),t=s.count(),u,v=CKEDITOR.dom.walker.whitespaces(true),w=o.getPrevious(v),x=o.getNext(v),y;if(w&&w.getName&&!(w.getName() in a))y=w;else if(x&&x.getName&&!(x.getName() in a))y=x;if((!t||(u=s.getItem(0))&&(u.is&&u.is('br')))&&(y&&k.moveToElementEditStart(y))){o.remove();k.select();}}var z=l.getLast(CKEDITOR.dom.walker.whitespaces(true));if(z&&z.getName&&z.getName() in a){var A=g.document.createElement(CKEDITOR.env.ie&&m!=CKEDITOR.ENTER_BR?'<br _cke_bogus="true" />':'br');l.append(A);}};CKEDITOR.plugins.add('wysiwygarea',{requires:['editingblock'],init:function(f){var g=f.config.enterMode!=CKEDITOR.ENTER_BR?f.config.enterMode==CKEDITOR.ENTER_DIV?'div':'p':false;f.on('editingBlockReady',function(){var h,i,j,k,l,m,n,o=CKEDITOR.env.isCustomDomain(),p=function(){if(j)j.remove();if(i)i.remove();\r
+m=0;var s='void( '+(CKEDITOR.env.gecko?'setTimeout':'')+'( function(){'+'document.open();'+(CKEDITOR.env.ie&&o?'document.domain="'+document.domain+'";':'')+'document.write( window.parent[ "_cke_htmlToLoad_'+f.name+'" ] );'+'document.close();'+'window.parent[ "_cke_htmlToLoad_'+f.name+'" ] = null;'+'}'+(CKEDITOR.env.gecko?', 0 )':')()')+' )';if(CKEDITOR.env.opera)s='void(0);';j=CKEDITOR.dom.element.createFromHtml('<iframe style="width:100%;height:100%" frameBorder="0" tabIndex="-1" allowTransparency="true" src="javascript:'+encodeURIComponent(s)+'"'+'></iframe>');var t=f.lang.editorTitle.replace('%1',f.name);if(CKEDITOR.env.gecko){j.on('load',function(u){u.removeListener();r(j.$.contentWindow);});h.setAttributes({role:'region',title:t});j.setAttributes({role:'region',title:' '});}else if(CKEDITOR.env.webkit){j.setAttribute('title',t);j.setAttribute('name',t);}else if(CKEDITOR.env.ie){i=CKEDITOR.dom.element.createFromHtml('<fieldset style="height:100%'+(CKEDITOR.env.ie&&CKEDITOR.env.quirks?';position:relative':'')+'">'+'<legend style="display:block;width:0;height:0;overflow:hidden;'+(CKEDITOR.env.ie&&CKEDITOR.env.quirks?'position:absolute':'')+'">'+CKEDITOR.tools.htmlEncode(t)+'</legend>'+'</fieldset>',CKEDITOR.document);j.appendTo(i);i.appendTo(h);}if(!CKEDITOR.env.ie)h.append(j);},q='<script id="cke_actscrpt" type="text/javascript">window.onload = function(){window.parent.CKEDITOR._["contentDomReady'+f.name+'"]( window );'+'}'+'</script>',r=function(s){if(m)return;m=1;var t=s.document,u=t.body,v=t.getElementById('cke_actscrpt');v.parentNode.removeChild(v);delete CKEDITOR._['contentDomReady'+f.name];u.spellcheck=!f.config.disableNativeSpellChecker;if(CKEDITOR.env.ie){u.hideFocus=true;u.disabled=true;u.contentEditable=true;u.removeAttribute('disabled');}else t.designMode='on';try{t.execCommand('enableObjectResizing',false,!f.config.disableObjectResizing);}catch(B){}try{t.execCommand('enableInlineTableEditing',false,!f.config.disableNativeTableHandles);}catch(C){}s=f.window=new CKEDITOR.dom.window(s);t=f.document=new CKEDITOR.dom.document(t);var w=t.getBody().getFirst();if(CKEDITOR.env.gecko&&w&&w.is&&w.is('br')&&w.hasAttribute('_moz_editor_bogus_node')){var x=t.$.createEvent('KeyEvents');x.initKeyEvent('keypress',true,true,s.$,false,false,false,false,0,32);t.$.dispatchEvent(x);var y=t.getBody().getFirst();if(f.config.enterMode==CKEDITOR.ENTER_BR)t.createElement('br',{attributes:{_moz_dirty:''}}).replace(y);else y.remove();}if(!(CKEDITOR.env.ie||CKEDITOR.env.opera))t.on('mousedown',function(D){var E=D.data.getTarget();\r
+if(E.is('img','hr','input','textarea','select'))f.getSelection().selectElement(E);});if(CKEDITOR.env.webkit){t.on('click',function(D){if(D.data.getTarget().is('input','select'))D.data.preventDefault();});t.on('mouseup',function(D){if(D.data.getTarget().is('input','textarea'))D.data.preventDefault();});}var z=CKEDITOR.env.ie||CKEDITOR.env.safari?s:t;z.on('blur',function(){f.focusManager.blur();});z.on('focus',function(){f.focusManager.focus();});var A=f.keystrokeHandler;if(A)A.attach(t);if(f.contextMenu)f.contextMenu.addTarget(t);setTimeout(function(){f.fire('contentDom');if(n){f.mode='wysiwyg';f.fire('mode');n=false;}k=false;if(l){f.focus();l=false;}if(CKEDITOR.env.ie)setTimeout(function(){if(f.document){var D=f.document.$.body;D.runtimeStyle.marginBottom='0px';D.runtimeStyle.marginBottom='';}},1000);},0);};f.addMode('wysiwyg',{load:function(s,t,u){h=s;if(CKEDITOR.env.ie&&CKEDITOR.env.quirks)s.setStyle('position','relative');f.mayBeDirty=true;n=true;if(u)this.loadSnapshotData(t);else this.loadData(t);},loadData:function(s){k=true;if(f.dataProcessor)s=f.dataProcessor.toHtml(s,g);s=f.config.docType+'<html dir="'+f.config.contentsLangDirection+'">'+'<head>'+'<link href="'+f.config.contentsCss+'" type="text/css" rel="stylesheet" _fcktemp="true"/>'+'<style type="text/css" _fcktemp="true">'+f._.styles.join('\n')+'</style>'+'</head>'+'<body>'+s+'</body>'+'</html>'+q;window['_cke_htmlToLoad_'+f.name]=s;CKEDITOR._['contentDomReady'+f.name]=r;p();if(CKEDITOR.env.opera){var t=j.$.contentWindow.document;t.open();t.write(s);t.close();}},getData:function(){var s=j.getFrameDocument().getBody().getHtml();if(f.dataProcessor)s=f.dataProcessor.toDataFormat(s,g);if(f.config.ignoreEmptyParagraph)s=s.replace(b,'');return s;},getSnapshotData:function(){return j.getFrameDocument().getBody().getHtml();},loadSnapshotData:function(s){j.getFrameDocument().getBody().setHtml(s);},unload:function(s){f.window=f.document=j=h=l=null;f.fire('contentDomUnload');},focus:function(){if(k)l=true;else if(f.window){f.window.focus();f.selectionChange();}}});f.on('insertHtml',c,null,null,20);f.on('insertElement',d,null,null,20);f.on('selectionChange',e,null,null,1);});}});})();CKEDITOR.config.disableObjectResizing=false;CKEDITOR.config.disableNativeTableHandles=true;CKEDITOR.config.disableNativeSpellChecker=true;CKEDITOR.config.ignoreEmptyParagraph=true;\r
diff --git a/skins/kama/dialog.css b/skins/kama/dialog.css
new file mode 100644 (file)
index 0000000..6f873c9
--- /dev/null
@@ -0,0 +1,9 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+body .cke_dialog{visibility:visible;}.cke_skin_kama .cke_dialog_body{z-index:1;border:solid 1px #ddd;padding:5px;background-color:#fff;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;}.cke_skin_kama .cke_dialog_tl,.cke_skin_kama .cke_dialog_tr,.cke_skin_kama .cke_dialog_tc,.cke_skin_kama .cke_dialog_bl,.cke_skin_kama .cke_dialog_br,.cke_skin_kama .cke_dialog_bc,.cke_skin_kama .cke_dialog_ml,.cke_skin_kama .cke_dialog_mr{display:none;}.cke_skin_kama .cke_dialog_title{font-weight:bold;font-size:14px;padding:3px 3px 8px;cursor:move;position:relative;border-bottom:1px solid #eee;}.cke_skin_kama .cke_browser_iequirks .cke_dialog_title,.cke_skin_kama .cke_browser_ie6 .cke_dialog_title,.cke_skin_kama .cke_browser_ie7 .cke_dialog_title{margin-bottom:22px;}.cke_skin_kama .cke_browser_iequirks.cke_single_page .cke_dialog_title,.cke_skin_kama .cke_browser_ie6.cke_single_page .cke_dialog_title,.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_title{margin-bottom:10px;}.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_title{position:static!important;unicode-bidi:bidi-override;}.cke_skin_kama .cke_dialog_contents{background-color:#ebebeb;border:solid 1px #fff;border-bottom:none;overflow:auto;padding:17px 10px 5px 10px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px;margin-top:22px;}.cke_skin_kama .cke_dialog_footer{text-align:right;background-color:#ebebeb;border:solid 1px #fff;border-bottom:none;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px;}.cke_skin_kama .cke_rtl .cke_dialog_footer{text-align:left;}.cke_skin_kama .cke_dialog_tabs{height:23px;display:inline-block;_display:block;margin-left:10px;margin-right:10px;margin-top:11px;position:absolute;z-index:2;}.cke_skin_kama .cke_browser_iequirks .cke_dialog_tabs,.cke_skin_kama .cke_browser_ie6 .cke_dialog_tabs,.cke_skin_kama .cke_browser_ie7 .cke_dialog_tabs{top:33px;}.cke_skin_kama .cke_rtl .cke_dialog_tabs{right:10px;}.cke_skin_kama a.cke_dialog_tab,.cke_skin_kama a:link.cke_dialog_tab,.cke_skin_kama a:active.cke_dialog_tab,.cke_skin_kama a:hover.cke_dialog_tab,.cke_skin_kama a:visited.cke_dialog_tab{background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1323px;background-color:#ebebeb;height:14px;padding:4px 8px;display:inline-block;cursor:pointer;}.cke_skin_kama .cke_browser_gecko18 a.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:link.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:active.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:hover.cke_dialog_tab,.cke_skin_kama .cke_browser_gecko18 a:visited.cke_dialog_tab{display:inline;position:relative;top:6px;}.cke_skin_kama a:hover.cke_dialog_tab{background-color:#f1f1e3;}.cke_skin_kama a.cke_dialog_tab_selected,.cke_skin_kama a:link.cke_dialog_tab_selected,.cke_skin_kama a:active.cke_dialog_tab_selected,.cke_skin_kama a:hover.cke_dialog_tab_selected,.cke_skin_kama a:visited.cke_dialog_tab_selected{background-position:0 -1279px;cursor:default;}.cke_skin_kama .cke_single_page .cke_dialog_tabs{display:none;}.cke_skin_kama .cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:10px;}.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_contents{margin-top:-10px;position:relative;margin-bottom:-22px;}.cke_skin_kama .cke_dialog_ui_vbox table,.cke_skin_kama .cke_dialog_ui_hbox table{margin:auto;}.cke_skin_kama .cke_dialog_ui_vbox_child{padding:5px 0;}.cke_skin_kama input.cke_dialog_ui_input_text,.cke_skin_kama input.cke_dialog_ui_input_password{background-color:white;border:none;padding:0;width:100%;height:14px;}.cke_skin_kama div.cke_dialog_ui_input_text,.cke_skin_kama div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_kama textarea.cke_dialog_ui_input_textarea{background-color:white;border:none;padding:0;width:100%;_width:99%;overflow:auto;resize:none;}\r
+.cke_skin_kama div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_kama div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default;}.cke_skin_kama .cke_dialog_ui_hbox{width:100%;}.cke_skin_kama .cke_dialog_ui_hbox_first,.cke_skin_kama .cke_dialog_ui_hbox_child,.cke_skin_kama .cke_dialog_ui_hbox_last{vertical-align:top;}.cke_skin_kama .cke_ltr .cke_dialog_ui_hbox_first,.cke_skin_kama .cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px;}.cke_skin_kama .cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_kama .cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px;}.cke_skin_kama a.cke_dialog_ui_button{border-collapse:separate;cursor:default;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:transparent url(images/sprites.png) repeat-x scroll 0 -1069px;_background:none;padding:5px 0;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button{padding:0;}.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button span{width:70px;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span{width:100px;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button span{padding:5px 15px;text-align:center;color:#3b3b1f;background:#53D9F0 none;display:inline-block;cursor:default;}.cke_skin_kama .cke_browser_webkit a.cke_dialog_ui_button span.cke_dialog_ui_button{margin:0;}.cke_skin_kama .cke_browser_webkit a.cke_dialog_ui_button{float:right;padding-top:3px;padding-bottom:2px;margin:2px 0;}.cke_skin_kama a.cke_dialog_ui_button_ok span,.cke_skin_kama a.cke_dialog_ui_button_cancel span{padding-right:20px;padding-left:20px;}.cke_skin_kama a.cke_dialog_ui_button_ok{background-position:0 -1143px;}.cke_skin_kama a.cke_dialog_ui_button_ok span{background:transparent url(images/sprites.png) no-repeat scroll right -1219px;}.cke_skin_kama .cke_rtl a.cke_dialog_ui_button_ok span{background-position:left -1219px;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_ok span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_ok span{background-color:#B8E834;margin-right:0;}.cke_skin_kama a.cke_dialog_ui_button_cancel{background-position:0 -1104px;}.cke_skin_kama a.cke_dialog_ui_button_cancel span{background:transparent url(images/sprites.png) no-repeat scroll right -1245px;}.cke_skin_kama .cke_rtl a.cke_dialog_ui_button_cancel span{background-position:left -1245px;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_cancel span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_cancel span{background-color:#F65D20;}.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_cancel span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_cancel span,.cke_skin_kama .cke_browser_iequirks a.cke_dialog_ui_button_ok span,.cke_skin_kama .cke_browser_ie6 a.cke_dialog_ui_button_ok span{background-image:none;}.cke_skin_kama span.cke_dialog_ui_button{padding:2px 10px;text-align:center;color:#222;display:inline-block;cursor:default;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{display:block;}.cke_skin_kama a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3;}.cke_skin_kama a:hover.cke_dialog_ui_button,.cke_skin_kama a:focus.cke_dialog_ui_button,.cke_skin_kama a:active.cke_dialog_ui_button{background-position:0 -1179px;}.cke_skin_kama .cke_browser_iequirks a:hover.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a:focus.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_iequirks a:active.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a:hover.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a:focus.cke_dialog_ui_button span,.cke_skin_kama .cke_browser_ie6 a:active.cke_dialog_ui_button span{background-image:none;background:#F7A922;}.cke_skin_kama .cke_dialog_footer_buttons{display:inline-table;margin-right:12px;margin-left:12px;width:auto;position:relative;}\r
+.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons{display:inline;}.cke_skin_kama .cke_dialog_footer_buttons span.cke_dialog_ui_button{margin:7px 0;width:60px;text-align:center;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons a.cke_dialog_ui_button{display:block;padding:0;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{padding-bottom:5px;padding-top:6px;margin-bottom:0;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons .cke_dialog_ui_button_ok .cke_dialog_ui_button{background-position:right -1214px;}.cke_skin_kama .cke_browser_gecko18 .cke_dialog_footer_buttons .cke_dialog_ui_button_cancel .cke_dialog_ui_button{background-position:right -1242px;}.cke_skin_kama strong{font-weight:bold;}.cke_skin_kama .cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:0 -1022px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;_background-image:url(images/sprites_ie6.png);}.cke_skin_kama .cke_dialog_close_button span{display:none;}.cke_skin_kama .cke_dialog_close_button:hover{background-position:0 -1045px;}.cke_skin_kama .cke_ltr .cke_dialog_close_button{right:10px;}.cke_skin_kama .cke_browser_ie8.cke_rtl .cke_dialog_close_button{left:8px;}.cke_skin_kama .cke_rtl .cke_dialog_close_button{left:10px;}.cke_skin_kama .cke_browser_ie7.cke_rtl .cke_dialog_close_button{left:16px;top:0;}.cke_skin_kama .cke_browser_ie7.cke_rtl .cke_dialog_close_button{position:absolute;left:10px;top:5px;}.cke_skin_kama .cke_browser_ie7.cke_single_page .cke_dialog_footer{margin-top:22px;}.cke_skin_kama .cke_browser_ie6 .cke_dialog_close_button,.cke_skin_kama .cke_browser_iequirks .cke_dialog_close_button{top:7px;}.cke_skin_kama .cke_browser_ie7.cke_ltr .cke_dialog_close_button{margin-top:0;}.cke_skin_kama .cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white;}.cke_skin_kama iframe.cke_dialog_ui_input_file{width:100%;height:25px;}.cke_skin_kama .cke_dialog .cke_dark_background{background-color:#eaead1;}.cke_skin_kama .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_kama .cke_dialog .cke_centered{text-align:center;}.cke_skin_kama .cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px;}.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_reset{float:left;}.cke_skin_kama .cke_dialog a.cke_btn_locked,.cke_skin_kama .cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px;}.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_locked,.cke_skin_kama .cke_rtl .cke_dialog a.cke_btn_unlocked{float:right;}.cke_skin_kama .cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif);}.cke_skin_kama .cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer;cursor:hand;}.cke_skin_kama .cke_dialog #ImagePreviewBox{white-space:normal;border:2px ridge black;overflow:scroll;height:160px;width:230px;padding:2px;background-color:white;}.cke_skin_kama .cke_dialog #ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4;}.cke_skin_kama .cke_dialog #FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white;}.cke_skin_kama .cke_dialog .cke_dark_background{text-align:center;background-color:#eaead1;font-size:14px;}.cke_skin_kama .cke_dialog .cke_light_background{text-align:center;background-color:#ffffbe;}.cke_skin_kama .cke_dialog .cke_hand{cursor:pointer;cursor:hand;}.cke_skin_kama .cke_disabled{color:#a0a0a0;}.cke_skin_kama .cke_hc .cke_dialog_title,.cke_skin_kama .cke_hc .cke_dialog_tabs,.cke_skin_kama .cke_hc .cke_dialog_contents,.cke_skin_kama .cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid;}.cke_skin_kama .cke_hc .cke_dialog_title{border-top:1px solid;}\r
+.cke_skin_kama .cke_hc .cke_dialog_footer{border-bottom:1px solid;}.cke_skin_kama .cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;cursor:hand;font-weight:bold;position:relative;top:3px;}.cke_skin_kama a.cke_smile img{border:2px solid #eaead1;}.cke_skin_kama a.cke_smile:focus img,.cke_skin_kama a.cke_smile:active img,.cke_skin_kama a.cke_smile:hover img{border-color:#C7C78F;}\r
diff --git a/skins/kama/editor.css b/skins/kama/editor.css
new file mode 100644 (file)
index 0000000..2eef75c
--- /dev/null
@@ -0,0 +1,12 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_kama *,.cke_skin_kama a:hover,.cke_skin_kama a:link,.cke_skin_kama a:visited,.cke_skin_kama a:active{margin:0;padding:0;border:0;background:transparent;text-decoration:none;font:normal normal normal 100% Sans-Serif;width:auto;height:auto;border-collapse:collapse;text-align:left;vertical-align:baseline;white-space:nowrap;cursor:auto;color:#000;font-size:12px;font-family:Arial,Helvetica,Tahoma,Verdana,Sans-Serif;}.cke_skin_kama .cke_rtl *,.cke_skin_kama .cke_rtl a:hover,.cke_skin_kama .cke_rtl a:link,.cke_skin_kama .cke_rtl a:visited,.cke_skin_kama .cke_rtl a:active,.cke_rtl .cke_skin_kama *,.cke_rtl .cke_skin_kama a:hover,.cke_rtl .cke_skin_kama a:link,.cke_rtl .cke_skin_kama a:visited,.cke_rtl .cke_skin_kama a:active{text-align:right;}.cke_skin_kama iframe{vertical-align:inherit;}.cke_skin_kama textarea{white-space:pre;}.cke_skin_kama .cke_browser_gecko textarea{cursor:text;}.cke_skin_kama .cke_browser_gecko textarea[disabled]{cursor:default;}.cke_skin_kama input[type="text"],.cke_skin_kama input[type="password"]{cursor:text;}.cke_skin_kama input[type="text"][disabled],.cke_skin_kama input[type="password"][disabled]{cursor:default;}.cke_skin_kama{display:block;_display:inline-block;}span.cke_skin_kama{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #D3D3D3;padding:5px;}.cke_skin_kama .cke_wrapper{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background-color:#d3d3d3;background-image:url(images/sprites.png);background-repeat:repeat-x;background-position:0 -1950px;display:block;}.cke_skin_kama .cke_browser_ie6 .cke_wrapper,.cke_skin_kama .cke_browser_iequirks .cke_wrapper{background-image:none;}.cke_skin_kama .cke_editor{display:inline-table;width:100%;}.cke_skin_kama .ltr .cke_browser_ie iframe{margin-right:-10px;}.cke_skin_kama .rtl .cke_browser_ie iframe{margin-left:-10px;}.cke_skin_kama .cke_browser_opera .cke_editor.cke_skin_kama .cke_resizer{display:table;}.cke_skin_kama .cke_contents{margin:5px;padding:0 5px 5px;}.cke_skin_kama .cke_hc .cke_contents{border:1px solid black;}.cke_skin_kama .cke_contents iframe{background-color:#fff;}.cke_skin_kama .cke_focus{outline:auto 5px -webkit-focus-ring-color;}.cke_skin_kama textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre;}.cke_skin_kama .cke_browser_iequirks textarea.cke_source{_white-space:normal;}.cke_skin_kama .cke_resizer{width:12px;height:12px;margin-top:9px;display:block;float:right;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1428px;background-repeat:no-repeat;cursor:se-resize;}.cke_skin_kama .cke_rtl .cke_resizer{cursor:sw-resize;background-position:0 -1455px;float:left;}.cke_skin_kama .cke_maximized .cke_resizer{display:none;}.cke_skin_kama .cke_browser_ie6 .cke_contents textarea,.cke_skin_kama .cke_browser_ie7 .cke_contents textarea{position:absolute;}.cke_skin_kama .cke_browser_ie.cke_browser_quirks .cke_contents iframe{position:absolute;top:0;}.cke_skin_kama .cke_panel{border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}.cke_skin_kama .cke_contextmenu{margin:0;}.cke_skin_kama .cke_panel iframe{width:100%;height:100%;}html.cke_skin_kama_container{overflow:auto;overflow-x:hidden;}body.cke_panel_frame{overflow:auto;overflow-x:hidden;}ul.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap;}li.cke_panel_listItem{margin:0;}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit;text-decoration:none;overflow:hidden;text-overflow:ellipsis;}* html .cke_panel_listItem a{width:100%;color:#000;}*:first-child+html .cke_panel_listItem a{color:#000;}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff;}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff;}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px;}\r
+.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px;}.cke_skin_kama .cke_button_textcolor_panel,.cke_skin_kama .cke_button_bgcolor_panel{width:150px;height:135px;}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000;}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left;}.cke_rtl span.cke_colorbox{float:right;}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;}.cke_rtl a.cke_colorbox{float:right;}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff;}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff;}@media print{.cke_skin_kama .cke_toolbox{display:none;}}.cke_skin_kama .cke_toolbox{clear:both;padding:5px 3px 5px 6px;}.cke_skin_kama .cke_rtl .cke_toolbox{padding:5px 6px 5px 3px;}.cke_skin_kama a.cke_toolbox_collapser,.cke_skin_kama a:hover.cke_toolbox_collapser{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:3px -1366px;background-repeat:no-repeat;width:11px;height:11px;float:right;border:1px outset #D3D3D3;margin:11px 4px 2px;cursor:pointer;}.cke_skin_kama .cke_rtl a.cke_toolbox_collapser,.cke_skin_kama .cke_rtl a:hover.cke_toolbox_collapser{float:left;}.cke_skin_kama a.cke_toolbox_collapser_min,.cke_skin_kama a:hover.cke_toolbox_collapser_min{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:4px -1387px;background-repeat:no-repeat;margin:2px 4px;}.cke_skin_kama .cke_rtl a.cke_toolbox_collapser_min,.cke_skin_kama .cke_rtl a:hover.cke_toolbox_collapser_min{background-position:4px -1408px;}.cke_skin_kama .cke_toolbar{display:inline;}.cke_skin_kama .cke_separator{display:none;}.cke_skin_kama .cke_break{font-size:0;clear:left;}.cke_skin_kama .cke_rtl .cke_break{clear:right;}.cke_skin_kama .cke_toolbar_start{display:none;}.cke_skin_kama .cke_toolgroup{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:repeat-x;background-position:0 -500px;float:left;margin-right:6px;margin-bottom:5px;padding:2px;display:inline;}.cke_skin_kama .cke_rtl .cke_toolgroup{float:right;margin-right:0;margin-left:6px;}.cke_skin_kama .cke_button a,.cke_skin_kama .cke_button a:hover,.cke_skin_kama .cke_button a:focus,.cke_skin_kama .cke_button a:active,.cke_skin_kama .cke_button a.cke_off{border-radius:3px;outline:none;padding:2px 4px;height:18px;display:inline-block;cursor:default;}.cke_skin_kama .cke_button a,.cke_skin_kama .cke_button a.cke_off{filter:alpha(opacity=70);opacity:.70;-moz-border-radius:3px;-webkit-border-radius:3px;}.cke_skin_kama .cke_hc .cke_button a,.cke_skin_kama .cke_hc .cke_button a.cke_off{opacity:1.0;filter:alpha(opacity=100);border:1px solid white;}.cke_skin_kama .cke_button a.cke_on{background-color:#a3d7ff;filter:alpha(opacity=100);opacity:1;padding:2px 4px;}.cke_skin_kama .cke_hc .cke_button a.cke_on{padding:0 2px!important;border-width:3px;}.cke_skin_kama .cke_button a.cke_disabled,.cke_skin_kama .cke_browser_ie a:hover.cke_button .cke_disabled{filter:alpha(opacity=30);opacity:.3;}.cke_skin_kama .cke_hc .cke_button a.cke_disabled,.cke_skin_kama .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled{filter:alpha(opacity=60);opacity:.6;}.cke_skin_kama .cke_button a:hover.cke_on,.cke_skin_kama .cke_button a:focus.cke_on,.cke_skin_kama .cke_button a:active.cke_on,.cke_skin_kama .cke_button a:hover.cke_off,.cke_skin_kama .cke_button a:focus.cke_off,.cke_skin_kama .cke_button a:active.cke_off{filter:alpha(opacity=100);opacity:1;padding:2px 4px;}\r
+.cke_skin_kama .cke_button a:hover.cke_on,.cke_skin_kama .cke_button a:focus.cke_on,.cke_skin_kama .cke_button a:active.cke_on{background-color:#86caff;}.cke_skin_kama .cke_button a:hover.cke_off,.cke_skin_kama .cke_button a:focus.cke_off,.cke_skin_kama .cke_button a:active.cke_off{background-color:#dff1ff;}.cke_skin_kama .cke_hc .cke_button a:hover.cke_on,.cke_skin_kama .cke_hc .cke_button a:focus.cke_on,.cke_skin_kama .cke_hc .cke_button a:active.cke_on,.cke_skin_kama .cke_hc .cke_button a:hover.cke_off,.cke_skin_kama .cke_hc .cke_button a:focus.cke_off,.cke_skin_kama .cke_hc .cke_button a:active.cke_off{padding:0 2px!important;border-width:3px;}.cke_skin_kama .cke_button .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;display:inline-block;float:left;}.cke_skin_kama .cke_rtl .cke_button .cke_icon{float:right;}.cke_skin_kama .cke_button .cke_label{cursor:default;display:none;padding-left:3px;line-height:18px;vertical-align:middle;float:left;}.cke_skin_kama .cke_rtl .cke_button .cke_label{padding-left:0;padding-right:3px;float:right;}.cke_skin_kama .cke_hc .cke_button .cke_label{padding:0;display:inline-block;}.cke_skin_kama .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_kama .cke_accessibility{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_kama .cke_button .cke_buttonarrow{display:inline-block;height:17px;width:8px;background-position:2px -1469px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;float:left;}.cke_skin_kama .cke_rtl .cke_button .cke_buttonarrow{background-position:0 -1469px;float:right;}.cke_skin_kama .cke_hc .cke_button .cke_buttonarrow{display:none;}.cke_skin_kama .cke_browser_gecko .cke_toolbar,.cke_skin_kama .cke_browser_gecko .cke_button a,.cke_skin_kama .cke_browser_gecko .cke_button a.cke_off,.cke_skin_kama .cke_browser_gecko .cke_button .cke_icon,.cke_skin_kama .cke_browser_gecko .cke_button .cke_buttonarrow,.cke_skin_kama .cke_browser_gecko .cke_separator,.cke_skin_kama .cke_browser_gecko .cke_toolbar_start{display:block;float:left;}.cke_skin_kama .cke_browser_gecko.cke_hc .cke_button .cke_icon{display:none;}.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_toolbar,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button a,.cke_skin_kama .cke_browser_gecko .cke_rtl.cke_button a.cke_off,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_icon,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_buttonarrow,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_toolbar_start{float:right;}.cke_skin_kama .cke_browser_gecko .cke_button .cke_label,.cke_skin_kama .cke_browser_gecko .cke_break{float:left;}.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_button .cke_label,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_break{float:right;}.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_icon,.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_label,.cke_skin_kama .cke_browser_ie .cke_rtl .cke_button .cke_buttonarrow{float:none;}.cke_skin_kama .cke_browser_webkit .cke_toolbar{float:left;}.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_toolbar{float:right;}.cke_skin_kama .cke_browser_ie8 .cke_button .cke_label,.cke_skin_kama .cke_browser_opera .cke_button .cke_label,.cke_skin_kama .cke_browser_webkit .cke_button .cke_label{line-height:20px;}.cke_skin_kama .cke_browser_opera.cke_browser_quirks .cke_button .cke_label,.cke_skin_kama .cke_browser_iequirks .cke_button .cke_label{line-height:17px;}.cke_skin_kama .cke_browser_ie8 .cke_button .cke_label{vertical-align:top;}.cke_skin_kama .cke_browser_iequirks.cke_browser_ie8 .cke_button .cke_label{vertical-align:middle;}.cke_skin_kama .cke_contextmenu{padding:2px;}.cke_skin_kama .cke_menuitem a{display:block;}.cke_skin_kama .cke_menuitem span{cursor:default;}.cke_skin_kama .cke_menuitem a:hover,.cke_skin_kama .cke_menuitem a:focus,.cke_skin_kama .cke_menuitem a:active{background-color:#D3D3D3;display:block;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover,.cke_skin_kama .cke_menuitem a.cke_disabled:focus,.cke_skin_kama .cke_menuitem a.cke_disabled:active{background-color:transparent!important;}\r
+.cke_skin_kama .cke_menuitem .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;background-color:transparent;width:16px;height:16px;float:left;}.cke_skin_kama .cke_menuitem .cke_disabled .cke_icon{filter:alpha(opacity=70);opacity:.70;}.cke_skin_kama .cke_menuitem .cke_icon_wrapper{background-color:#D3D3D3;border:solid 4px #D3D3D3;width:16px;height:16px;float:left;filter:alpha(opacity=70);opacity:.70;clear:both;}.cke_rtl .cke_skin_kama .cke_menuitem .cke_icon_wrapper{float:right;}.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper{background-color:#9d9d9d;border:solid 4px #9d9d9d;filter:alpha(opacity=70);opacity:.70;}.cke_skin_kama .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active.cke_disabled .cke_icon_wrapper{background-color:#D3D3D3;border:solid 4px #D3D3D3;}.cke_skin_kama .cke_menuitem .cke_label{display:block;padding-right:3px;padding-top:5px;padding-left:4px;height:19px;margin-left:24px;background-color:#fff;_overflow:hidden;_width:80px;filter:alpha(opacity=70);opacity:.70;}.cke_rtl .cke_skin_kama .cke_menuitem .cke_label{padding-right:0;margin-left:0;padding-left:3px;margin-right:28px;}.cke_skin_kama .cke_menuitem a.cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.30;}.cke_skin_kama .cke_menuitem a:hover .cke_label,.cke_skin_kama .cke_menuitem a:focus .cke_label,.cke_skin_kama .cke_menuitem a:active .cke_label{background-color:#D3D3D3;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label{background-color:transparent;}.cke_skin_kama .cke_menuseparator{background-color:#D3D3D3;height:2px;filter:alpha(opacity=70);opacity:.70;_font-size:0;}.cke_skin_kama .cke_menuarrow{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1411px;background-repeat:no-repeat;height:5px;width:3px;float:right;margin-right:2px;margin-top:3px;}.cke_rtl .cke_skin_kama .cke_menuarrow{float:left;margin-right:0;margin-left:2px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1390px;background-repeat:no-repeat;}.cke_browser_ie.cke_ltr .cke_skin_kama .cke_menuarrow{position:absolute;right:2px;}.cke_browser_ie.cke_rtl .cke_skin_kama .cke_menuarrow{position:absolute;left:2px;}.cke_skin_kama .cke_rcombo{display:inline;}.cke_skin_kama .cke_rcombopanel{border:1px solid #8F8F73;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;height:auto;_height:100px;}.cke_skin_kama .cke_rcombo a,.cke_skin_kama .cke_rcombo a:active,.cke_skin_kama .cke_rcombo a:hover{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:repeat-x;background-position:0 -100px;border-bottom:1px solid #DAD9D9;border-right:1px solid #DAD9D9;float:left;padding:2px;height:21px;margin-right:6px;}.cke_skin_kama .cke_rtl .cke_rcombo a,.cke_skin_kama .cke_rtl .cke_rcombo a:active,.cke_skin_kama .cke_rtl .cke_rcombo a:hover{float:right;margin-right:0;margin-left:6px;}.cke_skin_kama .cke_hc .cke_rcombo a{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_kama .cke_rcombo .cke_label{display:none;line-height:26px;vertical-align:top;margin-right:5px;filter:alpha(opacity=70);opacity:.70;}.cke_skin_kama .cke_rtl .cke_rcombo .cke_label{margin-right:0;margin-left:5px;}.cke_skin_kama .cke_rcombo .cke_inline_label{line-height:21px;font-style:italic;color:#666;}.cke_skin_kama .cke_hc .cke_rcombo .cke_label{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_kama .cke_rcombo .cke_text{filter:alpha(opacity=70);opacity:.70;height:21px;line-height:21px;width:60px;text-overflow:ellipsis;overflow:hidden;display:inline-block;margin:0 2px 0 4px;}.cke_skin_kama .cke_rtl .cke_rcombo .cke_text{margin:0 4px 0 2px;}\r
+.cke_skin_kama .cke_rcombo .cke_openbutton{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -68px;background-repeat:no-repeat;display:inline-block;width:17px;height:19px;margin:1px 2px;background-repeat:no-repeat;}.cke_skin_kama .cke_browser_iequirks .cke_rcombo .cke_openbutton{margin-bottom:0;}.cke_skin_kama .cke_rcombo .cke_off a:hover .cke_text,.cke_skin_kama .cke_rcombo .cke_off a:focus .cke_text,.cke_skin_kama .cke_rcombo .cke_off a:active .cke_text,.cke_skin_kama .cke_rcombo .cke_on .cke_text{border-color:#316ac5;filter:alpha(opacity=100);opacity:1;}.cke_skin_kama .cke_rcombo .cke_off a:hover .cke_openbutton,.cke_skin_kama .cke_rcombo .cke_off a:focus .cke_openbutton,.cke_skin_kama .cke_rcombo .cke_off a:active .cke_openbutton,.cke_skin_kama .cke_rcombo .cke_on .cke_openbutton{border-color:#316ac5;background-color:#dff1ff;}.cke_skin_kama .cke_rcombo .cke_on .cke_text{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;}.cke_skin_kama .cke_rcombo .cke_on .cke_openbutton{-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;}.cke_skin_kama .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.3;}.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=70);opacity:.7;}.cke_skin_kama .cke_rcombo .cke_disabled .cke_text,.cke_skin_kama .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);opacity:.5;}.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_text,.cke_skin_kama .cke_hc .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=80);opacity:.8;}.cke_skin_kama .cke_rcombo .cke_disabled .cke_text{color:#fff;}.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_openbutton,.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_openbutton{display:block;float:left;}.cke_skin_kama .cke_browser_gecko .cke_rcombo .cke_label,.cke_skin_kama .cke_browser_webkit .cke_rcombo .cke_label{float:left;}.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_label,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_gecko .cke_rtl .cke_rcombo .cke_openbutton,.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton{float:right;}.cke_skin_kama .cke_browser_ie7 .cke_rcombo .cke_text{line-height:18px;}.cke_skin_kama .cke_browser_ie6 .cke_rcombo .cke_text,.cke_skin_kama .cke_browser_iequirks .cke_rcombo .cke_text{height:auto;line-height:17px;}@media print{.cke_path{display:none;}}.cke_skin_kama .cke_path{padding:0 5px;display:inline-block;float:left;}.cke_skin_kama .cke_rtl .cke_path{float:right;}.cke_skin_kama .cke_path a,.cke_skin_kama .cke_path .cke_empty{display:inline-block;float:left;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;margin-bottom:3px;color:#60676a;}.cke_skin_kama .cke_path .cke_empty{visibility:hidden;}.cke_skin_kama .cke_rtl .cke_path a,.cke_skin_kama .cke_rtl .cke_path cke_empty{float:right;}.cke_skin_kama .cke_path a:hover,.cke_skin_kama .cke_path a:focus,.cke_skin_kama .cke_path a:active{background-color:#dff1ff;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;outline:none;color:#000;}.cke_skin_kama .cke_browser_ie .cke_rtl .cke_path a,.cke_skin_kama .cke_browser_ie .cke_rtl .cke_path .cke_empty{float:none;}.cke_skin_kama .cke_button_source .cke_icon{background-position:0 0;}.cke_skin_kama .cke_button_newpage .cke_icon{background-position:0 -48px;}.cke_skin_kama .cke_button_preview .cke_icon{background-position:0 -64px;}.cke_skin_kama .cke_button_cut .cke_icon{background-position:0 -96px;}.cke_skin_kama .cke_button_copy .cke_icon{background-position:0 -112px;}.cke_skin_kama .cke_button_paste .cke_icon{background-position:0 -128px;}.cke_skin_kama .cke_button_pastetext .cke_icon{background-position:0 -144px;}\r
+.cke_skin_kama .cke_button_find .cke_icon{background-position:0 -240px;}.cke_skin_kama .cke_button_replace .cke_icon{background-position:0 -256px;}.cke_skin_kama .cke_button_selectAll .cke_icon{background-position:0 -272px;}.cke_skin_kama .cke_button_removeFormat .cke_icon{background-position:0 -288px;}.cke_skin_kama .cke_button_bold .cke_icon{background-position:0 -304px;}.cke_skin_kama .cke_button_italic .cke_icon{background-position:0 -320px;}.cke_skin_kama .cke_button_underline .cke_icon{background-position:0 -336px;}.cke_skin_kama .cke_button_strike .cke_icon{background-position:0 -352px;}.cke_skin_kama .cke_button_subscript .cke_icon{background-position:0 -368px;}.cke_skin_kama .cke_button_superscript .cke_icon{background-position:0 -384px;}.cke_skin_kama .cke_button_table .cke_icon{background-position:0 -608px;}.cke_skin_kama .cke_button_horizontalrule .cke_icon{background-position:0 -624px;}.cke_skin_kama .cke_button_smiley .cke_icon{background-position:0 -640px;}.cke_skin_kama .cke_button_link .cke_icon{background-position:0 -528px;}.cke_skin_kama .cke_button_unlink .cke_icon{background-position:0 -544px;}.cke_skin_kama .cke_button_anchor .cke_icon{background-position:0 -560px;}.cke_skin_kama .cke_button_image .cke_icon{background-position:0 -576px;}.cke_skin_kama .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_kama .cke_button_specialchar .cke_icon{background-position:0 -656px;}.cke_skin_kama .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_kama .cke_button_print .cke_icon{background-position:0 -176px;}.cke_skin_kama .cke_button_checkspell .cke_icon,.cke_skin_kama .cke_button_scayt .cke_icon{background-position:0 -192px;}.cke_skin_kama .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_kama .cke_button_textcolor .cke_icon{background-position:0 -704px;}.cke_skin_kama .cke_button_bgcolor .cke_icon{background-position:0 -720px;}.cke_skin_kama .cke_button_form .cke_icon{background-position:0 -752px;}.cke_skin_kama .cke_button_checkbox .cke_icon{background-position:0 -768px;}.cke_skin_kama .cke_button_radio .cke_icon{background-position:0 -784px;}.cke_skin_kama .cke_button_textfield .cke_icon{background-position:0 -800px;}.cke_skin_kama .cke_button_textarea .cke_icon{background-position:0 -816px;}.cke_skin_kama .cke_button_showblocks .cke_icon{background-position:0 -1136px;}.cke_skin_kama .cke_button_select .cke_icon{background-position:0 -832px;}.cke_skin_kama .cke_button_button .cke_icon{background-position:0 -848px;}.cke_skin_kama .cke_button_imagebutton .cke_icon{background-position:0 -864px;}.cke_skin_kama .cke_button_hiddenfield .cke_icon{background-position:0 -880px;}.cke_skin_kama .cke_button_undo .cke_icon{background-position:0 -208px;}.cke_skin_kama .cke_rtl .cke_button_undo .cke_icon{background-position:0 -224px;}.cke_skin_kama .cke_button_redo .cke_icon{background-position:0 -224px;}.cke_skin_kama .cke_rtl .cke_button_redo .cke_icon{background-position:0 -208px;}.cke_skin_kama .cke_button_templates .cke_icon{background-position:0 -80px;}.cke_skin_kama .cke_button_numberedlist .cke_icon{background-position:0 -400px;}.cke_skin_kama .cke_button_bulletedlist .cke_icon{background-position:0 -416px;}.cke_skin_kama .cke_button_outdent .cke_icon{background-position:0 -432px;}.cke_skin_kama .cke_button_indent .cke_icon{background-position:0 -448px;}.cke_skin_kama .cke_button_justifyleft .cke_icon{background-position:0 -464px;}.cke_skin_kama .cke_button_justifycenter .cke_icon{background-position:0 -480px;}.cke_skin_kama .cke_button_justifyright .cke_icon{background-position:0 -496px;}.cke_skin_kama .cke_button_justifyblock .cke_icon{background-position:0 -512px;}.cke_skin_kama .cke_button_blockquote .cke_icon{background-position:0 -1152px;}.cke_skin_kama .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_kama .cke_button_pastefromword .cke_icon{background-position:0 -160px;}.cke_skin_kama .cke_button_save .cke_icon{background-position:0 -32px;}.cke_skin_kama .cke_button_about .cke_icon{background-position:0 -736px;}.cke_skin_kama .cke_button_maximize .cke_icon{background-position:0 -1040px;}\r
+.cke_skin_kama .cke_button_source .cke_label{display:inline;}.cke_skin_kama .cke_styles_panel{width:150px;height:170px;}.cke_skin_kama .cke_format_panel{width:150px;height:170px;}.cke_skin_kama .cke_font_panel{width:150px;height:170px;}.cke_skin_kama .cke_fontSize_panel{height:170px;}.cke_skin_kama .cke_fontSize .cke_text{width:25px;}.cke_skin_kama .cke_browser_iequirks .cke_fontSize .cke_text{width:32px;}html .cke_skin_kama,html.cke_skin_kama_container{visibility:visible;}\r
diff --git a/skins/kama/icons.png b/skins/kama/icons.png
new file mode 100644 (file)
index 0000000..394ce89
Binary files /dev/null and b/skins/kama/icons.png differ
diff --git a/skins/kama/images/dialog_sides.gif b/skins/kama/images/dialog_sides.gif
new file mode 100644 (file)
index 0000000..8f91b47
Binary files /dev/null and b/skins/kama/images/dialog_sides.gif differ
diff --git a/skins/kama/images/dialog_sides.png b/skins/kama/images/dialog_sides.png
new file mode 100644 (file)
index 0000000..1042a61
Binary files /dev/null and b/skins/kama/images/dialog_sides.png differ
diff --git a/skins/kama/images/dialog_sides_rtl.png b/skins/kama/images/dialog_sides_rtl.png
new file mode 100644 (file)
index 0000000..d7f7b49
Binary files /dev/null and b/skins/kama/images/dialog_sides_rtl.png differ
diff --git a/skins/kama/images/mini.gif b/skins/kama/images/mini.gif
new file mode 100644 (file)
index 0000000..54d9107
Binary files /dev/null and b/skins/kama/images/mini.gif differ
diff --git a/skins/kama/images/noimage.png b/skins/kama/images/noimage.png
new file mode 100644 (file)
index 0000000..1598113
Binary files /dev/null and b/skins/kama/images/noimage.png differ
diff --git a/skins/kama/images/sprites.png b/skins/kama/images/sprites.png
new file mode 100644 (file)
index 0000000..0cb4e1c
Binary files /dev/null and b/skins/kama/images/sprites.png differ
diff --git a/skins/kama/images/sprites_ie6.png b/skins/kama/images/sprites_ie6.png
new file mode 100644 (file)
index 0000000..5bb305c
Binary files /dev/null and b/skins/kama/images/sprites_ie6.png differ
diff --git a/skins/kama/images/toolbar_start.gif b/skins/kama/images/toolbar_start.gif
new file mode 100644 (file)
index 0000000..1774246
Binary files /dev/null and b/skins/kama/images/toolbar_start.gif differ
diff --git a/skins/kama/skin.js b/skins/kama/skin.js
new file mode 100644 (file)
index 0000000..13c05ee
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.skins.add('kama',(function(){var a=[];if(CKEDITOR.env.ie&&CKEDITOR.env.version<7)a.push('icons.png','images/sprites_ie6.png','images/dialog_sides.gif');return{preload:a,editor:{css:['editor.css']},dialog:{css:['dialog.css']},templates:{css:['templates.css']},margins:[0,0,0,0],init:function(b){if(b.config.width&&!isNaN(b.config.width))b.config.width-=12;var c;function d(f){if(!c)return null;var g=c.append('style'),h='/* UI Color Support */.cke_skin_kama .cke_menuitem .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_label,.cke_skin_kama .cke_menuitem a:focus .cke_label,.cke_skin_kama .cke_menuitem a:active .cke_label{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label{\tbackground-color: transparent !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuseparator{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover,.cke_skin_kama .cke_menuitem a:focus,.cke_skin_kama .cke_menuitem a:active{\tbackground-color: $color !important;}';g.setAttribute('type','text/css');var i=/\$color/g;if(CKEDITOR.env.webkit){h=h.split('}').slice(0,-1);for(var j in h)h[j]=h[j].split('{');}return(d=function(k){if(CKEDITOR.env.webkit)for(var l in h)g.$.sheet.addRule(h[l][0],h[l][1].replace(i,k));else{var m=h.replace(i,k);if(CKEDITOR.env.ie)g.$.styleSheet.cssText=m;else g.setHtml(m);}})(f);};CKEDITOR.tools.extend(b,{uiColor:null,getUiColor:function(){return this.uiColor;},setUiColor:function(f){var g=CKEDITOR.document.getHead().append('style'),h='#cke_'+b.name.replace('.','\\.'),i=[h+' .cke_wrapper',h+'_dialog .cke_dialog_contents',h+'_dialog a.cke_dialog_tab',h+'_dialog .cke_dialog_footer'].join(','),j='background-color: $color !important;';\r
+g.setAttribute('type','text/css');return(this.setUiColor=function(k){var l=j.replace('$color',k);b.uiColor=k;if(CKEDITOR.env.ie)g.$.styleSheet.cssText=i+'{'+l+'}';else if(CKEDITOR.env.webkit)g.$.sheet.addRule(i,l);else g.setHtml(i+'{'+l+'}');d(k);})(f);}});if(CKEDITOR.menu){var e=CKEDITOR.menu.prototype.show;CKEDITOR.menu.prototype.show=function(){e.apply(this,arguments);if(!c&&b==this.editor){c=this._.element.getDocument().getHead();d(b.getUiColor());}};}if(b.config.uiColor)b.setUiColor(b.config.uiColor);}};})());if(CKEDITOR.dialog)CKEDITOR.dialog.on('resize',function(a){var b=a.data,c=b.width,d=b.height,e=b.dialog,f=e.parts.contents,g=!CKEDITOR.env.quirks;if(b.skin!='kama')return;f.setStyles(CKEDITOR.env.ie||CKEDITOR.env.gecko&&CKEDITOR.env.version<10900?{width:c+'px',height:d+'px'}:{'min-width':c+'px','min-height':d+'px'});if(!CKEDITOR.env.ie)return;setTimeout(function(){var h=f.getParent(),i=h.getParent(),j=i.getChild(2);j.setStyle('width',h.$.offsetWidth+'px');j=i.getChild(7);j.setStyle('width',h.$.offsetWidth-28+'px');j=i.getChild(4);j.setStyle('height',h.$.offsetHeight-31-14+'px');j=i.getChild(5);j.setStyle('height',h.$.offsetHeight-31-14+'px');},100);});\r
diff --git a/skins/kama/templates.css b/skins/kama/templates.css
new file mode 100644 (file)
index 0000000..2d72ffc
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_kama .cke_tpl_list{border:#dcdcdc 2px solid;background-color:#fff;overflow:auto;width:100%;height:220px;}.cke_skin_kama .cke_tpl_item{margin:5px;padding:7px;border:#eee 1px solid;*width:88%;}.cke_skin_kama .cke_tpl_preview{border-collapse:separate;text-indent:0;width:100%;}.cke_skin_kama .cke_tpl_preview td{padding:2px;vertical-align:middle;}.cke_skin_kama .cke_tpl_preview .cke_tpl_preview_img{width:100px;}.cke_skin_kama .cke_tpl_preview span{white-space:normal;}.cke_skin_kama .cke_tpl_title{font-weight:bold;}.cke_skin_kama .cke_tpl_hover{border:#f93 1px solid!important;background-color:#fffacd!important;cursor:pointer;cursor:hand;}.cke_skin_kama .cke_tpl_hover *{cursor:inherit;}.cke_skin_kama .cke_tpl_empty,.cke_tpl_loading{text-align:center;padding:5px;}\r
diff --git a/skins/office2003/dialog.css b/skins/office2003/dialog.css
new file mode 100644 (file)
index 0000000..3b8c7a5
--- /dev/null
@@ -0,0 +1,8 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+body .cke_dialog{visibility:visible;}.cke_skin_office2003 .cke_dialog_body{margin-left:16px;margin-right:16px;margin-top:2px;margin-bottom:20px;position:relative;z-index:1;}.cke_skin_office2003 .cke_dialog_tl,.cke_skin_office2003 .cke_dialog_tr,.cke_skin_office2003 .cke_dialog_tc,.cke_skin_office2003 .cke_dialog_bl,.cke_skin_office2003 .cke_dialog_br,.cke_skin_office2003 .cke_dialog_bc{background-image:url(images/sprites.png);background-repeat:no-repeat;position:absolute;_background-image:url(images/sprites_ie6.png);}.cke_skin_office2003 .cke_dialog_tl{background-position:-16px -16px;height:16px;width:16px;top:0;left:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_tl{background-position:-16px -397px;}.cke_skin_office2003 .cke_dialog_tr{background-position:-16px -76px;height:16px;width:16px;top:0;right:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_tr{background-position:-16px -457px;}.cke_skin_office2003 .cke_dialog_tc{background-position:0 -136px;background-repeat:repeat-x;height:16px;top:0;left:16px;right:16px;}.cke_skin_office2003 .cke_dialog_bl{background-position:-16px -196px;height:51px;width:30px;bottom:0;left:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_bl{background-position:-16px -517px;}.cke_skin_office2003 .cke_dialog_br{background-position:-16px -263px;height:51px;width:30px;bottom:0;right:0;}.cke_skin_office2003 .cke_rtl .cke_dialog_br{background-position:-16px -584px;}.cke_skin_office2003 .cke_dialog_bc{background-position:0 -330px;background-repeat:repeat-x;height:51px;bottom:0;left:30px;right:30px;}.cke_skin_office2003 .cke_dialog_ml,.cke_skin_office2003 .cke_dialog_mr{background-image:url(images/dialog_sides.png);background-repeat:repeat-y;position:absolute;width:16px;top:16px;bottom:51px;_background-image:url(images/dialog_sides.gif);_top:auto;}.cke_skin_office2003 .cke_rtl .cke_dialog_ml,.cke_skin_office2003 .cke_rtl .cke_dialog_mr{background-image:url(images/dialog_sides_rtl.png);_background-image:url(images/dialog_sides.gif);}.cke_skin_office2003 .cke_dialog_ml{background-position:0 0;left:0;}.cke_skin_office2003 .cke_dialog_mr{background-position:-16px 0;right:0;}.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_ml,.cke_skin_office2003 .cke_browser_iequirks .cke_dialog_mr{margin-top:3px;}.cke_skin_office2003 .cke_dialog_title{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -678px;background-repeat:repeat-x;font-weight:bold;font-size:14pt;color:#0E3460;background-color:#8db1ff;padding:3px 10px 26px 10px;cursor:move;position:relative;}.cke_skin_office2003 .cke_browser_ie.cke_rtl .cke_dialog_title{position:static!important;unicode-bidi:bidi-override;}.cke_skin_office2003 .cke_dialog_contents{background-color:#f7f8fd;border:#2b66c9 1px solid;overflow:auto;padding:5px 10px;}.cke_skin_office2003 .cke_dialog_footer{background-color:#8db1ff;text-align:right;}.cke_skin_office2003 .cke_rtl .cke_dialog_footer{text-align:left;}.cke_skin_office2003 .cke_dialog_tabs{height:23px;background-color:#8db1ff;display:inline-block;margin-left:10px;margin-right:10px;margin-top:-23px;position:absolute;z-index:2;}.cke_skin_office2003 .cke_rtl .cke_dialog_tabs{right:10px;}.cke_skin_office2003 a.cke_dialog_tab,.cke_skin_office2003 a:link.cke_dialog_tab,.cke_skin_office2003 a:active.cke_dialog_tab,.cke_skin_office2003 a:hover.cke_dialog_tab,.cke_skin_office2003 a:visited.cke_dialog_tab{color:#0E3460;border-left:1px solid #2b66c9;border-right:1px solid #2b66c9;border-top:1px solid #2b66c9;height:14px;padding:4px 5px;display:inline-block;cursor:pointer;}.cke_skin_office2003 .cke_browser_gecko18 a.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:link.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:active.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:hover.cke_dialog_tab,.cke_skin_office2003 .cke_browser_gecko18 a:visited.cke_dialog_tab{display:inline;position:relative;top:6px;}.cke_skin_office2003 a:hover.cke_dialog_tab{background-color:#f7f8fd;}.cke_skin_office2003 a.cke_dialog_tab_selected,.cke_skin_office2003 a:link.cke_dialog_tab_selected,.cke_skin_office2003 a:active.cke_dialog_tab_selected,.cke_skin_office2003 a:hover.cke_dialog_tab_selected,.cke_skin_office2003 a:visited.cke_dialog_tab_selected{border-bottom:1px solid #f7f8fd;background-color:#f7f8fd;font-weight:bold;cursor:default;}\r
+.cke_skin_office2003 .cke_single_page .cke_dialog_tabs{display:none;}.cke_skin_office2003 .cke_single_page .cke_dialog_title{padding-bottom:3px;}.cke_skin_office2003 .cke_dialog_ui_vbox table,.cke_skin_office2003 .cke_dialog_ui_hbox table{margin:auto;}.cke_skin_office2003 .cke_dialog_ui_vbox_child{padding:5px 0;}.cke_skin_office2003 input.cke_dialog_ui_input_text,.cke_skin_office2003 input.cke_dialog_ui_input_password{background-color:white;border:none;padding:0;width:100%;height:14px;}.cke_skin_office2003 div.cke_dialog_ui_input_text,.cke_skin_office2003 div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_office2003 textarea.cke_dialog_ui_input_textarea{background-color:white;border:none;padding:0;width:100%;_width:99%;overflow:auto;resize:none;}.cke_skin_office2003 div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_office2003 div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default;}.cke_skin_office2003 .cke_dialog_ui_hbox{width:100%;}.cke_skin_office2003 .cke_dialog_ui_hbox_first,.cke_skin_office2003 .cke_dialog_ui_hbox_child,.cke_skin_office2003 .cke_dialog_ui_hbox_last{vertical-align:top;}.cke_skin_office2003 .cke_ltr .cke_dialog_ui_hbox_first,.cke_skin_office2003 .cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px;}.cke_skin_office2003 .cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_office2003 .cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px;}.cke_skin_office2003 a.cke_dialog_ui_button{border-collapse:separate;cursor:default;}.cke_skin_office2003 span.cke_dialog_ui_button{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -678px;background-repeat:repeat-x;border:#0E3460 1px solid;padding:2px 10px;text-align:center;color:#0E3460;background-color:#8db1ff;display:inline-block;cursor:default;}.cke_skin_office2003 .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{display:block;}.cke_skin_office2003 a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3;}.cke_skin_office2003 a:focus span.cke_dialog_ui_button,.cke_skin_office2003 a:active span.cke_dialog_ui_button{background-color:#8db1ff;}.cke_skin_office2003 .cke_dialog_footer_buttons{display:inline-table;margin-right:12px;margin-left:12px;width:auto;position:relative;}.cke_skin_office2003 .cke_browser_gecko18 .cke_dialog_footer_buttons{display:inline;}.cke_skin_office2003 .cke_dialog_footer_buttons span.cke_dialog_ui_button{width:60px;margin:7px 0;}.cke_skin_office2003 strong{font-weight:bold;}.cke_skin_office2003 .cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:-20px -655px;position:absolute;cursor:pointer;text-align:center;height:21px;width:21px;top:4px;_background-image:url(images/sprites_ie6.png);}.cke_skin_office2003 .cke_dialog_close_button span{display:none;}.cke_skin_office2003 .cke_ltr .cke_dialog_close_button{right:10px;_right:22px;}.cke_skin_office2003 .cke_rtl .cke_dialog_close_button{left:10px;_left:16px;_top:6px;}.cke_skin_office2003 .cke_browser_ie6.cke_rtl .cke_dialog_close_button{position:relative;float:left;margin-top:-55px;margin-left:-7px;}.cke_skin_office2003 .cke_browser_iequirks.cke_rtl.cke_single_page .cke_dialog_close_button{margin-top:-32px;}.cke_skin_office2003 .cke_browser_iequirks.cke_ltr .cke_dialog_close_button{margin-top:0;}.cke_skin_office2003 .cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white;}.cke_skin_office2003 iframe.cke_dialog_ui_input_file{width:100%;height:25px;}.cke_skin_office2003 .cke_dialog .cke_dark_background{background-color:#eaead1;}.cke_skin_office2003 .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_office2003 .cke_dialog .cke_centered{text-align:center;}.cke_skin_office2003 .cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px;}\r
+.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_reset{float:left;}.cke_skin_office2003 .cke_dialog a.cke_btn_locked,.cke_skin_office2003 .cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px;}.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_locked,.cke_skin_office2003 .cke_rtl .cke_dialog a.cke_btn_unlocked{float:right;}.cke_skin_office2003 .cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif);}.cke_skin_office2003 .cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer;cursor:hand;}.cke_skin_office2003 .cke_dialog #ImagePreviewBox{white-space:normal;border:2px ridge black;overflow:scroll;height:160px;width:230px;padding:2px;background-color:white;}.cke_skin_office2003 .cke_dialog #ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4;}.cke_skin_office2003 .cke_dialog #FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white;}.cke_skin_office2003 .cke_dialog .cke_dark_background{text-align:center;background-color:#eaead1;font-size:14px;}.cke_skin_office2003 .cke_dialog .cke_light_background{text-align:center;background-color:#ffffbe;}.cke_skin_office2003 .cke_dialog .cke_hand{cursor:pointer;cursor:hand;}.cke_skin_office2003 .cke_disabled{color:#a0a0a0;}.cke_skin_office2003 .cke_hc .cke_dialog_title,.cke_skin_office2003 .cke_hc .cke_dialog_tabs,.cke_skin_office2003 .cke_hc .cke_dialog_contents,.cke_skin_office2003 .cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid;}.cke_skin_office2003 .cke_hc .cke_dialog_title{border-top:1px solid;}.cke_skin_office2003 .cke_hc .cke_dialog_footer{border-bottom:1px solid;}.cke_skin_office2003 .cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;cursor:hand;font-weight:bold;position:relative;top:3px;}\r
diff --git a/skins/office2003/editor.css b/skins/office2003/editor.css
new file mode 100644 (file)
index 0000000..6adbed5
--- /dev/null
@@ -0,0 +1,13 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_office2003 *,.cke_skin_office2003 a:hover,.cke_skin_office2003 a:link,.cke_skin_office2003 a:visited,.cke_skin_office2003 a:active{margin:0;padding:0;border:0;background:transparent;text-decoration:none;font:normal normal normal 100% Sans-Serif;width:auto;height:auto;border-collapse:collapse;text-align:left;vertical-align:baseline;white-space:nowrap;cursor:auto;color:#000;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_skin_office2003 .cke_rtl *,.cke_skin_office2003 .cke_rtl a:hover,.cke_skin_office2003 .cke_rtl a:link,.cke_skin_office2003 .cke_rtl a:visited,.cke_skin_office2003 .cke_rtl a:active,.cke_rtl .cke_skin_office2003 *,.cke_rtl .cke_skin_office2003 a:hover,.cke_rtl .cke_skin_office2003 a:link,.cke_rtl .cke_skin_office2003 a:visited,.cke_rtl .cke_skin_office2003 a:active{text-align:right;}.cke_skin_office2003 iframe{vertical-align:inherit;}.cke_skin_office2003 textarea{white-space:pre;}.cke_skin_office2003 .cke_browser_gecko textarea{cursor:text;}.cke_skin_office2003 .cke_browser_gecko textarea[disabled]{cursor:default;}.cke_skin_office2003 input[type="text"],.cke_skin_office2003 input[type="password"]{cursor:text;}.cke_skin_office2003 input[type="text"][disabled],.cke_skin_office2003 input[type="password"][disabled]{cursor:default;}.cke_skin_office2003 .cke_editor{display:inline-table;width:100%;}.cke_skin_office2003,.cke_skin_office2003 .cke_wrapper{display:block;}.cke_skin_office2003 .cke_top,.cke_skin_office2003 .cke_bottom{background-color:#f7f8fd;}.cke_skin_office2003 .cke_top{border-top:solid 1px #fafaf5;border-left:solid 1px #fafaf5;border-right:solid 1px #696969;border-bottom:solid 2px #696969;}.cke_skin_office2003 .cke_rtl .cke_top{border-left:solid 1px #696969;border-right:solid 1px #fafaf5;}.cke_skin_office2003 .cke_bottom{border-left:solid 1px #696969;border-right:solid 1px #696969;border-bottom:solid 1px #696969;}.cke_skin_office2003 .cke_contents{border:solid 1px #696969;}.cke_skin_office2003 .cke_focus{outline:auto 5px -webkit-focus-ring-color;}.cke_skin_office2003 textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;white-space:pre;background-color:#fff;}.cke_skin_office2003 .cke_resizer{width:12px;height:12px;margin-top:16px;display:block;float:right;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1088px;background-repeat:no-repeat;cursor:se-resize;}.cke_skin_office2003 .cke_maximized .cke_resizer{display:none;}.cke_skin_office2003 .cke_rtl .cke_resizer{cursor:sw-resize;background-position:0 -1115px;float:left;}.cke_skin_office2003 .cke_browser_ie6 .cke_contents textarea,.cke_skin_office2003 .cke_browser_ie7 .cke_contents textarea{position:absolute;}.cke_skin_office2003 .cke_panel{border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}.cke_skin_office2003 .cke_panel iframe{width:100%;height:100%;}html.cke_skin_office2003_container{overflow:auto;overflow-x:hidden;}body.cke_panel_frame{overflow:auto;overflow-x:hidden;}ul.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap;}li.cke_panel_listItem{margin:0;}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit;text-decoration:none;overflow:hidden;text-overflow:ellipsis;}* html .cke_panel_listItem a{width:100%;color:#000;}*:first-child+html .cke_panel_listItem a{color:#000;}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff;}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff;}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px;}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px;}\r
+.cke_skin_office2003 .cke_button_textcolor_panel,.cke_skin_office2003 .cke_button_bgcolor_panel{width:150px;height:135px;}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000;}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left;}.cke_rtl span.cke_colorbox{float:right;}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;}.cke_rtl a.cke_colorbox{float:right;}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff;}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff;}@media print{.cke_skin_office2003 .cke_toolbox{display:none;}}.cke_skin_office2003 a.cke_toolbox_collapser,.cke_skin_office2003 a:hover.cke_toolbox_collapser{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:3px -1026px;background-repeat:no-repeat;width:11px;height:11px;float:right;border:outset 1px;margin:11px 2px 2px;cursor:pointer;}.cke_skin_office2003 .cke_rtl a.cke_toolbox_collapser,.cke_skin_office2003 .cke_rtl a:hover.cke_toolbox_collapser{float:left;}.cke_skin_office2003 a.cke_toolbox_collapser_min,.cke_skin_office2003 a:hover.cke_toolbox_collapser_min{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:4px -1047px;background-repeat:no-repeat;margin:2px;}.cke_skin_office2003 .cke_rtl a.cke_toolbox_collapser_min,.cke_skin_office2003 .cke_rtl a:hover.cke_toolbox_collapser_min{background-position:4px -1068px;}.cke_skin_office2003 .cke_toolbar{background-color:#d6dff7;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -962px;background-repeat:repeat-x;display:inline-block;float:left;}.cke_skin_office2003 .cke_rtl .cke_toolbar{float:right;}.cke_skin_office2003 .cke_toolgroup{display:inline-block;float:left;height:28px;}.cke_skin_office2003 .cke_browser_ie .cke_toolgroup{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_toolgroup{float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolgroup{#float:none;}.cke_skin_office2003 .cke_separator{display:inline-block;float:left;border-left:solid 1px #B2CBFF;margin:6px 2px;height:16px;}.cke_skin_office2003 .cke_browser_ie .cke_separator{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_separator{float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_separator{#float:none;}.cke_skin_office2003 .cke_break{clear:left;}.cke_skin_office2003 .cke_rtl .cke_break{clear:right;}.cke_skin_office2003 .cke_toolbar_start{display:inline-block;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;background-position:-27px -765px;width:10px;height:28px;float:left;}.cke_skin_office2003 .cke_browser_ie .cke_toolbar_start{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_toolbar_start{background-position:-27px -816px;float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_start{#float:none;}.cke_skin_office2003 .cke_toolbar_end{display:inline-block;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;background-position:-29px -861px;width:4px;height:28px;float:left;}.cke_skin_office2003 .cke_browser_ie .cke_toolbar_end{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_toolbar_end{background-position:-29px -907px;float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_end{#float:none;}.cke_skin_office2003 .cke_button a,.cke_skin_office2003 .cke_button a:hover,.cke_skin_office2003 .cke_button a:focus,.cke_skin_office2003 .cke_button a:active,.cke_skin_office2003 .cke_button a.cke_off{border:solid 1px transparent;border-radius:3px;outline:none;padding-top:2px;padding-left:4px;padding-right:4px;padding-bottom:2px;margin-top:2px;height:18px;vertical-align:top;_border:none;_margin:3px 1px 1px 1px;cursor:default;display:inline-block;}\r
+.cke_skin_office2003 .cke_button a,.cke_skin_office2003 .cke_button a.cke_off{filter:alpha(opacity=70);opacity:.70;-moz-border-radius:3px;-webkit-border-radius:3px;}.cke_skin_office2003 .cke_hc .cke_button a,.cke_skin_office2003 .cke_hc .cke_button a.cke_off{opacity:1.0;filter:alpha(opacity=100);}.cke_skin_office2003 .cke_button a.cke_on{border:solid 1px #316ac5;background-color:#c1d2ee;filter:alpha(opacity=100);opacity:1;_margin:2px 0 0 0;}.cke_skin_office2003 .cke_hc .cke_button a.cke_on{padding:0 2px!important;border-width:3px;}.cke_skin_office2003 .cke_button a.cke_disabled,.cke_skin_office2003 .cke_button a:hover.cke_disabled,.cke_skin_office2003 .cke_button a:focus.cke_disabled,.cke_skin_office2003 .cke_button a:active.cke_disabled{border:solid 1px transparent;filter:alpha(opacity=30);opacity:.3;vertical-align:top;_border:none;_margin:3px 1px 1px 1px;}.cke_skin_office2003 .cke_hc .cke_button a.cke_disabled,.cke_skin_office2003 .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled{filter:alpha(opacity=60);opacity:.6;}.cke_skin_office2003 .cke_button a:hover.cke_on,.cke_skin_office2003 .cke_button a:focus.cke_on,.cke_skin_office2003 .cke_button a:active.cke_on,.cke_skin_office2003 .cke_button a:hover.cke_off,.cke_skin_office2003 .cke_button a:focus.cke_off,.cke_skin_office2003 .cke_button a:active.cke_off{border:solid 1px #316ac5;background-color:#dff1ff;filter:alpha(opacity=100);opacity:1;vertical-align:top;_margin:2px 0 0 0;padding:2px 4px;}.cke_skin_office2003 .cke_hc .cke_button a:hover.cke_on,.cke_skin_office2003 .cke_hc .cke_button a:focus.cke_on,.cke_skin_office2003 .cke_hc .cke_button a:active.cke_on,.cke_skin_office2003 .cke_hc .cke_button a:hover.cke_off,.cke_skin_office2003 .cke_hc .cke_button a:focus.cke_off,.cke_skin_office2003 .cke_hc .cke_button a:active.cke_off{padding:0 2px!important;border-width:3px;}.cke_skin_office2003 .cke_button .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;display:inline-block;}.cke_skin_office2003 .cke_button .cke_label{display:none;padding-left:3px;vertical-align:3px;cursor:default;_background-image:url(images/sprites_ie6.png);_background-position:0 -970px;_background-repeat:repeat-x;}.cke_skin_office2003 .cke_button a:hover .cke_label{_background-color:#dff1ff;_background-image:none;}.cke_skin_office2003 .cke_button a.cke_on .cke_label{_background-color:#c1d2ee;_background-image:none;}.cke_skin_office2003 .cke_hc .cke_button .cke_label{padding:0;display:inline-block;}.cke_skin_office2003 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_office2003 .cke_accessibility{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_office2003 .cke_button .cke_buttonarrow{display:inline-block;height:18px;width:8px;background-position:2px -1004px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;}.cke_skin_office2003 .cke_rtl .cke_button .cke_buttonarrow{background-position:0 -1004px;}.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar,.cke_skin_office2003 .cke_browser_gecko18 .cke_button a,.cke_skin_office2003 .cke_browser_gecko18 .cke_button a.cke_off,.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_icon,.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_buttonarrow,.cke_skin_office2003 .cke_browser_gecko18 .cke_separator,.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar_start,.cke_skin_office2003 .cke_browser_gecko18 .cke_toolbar_end{display:block;float:left;}.cke_skin_office2003 .cke_browser_gecko18 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button a,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button a.cke_off,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_icon,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_buttonarrow,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_separator,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar_start,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_toolbar_end{float:right;}\r
+.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_break{float:left;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl span.cke_inline_label{float:right;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_button .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_break{float:right;}.cke_skin_office2003 .cke_browser_gecko18 .cke_separator{margin-top:4px;}.cke_skin_office2003 .cke_browser_gecko18 .cke_button .cke_label{padding-top:3px;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolgroup,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_separator,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_start,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_toolbar_end{float:none;}.cke_skin_office2003 .cke_browser_ie8 .cke_toolbar,.cke_skin_office2003 .cke_browser_ie8 .cke_toolgroup{vertical-align:top;}.cke_skin_office2003 .cke_browser_iequirks.cke_browser_ie8 .cke_toolbar,.cke_skin_office2003 .cke_browser_iequirks.cke_browser_ie8 .cke_toolgroup{vertical-align:baseline;}.cke_skin_office2003 .cke_contextmenu{padding:2px;}.cke_skin_office2003 .cke_menuitem a{display:block;}.cke_skin_office2003 .cke_menuitem span{cursor:default;}.cke_skin_office2003 .cke_menuitem a:hover,.cke_skin_office2003 .cke_menuitem a:focus,.cke_skin_office2003 .cke_menuitem a:active{background-color:#8db1ff;display:block;}.cke_skin_office2003 .cke_menuitem a.cke_disabled:hover,.cke_skin_office2003 .cke_menuitem a.cke_disabled:focus,.cke_skin_office2003 .cke_menuitem a.cke_disabled:active{background-color:transparent!important;}.cke_skin_office2003 .cke_menuitem .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;background-color:transparent;width:16px;height:16px;float:left;}.cke_skin_office2003 .cke_menuitem .cke_disabled .cke_icon{filter:alpha(opacity=70);opacity:.70;}.cke_skin_office2003 .cke_menuitem .cke_icon_wrapper{background-color:#f7f8fd;border:solid 4px #f7f8fd;width:16px;height:16px;float:left;filter:alpha(opacity=70);opacity:.70;}.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_icon_wrapper{float:right;}.cke_skin_office2003 .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:active .cke_icon_wrapper{background-color:#9d9d9d;border:solid 4px #9d9d9d;filter:alpha(opacity=70);opacity:.70;}.cke_skin_office2003 .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,.cke_skin_office2003 .cke_menuitem a:active.cke_disabled .cke_icon_wrapper{background-color:#f7f8fd;border:solid 4px #f7f8fd;}.cke_skin_office2003 .cke_menuitem .cke_label{display:block;padding-right:3px;padding-top:5px;padding-left:4px;height:19px;margin-left:24px;background-color:#fff;_overflow:hidden;_width:80px;filter:alpha(opacity=70);opacity:.70;}.cke_rtl .cke_skin_office2003 .cke_menuitem .cke_label{padding-right:0;margin-left:0;padding-left:3px;margin-right:28px;}.cke_skin_office2003 .cke_menuitem a.cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.30;}.cke_skin_office2003 .cke_menuitem a:hover .cke_label,.cke_skin_office2003 .cke_menuitem a:focus .cke_label,.cke_skin_office2003 .cke_menuitem a:active .cke_label{background-color:#8db1ff;}.cke_skin_office2003 .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_office2003 .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_office2003 .cke_menuitem a.cke_disabled:active .cke_label{background-color:transparent;}.cke_skin_office2003 .cke_menuseparator{background-color:#f7f8fd;height:2px;filter:alpha(opacity=70);opacity:.70;_font-size:0;}.cke_skin_office2003 .cke_menuarrow{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -1071px;background-repeat:no-repeat;height:5px;width:3px;float:right;margin-right:2px;margin-top:3px;}.cke_rtl .cke_skin_office2003 .cke_menuarrow{float:left;margin-right:0;margin-left:2px;background-position:0 -1050px;}.cke_browser_ie.cke_ltr .cke_skin_office2003 .cke_menuarrow{position:absolute;right:2px;}\r
+.cke_browser_ie.cke_rtl .cke_skin_office2003 .cke_menuarrow{position:absolute;left:2px;}.cke_skin_office2003 .cke_rcombo{display:inline-block;margin-left:2px;margin-right:2px;margin-top:2px;vertical-align:top;float:left;}.cke_skin_office2003 .cke_browser_ie .cke_rcombo{#float:none;#display:inline;}.cke_skin_office2003 .cke_rtl .cke_rcombo{float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rcombo{#float:none;}.cke_skin_office2003 .cke_rcombopanel{border:1px solid #316ac5;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;}.cke_skin_office2003 .cke_rcombo a{display:inline-block;float:left;filter:alpha(opacity=70);opacity:.70;}.cke_skin_office2003 .cke_rtl .cke_rcombo a{float:right;}.cke_skin_office2003 .cke_hc .cke_rcombo a{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_office2003 .cke_rcombo .cke_label{display:inline-block;float:left;line-height:24px;height:24px;vertical-align:top;padding-left:4px;padding-right:5px;filter:alpha(opacity=70);opacity:.70;_background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);_background-position:0 -962px;_background-repeat:repeat-x;}.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_label{float:right;padding-right:4px;padding-left:5px;}.cke_skin_office2003 .cke_hc .cke_rcombo .cke_label{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_office2003 .cke_rcombo .cke_inline_label{color:#fff;}.cke_skin_office2003 .cke_rcombo .cke_text{border:1px solid #8f8f73;background-color:#fff;height:14px;width:60px;padding-top:4px;padding-bottom:4px;padding-left:5px;padding-right:5px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:top;}.cke_skin_office2003 .cke_ltr .cke_rcombo .cke_text{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_text{-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.cke_skin_office2003 .cke_browser_iequirks .cke_rcombo .cke_text{height:22px;}.cke_skin_office2003 .cke_rcombo .cke_openbutton{display:inline-block;background-position:5px -1002px;background-image:url(images/sprites.png);background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;border-top:1px solid #8f8f73;border-bottom:1px solid #8f8f73;width:14px;height:22px;}.cke_skin_office2003 .cke_ltr .cke_rcombo .cke_openbutton{border-right:1px solid #8f8f73;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.cke_skin_office2003 .cke_rtl .cke_rcombo .cke_openbutton{border-left:1px solid #8f8f73;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_office2003 .cke_rcombo .cke_off a:hover,.cke_skin_office2003 .cke_rcombo .cke_off a:focus,.cke_skin_office2003 .cke_rcombo .cke_off a:active,.cke_skin_office2003 .cke_rcombo .cke_on a{filter:alpha(opacity=100);opacity:1;}.cke_skin_office2003 .cke_rcombo .cke_off a:hover .cke_text,.cke_skin_office2003 .cke_rcombo .cke_off a:focus .cke_text,.cke_skin_office2003 .cke_rcombo .cke_off a:active .cke_text,.cke_skin_office2003 .cke_rcombo .cke_on .cke_text{border-color:#316ac5;}.cke_skin_office2003 .cke_rcombo .cke_off a:hover .cke_openbutton,.cke_skin_office2003 .cke_rcombo .cke_off a:focus .cke_openbutton,.cke_skin_office2003 .cke_rcombo .cke_off a:active .cke_openbutton,.cke_skin_office2003 .cke_rcombo .cke_on .cke_openbutton{border-color:#316ac5;background-color:#dff1ff;}.cke_skin_office2003 .cke_rcombo .cke_on .cke_text{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;}.cke_skin_office2003 .cke_rcombo .cke_on .cke_openbutton{-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;}\r
+.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.3;}.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=70);opacity:.7;}.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_text,.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);opacity:.5;}.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_text,.cke_skin_office2003 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=80);opacity:.8;}.cke_skin_office2003 .cke_rcombo .cke_disabled .cke_text{color:#fff;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo,.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_gecko18 .cke_rcombo .cke_openbutton,.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_webkit .cke_rcombo .cke_openbutton{display:block;float:left;}.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_openbutton,.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,.cke_skin_office2003 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton{float:right;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo a,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_rcombo .cke_label{float:none;}@media print{.cke_path{display:none;}}.cke_skin_office2003 .cke_path{padding:3px 3px 0 3px;display:inline-block;float:left;}.cke_skin_office2003 .cke_rtl .cke_path{float:right;}.cke_skin_office2003 .cke_path a,.cke_skin_office2003 .cke_path .cke_empty{display:inline-block;float:left;border:solid 1px #f7f8fd;background-color:#f7f8fd;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;margin-bottom:3px;}.cke_skin_office2003 .cke_path .cke_empty{visibility:hidden;}.cke_skin_office2003 .cke_rtl .cke_path a,.cke_skin_office2003 .cke_rtl .cke_path cke_empty{float:right;}.cke_skin_office2003 .cke_path a:hover,.cke_skin_office2003 .cke_path a:focus,.cke_skin_office2003 .cke_path a:active{border:solid 1px #316ac5;background-color:#dff1ff;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;outline:none;}.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_path a,.cke_skin_office2003 .cke_browser_ie .cke_rtl .cke_path .cke_empty{float:none;}.cke_skin_office2003 .cke_button_source .cke_icon{background-position:0 0;}.cke_skin_office2003 .cke_button_newpage .cke_icon{background-position:0 -48px;}.cke_skin_office2003 .cke_button_preview .cke_icon{background-position:0 -64px;}.cke_skin_office2003 .cke_button_cut .cke_icon{background-position:0 -96px;}.cke_skin_office2003 .cke_button_copy .cke_icon{background-position:0 -112px;}.cke_skin_office2003 .cke_button_paste .cke_icon{background-position:0 -128px;}.cke_skin_office2003 .cke_button_pastetext .cke_icon{background-position:0 -144px;}.cke_skin_office2003 .cke_button_find .cke_icon{background-position:0 -240px;}.cke_skin_office2003 .cke_button_replace .cke_icon{background-position:0 -256px;}.cke_skin_office2003 .cke_button_selectAll .cke_icon{background-position:0 -272px;}.cke_skin_office2003 .cke_button_removeFormat .cke_icon{background-position:0 -288px;}.cke_skin_office2003 .cke_button_bold .cke_icon{background-position:0 -304px;}.cke_skin_office2003 .cke_button_italic .cke_icon{background-position:0 -320px;}.cke_skin_office2003 .cke_button_underline .cke_icon{background-position:0 -336px;}.cke_skin_office2003 .cke_button_strike .cke_icon{background-position:0 -352px;}.cke_skin_office2003 .cke_button_subscript .cke_icon{background-position:0 -368px;}.cke_skin_office2003 .cke_button_superscript .cke_icon{background-position:0 -384px;}\r
+.cke_skin_office2003 .cke_button_table .cke_icon{background-position:0 -608px;}.cke_skin_office2003 .cke_button_horizontalrule .cke_icon{background-position:0 -624px;}.cke_skin_office2003 .cke_button_smiley .cke_icon{background-position:0 -640px;}.cke_skin_office2003 .cke_button_link .cke_icon{background-position:0 -528px;}.cke_skin_office2003 .cke_button_unlink .cke_icon{background-position:0 -544px;}.cke_skin_office2003 .cke_button_anchor .cke_icon{background-position:0 -560px;}.cke_skin_office2003 .cke_button_image .cke_icon{background-position:0 -576px;}.cke_skin_office2003 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_office2003 .cke_button_specialchar .cke_icon{background-position:0 -656px;}.cke_skin_office2003 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_office2003 .cke_button_print .cke_icon{background-position:0 -176px;}.cke_skin_office2003 .cke_button_checkspell .cke_icon,.cke_skin_office2003 .cke_button_scayt .cke_icon{background-position:0 -192px;}.cke_skin_office2003 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_office2003 .cke_button_textcolor .cke_icon{background-position:0 -704px;}.cke_skin_office2003 .cke_button_bgcolor .cke_icon{background-position:0 -720px;}.cke_skin_office2003 .cke_button_form .cke_icon{background-position:0 -752px;}.cke_skin_office2003 .cke_button_checkbox .cke_icon{background-position:0 -768px;}.cke_skin_office2003 .cke_button_radio .cke_icon{background-position:0 -784px;}.cke_skin_office2003 .cke_button_textfield .cke_icon{background-position:0 -800px;}.cke_skin_office2003 .cke_button_textarea .cke_icon{background-position:0 -816px;}.cke_skin_office2003 .cke_button_showblocks .cke_icon{background-position:0 -1136px;}.cke_skin_office2003 .cke_button_select .cke_icon{background-position:0 -832px;}.cke_skin_office2003 .cke_button_button .cke_icon{background-position:0 -848px;}.cke_skin_office2003 .cke_button_imagebutton .cke_icon{background-position:0 -864px;}.cke_skin_office2003 .cke_button_hiddenfield .cke_icon{background-position:0 -880px;}.cke_skin_office2003 .cke_button_undo .cke_icon{background-position:0 -208px;}.cke_skin_office2003 .cke_rtl .cke_button_undo .cke_icon{background-position:0 -224px;}.cke_skin_office2003 .cke_button_redo .cke_icon{background-position:0 -224px;}.cke_skin_office2003 .cke_rtl .cke_button_redo .cke_icon{background-position:0 -208px;}.cke_skin_office2003 .cke_button_templates .cke_icon{background-position:0 -80px;}.cke_skin_office2003 .cke_button_numberedlist .cke_icon{background-position:0 -400px;}.cke_skin_office2003 .cke_button_bulletedlist .cke_icon{background-position:0 -416px;}.cke_skin_office2003 .cke_button_outdent .cke_icon{background-position:0 -432px;}.cke_skin_office2003 .cke_button_indent .cke_icon{background-position:0 -448px;}.cke_skin_office2003 .cke_button_justifyleft .cke_icon{background-position:0 -464px;}.cke_skin_office2003 .cke_button_justifycenter .cke_icon{background-position:0 -480px;}.cke_skin_office2003 .cke_button_justifyright .cke_icon{background-position:0 -496px;}.cke_skin_office2003 .cke_button_justifyblock .cke_icon{background-position:0 -512px;}.cke_skin_office2003 .cke_button_blockquote .cke_icon{background-position:0 -1152px;}.cke_skin_office2003 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_office2003 .cke_button_pastefromword .cke_icon{background-position:0 -160px;}.cke_skin_office2003 .cke_button_save .cke_icon{background-position:0 -32px;}.cke_skin_office2003 .cke_button_about .cke_icon{background-position:0 -736px;}.cke_skin_office2003 .cke_button_maximize .cke_icon{background-position:0 -1040px;}.cke_skin_office2003 .cke_button_source .cke_label{display:inline;}.cke_skin_office2003 .cke_styles_panel{width:150px;height:170px;}.cke_skin_office2003 .cke_format_panel{width:150px;height:170px;}.cke_skin_office2003 .cke_font_panel{width:150px;height:170px;}.cke_skin_office2003 .cke_fontSize_panel{height:170px;}.cke_skin_office2003 .cke_fontSize .cke_text{width:20px;}.cke_skin_office2003 .cke_browser_iequirks .cke_fontSize .cke_text{width:32px;}\r
+html .cke_skin_office2003,html.cke_skin_office2003_container{visibility:visible;}\r
diff --git a/skins/office2003/icons.png b/skins/office2003/icons.png
new file mode 100644 (file)
index 0000000..394ce89
Binary files /dev/null and b/skins/office2003/icons.png differ
diff --git a/skins/office2003/images/dialog_sides.gif b/skins/office2003/images/dialog_sides.gif
new file mode 100644 (file)
index 0000000..5840d01
Binary files /dev/null and b/skins/office2003/images/dialog_sides.gif differ
diff --git a/skins/office2003/images/dialog_sides.png b/skins/office2003/images/dialog_sides.png
new file mode 100644 (file)
index 0000000..7da9821
Binary files /dev/null and b/skins/office2003/images/dialog_sides.png differ
diff --git a/skins/office2003/images/dialog_sides_rtl.png b/skins/office2003/images/dialog_sides_rtl.png
new file mode 100644 (file)
index 0000000..24fe13a
Binary files /dev/null and b/skins/office2003/images/dialog_sides_rtl.png differ
diff --git a/skins/office2003/images/mini.gif b/skins/office2003/images/mini.gif
new file mode 100644 (file)
index 0000000..54d9107
Binary files /dev/null and b/skins/office2003/images/mini.gif differ
diff --git a/skins/office2003/images/noimage.png b/skins/office2003/images/noimage.png
new file mode 100644 (file)
index 0000000..1598113
Binary files /dev/null and b/skins/office2003/images/noimage.png differ
diff --git a/skins/office2003/images/sprites.png b/skins/office2003/images/sprites.png
new file mode 100644 (file)
index 0000000..a6d3a72
Binary files /dev/null and b/skins/office2003/images/sprites.png differ
diff --git a/skins/office2003/images/sprites_ie6.png b/skins/office2003/images/sprites_ie6.png
new file mode 100644 (file)
index 0000000..94073b2
Binary files /dev/null and b/skins/office2003/images/sprites_ie6.png differ
diff --git a/skins/office2003/skin.js b/skins/office2003/skin.js
new file mode 100644 (file)
index 0000000..3debc0f
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.skins.add('office2003',(function(){var a=[];if(CKEDITOR.env.ie&&CKEDITOR.env.version<7)a.push('icons.png','images/sprites_ie6.png','images/dialog_sides.gif');return{preload:a,editor:{css:['editor.css']},dialog:{css:['dialog.css']},templates:{css:['templates.css']},margins:[0,14,18,14]};})());if(CKEDITOR.dialog)CKEDITOR.dialog.on('resize',function(a){var b=a.data,c=b.width,d=b.height,e=b.dialog,f=!CKEDITOR.env.quirk;if(b.skin!='office2003')return;e.parts.contents.setStyles({width:c+'px',height:d+'px'});if(!CKEDITOR.env.ie)return;var g=function(){var h=e.parts.contents,i=h.getParent(),j=i.getParent(),k=j.getChild(2);k.setStyle('width',i.$.offsetWidth+'px');k=j.getChild(7);k.setStyle('width',i.$.offsetWidth-28+'px');k=j.getChild(4);k.setStyle('height',i.$.offsetHeight-31-14+'px');k=j.getChild(5);k.setStyle('height',i.$.offsetHeight-31-14+'px');};setTimeout(g,100);if(a.editor.lang.dir=='rtl')setTimeout(g,1000);});\r
diff --git a/skins/office2003/templates.css b/skins/office2003/templates.css
new file mode 100644 (file)
index 0000000..99e7b5b
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_office2003 .cke_tpl_list{border:#dcdcdc 2px solid;background-color:#fff;overflow:auto;width:100%;height:220px;}.cke_skin_office2003 .cke_tpl_item{margin:5px;padding:7px;border:#eee 1px solid;*width:88%;}.cke_skin_office2003 .cke_tpl_preview{border-collapse:separate;text-indent:0;width:100%;}.cke_skin_office2003 .cke_tpl_preview td{padding:2px;vertical-align:middle;}.cke_skin_office2003 .cke_tpl_preview .cke_tpl_preview_img{width:100px;}.cke_skin_office2003 .cke_tpl_preview span{white-space:normal;}.cke_skin_office2003 .cke_tpl_title{font-weight:bold;}.cke_skin_office2003 .cke_tpl_hover{border:#f93 1px solid!important;background-color:#fffacd!important;cursor:pointer;cursor:hand;}.cke_skin_office2003 .cke_tpl_hover *{cursor:inherit;}.cke_skin_office2003 .cke_tpl_empty,.cke_tpl_loading{text-align:center;padding:5px;}\r
diff --git a/skins/v2/dialog.css b/skins/v2/dialog.css
new file mode 100644 (file)
index 0000000..6859d2f
--- /dev/null
@@ -0,0 +1,8 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+body .cke_dialog{visibility:visible;}.cke_skin_v2 .cke_dialog_body{margin-left:16px;margin-right:16px;margin-top:2px;margin-bottom:20px;position:relative;z-index:1;}.cke_skin_v2 .cke_dialog_tl,.cke_skin_v2 .cke_dialog_tr,.cke_skin_v2 .cke_dialog_tc,.cke_skin_v2 .cke_dialog_bl,.cke_skin_v2 .cke_dialog_br,.cke_skin_v2 .cke_dialog_bc{background-image:url(images/sprites.png);background-repeat:no-repeat;position:absolute;_background-image:url(images/sprites_ie6.png);}.cke_skin_v2 .cke_dialog_tl{background-position:-16px -16px;height:16px;width:16px;top:0;left:0;}.cke_skin_v2 .cke_rtl .cke_dialog_tl{background-position:-16px -397px;}.cke_skin_v2 .cke_dialog_tr{background-position:-16px -76px;height:16px;width:16px;top:0;right:0;}.cke_skin_v2 .cke_rtl .cke_dialog_tr{background-position:-16px -457px;}.cke_skin_v2 .cke_dialog_tc{background-position:0 -136px;background-repeat:repeat-x;height:16px;top:0;left:16px;right:16px;}.cke_skin_v2 .cke_dialog_bl{background-position:-16px -196px;height:51px;width:30px;bottom:0;left:0;}.cke_skin_v2 .cke_rtl .cke_dialog_bl{background-position:-16px -517px;}.cke_skin_v2 .cke_dialog_br{background-position:-16px -263px;height:51px;width:30px;bottom:0;right:0;}.cke_skin_v2 .cke_rtl .cke_dialog_br{background-position:-16px -584px;}.cke_skin_v2 .cke_dialog_bc{background-position:0 -330px;background-repeat:repeat-x;height:51px;bottom:0;left:30px;right:30px;}.cke_skin_v2 .cke_dialog_ml,.cke_skin_v2 .cke_dialog_mr{background-image:url(images/dialog_sides.png);background-repeat:repeat-y;position:absolute;width:16px;top:16px;bottom:51px;_background-image:url(images/dialog_sides.gif);_top:auto;}.cke_skin_v2 .cke_rtl .cke_dialog_ml,.cke_skin_v2 .cke_rtl .cke_dialog_mr{background-image:url(images/dialog_sides_rtl.png);_background-image:url(images/dialog_sides.gif);}.cke_skin_v2 .cke_dialog_ml{background-position:0 0;left:0;}.cke_skin_v2 .cke_dialog_mr{background-position:-16px 0;right:0;}.cke_skin_v2 .cke_browser_iequirks .cke_dialog_ml,.cke_skin_v2 .cke_browser_iequirks .cke_dialog_mr{margin-top:3px;}.cke_skin_v2 .cke_dialog_title{font-weight:bold;font-size:14pt;color:#737357;background-color:#e3e3c7;padding:3px 10px 26px 10px;cursor:move;position:relative;}.cke_skin_v2 .cke_browser_ie.cke_rtl .cke_dialog_title{position:static!important;unicode-bidi:bidi-override;}.cke_skin_v2 .cke_dialog_contents{background-color:#f1f1e3;border:#d5d59d 1px solid;overflow:auto;padding:5px 10px;}.cke_skin_v2 .cke_dialog_footer{background-color:#e3e3c7;text-align:right;}.cke_skin_v2 .cke_rtl .cke_dialog_footer{text-align:left;}.cke_skin_v2 .cke_dialog_tabs{height:23px;background-color:#e3e3c7;display:inline-block;margin-left:10px;margin-right:10px;margin-top:-23px;position:absolute;z-index:2;}.cke_skin_v2 .cke_rtl .cke_dialog_tabs{right:10px;}.cke_skin_v2 a.cke_dialog_tab,.cke_skin_v2 a:link.cke_dialog_tab,.cke_skin_v2 a:active.cke_dialog_tab,.cke_skin_v2 a:hover.cke_dialog_tab,.cke_skin_v2 a:visited.cke_dialog_tab{color:#737357;border-left:1px solid #d5d59d;border-right:1px solid #d5d59d;border-top:1px solid #d5d59d;height:14px;padding:4px 5px;display:inline-block;cursor:pointer;}.cke_skin_v2 .cke_browser_gecko18 a.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:link.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:active.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:hover.cke_dialog_tab,.cke_skin_v2 .cke_browser_gecko18 a:visited.cke_dialog_tab{display:inline;position:relative;top:6px;}.cke_skin_v2 a:hover.cke_dialog_tab{background-color:#f1f1e3;}.cke_skin_v2 a.cke_dialog_tab_selected,.cke_skin_v2 a:link.cke_dialog_tab_selected,.cke_skin_v2 a:active.cke_dialog_tab_selected,.cke_skin_v2 a:hover.cke_dialog_tab_selected,.cke_skin_v2 a:visited.cke_dialog_tab_selected{border-bottom:1px solid #f1f1e3;background-color:#f1f1e3;font-weight:bold;cursor:default;}.cke_skin_v2 .cke_single_page .cke_dialog_tabs{display:none;}.cke_skin_v2 .cke_single_page .cke_dialog_title{padding-bottom:3px;}.cke_skin_v2 .cke_dialog_ui_vbox table,.cke_skin_v2 .cke_dialog_ui_hbox table{margin:auto;}.cke_skin_v2 .cke_dialog_ui_vbox_child{padding:5px 0;}\r
+.cke_skin_v2 input.cke_dialog_ui_input_text,.cke_skin_v2 input.cke_dialog_ui_input_password{background-color:white;border:none;padding:0;width:100%;height:14px;}.cke_skin_v2 div.cke_dialog_ui_input_text,.cke_skin_v2 div.cke_dialog_ui_input_password{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_v2 textarea.cke_dialog_ui_input_textarea{background-color:white;border:none;padding:0;width:100%;_width:99%;overflow:auto;resize:none;}.cke_skin_v2 div.cke_dialog_ui_input_textarea{background-color:white;border:1px solid #a0a0a0;padding:1px 0;}.cke_skin_v2 div.cke_disabled .cke_dialog_ui_labeled_content *{background-color:#a0a0a0;cursor:default;}.cke_skin_v2 .cke_dialog_ui_hbox{width:100%;}.cke_skin_v2 .cke_dialog_ui_hbox_first,.cke_skin_v2 .cke_dialog_ui_hbox_child,.cke_skin_v2 .cke_dialog_ui_hbox_last{vertical-align:top;}.cke_skin_v2 .cke_ltr .cke_dialog_ui_hbox_first,.cke_skin_v2 .cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px;}.cke_skin_v2 .cke_rtl .cke_dialog_ui_hbox_first,.cke_skin_v2 .cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px;}.cke_skin_v2 a.cke_dialog_ui_button{border-collapse:separate;cursor:default;}.cke_skin_v2 span.cke_dialog_ui_button{border:#737357 1px solid;padding:2px 10px;text-align:center;color:#3b3b1f;background-color:#c7c78f;display:inline-block;cursor:default;}.cke_skin_v2 .cke_browser_gecko18 .cke_dialog_footer_buttons span.cke_dialog_ui_button{display:block;}.cke_skin_v2 a.cke_dialog_ui_button span.cke_disabled{border:#898980 1px solid;color:#5e5e55;background-color:#c5c5b3;}.cke_skin_v2 a:focus span.cke_dialog_ui_button,.cke_skin_v2 a:active span.cke_dialog_ui_button{background-color:#e3e3c7;}.cke_skin_v2 .cke_dialog_footer_buttons{display:inline-table;margin-right:12px;margin-left:12px;width:auto;position:relative;}.cke_skin_v2 .cke_browser_gecko18 .cke_dialog_footer_buttons{display:inline;}.cke_skin_v2 .cke_dialog_footer_buttons span.cke_dialog_ui_button{width:60px;margin:7px 0;}.cke_skin_v2 strong{font-weight:bold;}.cke_skin_v2 .cke_dialog_close_button{background-image:url(images/sprites.png);background-repeat:no-repeat;background-position:-16px -651px;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;_background-image:url(images/sprites_ie6.png);}.cke_skin_v2 .cke_dialog_close_button span{display:none;}.cke_skin_v2 .cke_dialog_close_button:hover{background-position:-16px -687px;}.cke_skin_v2 .cke_ltr .cke_dialog_close_button{right:10px;_right:22px;}.cke_skin_v2 .cke_rtl .cke_dialog_close_button{left:10px;_left:16px;_top:7px;}.cke_skin_v2 .cke_browser_ie6.cke_rtl .cke_dialog_close_button{position:relative;float:left;margin-top:-55px;margin-left:-7px;}.cke_skin_v2 .cke_browser_iequirks.cke_rtl.cke_single_page .cke_dialog_close_button{margin-top:-32px;}.cke_skin_v2 .cke_browser_iequirks.cke_ltr .cke_dialog_close_button{margin-top:0;}.cke_skin_v2 .cke_dialog_ui_input_select{border:1px solid #a0a0a0;background-color:white;}.cke_skin_v2 iframe.cke_dialog_ui_input_file{width:100%;height:25px;}.cke_skin_v2 .cke_dialog .cke_dark_background{background-color:#eaead1;}.cke_skin_v2 .cke_dialog .cke_hand{cursor:pointer;}.cke_skin_v2 .cke_dialog .cke_centered{text-align:center;}.cke_skin_v2 .cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px;}.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_reset{float:left;}.cke_skin_v2 .cke_dialog a.cke_btn_locked,.cke_skin_v2 .cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px;}.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_locked,.cke_skin_v2 .cke_rtl .cke_dialog a.cke_btn_unlocked{float:right;}.cke_skin_v2 .cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.gif);}.cke_skin_v2 .cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer;cursor:hand;}.cke_skin_v2 .cke_dialog #ImagePreviewBox{white-space:normal;border:2px ridge black;overflow:scroll;height:160px;width:230px;padding:2px;background-color:white;}\r
+.cke_skin_v2 .cke_dialog #ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4;}.cke_skin_v2 .cke_dialog #FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white;}.cke_skin_v2 .cke_dialog .cke_dark_background{text-align:center;background-color:#eaead1;font-size:14px;}.cke_skin_v2 .cke_dialog .cke_light_background{text-align:center;background-color:#ffffbe;}.cke_skin_v2 .cke_dialog .cke_hand{cursor:pointer;cursor:hand;}.cke_skin_v2 .cke_disabled{color:#a0a0a0;}.cke_skin_v2 .cke_hc .cke_dialog_title,.cke_skin_v2 .cke_hc .cke_dialog_tabs,.cke_skin_v2 .cke_hc .cke_dialog_contents,.cke_skin_v2 .cke_hc .cke_dialog_footer{border-left:1px solid;border-right:1px solid;}.cke_skin_v2 .cke_hc .cke_dialog_title{border-top:1px solid;}.cke_skin_v2 .cke_hc .cke_dialog_footer{border-bottom:1px solid;}.cke_skin_v2 .cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;cursor:hand;font-weight:bold;position:relative;top:3px;}.cke_skin_v2 a.cke_smile img{border:2px solid #eaead1;}.cke_skin_v2 a.cke_smile:focus img,.cke_skin_v2 a.cke_smile:active img,.cke_skin_v2 a.cke_smile:hover img{border-color:#C7C78F;}\r
diff --git a/skins/v2/editor.css b/skins/v2/editor.css
new file mode 100644 (file)
index 0000000..2d2bea8
--- /dev/null
@@ -0,0 +1,12 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_v2 *,.cke_skin_v2 a:hover,.cke_skin_v2 a:link,.cke_skin_v2 a:visited,.cke_skin_v2 a:active{margin:0;padding:0;border:0;background:transparent;text-decoration:none;font:normal normal normal 100% Sans-Serif;width:auto;height:auto;border-collapse:collapse;text-align:left;vertical-align:baseline;white-space:nowrap;cursor:auto;color:#000;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}.cke_skin_v2 .cke_rtl *,.cke_skin_v2 .cke_rtl a:hover,.cke_skin_v2 .cke_rtl a:link,.cke_skin_v2 .cke_rtl a:visited,.cke_skin_v2 .cke_rtl a:active,.cke_rtl .cke_skin_v2 *,.cke_rtl .cke_skin_v2 a:hover,.cke_rtl .cke_skin_v2 a:link,.cke_rtl .cke_skin_v2 a:visited,.cke_rtl .cke_skin_v2 a:active{text-align:right;}.cke_skin_v2 iframe{vertical-align:inherit;}.cke_skin_v2 textarea{white-space:pre;}.cke_skin_v2 .cke_browser_gecko textarea{cursor:text;}.cke_skin_v2 .cke_browser_gecko textarea[disabled]{cursor:default;}.cke_skin_v2 input[type="text"],.cke_skin_v2 input[type="password"]{cursor:text;}.cke_skin_v2 input[type="text"][disabled],.cke_skin_v2 input[type="password"][disabled]{cursor:default;}.cke_skin_v2 .cke_editor{display:inline-table;width:100%;}.cke_skin_v2{display:block;}.cke_skin_v2 .cke_wrapper{display:block;}.cke_skin_v2 .cke_browser_opera .cke_editor{display:table;}.cke_skin_v2 .cke_top,.cke_skin_v2 .cke_bottom{background-color:#efefde;}.cke_skin_v2 .cke_top{border-top:solid 1px #fafaf5;border-left:solid 1px #fafaf5;border-right:solid 1px #696969;border-bottom:solid 2px #696969;}.cke_skin_v2 .cke_rtl .cke_top{border-left:solid 1px #696969;border-right:solid 1px #fafaf5;}.cke_skin_v2 .cke_bottom{border-left:solid 1px #696969;border-right:solid 1px #696969;border-bottom:solid 1px #696969;}.cke_skin_v2 .cke_contents{border:solid 1px #696969;}.cke_skin_v2 .cke_focus{outline:auto 5px -webkit-focus-ring-color;}.cke_skin_v2 textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre;}.cke_skin_v2 .cke_browser_iequirks textarea.cke_source{_white-space:normal;}.cke_skin_v2 .cke_resizer{width:12px;height:12px;margin-top:16px;display:block;float:right;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -801px;background-repeat:no-repeat;cursor:se-resize;}.cke_skin_v2 .cke_rtl .cke_resizer{cursor:sw-resize;background-position:0 -828px;float:left;}.cke_skin_v2 .cke_maximized .cke_resizer{display:none;}.cke_skin_v2 .cke_browser_ie6 .cke_contents textarea,.cke_skin_v2 .cke_browser_ie7 .cke_contents textarea{position:absolute;}.cke_skin_v2 .cke_panel{border:1px solid #8f8f73;background-color:#fff;width:120px;height:100px;overflow:hidden;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}.cke_skin_v2 .cke_panel iframe{width:100%;height:100%;}html.cke_skin_v2_container{overflow:auto;overflow-x:hidden;}body.cke_panel_frame{overflow:auto;overflow-x:hidden;}ul.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap;}li.cke_panel_listItem{margin:0;}.cke_panel_listItem a{padding:2px;display:block;border:1px solid #fff;color:inherit;text-decoration:none;overflow:hidden;text-overflow:ellipsis;}* html .cke_panel_listItem a{width:100%;color:#000;}*:first-child+html .cke_panel_listItem a{color:#000;}.cke_panel_listItem.cke_selected a{border:1px solid #ccc;background-color:#e9f5ff;}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#316ac5;background-color:#dff1ff;}.cke_panel_grouptitle{font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;font-weight:bold;white-space:nowrap;background-color:#dcdcdc;color:#000;margin:0;padding:3px;}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:3px;margin-bottom:3px;}.cke_skin_v2 .cke_button_textcolor_panel,.cke_skin_v2 .cke_button_bgcolor_panel{width:150px;height:135px;}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif;}\r
+.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000;}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left;}.cke_rtl span.cke_colorbox{float:right;}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;}.cke_rtl a.cke_colorbox{float:right;}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#316ac5 1px solid;background-color:#dff1ff;}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#316ac5 1px solid;background-color:#dff1ff;}@media print{.cke_skin_v2 .cke_toolbox{display:none;}}.cke_skin_v2 a.cke_toolbox_collapser,.cke_skin_v2 a:hover.cke_toolbox_collapser{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:3px -739px;background-repeat:no-repeat;width:11px;height:11px;float:right;border:outset 1px;margin:11px 2px 2px;cursor:pointer;}.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser,.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser{float:left;}.cke_skin_v2 a.cke_toolbox_collapser_min,.cke_skin_v2 a:hover.cke_toolbox_collapser_min{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:4px -760px;background-repeat:no-repeat;margin:2px;}.cke_skin_v2 .cke_rtl a.cke_toolbox_collapser_min,.cke_skin_v2 .cke_rtl a:hover.cke_toolbox_collapser_min{background-position:4px -781px;}.cke_skin_v2 .cke_toolbar{padding-top:1px;padding-bottom:1px;display:inline-block;float:left;}.cke_skin_v2 .cke_rtl .cke_toolbar{float:right;}.cke_skin_v2 .cke_toolgroup{display:inline-block;float:left;}.cke_skin_v2 .cke_browser_ie .cke_toolgroup{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_toolgroup{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolgroup{#float:none;}.cke_skin_v2 .cke_separator{display:inline-block;float:left;border-left:solid 1px #999;margin:0 2px;height:16px;}.cke_skin_v2 .cke_browser_ie .cke_separator{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_separator{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_separator{#float:none;}.cke_skin_v2 .cke_break{clear:left;}.cke_skin_v2 .cke_rtl .cke_break{clear:right;}.cke_skin_v2 .cke_toolbar_start{display:inline-block;background-image:url(images/toolbar_start.gif);background-repeat:no-repeat;margin:4px 2px 0 2px;width:3px;height:16px;float:left;}.cke_skin_v2 .cke_browser_ie .cke_toolbar_start{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_toolbar_start{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_start{#float:none;}.cke_skin_v2 .cke_toolbar_end{display:inline-block;float:left;}.cke_skin_v2 .cke_browser_ie .cke_toolbar_end{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_toolbar_end{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_end{#float:none;}.cke_skin_v2 .cke_button a,.cke_skin_v2 .cke_button a:hover,.cke_skin_v2 .cke_button a:focus,.cke_skin_v2 .cke_button a:active,.cke_skin_v2 .cke_button a.cke_off{border:solid 1px #efefde;display:inline-block;border-radius:3px;outline:none;padding-top:2px;padding-left:4px;padding-right:4px;padding-bottom:2px;height:18px;cursor:default;}.cke_skin_v2 .cke_button a,.cke_skin_v2 .cke_button a.cke_off{background-color:#efefde;filter:alpha(opacity=70);opacity:.70;-moz-border-radius:3px;-webkit-border-radius:3px;}.cke_skin_v2 .cke_hc .cke_button a,.cke_skin_v2 .cke_hc .cke_button a.cke_off{opacity:1.0;filter:alpha(opacity=100);}.cke_skin_v2 .cke_button a.cke_on{border:solid 1px #316ac5;background-color:#a3d7ff;filter:alpha(opacity=100);opacity:1;}.cke_skin_v2 .cke_hc .cke_button a.cke_on{padding:0 2px!important;border-width:3px;}.cke_skin_v2 .cke_button a.cke_disabled,.cke_skin_v2 .cke_browser_ie a:hover.cke_button .cke_disabled{border:solid 1px #efefde;background-color:#efefde;filter:alpha(opacity=30);opacity:.3;}.cke_skin_v2 .cke_hc .cke_button a.cke_disabled,.cke_skin_v2 .cke_browser_ie.cke_hc a:hover.cke_button .cke_disabled{filter:alpha(opacity=60);opacity:.6;}\r
+.cke_skin_v2 .cke_button a:hover.cke_on,.cke_skin_v2 .cke_button a:focus.cke_on,.cke_skin_v2 .cke_button a:active.cke_on,.cke_skin_v2 .cke_button a:hover.cke_off,.cke_skin_v2 .cke_button a:focus.cke_off,.cke_skin_v2 .cke_button a:active.cke_off{border:solid 1px #316ac5;background-color:#dff1ff;filter:alpha(opacity=100);opacity:1;padding:2px 4px;}.cke_skin_v2 .cke_hc .cke_button a:hover.cke_on,.cke_skin_v2 .cke_hc .cke_button a:focus.cke_on,.cke_skin_v2 .cke_hc .cke_button a:active.cke_on,.cke_skin_v2 .cke_hc .cke_button a:hover.cke_off,.cke_skin_v2 .cke_hc .cke_button a:focus.cke_off,.cke_skin_v2 .cke_hc .cke_button a:active.cke_off{padding:0 2px!important;border-width:3px;}.cke_skin_v2 .cke_button .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;display:inline-block;}.cke_skin_v2 .cke_button .cke_label{cursor:default;display:none;padding-left:3px;vertical-align:3px;}.cke_skin_v2 .cke_hc .cke_button .cke_label{padding:0;display:inline-block;}.cke_skin_v2 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_v2 .cke_accessibility{position:absolute;display:block;width:0;height:0;overflow:hidden;}.cke_skin_v2 .cke_button .cke_buttonarrow{display:inline-block;height:17px;width:8px;background-position:2px -717px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;}.cke_skin_v2 .cke_rtl .cke_button .cke_buttonarrow{background-position:0 -717px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);}.cke_skin_v2 .cke_browser_gecko18 .cke_toolbar,.cke_skin_v2 .cke_browser_gecko18 .cke_button a,.cke_skin_v2 .cke_browser_gecko18 .cke_button a.cke_off,.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_icon,.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_buttonarrow,.cke_skin_v2 .cke_browser_gecko18 .cke_separator,.cke_skin_v2 .cke_browser_gecko18 .cke_toolbar_start{display:block;float:left;}.cke_skin_v2 .cke_browser_gecko18 .cke_hc .cke_button .cke_icon{display:none;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_toolbar,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button a,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button a.cke_off,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_icon,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_buttonarrow,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_separator,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_toolbar_start{float:right;}.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_break{float:left;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl span.cke_inline_label{float:right;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_button .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_break{float:right;}.cke_skin_v2 .cke_browser_gecko18 .cke_separator{margin-top:4px;}.cke_skin_v2 .cke_browser_gecko18 .cke_button .cke_label{padding-top:3px;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolgroup,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_separator,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_start,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_toolbar_end{float:none;}.cke_skin_v2 .cke_browser_ie8 .cke_toolbar,.cke_skin_v2 .cke_browser_ie8 .cke_toolgroup{vertical-align:top;}.cke_skin_v2 .cke_browser_iequirks.cke_browser_ie8 .cke_toolbar,.cke_skin_v2 .cke_browser_iequirks.cke_browser_ie8 .cke_toolgroup{vertical-align:baseline;}.cke_skin_v2 .cke_contextmenu{padding:2px;}.cke_skin_v2 .cke_menuitem a{display:block;}.cke_skin_v2 .cke_menuitem span{cursor:default;}.cke_skin_v2 .cke_menuitem a:hover,.cke_skin_v2 .cke_menuitem a:focus,.cke_skin_v2 .cke_menuitem a:active{background-color:#8f8f73;display:block;}.cke_skin_v2 .cke_menuitem a.cke_disabled:hover,.cke_skin_v2 .cke_menuitem a.cke_disabled:focus,.cke_skin_v2 .cke_menuitem a.cke_disabled:active{background-color:transparent!important;}.cke_skin_v2 .cke_menuitem .cke_icon{background-image:url(icons.png);background-position:100px;background-repeat:no-repeat;background-color:transparent;width:16px;height:16px;float:left;}\r
+.cke_skin_v2 .cke_menuitem .cke_disabled .cke_icon{filter:alpha(opacity=70);opacity:.70;}.cke_skin_v2 .cke_menuitem .cke_icon_wrapper{background-color:#e3e3c7;border:solid 4px #e3e3c7;width:16px;height:16px;float:left;filter:alpha(opacity=70);opacity:.70;}.cke_rtl .cke_skin_v2 .cke_menuitem .cke_icon_wrapper{float:right;}.cke_skin_v2 .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:active .cke_icon_wrapper{background-color:#9d9d9d;border:solid 4px #9d9d9d;filter:alpha(opacity=70);opacity:.70;}.cke_skin_v2 .cke_menuitem a:hover.cke_disabled .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:focus.cke_disabled .cke_icon_wrapper,.cke_skin_v2 .cke_menuitem a:active.cke_disabled .cke_icon_wrapper{background-color:#e3e3c7;border:solid 4px #e3e3c7;}.cke_skin_v2 .cke_menuitem .cke_label{display:block;padding-right:3px;padding-top:5px;padding-left:4px;height:19px;margin-left:24px;background-color:#fff;_overflow:hidden;_width:80px;filter:alpha(opacity=70);opacity:.70;}.cke_rtl .cke_skin_v2 .cke_menuitem .cke_label{padding-right:0;margin-left:0;padding-left:3px;margin-right:28px;}.cke_skin_v2 .cke_menuitem a.cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.30;}.cke_skin_v2 .cke_menuitem a:hover .cke_label,.cke_skin_v2 .cke_menuitem a:focus .cke_label,.cke_skin_v2 .cke_menuitem a:active .cke_label{background-color:#8f8f73;color:white;}.cke_skin_v2 .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_v2 .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_v2 .cke_menuitem a.cke_disabled:active .cke_label{background-color:transparent;color:black;}.cke_skin_v2 .cke_menuseparator{background-color:#e3e3c7;height:2px;filter:alpha(opacity=70);opacity:.70;_font-size:0;}.cke_skin_v2 .cke_menuarrow{background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-position:0 -784px;background-repeat:no-repeat;height:5px;width:3px;float:right;margin-right:2px;margin-top:3px;}.cke_rtl .cke_skin_v2 .cke_menuarrow{float:left;margin-right:0;margin-left:2px;background-position:0 -763px;}.cke_browser_ie.cke_ltr .cke_skin_v2 .cke_menuarrow{position:absolute;right:2px;}.cke_browser_ie.cke_rtl .cke_skin_v2 .cke_menuarrow{position:absolute;left:2px;}.cke_skin_v2 .cke_rcombo{display:inline-block;margin-left:2px;margin-right:2px;margin-top:2px;vertical-align:top;float:left;}.cke_skin_v2 .cke_browser_ie .cke_rcombo{#float:none;#display:inline;}.cke_skin_v2 .cke_rtl .cke_rcombo{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rcombo{#float:none;}.cke_skin_v2 .cke_rcombopanel{border:1px solid #316ac5;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;}.cke_skin_v2 .cke_rcombo a{display:inline-block;float:left;filter:alpha(opacity=70);opacity:.70;}.cke_skin_v2 .cke_rtl .cke_rcombo a{float:right;}.cke_skin_v2 .cke_hc .cke_rcombo a{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_v2 .cke_rcombo .cke_label{display:inline-block;float:left;line-height:24px;height:24px;vertical-align:top;padding-left:4px;padding-right:5px;filter:alpha(opacity=70);opacity:.70;background-color:#f1f1e3;}.cke_skin_v2 .cke_rtl .cke_rcombo .cke_label{float:right;padding-right:4px;padding-left:5px;}.cke_skin_v2 .cke_hc .cke_rcombo .cke_label{filter:alpha(opacity=100);opacity:1.0;}.cke_skin_v2 .cke_rcombo .cke_inline_label{color:#fff;}.cke_skin_v2 .cke_rcombo .cke_text{border:1px solid #8f8f73;background-color:#fff;height:14px;width:60px;padding-top:4px;padding-bottom:4px;padding-left:5px;padding-right:5px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:top;}.cke_skin_v2 .cke_ltr .cke_rcombo .cke_text{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_v2 .cke_rtl .cke_rcombo .cke_text{-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}\r
+.cke_skin_v2 .cke_browser_iequirks .cke_rcombo .cke_text{height:22px;}.cke_skin_v2 .cke_rcombo .cke_openbutton{display:inline-block;background-position:5px -715px;background-image:url(images/sprites.png);_background-image:url(images/sprites_ie6.png);background-repeat:no-repeat;border-top:1px solid #8f8f73;border-bottom:1px solid #8f8f73;width:14px;height:22px;}.cke_skin_v2 .cke_ltr .cke_rcombo .cke_openbutton{border-right:1px solid #8f8f73;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.cke_skin_v2 .cke_rtl .cke_rcombo .cke_openbutton{border-left:1px solid #8f8f73;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.cke_skin_v2 .cke_rcombo .cke_off a:hover,.cke_skin_v2 .cke_rcombo .cke_off a:focus,.cke_skin_v2 .cke_rcombo .cke_off a:active,.cke_skin_v2 .cke_rcombo .cke_on a{filter:alpha(opacity=100);opacity:1;}.cke_skin_v2 .cke_rcombo .cke_off a:hover .cke_text,.cke_skin_v2 .cke_rcombo .cke_off a:focus .cke_text,.cke_skin_v2 .cke_rcombo .cke_off a:active .cke_text,.cke_skin_v2 .cke_rcombo .cke_on .cke_text{border-color:#316ac5;}.cke_skin_v2 .cke_rcombo .cke_off a:hover .cke_openbutton,.cke_skin_v2 .cke_rcombo .cke_off a:focus .cke_openbutton,.cke_skin_v2 .cke_rcombo .cke_off a:active .cke_openbutton,.cke_skin_v2 .cke_rcombo .cke_on .cke_openbutton{border-color:#316ac5;background-color:#dff1ff;}.cke_skin_v2 .cke_rcombo .cke_on .cke_text{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;}.cke_skin_v2 .cke_rcombo .cke_on .cke_openbutton{-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;}.cke_skin_v2 .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=30);opacity:.3;}.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_label{filter:alpha(opacity=70);opacity:.7;}.cke_skin_v2 .cke_rcombo .cke_disabled .cke_text,.cke_skin_v2 .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=50);opacity:.5;}.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_text,.cke_skin_v2 .cke_hc .cke_rcombo .cke_disabled .cke_openbutton{filter:alpha(opacity=80);opacity:.8;}.cke_skin_v2 .cke_rcombo .cke_disabled .cke_text{color:#fff;}.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo,.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_gecko18 .cke_rcombo .cke_openbutton,.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_webkit .cke_rcombo .cke_openbutton{display:block;float:left;}.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_gecko18 .cke_rtl .cke_rcombo .cke_openbutton,.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_label,.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_text,.cke_skin_v2 .cke_browser_webkit .cke_rtl .cke_rcombo .cke_openbutton{float:right;}.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo a,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_rcombo .cke_label{float:none;}@media print{.cke_path{display:none;}}.cke_skin_v2 .cke_path{padding:3px 3px 0 3px;display:inline-block;float:left;}.cke_skin_v2 .cke_rtl .cke_path{float:right;}.cke_skin_v2 .cke_path a,.cke_skin_v2 .cke_path .cke_empty{display:inline-block;float:left;border:solid 1px #efefde;background-color:#efefde;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;margin-bottom:3px;}.cke_skin_v2 .cke_path .cke_empty{visibility:hidden;}.cke_skin_v2 .cke_rtl .cke_path a,.cke_skin_v2 .cke_rtl .cke_path cke_empty{float:right;}.cke_skin_v2 .cke_path a:hover,.cke_skin_v2 .cke_path a:focus,.cke_skin_v2 .cke_path a:active{border:solid 1px #316ac5;background-color:#dff1ff;padding-top:1px;padding-bottom:1px;padding-left:4px;padding-right:4px;outline:none;}\r
+.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_path a,.cke_skin_v2 .cke_browser_ie .cke_rtl .cke_path .cke_empty{float:none;}.cke_skin_v2 .cke_button_source .cke_icon{background-position:0 0;}.cke_skin_v2 .cke_button_newpage .cke_icon{background-position:0 -48px;}.cke_skin_v2 .cke_button_preview .cke_icon{background-position:0 -64px;}.cke_skin_v2 .cke_button_cut .cke_icon{background-position:0 -96px;}.cke_skin_v2 .cke_button_copy .cke_icon{background-position:0 -112px;}.cke_skin_v2 .cke_button_paste .cke_icon{background-position:0 -128px;}.cke_skin_v2 .cke_button_pastetext .cke_icon{background-position:0 -144px;}.cke_skin_v2 .cke_button_find .cke_icon{background-position:0 -240px;}.cke_skin_v2 .cke_button_replace .cke_icon{background-position:0 -256px;}.cke_skin_v2 .cke_button_selectAll .cke_icon{background-position:0 -272px;}.cke_skin_v2 .cke_button_removeFormat .cke_icon{background-position:0 -288px;}.cke_skin_v2 .cke_button_bold .cke_icon{background-position:0 -304px;}.cke_skin_v2 .cke_button_italic .cke_icon{background-position:0 -320px;}.cke_skin_v2 .cke_button_underline .cke_icon{background-position:0 -336px;}.cke_skin_v2 .cke_button_strike .cke_icon{background-position:0 -352px;}.cke_skin_v2 .cke_button_subscript .cke_icon{background-position:0 -368px;}.cke_skin_v2 .cke_button_superscript .cke_icon{background-position:0 -384px;}.cke_skin_v2 .cke_button_table .cke_icon{background-position:0 -608px;}.cke_skin_v2 .cke_button_horizontalrule .cke_icon{background-position:0 -624px;}.cke_skin_v2 .cke_button_smiley .cke_icon{background-position:0 -640px;}.cke_skin_v2 .cke_button_link .cke_icon{background-position:0 -528px;}.cke_skin_v2 .cke_button_unlink .cke_icon{background-position:0 -544px;}.cke_skin_v2 .cke_button_anchor .cke_icon{background-position:0 -560px;}.cke_skin_v2 .cke_button_image .cke_icon{background-position:0 -576px;}.cke_skin_v2 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_v2 .cke_button_specialchar .cke_icon{background-position:0 -656px;}.cke_skin_v2 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_v2 .cke_button_print .cke_icon{background-position:0 -176px;}.cke_skin_v2 .cke_button_checkspell .cke_icon,.cke_skin_v2 .cke_button_scayt .cke_icon{background-position:0 -192px;}.cke_skin_v2 .cke_button_pagebreak .cke_icon{background-position:0 -672px;}.cke_skin_v2 .cke_button_textcolor .cke_icon{background-position:0 -704px;}.cke_skin_v2 .cke_button_bgcolor .cke_icon{background-position:0 -720px;}.cke_skin_v2 .cke_button_form .cke_icon{background-position:0 -752px;}.cke_skin_v2 .cke_button_checkbox .cke_icon{background-position:0 -768px;}.cke_skin_v2 .cke_button_radio .cke_icon{background-position:0 -784px;}.cke_skin_v2 .cke_button_textfield .cke_icon{background-position:0 -800px;}.cke_skin_v2 .cke_button_textarea .cke_icon{background-position:0 -816px;}.cke_skin_v2 .cke_button_showblocks .cke_icon{background-position:0 -1136px;}.cke_skin_v2 .cke_button_select .cke_icon{background-position:0 -832px;}.cke_skin_v2 .cke_button_button .cke_icon{background-position:0 -848px;}.cke_skin_v2 .cke_button_imagebutton .cke_icon{background-position:0 -864px;}.cke_skin_v2 .cke_button_hiddenfield .cke_icon{background-position:0 -880px;}.cke_skin_v2 .cke_button_undo .cke_icon{background-position:0 -208px;}.cke_skin_v2 .cke_rtl .cke_button_undo .cke_icon{background-position:0 -224px;}.cke_skin_v2 .cke_button_redo .cke_icon{background-position:0 -224px;}.cke_skin_v2 .cke_rtl .cke_button_redo .cke_icon{background-position:0 -208px;}.cke_skin_v2 .cke_button_templates .cke_icon{background-position:0 -80px;}.cke_skin_v2 .cke_button_numberedlist .cke_icon{background-position:0 -400px;}.cke_skin_v2 .cke_button_bulletedlist .cke_icon{background-position:0 -416px;}.cke_skin_v2 .cke_button_outdent .cke_icon{background-position:0 -432px;}.cke_skin_v2 .cke_button_indent .cke_icon{background-position:0 -448px;}.cke_skin_v2 .cke_button_justifyleft .cke_icon{background-position:0 -464px;}.cke_skin_v2 .cke_button_justifycenter .cke_icon{background-position:0 -480px;}.cke_skin_v2 .cke_button_justifyright .cke_icon{background-position:0 -496px;}\r
+.cke_skin_v2 .cke_button_justifyblock .cke_icon{background-position:0 -512px;}.cke_skin_v2 .cke_button_blockquote .cke_icon{background-position:0 -1152px;}.cke_skin_v2 .cke_button_flash .cke_icon{background-position:0 -592px;}.cke_skin_v2 .cke_button_pastefromword .cke_icon{background-position:0 -160px;}.cke_skin_v2 .cke_button_save .cke_icon{background-position:0 -32px;}.cke_skin_v2 .cke_button_about .cke_icon{background-position:0 -736px;}.cke_skin_v2 .cke_button_maximize .cke_icon{background-position:0 -1040px;}.cke_skin_v2 .cke_button_source .cke_label{display:inline;display:inline-block;}.cke_skin_v2 .cke_styles_panel{width:150px;height:170px;}.cke_skin_v2 .cke_format_panel{width:150px;height:170px;}.cke_skin_v2 .cke_font_panel{width:150px;height:170px;}.cke_skin_v2 .cke_fontSize_panel{height:170px;}.cke_skin_v2 .cke_fontSize .cke_text{width:20px;}.cke_skin_v2 .cke_browser_iequirks .cke_fontSize .cke_text{width:32px;}html .cke_skin_v2,html.cke_skin_v2_container{visibility:visible;}\r
diff --git a/skins/v2/icons.png b/skins/v2/icons.png
new file mode 100644 (file)
index 0000000..394ce89
Binary files /dev/null and b/skins/v2/icons.png differ
diff --git a/skins/v2/images/dialog_sides.gif b/skins/v2/images/dialog_sides.gif
new file mode 100644 (file)
index 0000000..8f91b47
Binary files /dev/null and b/skins/v2/images/dialog_sides.gif differ
diff --git a/skins/v2/images/dialog_sides.png b/skins/v2/images/dialog_sides.png
new file mode 100644 (file)
index 0000000..1042a61
Binary files /dev/null and b/skins/v2/images/dialog_sides.png differ
diff --git a/skins/v2/images/dialog_sides_rtl.png b/skins/v2/images/dialog_sides_rtl.png
new file mode 100644 (file)
index 0000000..d7f7b49
Binary files /dev/null and b/skins/v2/images/dialog_sides_rtl.png differ
diff --git a/skins/v2/images/mini.gif b/skins/v2/images/mini.gif
new file mode 100644 (file)
index 0000000..54d9107
Binary files /dev/null and b/skins/v2/images/mini.gif differ
diff --git a/skins/v2/images/noimage.png b/skins/v2/images/noimage.png
new file mode 100644 (file)
index 0000000..1598113
Binary files /dev/null and b/skins/v2/images/noimage.png differ
diff --git a/skins/v2/images/sprites.png b/skins/v2/images/sprites.png
new file mode 100644 (file)
index 0000000..982717b
Binary files /dev/null and b/skins/v2/images/sprites.png differ
diff --git a/skins/v2/images/sprites_ie6.png b/skins/v2/images/sprites_ie6.png
new file mode 100644 (file)
index 0000000..4389b65
Binary files /dev/null and b/skins/v2/images/sprites_ie6.png differ
diff --git a/skins/v2/images/toolbar_start.gif b/skins/v2/images/toolbar_start.gif
new file mode 100644 (file)
index 0000000..1774246
Binary files /dev/null and b/skins/v2/images/toolbar_start.gif differ
diff --git a/skins/v2/skin.js b/skins/v2/skin.js
new file mode 100644 (file)
index 0000000..cf5d88f
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.skins.add('v2',(function(){var a=[];if(CKEDITOR.env.ie&&CKEDITOR.env.version<7)a.push('icons.png','images/sprites_ie6.png','images/dialog_sides.gif');return{preload:a,editor:{css:['editor.css']},dialog:{css:['dialog.css']},templates:{css:['templates.css']},margins:[0,14,18,14]};})());if(CKEDITOR.dialog)CKEDITOR.dialog.on('resize',function(a){var b=a.data,c=b.width,d=b.height,e=b.dialog,f=!CKEDITOR.env.quirk;if(b.skin!='v2')return;e.parts.contents.setStyles({width:c+'px',height:d+'px'});if(!CKEDITOR.env.ie)return;setTimeout(function(){var g=e.parts.contents,h=g.getParent(),i=h.getParent(),j=i.getChild(2);j.setStyle('width',h.$.offsetWidth+'px');j=i.getChild(7);j.setStyle('width',h.$.offsetWidth-28+'px');j=i.getChild(4);j.setStyle('height',h.$.offsetHeight-31-14+'px');j=i.getChild(5);j.setStyle('height',h.$.offsetHeight-31-14+'px');},100);});\r
diff --git a/skins/v2/templates.css b/skins/v2/templates.css
new file mode 100644 (file)
index 0000000..852ec4c
--- /dev/null
@@ -0,0 +1,6 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+.cke_skin_v2 .cke_tpl_list{border:#dcdcdc 2px solid;background-color:#fff;overflow:auto;width:100%;height:220px;}.cke_skin_v2 .cke_tpl_item{margin:5px;padding:7px;border:#eee 1px solid;*width:88%;}.cke_skin_v2 .cke_tpl_preview{border-collapse:separate;text-indent:0;width:100%;}.cke_skin_v2 .cke_tpl_preview td{padding:2px;vertical-align:middle;}.cke_skin_v2 .cke_tpl_preview .cke_tpl_preview_img{width:100px;}.cke_skin_v2 .cke_tpl_preview span{white-space:normal;}.cke_skin_v2 .cke_tpl_title{font-weight:bold;}.cke_skin_v2 .cke_tpl_hover{border:#f93 1px solid!important;background-color:#fffacd!important;cursor:pointer;cursor:hand;}.cke_skin_v2 .cke_tpl_hover *{cursor:inherit;}.cke_skin_v2 .cke_tpl_empty,.cke_tpl_loading{text-align:center;padding:5px;}\r
diff --git a/themes/default/theme.js b/themes/default/theme.js
new file mode 100644 (file)
index 0000000..0bb8eaa
--- /dev/null
@@ -0,0 +1,7 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.themes.add('default',(function(){return{build:function(a,b){var c=a.name,d=a.element,e=a.elementMode;if(!d||e==CKEDITOR.ELEMENT_MODE_NONE)return;if(e==CKEDITOR.ELEMENT_MODE_REPLACE)d.hide();var f=a.fire('themeSpace',{space:'top',html:''}).html,g=a.fire('themeSpace',{space:'contents',html:''}).html,h=a.fireOnce('themeSpace',{space:'bottom',html:''}).html,i=g&&a.config.height,j=a.config.tabIndex||a.element.getAttribute('tabindex')||0;if(!g)i='auto';else if(!isNaN(i))i+='px';var k='',l=a.config.width;if(l){if(!isNaN(l))l+='px';k+='width: '+l+';';}var m=CKEDITOR.dom.element.createFromHtml(['<span id="cke_',c,'" onmousedown="return false;" class="',a.skinClass,'" dir="',a.lang.dir,'" title="',CKEDITOR.env.gecko?' ':'','" lang="',a.langCode,'" tabindex="'+j+'"'+(k?' style="'+k+'"':'')+'>'+'<span class="',CKEDITOR.env.cssClass,'"><span class="cke_wrapper cke_',a.lang.dir,'"><table class="cke_editor" border="0" cellspacing="0" cellpadding="0"><tbody><tr',f?'':' style="display:none"','><td id="cke_top_',c,'" class="cke_top">',f,'</td></tr><tr',g?'':' style="display:none"','><td id="cke_contents_',c,'" class="cke_contents" style="height:',i,'">',g,'</td></tr><tr',h?'':' style="display:none"','><td id="cke_bottom_',c,'" class="cke_bottom">',h,'</td></tr></tbody></table><style>.',a.skinClass,'{visibility:hidden;}</style></span></span></span>'].join(''));m.getChild([0,0,0,0,0]).unselectable();m.getChild([0,0,0,0,2]).unselectable();if(e==CKEDITOR.ELEMENT_MODE_REPLACE)m.insertAfter(d);else d.append(m);a.container=m;a.fireOnce('themeLoaded');a.fireOnce('uiReady');},buildDialog:function(a){var b=CKEDITOR.tools.getNextNumber(),c=CKEDITOR.dom.element.createFromHtml(['<div id="cke_'+a.name.replace('.','\\.')+'_dialog" class="cke_skin_',a.skinName,'" dir="',a.lang.dir,'" lang="',a.langCode,'"><div class="cke_dialog',' '+CKEDITOR.env.cssClass,' cke_',a.lang.dir,'" style="position:absolute"><div class="%body"><div id="%title#" class="%title"></div><div id="%close_button#" class="%close_button"><span>X</span></div><div id="%tabs#" class="%tabs"></div><div id="%contents#" class="%contents"></div><div id="%footer#" class="%footer"></div></div><div id="%tl#" class="%tl"></div><div id="%tc#" class="%tc"></div><div id="%tr#" class="%tr"></div><div id="%ml#" class="%ml"></div><div id="%mr#" class="%mr"></div><div id="%bl#" class="%bl"></div><div id="%bc#" class="%bc"></div><div id="%br#" class="%br"></div></div>',CKEDITOR.env.ie?'':'<style>.cke_dialog{visibility:hidden;}</style>','</div>'].join('').replace(/#/g,'_'+b).replace(/%/g,'cke_dialog_')),d=c.getChild([0,0]);\r
+d.getChild(0).unselectable();d.getChild(1).unselectable();return{element:c,parts:{dialog:c.getChild(0),title:d.getChild(0),close:d.getChild(1),tabs:d.getChild(2),contents:d.getChild(3),footer:d.getChild(4)}};},destroy:function(a){var b=a.container;if(CKEDITOR.env.ie){b.setStyle('display','none');var c=document.body.createTextRange();c.moveToElementText(b.$);try{c.select();}catch(d){}}if(b)b.remove();if(a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE){a.element.show();delete a.element;}}};})());CKEDITOR.editor.prototype.getThemeSpace=function(a){var b='cke_'+a,c=this._[b]||(this._[b]=CKEDITOR.document.getById(b+'_'+this.name));return c;};CKEDITOR.editor.prototype.resize=function(a,b,c,d){var e=/^\d+$/;if(e.test(a))a+='px';var f=CKEDITOR.document.getById('cke_contents_'+this.name),g=d?f.getAscendant('table').getParent():f.getAscendant('table').getParent().getParent().getParent();CKEDITOR.env.webkit&&g.setStyle('display','none');g.setStyle('width',a);if(CKEDITOR.env.webkit){g.$.offsetWidth;g.setStyle('display','');}var h=c?0:(g.$.offsetHeight||0)-(f.$.clientHeight||0);f.setStyle('height',Math.max(b-h,0)+'px');this.fire('resize');};CKEDITOR.editor.prototype.getResizable=function(){return this.container.getChild([0,0]);};\r